diff options
author | ChanMin Kim <kcm1700@gmail.com> | 2012-11-17 20:39:51 +0400 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-11-20 22:19:31 +0400 |
commit | 4293464705d01ddd47b52822d0a0f1021895bc30 (patch) | |
tree | 101aaa99cbd651068fbac2ff7a0b01fdf16ee1ce /libavformat/segment.c | |
parent | 6253cee497ffc72cb11c84485816c924b85b0bbd (diff) |
lavf/segment: do not copy codec_tag when not available
Some muxers do not allow stream if codec_tag is incompatible.
Sometimes the passed input codec's codec_tag is not compatible with the
output muxer.
Because the codec_tag field of the segment muxer cannot be set, ffmpeg.c
doesn't know how to handle these cases.
Signed-off-by: ChanMin Kim <kcm1700@gmail.com>
Signed-off-by: Stefano Sabatini <stefasab@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/segment.c')
-rw-r--r-- | libavformat/segment.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libavformat/segment.c b/libavformat/segment.c index f31b25fb36..339f9683e1 100644 --- a/libavformat/segment.c +++ b/libavformat/segment.c @@ -108,9 +108,20 @@ static int segment_mux_init(AVFormatContext *s) for (i = 0; i < s->nb_streams; i++) { AVStream *st; + AVCodecContext *icodec, *ocodec; + if (!(st = avformat_new_stream(oc, NULL))) return AVERROR(ENOMEM); - avcodec_copy_context(st->codec, s->streams[i]->codec); + icodec = s->streams[i]->codec; + ocodec = st->codec; + avcodec_copy_context(ocodec, icodec); + if (!oc->oformat->codec_tag || + av_codec_get_id (oc->oformat->codec_tag, icodec->codec_tag) == ocodec->codec_id || + av_codec_get_tag(oc->oformat->codec_tag, icodec->codec_id) <= 0) { + ocodec->codec_tag = icodec->codec_tag; + } else { + ocodec->codec_tag = 0; + } st->sample_aspect_ratio = s->streams[i]->sample_aspect_ratio; } |