]> git.sesse.net Git - vlc/commitdiff
Added a small vlc_fourcc_GetCodecAudio helper.
authorLaurent Aimar <fenrir@videolan.org>
Thu, 14 May 2009 20:46:02 +0000 (22:46 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Fri, 15 May 2009 20:05:37 +0000 (22:05 +0200)
include/vlc_fourcc.h
src/libvlccore.sym
src/misc/fourcc.c

index 3a1e8a6d6febe78f378edbca2b6d2943e9636bdc..0fe0c2dd9710b835d1bdaf6927e200442ad0d734 100644 (file)
@@ -333,6 +333,15 @@ VLC_EXPORT( vlc_fourcc_t, vlc_fourcc_GetCodec, ( int i_cat, vlc_fourcc_t i_fourc
  */
 VLC_EXPORT( vlc_fourcc_t, vlc_fourcc_GetCodecFromString, ( int i_cat, const char * ) );
 
+/**
+ * It convert the gives fourcc to an audio codec when possible.
+ *
+ * The fourcc converted are aflt, araw/pcm , twos, sowt. When an incompatible i_bits
+ * is detected, 0 is returned.
+ * The other fourcc goes through vlc_fourcc_GetCodec and i_bits is not checked.
+ */
+VLC_EXPORT( vlc_fourcc_t, vlc_fourcc_GetCodecAudio, ( vlc_fourcc_t i_fourcc, int i_bits ) );
+
 /**
  * It returns the description of the given fourcc or NULL if not found.
  *
index 8adf4fb53d8a69102da70b49acec8dee133671eb..e2216fce5498f1b7f78f2102ccdfb48c059a3945 100644 (file)
@@ -453,6 +453,7 @@ vlc_event_send
 __vlc_execve
 vlc_fastmem_register
 vlc_fourcc_GetCodec
+vlc_fourcc_GetCodecAudio
 vlc_fourcc_GetCodecFromString
 vlc_fourcc_GetDescription
 vlc_freeaddrinfo
index 2690bc871a7df4bdbbc17194256b47483dbac927..8a6121b5aadd9832b892a3edba55d27eda3b3e71 100644 (file)
@@ -1195,6 +1195,78 @@ vlc_fourcc_t vlc_fourcc_GetCodecFromString( int i_cat, const char *psz_fourcc )
                                             psz_fourcc[2], psz_fourcc[3] ) );
 }
 
+vlc_fourcc_t vlc_fourcc_GetCodecAudio( vlc_fourcc_t i_fourcc, int i_bits )
+{
+    const int i_bytes = ( i_bits + 7 ) / 8;
+
+    if( i_fourcc == VLC_FOURCC( 'a', 'f', 'l', 't' ) )
+    {
+        switch( i_bytes )
+        {
+        case 4:
+            return VLC_CODEC_FL32;
+        case 8:
+            return VLC_CODEC_FL64;
+        default:
+            return 0;
+        }
+    }
+    else if( i_fourcc == VLC_FOURCC( 'a', 'r', 'a', 'w' ) ||
+             i_fourcc == VLC_FOURCC( 'p', 'c', 'm', ' ' ) )
+    {
+        switch( i_bytes )
+        {
+        case 1:
+            return VLC_CODEC_U8;
+        case 2:
+            return VLC_CODEC_S16L;
+        case 3:
+            return VLC_CODEC_S24L;
+            break;
+        case 4:
+            return VLC_CODEC_S32L;
+        default:
+            return 0;
+        }
+    }
+    else if( i_fourcc == VLC_FOURCC( 't', 'w', 'o', 's' ) )
+    {
+        switch( i_bytes )
+        {
+        case 1:
+            return VLC_CODEC_S8;
+        case 2:
+            return VLC_CODEC_S16B;
+        case 3:
+            return VLC_CODEC_S24B;
+        case 4:
+            return VLC_CODEC_S32B;
+        default:
+            return 0;
+        }
+    }
+    else if( i_fourcc == VLC_FOURCC( 's', 'o', 'w', 't' ) )
+    {
+        switch( i_bytes )
+        {
+        case 1:
+            return VLC_CODEC_S8;
+        case 2:
+            return VLC_CODEC_S16L;
+        case 3:
+            return VLC_CODEC_S24L;
+        case 4:
+            return VLC_CODEC_S32L;
+        default:
+            return 0;
+        }
+    }
+    else
+    {
+        return vlc_fourcc_GetCodec( AUDIO_ES, i_fourcc );
+    }
+}
+
 /* */
 const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc )
 {