aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHendrik Leppkes <h.leppkes@gmail.com>2015-10-27 12:46:21 +0100
committerHendrik Leppkes <h.leppkes@gmail.com>2015-10-27 12:46:21 +0100
commit368e5216464fd894ded93e8a3fc12066c1a9c061 (patch)
treecabd737612df9bd552460a5f6ce4dd4a059f3c95
parent12e95d156ae95e7db7f5a524112569b29cbdf0be (diff)
parent5ea5a24eb70646a9061b85af407fcbb5dd4f89fd (diff)
downloadffmpeg-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.c16
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) {