]> git.sesse.net Git - vlc/commitdiff
Add codecs for S24 in 4 bytes
authorRémi Denis-Courmont <remi@remlab.net>
Thu, 20 Dec 2012 18:15:55 +0000 (20:15 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Thu, 20 Dec 2012 18:19:33 +0000 (20:19 +0200)
include/vlc_fourcc.h
modules/codec/araw.c
src/audio_output/common.c
src/misc/fourcc.c

index 391a9a20c0c037f45f52037f5d923c9257b2eb1b..603db0d510ae4ce195052be93ef960db21044c10 100644 (file)
 #define VLC_CODEC_S24B                       VLC_FOURCC('s','2','4','b')
 #define VLC_CODEC_U24L                       VLC_FOURCC('u','2','4','l')
 #define VLC_CODEC_U24B                       VLC_FOURCC('u','2','4','b')
+#define VLC_CODEC_S24L32                     VLC_FOURCC('s','2','4','4')
+#define VLC_CODEC_S24B32                     VLC_FOURCC('S','2','4','4')
 #define VLC_CODEC_S32L                       VLC_FOURCC('s','3','2','l')
 #define VLC_CODEC_S32B                       VLC_FOURCC('s','3','2','b')
 #define VLC_CODEC_U32L                       VLC_FOURCC('u','3','2','l')
index 3ef2c927157db9efba0d7a985fd0ccbd25902121..78166cc7105b33ba8ec9ca1963637a84d23adc52 100644 (file)
@@ -91,6 +91,8 @@ static void U24BDecode( void *, const uint8_t *, unsigned );
 static void U24LDecode( void *, const uint8_t *, unsigned );
 static void S24BDecode( void *, const uint8_t *, unsigned );
 static void S24LDecode( void *, const uint8_t *, unsigned );
+static void S24B32Decode( void *, const uint8_t *, unsigned );
+static void S24L32Decode( void *, const uint8_t *, unsigned );
 static void U32BDecode( void *, const uint8_t *, unsigned );
 static void U32LDecode( void *, const uint8_t *, unsigned );
 static void Swap32Decode( void *, const uint8_t *, unsigned );
@@ -166,6 +168,16 @@ static int DecoderOpen( vlc_object_t *p_this )
     case VLC_CODEC_S32N:
         bits = 32;
         break;
+    case VLC_CODEC_S24B32:
+        format = VLC_CODEC_S32N;
+        decode = S24B32Decode;
+        bits = 32;
+        break;
+    case VLC_CODEC_S24L32:
+        format = VLC_CODEC_S32N;
+        decode = S24L32Decode;
+        bits = 32;
+        break;
     case VLC_CODEC_U24B:
         format = VLC_CODEC_S32N;
         decode = U24BDecode;
@@ -441,6 +453,28 @@ static void S24LDecode( void *outp, const uint8_t *in, unsigned samples )
     }
 }
 
+static void S24B32Decode( void *outp, const uint8_t *in, unsigned samples )
+{
+    uint32_t *out = outp;
+
+    for( size_t i = 0; i < samples; i++ )
+    {
+        *(out++) = GetDWBE( in ) << 8;
+        in += 4;
+    }
+}
+
+static void S24L32Decode( void *outp, const uint8_t *in, unsigned samples )
+{
+    uint32_t *out = outp;
+
+    for( size_t i = 0; i < samples; i++ )
+    {
+        *(out++) = GetDWLE( in ) << 8;
+        in += 4;
+    }
+}
+
 static void U32BDecode( void *outp, const uint8_t *in, unsigned samples )
 {
     uint32_t *out = outp;
index 3f16894778ae618a95e2ee254ef76450680a84d2..f5a0fc1e175dee4e7bd42313d88b151afb15e6ab 100644 (file)
@@ -61,6 +61,10 @@ unsigned int aout_BitsPerSample( vlc_fourcc_t i_format )
     case VLC_CODEC_S24B:
         return 24;
 
+    case VLC_CODEC_S24L32:
+    case VLC_CODEC_S24B32:
+    case VLC_CODEC_U32L:
+    case VLC_CODEC_U32B:
     case VLC_CODEC_S32L:
     case VLC_CODEC_S32B:
     case VLC_CODEC_F32L:
index 1ac3300c746e2dd22d1734596889a6c9bc028e25..afd89afb39d92fccca9e4b87515faf397884f00f 100644 (file)
@@ -1283,6 +1283,10 @@ static const staticentry_t p_list_audio[] = {
     B(VLC_CODEC_U24B, "PCM U24 BE"),
         A("u24b"),
 
+    B(VLC_CODEC_S24L32, "PCM S24 in 32 LE"),
+
+    B(VLC_CODEC_S24B32, "PCM S24 in 32 BE"),
+
     B(VLC_CODEC_S32L, "PCM S32 LE"),
         A("s32l"),
         A("23ni"),  /* Quicktime */