Give priority to the native tags when encoding. --- libavformat/nut.c | 20 ++++++++++++++++++++ libavformat/nut.h | 1 + libavformat/nutdec.c | 9 +++++++-- libavformat/nutenc.c | 20 ++++++++++++++------ 4 files changed, 42 insertions(+), 8 deletions(-)
diff --git a/libavformat/nut.c b/libavformat/nut.c index 4e46b98..0e866da 100644 --- a/libavformat/nut.c +++ b/libavformat/nut.c @@ -89,6 +89,26 @@ const AVCodecTag ff_nut_video_tags[] = { { AV_CODEC_ID_NONE , 0 } }; +const AVCodecTag ff_nut_audio_tags[] = { + { AV_CODEC_ID_PCM_ALAW, MKTAG('A', 'L', 'A', 'W') }, + { AV_CODEC_ID_PCM_MULAW, MKTAG('U', 'L', 'A', 'W') }, + { AV_CODEC_ID_PCM_S16BE, MKTAG(16 , 'D', 'S', 'P') }, + { AV_CODEC_ID_PCM_S16LE, MKTAG('P', 'S', 'D', 16 ) }, + { AV_CODEC_ID_PCM_S24BE, MKTAG(24 , 'D', 'S', 'P') }, + { AV_CODEC_ID_PCM_S24LE, MKTAG('P', 'S', 'D', 24 ) }, + { AV_CODEC_ID_PCM_S32BE, MKTAG(32 , 'D', 'S', 'P') }, + { AV_CODEC_ID_PCM_S32LE, MKTAG('P', 'S', 'D', 32 ) }, + { AV_CODEC_ID_PCM_S8, MKTAG('P', 'S', 'D', 8 ) }, + { AV_CODEC_ID_PCM_U16BE, MKTAG(16 , 'D', 'U', 'P') }, + { AV_CODEC_ID_PCM_U16LE, MKTAG('P', 'U', 'D', 16 ) }, + { AV_CODEC_ID_PCM_U24BE, MKTAG(24 , 'D', 'U', 'P') }, + { AV_CODEC_ID_PCM_U24LE, MKTAG('P', 'U', 'D', 24 ) }, + { AV_CODEC_ID_PCM_U32BE, MKTAG(32 , 'D', 'U', 'P') }, + { AV_CODEC_ID_PCM_U32LE, MKTAG('P', 'U', 'D', 32 ) }, + { AV_CODEC_ID_PCM_U8, MKTAG('P', 'U', 'D', 8 ) }, + { AV_CODEC_ID_NONE, 0 } +}; + void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val){ int i; for(i=0; i<nut->avf->nb_streams; i++){ diff --git a/libavformat/nut.h b/libavformat/nut.h index 3f09689..933b9c5 100644 --- a/libavformat/nut.h +++ b/libavformat/nut.h @@ -105,6 +105,7 @@ typedef struct NUTContext { extern const AVCodecTag ff_nut_subtitle_tags[]; extern const AVCodecTag ff_nut_video_tags[]; +extern const AVCodecTag ff_nut_audio_tags[]; typedef struct Dispositions { char str[9]; diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index dd02aad..a3ff2e6 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -358,7 +358,12 @@ static int decode_stream_header(NUTContext *nut) break; case 1: st->codec->codec_type = AVMEDIA_TYPE_AUDIO; - st->codec->codec_id = ff_codec_get_id(ff_codec_wav_tags, tmp); + st->codec->codec_id = av_codec_get_id((const AVCodecTag * const []) { + ff_codec_wav_tags, + ff_nut_audio_tags, + 0 + }, + tmp); break; case 2: st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE; @@ -993,6 +998,6 @@ AVInputFormat ff_nut_demuxer = { .extensions = "nut", .codec_tag = (const AVCodecTag * const []) { ff_codec_bmp_tags, ff_nut_video_tags, ff_codec_wav_tags, - ff_nut_subtitle_tags, 0 + ff_nut_subtitle_tags, ff_nut_audio_tags, 0 }, }; diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c index 4b1e663..ba79d8f 100644 --- a/libavformat/nutenc.c +++ b/libavformat/nutenc.c @@ -371,9 +371,16 @@ static void write_mainheader(NUTContext *nut, AVIOContext *bc){ } } +static const AVCodecTag * const nut_codec_tags[] = { + ff_nut_audio_tags, ff_nut_video_tags, ff_nut_subtitle_tags, + ff_codec_bmp_tags, ff_codec_wav_tags, 0 +}; + static int write_streamheader(AVFormatContext *avctx, AVIOContext *bc, AVStream *st, int i){ NUTContext *nut = avctx->priv_data; AVCodecContext *codec = st->codec; + unsigned codec_tag = av_codec_get_tag(nut_codec_tags, codec->codec_id); + ff_put_v(bc, i); switch(codec->codec_type){ case AVMEDIA_TYPE_VIDEO: ff_put_v(bc, 0); break; @@ -382,8 +389,12 @@ static int write_streamheader(AVFormatContext *avctx, AVIOContext *bc, AVStream default : ff_put_v(bc, 3); break; } ff_put_v(bc, 4); - if (codec->codec_tag){ - avio_wl32(bc, codec->codec_tag); + + if (!codec_tag) + codec_tag = codec->codec_tag; + + if (codec_tag) { + avio_wl32(bc, codec_tag); } else { av_log(avctx, AV_LOG_ERROR, "No codec tag defined for stream %d\n", i); return AVERROR(EINVAL); @@ -873,8 +884,5 @@ AVOutputFormat ff_nut_muxer = { .write_packet = nut_write_packet, .write_trailer = nut_write_trailer, .flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS, - .codec_tag = (const AVCodecTag * const []){ - ff_codec_bmp_tags, ff_nut_video_tags, ff_codec_wav_tags, - ff_nut_subtitle_tags, 0 - }, + .codec_tag = nut_codec_tags, }; -- 1.7.12 _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel