Re: [libav-devel] [PATCH] nut: support high depth pcm codecs
On 2012-10-12 02:15:33 +0200, Luca Barbato wrote: Give priority to the native tags when encoding. Update fate refs due the change of tags in use. --- Made sure fate remains green. libavformat/nut.c| 20 +++ libavformat/nut.h| 1 + libavformat/nutdec.c | 9 +++- libavformat/nutenc.c | 20 --- tests/ref/lavfi/crop | 2 +- tests/ref/lavfi/crop_scale | 2 +- tests/ref/lavfi/crop_scale_vflip | 2 +- tests/ref/lavfi/crop_vflip | 2 +- tests/ref/lavfi/null | 2 +- tests/ref/lavfi/pixdesc | 114 +++ tests/ref/lavfi/pixfmts_copy | 114 +++ tests/ref/lavfi/pixfmts_crop | 82 ++-- tests/ref/lavfi/pixfmts_hflip| 82 ++-- tests/ref/lavfi/pixfmts_null | 114 +++ tests/ref/lavfi/pixfmts_pad | 34 ++-- tests/ref/lavfi/pixfmts_scale| 114 +++ tests/ref/lavfi/pixfmts_vflip| 114 +++ tests/ref/lavfi/scale200 | 2 +- tests/ref/lavfi/scale500 | 2 +- tests/ref/lavfi/vflip| 2 +- tests/ref/lavfi/vflip_crop | 2 +- tests/ref/lavfi/vflip_vflip | 2 +- ok I guess. have you looked at some tests and verified that only the tags change? Janne ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH] nut: support high depth pcm codecs
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; inut-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
Re: [libav-devel] [PATCH] nut: support high depth pcm codecs
On 2012-10-11 14:39:14 +0200, Luca Barbato wrote: 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; inut-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 }, could share the nut_codec_tags from the encoder, but not really important since it's unlikely that it'll be extended soon. ok as is }; 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 =
[libav-devel] [PATCH] nut: support high depth pcm codecs
Give priority to the native tags when encoding. Update fate refs due the change of tags in use. --- Made sure fate remains green. libavformat/nut.c| 20 +++ libavformat/nut.h| 1 + libavformat/nutdec.c | 9 +++- libavformat/nutenc.c | 20 --- tests/ref/lavfi/crop | 2 +- tests/ref/lavfi/crop_scale | 2 +- tests/ref/lavfi/crop_scale_vflip | 2 +- tests/ref/lavfi/crop_vflip | 2 +- tests/ref/lavfi/null | 2 +- tests/ref/lavfi/pixdesc | 114 +++ tests/ref/lavfi/pixfmts_copy | 114 +++ tests/ref/lavfi/pixfmts_crop | 82 ++-- tests/ref/lavfi/pixfmts_hflip| 82 ++-- tests/ref/lavfi/pixfmts_null | 114 +++ tests/ref/lavfi/pixfmts_pad | 34 ++-- tests/ref/lavfi/pixfmts_scale| 114 +++ tests/ref/lavfi/pixfmts_vflip| 114 +++ tests/ref/lavfi/scale200 | 2 +- tests/ref/lavfi/scale500 | 2 +- tests/ref/lavfi/vflip| 2 +- tests/ref/lavfi/vflip_crop | 2 +- tests/ref/lavfi/vflip_vflip | 2 +- 22 files changed, 436 insertions(+), 402 deletions(-) diff --git a/libavformat/nut.c b/libavformat/nut.c index 6a68e28..ea6ff23 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; inut-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); +