# HG changeset patch # User stefang # Date 1232222923 0 # Node ID 2a2318411d9df41391980784af78bc4aeeb81889 # Parent ff10b38304d2b6820de04992506e8fcc448e1e8a added demuxer for FunCom ISS audio files, extended ADPCM decoder by ISS specific IMA variant diff -r ff10b38304d2 -r 2a2318411d9d adpcm.c --- a/adpcm.c Sat Jan 17 20:06:08 2009 +0000 +++ b/adpcm.c Sat Jan 17 20:08:43 2009 +0000 @@ -1131,6 +1131,33 @@ *samples++ = c->status[0].predictor - c->status[1].predictor; } break; + case CODEC_ID_ADPCM_IMA_ISS: + c->status[0].predictor = (int16_t)AV_RL16(src + 0); + c->status[0].step_index = src[2]; + src += 4; + if(st) { + c->status[1].predictor = (int16_t)AV_RL16(src + 0); + c->status[1].step_index = src[2]; + src += 4; + } + + while (src < buf + buf_size) { + + if (st) { + *samples++ = adpcm_ima_expand_nibble(&c->status[0], + src[0] >> 4 , 3); + *samples++ = adpcm_ima_expand_nibble(&c->status[1], + src[0] & 0x0F, 3); + } else { + *samples++ = adpcm_ima_expand_nibble(&c->status[0], + src[0] & 0x0F, 3); + *samples++ = adpcm_ima_expand_nibble(&c->status[0], + src[0] >> 4 , 3); + } + + src++; + } + break; case CODEC_ID_ADPCM_IMA_WS: /* no per-block initialization; just start decoding the data */ while (src < buf + buf_size) { @@ -1641,6 +1668,7 @@ ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4, "IMA Duck DK4 ADPCM"); ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "IMA Electronic Arts EACS ADPCM"); ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "IMA Electronic Arts SEAD ADPCM"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_ISS, adpcm_ima_iss, "IMA Funcom ISS ADPCM"); ADPCM_CODEC (CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt, "IMA QuickTime ADPCM"); ADPCM_DECODER(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "IMA Loki SDL MJPEG ADPCM"); ADPCM_CODEC (CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav, "IMA Wav ADPCM"); diff -r ff10b38304d2 -r 2a2318411d9d allcodecs.c --- a/allcodecs.c Sat Jan 17 20:06:08 2009 +0000 +++ b/allcodecs.c Sat Jan 17 20:08:43 2009 +0000 @@ -264,6 +264,7 @@ REGISTER_DECODER (ADPCM_IMA_DK4, adpcm_ima_dk4); REGISTER_DECODER (ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs); REGISTER_DECODER (ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead); + REGISTER_DECODER (ADPCM_IMA_ISS, adpcm_ima_iss); REGISTER_ENCDEC (ADPCM_IMA_QT, adpcm_ima_qt); REGISTER_DECODER (ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg); REGISTER_ENCDEC (ADPCM_IMA_WAV, adpcm_ima_wav); diff -r ff10b38304d2 -r 2a2318411d9d avcodec.h --- a/avcodec.h Sat Jan 17 20:06:08 2009 +0000 +++ b/avcodec.h Sat Jan 17 20:08:43 2009 +0000 @@ -30,7 +30,7 @@ #include "libavutil/avutil.h" #define LIBAVCODEC_VERSION_MAJOR 52 -#define LIBAVCODEC_VERSION_MINOR 10 +#define LIBAVCODEC_VERSION_MINOR 11 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ @@ -245,6 +245,7 @@ CODEC_ID_ADPCM_IMA_EA_EACS, CODEC_ID_ADPCM_EA_XAS, CODEC_ID_ADPCM_EA_MAXIS_XA, + CODEC_ID_ADPCM_IMA_ISS, /* AMR */ CODEC_ID_AMR_NB= 0x12000,