From 4de16278bbc64316f786cbed5fa1321b91c731f0 Mon Sep 17 00:00:00 2001 From: Laurent Aimar Date: Thu, 14 May 2009 22:46:02 +0200 Subject: [PATCH] Added a small vlc_fourcc_GetCodecAudio helper. --- include/vlc_fourcc.h | 9 ++++++ src/libvlccore.sym | 1 + src/misc/fourcc.c | 72 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h index 3a1e8a6d6f..0fe0c2dd97 100644 --- a/include/vlc_fourcc.h +++ b/include/vlc_fourcc.h @@ -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. * diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 8adf4fb53d..e2216fce54 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -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 diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c index 2690bc871a..8a6121b5aa 100644 --- a/src/misc/fourcc.c +++ b/src/misc/fourcc.c @@ -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 ) { -- 2.39.2