fixes audio decoding of T000A11C.AVI Originally committed as revision 9831 to svn://svn.ffmpeg.org/ffmpeg/trunktags/v0.5
| @@ -225,6 +225,7 @@ void avcodec_register_all(void) | |||||
| REGISTER_ENCDEC (PCM_U24LE, pcm_u24le); | REGISTER_ENCDEC (PCM_U24LE, pcm_u24le); | ||||
| REGISTER_ENCDEC (PCM_U32BE, pcm_u32be); | REGISTER_ENCDEC (PCM_U32BE, pcm_u32be); | ||||
| REGISTER_ENCDEC (PCM_U32LE, pcm_u32le); | REGISTER_ENCDEC (PCM_U32LE, pcm_u32le); | ||||
| REGISTER_ENCDEC (PCM_ZORK , pcm_zork); | |||||
| /* dpcm codecs */ | /* dpcm codecs */ | ||||
| REGISTER_DECODER(INTERPLAY_DPCM, interplay_dpcm); | REGISTER_DECODER(INTERPLAY_DPCM, interplay_dpcm); | ||||
| @@ -228,6 +228,7 @@ PCM_CODEC(CODEC_ID_PCM_U24BE, pcm_u24be); | |||||
| PCM_CODEC(CODEC_ID_PCM_U24LE, pcm_u24le); | PCM_CODEC(CODEC_ID_PCM_U24LE, pcm_u24le); | ||||
| PCM_CODEC(CODEC_ID_PCM_U32BE, pcm_u32be); | PCM_CODEC(CODEC_ID_PCM_U32BE, pcm_u32be); | ||||
| PCM_CODEC(CODEC_ID_PCM_U32LE, pcm_u32le); | PCM_CODEC(CODEC_ID_PCM_U32LE, pcm_u32le); | ||||
| PCM_CODEC(CODEC_ID_PCM_ZORK, pcm_zork); | |||||
| /* ADPCM codecs */ | /* ADPCM codecs */ | ||||
| @@ -185,6 +185,7 @@ enum CodecID { | |||||
| CODEC_ID_PCM_U24LE, | CODEC_ID_PCM_U24LE, | ||||
| CODEC_ID_PCM_U24BE, | CODEC_ID_PCM_U24BE, | ||||
| CODEC_ID_PCM_S24DAUD, | CODEC_ID_PCM_S24DAUD, | ||||
| CODEC_ID_PCM_ZORK, | |||||
| /* various ADPCM codecs */ | /* various ADPCM codecs */ | ||||
| CODEC_ID_ADPCM_IMA_QT= 0x11000, | CODEC_ID_ADPCM_IMA_QT= 0x11000, | ||||
| @@ -291,6 +291,14 @@ static int pcm_encode_frame(AVCodecContext *avctx, | |||||
| *dst++ = (v >> 8) + 128; | *dst++ = (v >> 8) + 128; | ||||
| } | } | ||||
| break; | break; | ||||
| case CODEC_ID_PCM_ZORK: | |||||
| for(;n>0;n--) { | |||||
| v= *samples++ >> 8; | |||||
| if(v<0) v = -v; | |||||
| else v+= 128; | |||||
| *dst++ = v; | |||||
| } | |||||
| break; | |||||
| case CODEC_ID_PCM_ALAW: | case CODEC_ID_PCM_ALAW: | ||||
| for(;n>0;n--) { | for(;n>0;n--) { | ||||
| v = *samples++; | v = *samples++; | ||||
| @@ -452,6 +460,15 @@ static int pcm_decode_frame(AVCodecContext *avctx, | |||||
| *samples++ = ((int)*src++ - 128) << 8; | *samples++ = ((int)*src++ - 128) << 8; | ||||
| } | } | ||||
| break; | break; | ||||
| case CODEC_ID_PCM_ZORK: | |||||
| n = buf_size; | |||||
| for(;n>0;n--) { | |||||
| int x= *src++; | |||||
| if(x&128) x-= 128; | |||||
| else x = -x; | |||||
| *samples++ = x << 8; | |||||
| } | |||||
| break; | |||||
| case CODEC_ID_PCM_ALAW: | case CODEC_ID_PCM_ALAW: | ||||
| case CODEC_ID_PCM_MULAW: | case CODEC_ID_PCM_MULAW: | ||||
| n = buf_size; | n = buf_size; | ||||
| @@ -505,5 +522,6 @@ PCM_CODEC(CODEC_ID_PCM_S8, pcm_s8); | |||||
| PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); | PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); | ||||
| PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); | PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); | ||||
| PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); | PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); | ||||
| PCM_CODEC(CODEC_ID_PCM_ZORK, pcm_zork); | |||||
| #undef PCM_CODEC | #undef PCM_CODEC | ||||
| @@ -415,6 +415,8 @@ int wav_codec_get_id(unsigned int tag, int bps) | |||||
| id = CODEC_ID_PCM_S24LE; | id = CODEC_ID_PCM_S24LE; | ||||
| if (id == CODEC_ID_PCM_S16LE && bps == 32) | if (id == CODEC_ID_PCM_S16LE && bps == 32) | ||||
| id = CODEC_ID_PCM_S32LE; | id = CODEC_ID_PCM_S32LE; | ||||
| if (id == CODEC_ID_ADPCM_IMA_WAV && bps == 8) | |||||
| id = CODEC_ID_PCM_ZORK; | |||||
| return id; | return id; | ||||
| } | } | ||||
| #endif // CONFIG_DEMUXERS | #endif // CONFIG_DEMUXERS | ||||