diff options
author | Justin Ruggles <justin.ruggles@gmail.com> | 2012-02-26 17:17:13 -0500 |
---|---|---|
committer | Justin Ruggles <justin.ruggles@gmail.com> | 2012-02-27 04:33:37 -0500 |
commit | 681d17264f8ae069d43d5fe5369b4b17e225ea9f (patch) | |
tree | 2be80f6548f7d46250b57052c5082addd3a82a5b /libavformat/movenc.c | |
parent | f5f5b154e7948c7bc94e43c46b5e5bef6f6d60da (diff) | |
download | ffmpeg-681d17264f8ae069d43d5fe5369b4b17e225ea9f.tar.gz |
movenc: factorize calculation of cluster duration into a separate function
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r-- | libavformat/movenc.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 2c6a6e1864..e2781accbe 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -551,6 +551,21 @@ static int mov_get_lpcm_flags(enum CodecID codec_id) } } +static int get_cluster_duration(MOVTrack *track, int cluster_idx) +{ + int64_t next_dts; + + if (cluster_idx >= track->entry) + return 0; + + if (cluster_idx + 1 == track->entry) + next_dts = track->track_duration + track->start_dts; + else + next_dts = track->cluster[cluster_idx + 1].dts; + + return next_dts - track->cluster[cluster_idx].dts; +} + static int mov_write_audio_tag(AVIOContext *pb, MOVTrack *track) { int64_t pos = avio_tell(pb); @@ -1107,9 +1122,7 @@ static int mov_write_stts_tag(AVIOContext *pb, MOVTrack *track) av_malloc(track->entry * sizeof(*stts_entries)) : /* worst case */ NULL; for (i=0; i<track->entry; i++) { - int64_t duration = i + 1 == track->entry ? - track->track_duration - track->cluster[i].dts + track->start_dts : /* readjusting */ - track->cluster[i+1].dts - track->cluster[i].dts; + int duration = get_cluster_duration(track, i); if (i && duration == stts_entries[entries].duration) { stts_entries[entries].count++; /* compress */ } else { @@ -2235,10 +2248,7 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track) int i; 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 (duration != track->default_duration) + if (get_cluster_duration(track, i) != track->default_duration) flags |= MOV_TRUN_SAMPLE_DURATION; if (track->cluster[i].size != track->default_size) flags |= MOV_TRUN_SAMPLE_SIZE; @@ -2262,11 +2272,8 @@ static int mov_write_trun_tag(AVIOContext *pb, MOVTrack *track) 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 & MOV_TRUN_SAMPLE_DURATION) - avio_wb32(pb, duration); + avio_wb32(pb, get_cluster_duration(track, i)); if (flags & MOV_TRUN_SAMPLE_SIZE) avio_wb32(pb, track->cluster[i].size); if (flags & MOV_TRUN_SAMPLE_FLAGS) |