# HG changeset patch # User michael # Date 1185761116 0 # Node ID ad384eda0cb7b7ecd71e551171f51e4f5e4094a4 # Parent 0e593c7d0ebc5c9a2dea2bf353a9bd4cb55f8c77 support silly PCM variant used by zork nemesis fixes audio decoding of T000A11C.AVI diff -r 0e593c7d0ebc -r ad384eda0cb7 allcodecs.c --- a/allcodecs.c Sun Jul 29 21:34:31 2007 +0000 +++ b/allcodecs.c Mon Jul 30 02:05:16 2007 +0000 @@ -225,6 +225,7 @@ REGISTER_ENCDEC (PCM_U24LE, pcm_u24le); REGISTER_ENCDEC (PCM_U32BE, pcm_u32be); REGISTER_ENCDEC (PCM_U32LE, pcm_u32le); + REGISTER_ENCDEC (PCM_ZORK , pcm_zork); /* dpcm codecs */ REGISTER_DECODER(INTERPLAY_DPCM, interplay_dpcm); diff -r 0e593c7d0ebc -r ad384eda0cb7 allcodecs.h --- a/allcodecs.h Sun Jul 29 21:34:31 2007 +0000 +++ b/allcodecs.h Mon Jul 30 02:05:16 2007 +0000 @@ -228,6 +228,7 @@ PCM_CODEC(CODEC_ID_PCM_U24LE, pcm_u24le); PCM_CODEC(CODEC_ID_PCM_U32BE, pcm_u32be); PCM_CODEC(CODEC_ID_PCM_U32LE, pcm_u32le); +PCM_CODEC(CODEC_ID_PCM_ZORK, pcm_zork); /* ADPCM codecs */ diff -r 0e593c7d0ebc -r ad384eda0cb7 avcodec.h --- a/avcodec.h Sun Jul 29 21:34:31 2007 +0000 +++ b/avcodec.h Mon Jul 30 02:05:16 2007 +0000 @@ -185,6 +185,7 @@ CODEC_ID_PCM_U24LE, CODEC_ID_PCM_U24BE, CODEC_ID_PCM_S24DAUD, + CODEC_ID_PCM_ZORK, /* various ADPCM codecs */ CODEC_ID_ADPCM_IMA_QT= 0x11000, diff -r 0e593c7d0ebc -r ad384eda0cb7 pcm.c --- a/pcm.c Sun Jul 29 21:34:31 2007 +0000 +++ b/pcm.c Mon Jul 30 02:05:16 2007 +0000 @@ -291,6 +291,14 @@ *dst++ = (v >> 8) + 128; } 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: for(;n>0;n--) { v = *samples++; @@ -452,6 +460,15 @@ *samples++ = ((int)*src++ - 128) << 8; } 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_MULAW: n = buf_size; @@ -505,5 +522,6 @@ PCM_CODEC(CODEC_ID_PCM_U8, pcm_u8); PCM_CODEC(CODEC_ID_PCM_ALAW, pcm_alaw); PCM_CODEC(CODEC_ID_PCM_MULAW, pcm_mulaw); +PCM_CODEC(CODEC_ID_PCM_ZORK, pcm_zork); #undef PCM_CODEC