Fixes ticket #6897 --- libavformat/movenc.c | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 8a3b651514..dd6281d210 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -1589,6 +1589,26 @@ static const AVCodecTag codec_cover_image_tags[] = { { AV_CODEC_ID_NONE, 0 }, }; +static int validate_codec_tag(const AVCodecTag *const *tags, + unsigned int tag, int codec_id) +{ + int i; + + /** + * Check that tag + id is in the table + */ + for (i = 0; tags && tags[i]; i++) { + const AVCodecTag *codec_tags = tags[i]; + while (codec_tags->id != AV_CODEC_ID_NONE) { + if (codec_tags->tag == tag && codec_tags->id == codec_id) { + return 1; + } + codec_tags++; + } + } + return 0; +} + static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track) { int tag; @@ -1596,23 +1616,21 @@ static int mov_find_codec_tag(AVFormatContext *s, MOVTrack *track) if (is_cover_image(track->st)) return ff_codec_get_tag(codec_cover_image_tags, track->par->codec_id); - if (track->mode == MODE_MP4 || track->mode == MODE_PSP) - tag = track->par->codec_tag; - else if (track->mode == MODE_ISM) - tag = track->par->codec_tag; - else if (track->mode == MODE_IPOD) { + if (track->mode == MODE_IPOD) if (!av_match_ext(s->url, "m4a") && !av_match_ext(s->url, "m4v") && !av_match_ext(s->url, "m4b")) av_log(s, AV_LOG_WARNING, "Warning, extension is not .m4a nor .m4v " "Quicktime/Ipod might not play the file\n"); - tag = track->par->codec_tag; - } else if (track->mode & MODE_3GP) - tag = track->par->codec_tag; - else if (track->mode == MODE_F4V) - tag = track->par->codec_tag; - else + + if (track->mode == MODE_MOV) tag = mov_get_codec_tag(s, track); + else + if (!validate_codec_tag(s->oformat->codec_tag, track->par->codec_tag, + track->par->codec_id)) + tag = 0; + else + tag = track->par->codec_tag; return tag; } -- 2.17.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel