Message ID | 1498708054-46445-1-git-send-email-derek.buitenhuis@gmail.com |
---|---|
State | Superseded |
Headers | show |
On 6/29/17, Derek Buitenhuis <derek.buitenhuis@gmail.com> wrote: > From: John Stebbins <stebbins@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@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..c516fd4 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_EVRC , MKTAG('m', 'p', '4', 'v') }, EVRC is audio codec. Shouldn't be mp4a. > + { 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') }, > + { AV_CODEC_ID_DTS , MKTAG('m', 'p', '4', 'a') }, > + { 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, > }; > -- > 1.8.3.1 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
On 6/29/2017 7:51 AM, Paul B Mahol wrote:
> EVRC is audio codec. Shouldn't be mp4a.
Yes.
- Derek
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index ca389e3..c516fd4 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_EVRC , 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') }, + { AV_CODEC_ID_DTS , MKTAG('m', 'p', '4', 'a') }, + { 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, };