mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
support silly PCM variant used by zork nemesis
fixes audio decoding of T000A11C.AVI Originally committed as revision 9831 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
2711cb28f4
commit
a11c2a2c66
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user