Re: [libav-devel] [PATCH] nut: support high depth pcm codecs

2012-10-12 Thread Janne Grunau
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

2012-10-11 Thread Luca Barbato
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

2012-10-11 Thread Janne Grunau
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

2012-10-11 Thread Luca Barbato
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);
+