[FFmpeg-devel] [PATCH 1/5] movenc: use correct tag list for AVOutputFormat.codec_tag

James Almer jamrial at gmail.com
Mon Jul 3 05:00:39 EEST 2017


On 6/28/2017 12:41 PM, Derek Buitenhuis wrote:
> From: John Stebbins <stebbins at jetheaddev.com>
> 
> ff_mp4_obj_type contains the wrong type of tags for
> AVOutputFormat.codec_tag. AVOutputFormat.codec_tag is used to
> validate AVCodecParameters.codec_tag so needs to be the same
> type of tag.
> 
> Creates new tag lists for mp4 and ismv.  New tag lists support
> same list of codecs found in ff_mp4_obj_type. psp uses the same
> tag list as mp4 since these both use mp4_get_codec_tag to look up tags.
> 
> (cherry picked from commit 713efb2c0d013a42be4051adb7cd90a7c2cbbb4f)
> Signed-off-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>
> ---
>  libavformat/movenc.c | 42 +++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 39 insertions(+), 3 deletions(-)
> 
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index ca389e3..2a07e00 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -6488,6 +6488,41 @@ static int mov_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
>      return ret;
>  }
>  
> +const AVCodecTag codec_mp4_tags[] = {
> +    { AV_CODEC_ID_MPEG4       , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_H264        , MKTAG('a', 'v', 'c', '1') },
> +    { AV_CODEC_ID_HEVC        , MKTAG('h', 'e', 'v', '1') },
> +    { AV_CODEC_ID_MPEG2VIDEO  , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_MPEG1VIDEO  , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_MJPEG       , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_PNG         , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_JPEG2000    , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_VC1         , MKTAG('v', 'c', '-', '1') },
> +    { AV_CODEC_ID_DIRAC       , MKTAG('d', 'r', 'a', 'c') },
> +    { AV_CODEC_ID_TSCC2       , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_VP9         , MKTAG('v', 'p', '0', '9') },
> +    { AV_CODEC_ID_EVR         , MKTAG('m', 'p', '4', 'v') },
> +    { AV_CODEC_ID_AAC         , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_MP4ALS      , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_MP3         , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_MP2         , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_AC3         , MKTAG('a', 'c', '-', '3') },
> +    { AV_CODEC_ID_EAC3        , MKTAG('a', 'c', '-', '3') },

Should be ec-3. Changing it fixes fate-copy-trac3074 as pointed by
Michael in a reply to patch 2/5.

> +    { AV_CODEC_ID_DTS         , MKTAG('m', 'p', '4', 'a') },

Doesn't DTS have a bunch of unique tags? The ones listed in
ff_codec_movaudio_tags and http://www.mp4ra.org/codecs.html

> +    { AV_CODEC_ID_FLAC        , MKTAG('f', 'L', 'a', 'C') },
> +    { AV_CODEC_ID_OPUS        , MKTAG('O', 'p', 'u', 's') },
> +    { AV_CODEC_ID_VORBIS      , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_QCELP       , MKTAG('m', 'p', '4', 'a') },
> +    { AV_CODEC_ID_DVD_SUBTITLE, MKTAG('m', 'p', '4', 's') },
> +    { AV_CODEC_ID_MOV_TEXT    , MKTAG('t', 'x', '3', 'g') },
> +    { AV_CODEC_ID_NONE        ,    0 },
> +};
> +
> +const AVCodecTag codec_ism_tags[] = {
> +    { AV_CODEC_ID_WMAPRO      , MKTAG('w', 'm', 'a', ' ') },
> +    { AV_CODEC_ID_NONE        ,    0 },
> +};
> +
>  #if CONFIG_MOV_MUXER
>  MOV_CLASS(mov)
>  AVOutputFormat ff_mov_muxer = {
> @@ -6548,7 +6583,7 @@ AVOutputFormat ff_mp4_muxer = {
>      .write_trailer     = mov_write_trailer,
>      .deinit            = mov_free,
>      .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
> -    .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
> +    .codec_tag         = (const AVCodecTag* const []){ codec_mp4_tags, 0 },
>      .check_bitstream   = mov_check_bitstream,
>      .priv_class        = &mp4_muxer_class,
>  };
> @@ -6569,7 +6604,7 @@ AVOutputFormat ff_psp_muxer = {
>      .write_trailer     = mov_write_trailer,
>      .deinit            = mov_free,
>      .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
> -    .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
> +    .codec_tag         = (const AVCodecTag* const []){ codec_mp4_tags, 0 },
>      .check_bitstream   = mov_check_bitstream,
>      .priv_class        = &psp_muxer_class,
>  };
> @@ -6631,7 +6666,8 @@ AVOutputFormat ff_ismv_muxer = {
>      .write_trailer     = mov_write_trailer,
>      .deinit            = mov_free,
>      .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
> -    .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
> +    .codec_tag         = (const AVCodecTag* const []){
> +        codec_mp4_tags, codec_ism_tags, 0 },
>      .check_bitstream   = mov_check_bitstream,
>      .priv_class        = &ismv_muxer_class,
>  };
> 



More information about the ffmpeg-devel mailing list