[FFmpeg-cvslog] nut: support pcm codecs not mapped in avi

Luca Barbato git at videolan.org
Sun Oct 14 14:49:32 CEST 2012


ffmpeg | branch: master | Luca Barbato <lu_zero at gentoo.org> | Fri Oct 12 17:29:43 2012 +0200| [92281850a2d878dae1d50e271886ba87013b6ff3] | committer: Luca Barbato

nut: support pcm codecs not mapped in avi

The native tags will be used when available.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=92281850a2d878dae1d50e271886ba87013b6ff3
---

 doc/nut.texi         |    2 +-
 libavformat/nut.c    |   27 ++++++++++++++++++++++++++-
 libavformat/nut.h    |    1 +
 libavformat/nutdec.c |    7 ++++++-
 4 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/doc/nut.texi b/doc/nut.texi
index dafbb39..1c23934 100644
--- a/doc/nut.texi
+++ b/doc/nut.texi
@@ -50,7 +50,7 @@ to be read big-endian.
 @end multitable
 
 <type> is S for signed integer, U for unsigned integer, F for IEEE float
-<interleaving> is D for default, as a historical artefact.
+<interleaving> is D for default, P is for planar.
 <bits> is 8/16/24/32
 
 @example
diff --git a/libavformat/nut.c b/libavformat/nut.c
index b666bff..e367d1c 100644
--- a/libavformat/nut.c
+++ b/libavformat/nut.c
@@ -90,8 +90,33 @@ 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_F32BE,        MKTAG(32 , 'D', 'F', 'P') },
+    { AV_CODEC_ID_PCM_F32LE,        MKTAG('P', 'F', 'D', 32 ) },
+    { AV_CODEC_ID_PCM_F64BE,        MKTAG(64 , 'D', 'F', 'P') },
+    { AV_CODEC_ID_PCM_F64LE,        MKTAG('P', 'F', 'D', 64 ) },
+    { 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_PCM_S16LE_PLANAR, MKTAG('P', 'S', 'P', 16 ) },
+    { AV_CODEC_ID_NONE,             0                         }
+};
+
 const AVCodecTag * const ff_nut_codec_tags[] = {
-    ff_nut_video_tags, ff_nut_subtitle_tags,
+    ff_nut_video_tags, ff_nut_audio_tags, ff_nut_subtitle_tags,
     ff_codec_bmp_tags, ff_codec_wav_tags, 0
 };
 
diff --git a/libavformat/nut.h b/libavformat/nut.h
index 335eceb..a91a109 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[];
 
 extern const AVCodecTag * const ff_nut_codec_tags[];
 
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 8448e13..9b1891f 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_nut_audio_tags,
+                                                    ff_codec_wav_tags,
+                                                    0
+                                                },
+                                                tmp);
         break;
     case 2:
         st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;



More information about the ffmpeg-cvslog mailing list