vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Apr 15 13:39:30 2015 +0200| [0bdface8cba98d3c4bf8009c82ec8529b0d0c8e7] | committer: Francois Cartegnie
demux: avi: add support for creative adpcm refs samples/A-codecs/Creative/ > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0bdface8cba98d3c4bf8009c82ec8529b0d0c8e7 --- NEWS | 1 + include/vlc_codecs.h | 3 +++ include/vlc_fourcc.h | 1 + modules/codec/avcodec/fourcc.c | 2 +- modules/demux/wav.c | 19 +++++++++++++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 3b116ba..3701346 100644 --- a/NEWS +++ b/NEWS @@ -51,6 +51,7 @@ Demuxers: * Fixes for DTS detection in WAV and MKV files * Basic support for MPEG4-SL in TS and T-DMB * Support for Creative ADPCM/alaw/ulaw/S16L in VOC files + * Support for Creative ADPCM in AVI Stream filter: * Added ARIB STD-B25 TS streams decoder diff --git a/include/vlc_codecs.h b/include/vlc_codecs.h index 2c0a726..c1fe6a2 100644 --- a/include/vlc_codecs.h +++ b/include/vlc_codecs.h @@ -252,6 +252,8 @@ ATTR_PACKED #define WAVE_FORMAT_WMAP 0x0162 /* WMA 9 Professional */ #define WAVE_FORMAT_WMAL 0x0163 /* WMA 9 Lossless */ +#define WAVE_FORMAT_CREATIVE_ADPCM 0x0200 /* Creative */ + #define WAVE_FORMAT_ULEAD_DV_AUDIO_NTSC 0x0215 /* Ulead */ #define WAVE_FORMAT_ULEAD_DV_AUDIO_PAL 0x0216 /* Ulead */ @@ -369,6 +371,7 @@ wave_format_tag_to_fourcc[] = { WAVE_FORMAT_ALAW, VLC_CODEC_ALAW, "A-Law" }, { WAVE_FORMAT_MULAW, VLC_CODEC_MULAW, "Mu-Law" }, { WAVE_FORMAT_IMA_ADPCM, VLC_CODEC_ADPCM_IMA_WAV, "Ima-ADPCM" }, + { WAVE_FORMAT_CREATIVE_ADPCM, VLC_CODEC_ADPCM_CREATIVE, "Creative ADPCM" }, { WAVE_FORMAT_YAMAHA_ADPCM, VLC_CODEC_ADPCM_YAMAHA, "Yamaha ADPCM" }, { WAVE_FORMAT_TRUESPEECH, VLC_CODEC_TRUESPEECH, "Truespeech" }, { WAVE_FORMAT_GSM610, VLC_CODEC_GSM_MS, "Microsoft WAV GSM" }, diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h index 2d25095..321329d 100644 --- a/include/vlc_fourcc.h +++ b/include/vlc_fourcc.h @@ -395,6 +395,7 @@ #define VLC_CODEC_ADPCM_YAMAHA VLC_FOURCC('m','s',0x00,0x20) #define VLC_CODEC_ADPCM_DK3 VLC_FOURCC('m','s',0x00,0x62) #define VLC_CODEC_ADPCM_DK4 VLC_FOURCC('m','s',0x00,0x61) +#define VLC_CODEC_ADPCM_CREATIVE VLC_FOURCC('m','s',0x00,0xC0) #define VLC_CODEC_ADPCM_SBPRO_2 VLC_FOURCC('m','s',0x00,0xC2) #define VLC_CODEC_ADPCM_SBPRO_3 VLC_FOURCC('m','s',0x00,0xC3) #define VLC_CODEC_ADPCM_SBPRO_4 VLC_FOURCC('m','s',0x00,0xC4) diff --git a/modules/codec/avcodec/fourcc.c b/modules/codec/avcodec/fourcc.c index 6bfa7eb..daf71e3 100644 --- a/modules/codec/avcodec/fourcc.c +++ b/modules/codec/avcodec/fourcc.c @@ -344,7 +344,7 @@ static const struct { VLC_CODEC_ADPCM_ADX, AV_CODEC_ID_ADPCM_ADX, AUDIO_ES }, { VLC_CODEC_ADPCM_EA, AV_CODEC_ID_ADPCM_EA, AUDIO_ES }, { VLC_CODEC_ADPCM_G726, AV_CODEC_ID_ADPCM_G726, AUDIO_ES }, - /* AV_CODEC_ID_ADPCM_CT */ + { VLC_CODEC_ADPCM_CREATIVE, AV_CODEC_ID_ADPCM_CT, AUDIO_ES }, { VLC_CODEC_ADPCM_SWF, AV_CODEC_ID_ADPCM_SWF, AUDIO_ES }, { VLC_CODEC_ADPCM_YAMAHA, AV_CODEC_ID_ADPCM_YAMAHA, AUDIO_ES }, { VLC_CODEC_ADPCM_SBPRO_4, AV_CODEC_ID_ADPCM_SBPRO_4, AUDIO_ES }, diff --git a/modules/demux/wav.c b/modules/demux/wav.c index 0ac9d5e..328bafd 100644 --- a/modules/demux/wav.c +++ b/modules/demux/wav.c @@ -79,6 +79,7 @@ static int ChunkFind( demux_t *, const char *, unsigned int * ); static int FrameInfo_IMA_ADPCM( unsigned int *, int *, const es_format_t * ); static int FrameInfo_MS_ADPCM ( unsigned int *, int *, const es_format_t * ); +static int FrameInfo_Creative_ADPCM( unsigned int *, int *, const es_format_t * ); static int FrameInfo_PCM ( unsigned int *, int *, const es_format_t * ); static int FrameInfo_MSGSM ( unsigned int *, int *, const es_format_t * ); @@ -345,6 +346,11 @@ static int Open( vlc_object_t * p_this ) &p_sys->fmt ) ) goto error; break; + case VLC_CODEC_ADPCM_CREATIVE: + if( FrameInfo_Creative_ADPCM( &p_sys->i_frame_size, &p_sys->i_frame_samples, + &p_sys->fmt ) ) + goto error; + break; case VLC_CODEC_MPGA: case VLC_CODEC_A52: /* FIXME set end of area FIXME */ @@ -572,6 +578,19 @@ static int FrameInfo_IMA_ADPCM( unsigned int *pi_size, int *pi_samples, return VLC_SUCCESS; } +static int FrameInfo_Creative_ADPCM( unsigned int *pi_size, int *pi_samples, + const es_format_t *p_fmt ) +{ + if( p_fmt->audio.i_channels <= 0 ) + return VLC_EGENERIC; + + /* 4 bits / sample */ + *pi_samples = p_fmt->audio.i_blockalign * 2 / p_fmt->audio.i_channels; + *pi_size = p_fmt->audio.i_blockalign; + + return VLC_SUCCESS; +} + static int FrameInfo_MSGSM( unsigned int *pi_size, int *pi_samples, const es_format_t *p_fmt ) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
