diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-04-11 22:50:22 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-04-11 22:50:22 +0200 |
commit | 4f6df20a008e52e767550e1ea94280a15c1408b6 (patch) | |
tree | 85c15434d2d725cd018a878f7bef75ee13765817 /libavformat/movenc.c | |
parent | 8e357e8e759b36e5609ccd12a9e324aee0e8afc8 (diff) | |
parent | e1ce756844e684876318570dcebc74bc66c084f0 (diff) | |
download | ffmpeg-4f6df20a008e52e767550e1ea94280a15c1408b6.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
avplay: Don't free video filters string until the end of decoding.
movenc: small refactor mov_write_packet
movenc: remove redundant check
interplayvideo: fix av_dlog parameter type mismatch
Drop some pointless #ifdefs.
Conflicts:
libavcodec/interplayvideo.c
libavcodec/libxvidff.c
libavcodec/snowenc.c
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r-- | libavformat/movenc.c | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 60a8bb1c28..1e0dab7e82 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -2871,7 +2871,7 @@ static int mov_flush_fragment(AVFormatContext *s) return 0; } -static int mov_write_packet_internal(AVFormatContext *s, AVPacket *pkt) +int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) { MOVMuxContext *mov = s->priv_data; AVIOContext *pb = s->pb; @@ -2880,26 +2880,6 @@ static int mov_write_packet_internal(AVFormatContext *s, AVPacket *pkt) unsigned int samples_in_chunk = 0; int size= pkt->size; uint8_t *reformatted_data = NULL; - int64_t frag_duration = 0; - - if (!s->pb->seekable && !(mov->flags & FF_MOV_FLAG_EMPTY_MOOV)) - return 0; /* Can't handle that */ - - if (!size) return 0; /* Discard 0 sized packets */ - - if (trk->entry && pkt->stream_index < s->nb_streams) - frag_duration = av_rescale_q(pkt->dts - trk->cluster[0].dts, - s->streams[pkt->stream_index]->time_base, - AV_TIME_BASE_Q); - if ((mov->max_fragment_duration && - frag_duration >= mov->max_fragment_duration) || - (mov->max_fragment_size && mov->mdat_size + size >= mov->max_fragment_size) || - (mov->flags & FF_MOV_FLAG_FRAG_KEYFRAME && - enc->codec_type == AVMEDIA_TYPE_VIDEO && - trk->entry && pkt->flags & AV_PKT_FLAG_KEY)) { - if (frag_duration >= mov->min_fragment_duration) - mov_flush_fragment(s); - } if (mov->flags & FF_MOV_FLAG_FRAGMENT) { int ret; @@ -3033,13 +3013,35 @@ static int mov_write_packet_internal(AVFormatContext *s, AVPacket *pkt) return 0; } -int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) +static int mov_write_packet(AVFormatContext *s, AVPacket *pkt) { if (!pkt) { mov_flush_fragment(s); return 1; } else { - return mov_write_packet_internal(s, pkt); + MOVMuxContext *mov = s->priv_data; + MOVTrack *trk = &mov->tracks[pkt->stream_index]; + AVCodecContext *enc = trk->enc; + int64_t frag_duration = 0; + int size = pkt->size; + + if (!pkt->size) return 0; /* Discard 0 sized packets */ + + if (trk->entry && pkt->stream_index < s->nb_streams) + frag_duration = av_rescale_q(pkt->dts - trk->cluster[0].dts, + s->streams[pkt->stream_index]->time_base, + AV_TIME_BASE_Q); + if ((mov->max_fragment_duration && + frag_duration >= mov->max_fragment_duration) || + (mov->max_fragment_size && mov->mdat_size + size >= mov->max_fragment_size) || + (mov->flags & FF_MOV_FLAG_FRAG_KEYFRAME && + enc->codec_type == AVMEDIA_TYPE_VIDEO && + trk->entry && pkt->flags & AV_PKT_FLAG_KEY)) { + if (frag_duration >= mov->min_fragment_duration) + mov_flush_fragment(s); + } + + return ff_mov_write_packet(s, pkt); } } @@ -3373,7 +3375,7 @@ AVOutputFormat ff_mov_muxer = { .video_codec = CODEC_ID_MPEG4, #endif .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ @@ -3392,7 +3394,7 @@ AVOutputFormat ff_tgp_muxer = { .audio_codec = CODEC_ID_AMR_NB, .video_codec = CODEC_ID_H263, .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ codec_3gp_tags, 0 }, @@ -3414,7 +3416,7 @@ AVOutputFormat ff_mp4_muxer = { .video_codec = CODEC_ID_MPEG4, #endif .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 }, @@ -3435,7 +3437,7 @@ AVOutputFormat ff_psp_muxer = { .video_codec = CODEC_ID_MPEG4, #endif .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 }, @@ -3452,7 +3454,7 @@ AVOutputFormat ff_tg2_muxer = { .audio_codec = CODEC_ID_AMR_NB, .video_codec = CODEC_ID_H263, .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ codec_3gp_tags, 0 }, @@ -3470,7 +3472,7 @@ AVOutputFormat ff_ipod_muxer = { .audio_codec = CODEC_ID_AAC, .video_codec = CODEC_ID_H264, .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ codec_ipod_tags, 0 }, @@ -3488,7 +3490,7 @@ AVOutputFormat ff_ismv_muxer = { .audio_codec = CODEC_ID_AAC, .video_codec = CODEC_ID_H264, .write_header = mov_write_header, - .write_packet = ff_mov_write_packet, + .write_packet = mov_write_packet, .write_trailer = mov_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH, .codec_tag = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 }, |