summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorJustin Ruggles <justin.ruggles@gmail.com>2012-02-26 17:17:13 -0500
committerJustin Ruggles <justin.ruggles@gmail.com>2012-02-27 04:33:37 -0500
commit681d17264f8ae069d43d5fe5369b4b17e225ea9f (patch)
tree2be80f6548f7d46250b57052c5082addd3a82a5b /libavformat
parentf5f5b154e7948c7bc94e43c46b5e5bef6f6d60da (diff)
movenc: factorize calculation of cluster duration into a separate function
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/movenc.c29
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)