mov: Use defines for trun flags
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
73328f24fa
commit
3eec23f3cd
@ -164,6 +164,13 @@ void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
|
||||
#define MOV_TFHD_DEFAULT_FLAGS 0x20
|
||||
#define MOV_TFHD_DURATION_IS_EMPTY 0x010000
|
||||
|
||||
#define MOV_TRUN_DATA_OFFSET 0x01
|
||||
#define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
|
||||
#define MOV_TRUN_SAMPLE_DURATION 0x100
|
||||
#define MOV_TRUN_SAMPLE_SIZE 0x200
|
||||
#define MOV_TRUN_SAMPLE_FLAGS 0x400
|
||||
#define MOV_TRUN_SAMPLE_CTS 0x800
|
||||
|
||||
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb, MOVAtom atom);
|
||||
enum CodecID ff_mov_get_lpcm_codec_id(int bps, int flags);
|
||||
|
||||
|
@ -2262,8 +2262,8 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
return AVERROR(ENOMEM);
|
||||
sc->ctts_data = ctts_data;
|
||||
|
||||
if (flags & 0x001) data_offset = avio_rb32(pb);
|
||||
if (flags & 0x004) first_sample_flags = avio_rb32(pb);
|
||||
if (flags & MOV_TRUN_DATA_OFFSET) data_offset = avio_rb32(pb);
|
||||
if (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS) first_sample_flags = avio_rb32(pb);
|
||||
dts = sc->track_end - sc->time_offset;
|
||||
offset = frag->base_data_offset + data_offset;
|
||||
distance = 0;
|
||||
@ -2274,14 +2274,15 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
|
||||
unsigned sample_duration = frag->duration;
|
||||
int keyframe;
|
||||
|
||||
if (flags & 0x100) sample_duration = avio_rb32(pb);
|
||||
if (flags & 0x200) sample_size = avio_rb32(pb);
|
||||
if (flags & 0x400) sample_flags = avio_rb32(pb);
|
||||
if (flags & MOV_TRUN_SAMPLE_DURATION) sample_duration = avio_rb32(pb);
|
||||
if (flags & MOV_TRUN_SAMPLE_SIZE) sample_size = avio_rb32(pb);
|
||||
if (flags & MOV_TRUN_SAMPLE_FLAGS) sample_flags = avio_rb32(pb);
|
||||
sc->ctts_data[sc->ctts_count].count = 1;
|
||||
sc->ctts_data[sc->ctts_count].duration = (flags & 0x800) ? avio_rb32(pb) : 0;
|
||||
sc->ctts_data[sc->ctts_count].duration = (flags & MOV_TRUN_SAMPLE_CTS) ?
|
||||
avio_rb32(pb) : 0;
|
||||
sc->ctts_count++;
|
||||
if ((keyframe = st->codec->codec_type == AVMEDIA_TYPE_AUDIO ||
|
||||
(flags & 0x004 && !i && !(sample_flags & 0xffff0000)) || sample_flags & 0x2000000))
|
||||
(flags & MOV_TRUN_FIRST_SAMPLE_FLAGS && !i && !(sample_flags & 0xffff0000)) || sample_flags & 0x2000000))
|
||||
distance = 0;
|
||||
av_add_index_entry(st, offset, dts, sample_size, distance,
|
||||
keyframe ? AVINDEX_KEYFRAME : 0);
|
||||
|
@ -2229,7 +2229,7 @@ static uint32_t get_sample_flags(MOVTrack *track, MOVIentry *entry)
|
||||
static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track)
|
||||
{
|
||||
int64_t pos = avio_tell(pb);
|
||||
uint32_t flags = 1; /* data-offset-present */
|
||||
uint32_t flags = MOV_TRUN_DATA_OFFSET;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < track->entry; i++) {
|
||||
@ -2237,16 +2237,16 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track)
|
||||
track->track_duration - track->cluster[i].dts + track->start_dts :
|
||||
track->cluster[i + 1].dts - track->cluster[i].dts;
|
||||
if (duration != track->default_duration)
|
||||
flags |= 0x100; /* sample-duration-present */
|
||||
flags |= MOV_TRUN_SAMPLE_DURATION;
|
||||
if (track->cluster[i].size != track->default_size)
|
||||
flags |= 0x200; /* sample-size-present */
|
||||
flags |= MOV_TRUN_SAMPLE_SIZE;
|
||||
if (i > 0 && get_sample_flags(track, &track->cluster[i]) != track->default_sample_flags)
|
||||
flags |= 0x400; /* sample-flags-present */
|
||||
flags |= MOV_TRUN_SAMPLE_FLAGS;
|
||||
}
|
||||
if (!(flags & 0x400))
|
||||
flags |= 0x4; /* first-sample-flags-present */
|
||||
if (!(flags & MOV_TRUN_SAMPLE_FLAGS))
|
||||
flags |= MOV_TRUN_FIRST_SAMPLE_FLAGS;
|
||||
if (track->flags & MOV_TRACK_CTTS)
|
||||
flags |= 0x800; /* sample-composition-time-offsets-present */
|
||||
flags |= MOV_TRUN_SAMPLE_CTS;
|
||||
|
||||
avio_wb32(pb, 0); /* size placeholder */
|
||||
ffio_wfourcc(pb, "trun");
|
||||
@ -2256,20 +2256,20 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track)
|
||||
avio_wb32(pb, track->entry); /* sample count */
|
||||
track->moof_size_offset = avio_tell(pb);
|
||||
avio_wb32(pb, 0); /* data offset */
|
||||
if (flags & 0x4) /* first sample flags */
|
||||
if (flags & MOV_TRUN_FIRST_SAMPLE_FLAGS)
|
||||
avio_wb32(pb, get_sample_flags(track, &track->cluster[0]));
|
||||
|
||||
for (i = 0; i < track->entry; i++) {
|
||||
int64_t duration = i + 1 == track->entry ?
|
||||
track->track_duration - track->cluster[i].dts + track->start_dts :
|
||||
track->cluster[i + 1].dts - track->cluster[i].dts;
|
||||
if (flags & 0x100)
|
||||
if (flags & MOV_TRUN_SAMPLE_DURATION)
|
||||
avio_wb32(pb, duration);
|
||||
if (flags & 0x200)
|
||||
if (flags & MOV_TRUN_SAMPLE_SIZE)
|
||||
avio_wb32(pb, track->cluster[i].size);
|
||||
if (flags & 0x400)
|
||||
if (flags & MOV_TRUN_SAMPLE_FLAGS)
|
||||
avio_wb32(pb, get_sample_flags(track, &track->cluster[i]));
|
||||
if (flags & 0x800)
|
||||
if (flags & MOV_TRUN_SAMPLE_CTS)
|
||||
avio_wb32(pb, track->cluster[i].cts);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user