diff options
author | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-10-27 12:46:21 +0100 |
---|---|---|
committer | Hendrik Leppkes <h.leppkes@gmail.com> | 2015-10-27 12:46:21 +0100 |
commit | 368e5216464fd894ded93e8a3fc12066c1a9c061 (patch) | |
tree | cabd737612df9bd552460a5f6ce4dd4a059f3c95 | |
parent | 12e95d156ae95e7db7f5a524112569b29cbdf0be (diff) | |
parent | 5ea5a24eb70646a9061b85af407fcbb5dd4f89fd (diff) | |
download | ffmpeg-368e5216464fd894ded93e8a3fc12066c1a9c061.tar.gz |
Merge commit '5ea5a24eb70646a9061b85af407fcbb5dd4f89fd'
* commit '5ea5a24eb70646a9061b85af407fcbb5dd4f89fd':
movenc: Honor flush requests with delay_moov, when some tracks lack samples
Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
-rw-r--r-- | libavformat/movenc.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 05198b4f90..61dcf4c875 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4109,7 +4109,7 @@ static int mov_flush_fragment_interleaving(AVFormatContext *s, MOVTrack *track) return 0; } -static int mov_flush_fragment(AVFormatContext *s) +static int mov_flush_fragment(AVFormatContext *s, int force) { MOVMuxContext *mov = s->priv_data; int i, first_track = -1; @@ -4155,7 +4155,7 @@ static int mov_flush_fragment(AVFormatContext *s) if (!mov->tracks[i].entry) break; /* Don't write the initial moov unless all tracks have data */ - if (i < mov->nb_streams) + if (i < mov->nb_streams && !force) return 0; moov_size = get_moov_size(s); @@ -4282,17 +4282,17 @@ static int mov_flush_fragment(AVFormatContext *s) return 0; } -static int mov_auto_flush_fragment(AVFormatContext *s) +static int mov_auto_flush_fragment(AVFormatContext *s, int force) { MOVMuxContext *mov = s->priv_data; int had_moov = mov->moov_written; - int ret = mov_flush_fragment(s); + int ret = mov_flush_fragment(s, force); if (ret < 0) return ret; // If using delay_moov, the first flush only wrote the moov, // not the actual moof+mdat pair, thus flush once again. if (!had_moov && mov->flags & FF_MOV_FLAG_DELAY_MOOV) - ret = mov_flush_fragment(s); + ret = mov_flush_fragment(s, force); return ret; } @@ -4583,7 +4583,7 @@ static int mov_write_single_packet(AVFormatContext *s, AVPacket *pkt) // for the other ones that are flushed at the same time. trk->track_duration = pkt->dts - trk->start_dts; trk->end_pts = pkt->pts; - mov_auto_flush_fragment(s); + mov_auto_flush_fragment(s, 0); } } @@ -4614,7 +4614,7 @@ static int mov_write_subtitle_end_packet(AVFormatContext *s, static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) { if (!pkt) { - mov_flush_fragment(s); + mov_flush_fragment(s, 1); return 1; } else { int i; @@ -5530,7 +5530,7 @@ static int mov_write_trailer(AVFormatContext *s) } res = 0; } else { - mov_auto_flush_fragment(s); + mov_auto_flush_fragment(s, 1); for (i = 0; i < mov->nb_streams; i++) mov->tracks[i].data_offset = 0; if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX) { |