diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-03-10 11:42:44 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-03-10 11:42:44 +0100 |
commit | f8f324cc16c34d0204f2ce0d9eb20bac8b685a9c (patch) | |
tree | 0b280c37dfc2658574cf34baf38c7b11a4ae340b | |
parent | 8d026861f5c2afa3f445e2ffdc67b563b06e2dcb (diff) | |
parent | 448c8cfe4c53e9e806effd8505b46d57fa707061 (diff) | |
download | ffmpeg-streaming-f8f324cc16c34d0204f2ce0d9eb20bac8b685a9c.zip ffmpeg-streaming-f8f324cc16c34d0204f2ce0d9eb20bac8b685a9c.tar.gz |
Merge commit '448c8cfe4c53e9e806effd8505b46d57fa707061'
* commit '448c8cfe4c53e9e806effd8505b46d57fa707061':
movenc: Support setting fragment_index before the moov atom is written
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/movenc.c | 17 | ||||
-rw-r--r-- | libavformat/movenc.h | 1 |
2 files changed, 10 insertions, 8 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 2230cad..1008708 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -79,7 +79,7 @@ static const AVOption options[] = { { "video_track_timescale", "set timescale of all video tracks", offsetof(MOVMuxContext, video_track_timescale), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM}, { "brand", "Override major brand", offsetof(MOVMuxContext, major_brand), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = AV_OPT_FLAG_ENCODING_PARAM }, { "use_editlist", "use edit list", offsetof(MOVMuxContext, use_editlist), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, AV_OPT_FLAG_ENCODING_PARAM}, - { "fragment_index", "Fragment number of the next fragment", offsetof(MOVMuxContext, fragments), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM}, + { "fragment_index", "Fragment number of the next fragment", offsetof(MOVMuxContext, fragments), AV_OPT_TYPE_INT, {.i64 = 1}, 1, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM}, { "mov_gamma", "gamma value for gama atom", offsetof(MOVMuxContext, gamma), AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, 0.0, 10, AV_OPT_FLAG_ENCODING_PARAM}, { NULL }, }; @@ -4058,7 +4058,7 @@ static int mov_flush_fragment(AVFormatContext *s) if (!(mov->flags & FF_MOV_FLAG_FRAGMENT)) return 0; - if (mov->fragments == 0) { + if (!mov->moov_written) { int64_t pos = avio_tell(s->pb); uint8_t *buf; int buf_size, moov_size; @@ -4083,7 +4083,7 @@ static int mov_flush_fragment(AVFormatContext *s) if (mov->flags & FF_MOV_FLAG_FASTSTART) mov->reserved_moov_pos = avio_tell(s->pb); avio_flush(s->pb); - mov->fragments++; + mov->moov_written = 1; return 0; } @@ -4094,7 +4094,7 @@ static int mov_flush_fragment(AVFormatContext *s) avio_write(s->pb, buf, buf_size); av_free(buf); - mov->fragments++; + mov->moov_written = 1; mov->mdat_size = 0; for (i = 0; i < mov->nb_streams; i++) { if (mov->tracks[i].entry) @@ -4172,12 +4172,13 @@ static int mov_flush_fragment(AVFormatContext *s) static int mov_auto_flush_fragment(AVFormatContext *s) { MOVMuxContext *mov = s->priv_data; + int had_moov = mov->moov_written; int ret = mov_flush_fragment(s); 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 (mov->fragments == 1 && mov->flags & FF_MOV_FLAG_DELAY_MOOV) + if (!had_moov && mov->flags & FF_MOV_FLAG_DELAY_MOOV) ret = mov_flush_fragment(s); return ret; } @@ -4209,7 +4210,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) } if (mov->flags & FF_MOV_FLAG_FRAGMENT) { int ret; - if (mov->fragments > 0 || mov->flags & FF_MOV_FLAG_EMPTY_MOOV) { + if (mov->moov_written || mov->flags & FF_MOV_FLAG_EMPTY_MOOV) { if (!trk->mdat_buf) { if ((ret = avio_open_dyn_buf(&trk->mdat_buf)) < 0) return ret; @@ -4367,7 +4368,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) trk->frag_start = pkt->dts; trk->start_dts = 0; trk->frag_discont = 0; - } else if (pkt->dts && mov->fragments >= 1) + } else if (pkt->dts && mov->moov_written) av_log(s, AV_LOG_WARNING, "Track %d starts with a nonzero dts %"PRId64", while the moov " "already has been written. Set the delay_moov flag to handle " @@ -5143,7 +5144,7 @@ static int mov_write_header(AVFormatContext *s) !(mov->flags & FF_MOV_FLAG_DELAY_MOOV)) { if ((ret = mov_write_moov_tag(pb, mov, s)) < 0) return ret; - mov->fragments++; + mov->moov_written = 1; if (mov->flags & FF_MOV_FLAG_FASTSTART) mov->reserved_moov_pos = avio_tell(pb); } diff --git a/libavformat/movenc.h b/libavformat/movenc.h index 322ba9f..9605155 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -168,6 +168,7 @@ typedef struct MOVMuxContext { int iods_video_profile; int iods_audio_profile; + int moov_written; int fragments; int max_fragment_duration; int min_fragment_duration; |