Signed-off-by: Martin Storsjö <martin@martin.st>
Martin Storsjö authored on 2012/02/17 05:12:12... | ... |
@@ -171,6 +171,16 @@ void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id); |
171 | 171 |
#define MOV_TRUN_SAMPLE_FLAGS 0x400 |
172 | 172 |
#define MOV_TRUN_SAMPLE_CTS 0x800 |
173 | 173 |
|
174 |
+#define MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK 0x0000ffff |
|
175 |
+#define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC 0x00010000 |
|
176 |
+#define MOV_FRAG_SAMPLE_FLAG_PADDING_MASK 0x000e0000 |
|
177 |
+#define MOV_FRAG_SAMPLE_FLAG_REDUNDANCY_MASK 0x00300000 |
|
178 |
+#define MOV_FRAG_SAMPLE_FLAG_DEPENDED_MASK 0x00c00000 |
|
179 |
+#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_MASK 0x03000000 |
|
180 |
+ |
|
181 |
+#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO 0x02000000 |
|
182 |
+#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES 0x01000000 |
|
183 |
+ |
|
174 | 184 |
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom); |
175 | 185 |
enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags); |
176 | 186 |
|
... | ... |
@@ -2282,7 +2282,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
2282 | 2282 |
avio_rb32(pb) : 0; |
2283 | 2283 |
sc->ctts_count++; |
2284 | 2284 |
if ((keyframe = st->codec->codec_type == AVMEDIA_TYPE_AUDIO || |
2285 |
- (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS && !i && !(sample_flags & 0xffff0000)) || sample_flags & 0x2000000)) |
|
2285 |
+ (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS && !i && !(sample_flags & ~MOV_FRAG_SAMPLE_FLAG_DEGRADATION_PRIORITY_MASK)) || sample_flags & MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO)) |
|
2286 | 2286 |
distance = 0; |
2287 | 2287 |
av_add_index_entry(st, offset, dts, sample_size, distance, |
2288 | 2288 |
keyframe ? AVINDEX_KEYFRAME : 0); |
... | ... |
@@ -2214,7 +2214,8 @@ static int mov_write_tfhd_tag(AVIOContext *pb, MOVTrack *track, |
2214 | 2214 |
if (flags & MOV_TFHD_DEFAULT_FLAGS) { |
2215 | 2215 |
track->default_sample_flags = |
2216 | 2216 |
track->enc->codec_type == AVMEDIA_TYPE_VIDEO ? |
2217 |
- 0x01010000 : 0x02000000; |
|
2217 |
+ (MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES | MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC) : |
|
2218 |
+ MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO; |
|
2218 | 2219 |
avio_wb32(pb, track->default_sample_flags); |
2219 | 2220 |
} |
2220 | 2221 |
|
... | ... |
@@ -2223,7 +2224,8 @@ static int mov_write_tfhd_tag(AVIOContext *pb, MOVTrack *track, |
2223 | 2223 |
|
2224 | 2224 |
static uint32_t get_sample_flags(MOVTrack *track, MOVIentry *entry) |
2225 | 2225 |
{ |
2226 |
- return entry->flags & MOV_SYNC_SAMPLE ? 0x02000000 : 0x01010000; |
|
2226 |
+ return entry->flags & MOV_SYNC_SAMPLE ? MOV_FRAG_SAMPLE_FLAG_DEPENDS_NO : |
|
2227 |
+ (MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES | MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC); |
|
2227 | 2228 |
} |
2228 | 2229 |
|
2229 | 2230 |
static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track) |