X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fadpcm.c;h=6abe18495cc5ff99c9b1788ec82676c9a2925ea4;hb=f9310cbb2fcfcd9e41cafb3789c3b7ae3b90dbf4;hp=a9a8f74d9bc2725eb6cd4fb2a08f13a212585a3d;hpb=8884b918984bfe8d72a43a087dd14fce1cdf2a2b;p=ffmpeg diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index a9a8f74d9bc..6abe18495cc 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -19,11 +19,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avcodec.h" -#include "bitstream.h" +#include "get_bits.h" +#include "put_bits.h" #include "bytestream.h" /** - * @file adpcm.c + * @file libavcodec/adpcm.c * ADPCM codecs. * First version by Francois Revol (revol@free.fr) * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood) @@ -85,10 +86,12 @@ static const int AdaptationTable[] = { 768, 614, 512, 409, 307, 230, 230, 230 }; +/** Divided by 4 to fit in 8-bit integers */ static const uint8_t AdaptCoeff1[] = { 64, 128, 0, 48, 60, 115, 98 }; +/** Divided by 4 to fit in 8-bit integers */ static const int8_t AdaptCoeff2[] = { 0, -64, 0, 16, 0, -52, -58 }; @@ -107,11 +110,6 @@ static const int ea_adpcm_table[] = { 3, 4, 7, 8, 10, 11, 0, -1, -3, -4 }; -static const int ct_adpcm_table[8] = { - 0x00E6, 0x00E6, 0x00E6, 0x00E6, - 0x0133, 0x0199, 0x0200, 0x0266 -}; - // padded to zero where table size is less then 16 static const int swf_index_tables[4][16] = { /*2*/ { -1, 2 }, @@ -153,9 +151,11 @@ typedef struct ADPCMContext { /* XXX: implement encoding */ -#ifdef CONFIG_ENCODERS -static int adpcm_encode_init(AVCodecContext *avctx) +#if CONFIG_ENCODERS +static av_cold int adpcm_encode_init(AVCodecContext *avctx) { + uint8_t *extradata; + int i; if (avctx->channels > 2) return -1; /* only stereo or mono =) */ @@ -179,6 +179,16 @@ static int adpcm_encode_init(AVCodecContext *avctx) avctx->frame_size = (BLKSIZE - 7 * avctx->channels) * 2 / avctx->channels + 2; /* each 16 bits sample gives one nibble */ /* and we have 7 bytes per channel overhead */ avctx->block_align = BLKSIZE; + avctx->extradata_size = 32; + extradata = avctx->extradata = av_malloc(avctx->extradata_size); + if (!extradata) + return AVERROR(ENOMEM); + bytestream_put_le16(&extradata, avctx->frame_size); + bytestream_put_le16(&extradata, 7); /* wNumCoef */ + for (i = 0; i < 7; i++) { + bytestream_put_le16(&extradata, AdaptCoeff1[i] * 4); + bytestream_put_le16(&extradata, AdaptCoeff2[i] * 4); + } break; case CODEC_ID_ADPCM_YAMAHA: avctx->frame_size = BLKSIZE * avctx->channels; @@ -195,7 +205,6 @@ static int adpcm_encode_init(AVCodecContext *avctx) break; default: return -1; - break; } avctx->coded_frame= avcodec_alloc_frame(); @@ -204,7 +213,7 @@ static int adpcm_encode_init(AVCodecContext *avctx) return 0; } -static int adpcm_encode_close(AVCodecContext *avctx) +static av_cold int adpcm_encode_close(AVCodecContext *avctx) { av_freep(&avctx->coded_frame); @@ -563,7 +572,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, //Init the encoder state for(i=0; ichannels; i++){ c->status[i].step_index = av_clip(c->status[i].step_index, 0, 63); // clip step so it fits 6 bits - put_bits(&pb, 16, samples[i] & 0xFFFF); + put_sbits(&pb, 16, samples[i]); put_bits(&pb, 6, c->status[i].step_index); c->status[i].prev_sample = (signed short)samples[i]; } @@ -603,16 +612,16 @@ static int adpcm_encode_frame(AVCodecContext *avctx, bytestream_put_le16(&dst, c->status[i].idelta); } + for(i=0; ichannels; i++){ + c->status[i].sample2= *samples++; + } for(i=0; ichannels; i++){ c->status[i].sample1= *samples++; bytestream_put_le16(&dst, c->status[i].sample1); } - for(i=0; ichannels; i++){ - c->status[i].sample2= *samples++; - + for(i=0; ichannels; i++) bytestream_put_le16(&dst, c->status[i].sample2); - } if(avctx->trellis > 0) { int n = avctx->block_align - 7*avctx->channels; @@ -652,15 +661,12 @@ static int adpcm_encode_frame(AVCodecContext *avctx, *dst++ = buf[0][i] | (buf[1][i] << 4); } } else - for (; n>0; n--) { - for(i = 0; i < avctx->channels; i++) { + for (n *= avctx->channels; n>0; n--) { int nibble; - nibble = adpcm_yamaha_compress_sample(&c->status[i], samples[i]); - nibble |= adpcm_yamaha_compress_sample(&c->status[i], samples[i+avctx->channels]) << 4; + nibble = adpcm_yamaha_compress_sample(&c->status[ 0], *samples++); + nibble |= adpcm_yamaha_compress_sample(&c->status[st], *samples++) << 4; *dst++ = nibble; } - samples += 2 * avctx->channels; - } break; default: return -1; @@ -698,6 +704,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) default: break; } + avctx->sample_fmt = SAMPLE_FMT_S16; return 0; } @@ -758,7 +765,7 @@ static inline short adpcm_ct_expand_nibble(ADPCMChannelStatus *c, char nibble) c->predictor = ((c->predictor * 254) >> 8) + (sign ? -diff : diff); c->predictor = av_clip_int16(c->predictor); /* calculate new step and clamp it to range 511..32767 */ - new_step = (ct_adpcm_table[nibble & 7] * c->step) >> 8; + new_step = (AdaptationTable[nibble & 7] * c->step) >> 8; c->step = av_clip(new_step, 511, 32767); return (short)c->predictor; @@ -881,8 +888,10 @@ static void xa_decode(short *out, const unsigned char *in, static int adpcm_decode_frame(AVCodecContext *avctx, void *data, int *data_size, - const uint8_t *buf, int buf_size) + AVPacket *avpkt) { + const uint8_t *buf = avpkt->data; + int buf_size = avpkt->size; ADPCMContext *c = avctx->priv_data; ADPCMChannelStatus *cs; int n, m, channel, i; @@ -972,8 +981,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, for(i=0; ichannels; i++){ cs = &(c->status[i]); - cs->predictor = *samples++ = (int16_t)(src[0] + (src[1]<<8)); - src+=2; + cs->predictor = *samples++ = (int16_t)bytestream_get_le16(&src); cs->step_index = *src++; if (cs->step_index > 88){ @@ -996,13 +1004,13 @@ static int adpcm_decode_frame(AVCodecContext *avctx, break; case CODEC_ID_ADPCM_4XM: cs = &(c->status[0]); - c->status[0].predictor= (int16_t)(src[0] + (src[1]<<8)); src+=2; + c->status[0].predictor= (int16_t)bytestream_get_le16(&src); if(st){ - c->status[1].predictor= (int16_t)(src[0] + (src[1]<<8)); src+=2; + c->status[1].predictor= (int16_t)bytestream_get_le16(&src); } - c->status[0].step_index= (int16_t)(src[0] + (src[1]<<8)); src+=2; + c->status[0].step_index= (int16_t)bytestream_get_le16(&src); if(st){ - c->status[1].step_index= (int16_t)(src[0] + (src[1]<<8)); src+=2; + c->status[1].step_index= (int16_t)bytestream_get_le16(&src); } if (cs->step_index < 0) cs->step_index = 0; if (cs->step_index > 88) cs->step_index = 88; @@ -1026,34 +1034,28 @@ static int adpcm_decode_frame(AVCodecContext *avctx, n = buf_size - 7 * avctx->channels; if (n < 0) return -1; - block_predictor[0] = av_clip(*src++, 0, 7); + block_predictor[0] = av_clip(*src++, 0, 6); block_predictor[1] = 0; if (st) - block_predictor[1] = av_clip(*src++, 0, 7); - c->status[0].idelta = (int16_t)((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - src+=2; + block_predictor[1] = av_clip(*src++, 0, 6); + c->status[0].idelta = (int16_t)bytestream_get_le16(&src); if (st){ - c->status[1].idelta = (int16_t)((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - src+=2; + c->status[1].idelta = (int16_t)bytestream_get_le16(&src); } c->status[0].coeff1 = AdaptCoeff1[block_predictor[0]]; c->status[0].coeff2 = AdaptCoeff2[block_predictor[0]]; c->status[1].coeff1 = AdaptCoeff1[block_predictor[1]]; c->status[1].coeff2 = AdaptCoeff2[block_predictor[1]]; - c->status[0].sample1 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - src+=2; - if (st) c->status[1].sample1 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - if (st) src+=2; - c->status[0].sample2 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - src+=2; - if (st) c->status[1].sample2 = ((*src & 0xFF) | ((src[1] << 8) & 0xFF00)); - if (st) src+=2; + c->status[0].sample1 = bytestream_get_le16(&src); + if (st) c->status[1].sample1 = bytestream_get_le16(&src); + c->status[0].sample2 = bytestream_get_le16(&src); + if (st) c->status[1].sample2 = bytestream_get_le16(&src); - *samples++ = c->status[0].sample1; - if (st) *samples++ = c->status[1].sample1; *samples++ = c->status[0].sample2; if (st) *samples++ = c->status[1].sample2; + *samples++ = c->status[0].sample1; + if (st) *samples++ = c->status[1].sample1; for(;n>0;n--) { *samples++ = adpcm_ms_expand_nibble(&c->status[0 ], src[0] >> 4 ); *samples++ = adpcm_ms_expand_nibble(&c->status[st], src[0] & 0x0F); @@ -1064,14 +1066,14 @@ static int adpcm_decode_frame(AVCodecContext *avctx, if (avctx->block_align != 0 && buf_size > avctx->block_align) buf_size = avctx->block_align; - c->status[0].predictor = (int16_t)(src[0] | (src[1] << 8)); - c->status[0].step_index = src[2]; - src += 4; + c->status[0].predictor = (int16_t)bytestream_get_le16(&src); + c->status[0].step_index = *src++; + src++; *samples++ = c->status[0].predictor; if (st) { - c->status[1].predictor = (int16_t)(src[0] | (src[1] << 8)); - c->status[1].step_index = src[2]; - src += 4; + c->status[1].predictor = (int16_t)bytestream_get_le16(&src); + c->status[1].step_index = *src++; + src++; *samples++ = c->status[1].predictor; } while (src < buf + buf_size) { @@ -1099,8 +1101,8 @@ static int adpcm_decode_frame(AVCodecContext *avctx, if(buf_size + 16 > (samples_end - samples)*3/8) return -1; - c->status[0].predictor = (int16_t)(src[10] | (src[11] << 8)); - c->status[1].predictor = (int16_t)(src[12] | (src[13] << 8)); + c->status[0].predictor = (int16_t)AV_RL16(src + 10); + c->status[1].predictor = (int16_t)AV_RL16(src + 12); c->status[0].step_index = src[14]; c->status[1].step_index = src[15]; /* sign extend the predictors */ @@ -1137,6 +1139,33 @@ static int adpcm_decode_frame(AVCodecContext *avctx, *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) { @@ -1190,20 +1219,16 @@ static int adpcm_decode_frame(AVCodecContext *avctx, } break; case CODEC_ID_ADPCM_EA: - samples_in_chunk = AV_RL32(src); - if (samples_in_chunk >= ((buf_size - 12) * 2)) { + if (buf_size < 4 || AV_RL32(src) >= ((buf_size - 12) * 2)) { src += buf_size; break; } + samples_in_chunk = AV_RL32(src); src += 4; - current_left_sample = (int16_t)AV_RL16(src); - src += 2; - previous_left_sample = (int16_t)AV_RL16(src); - src += 2; - current_right_sample = (int16_t)AV_RL16(src); - src += 2; - previous_right_sample = (int16_t)AV_RL16(src); - src += 2; + current_left_sample = (int16_t)bytestream_get_le16(&src); + previous_left_sample = (int16_t)bytestream_get_le16(&src); + current_right_sample = (int16_t)bytestream_get_le16(&src); + previous_right_sample = (int16_t)bytestream_get_le16(&src); for (count1 = 0; count1 < samples_in_chunk/28;count1++) { coeff1l = ea_adpcm_table[ *src >> 4 ]; @@ -1236,6 +1261,10 @@ static int adpcm_decode_frame(AVCodecContext *avctx, *samples++ = (unsigned short)current_right_sample; } } + + if (src - buf == buf_size - 2) + src += 2; // Skip terminating 0x0000 + break; case CODEC_ID_ADPCM_EA_MAXIS_XA: for(channel = 0; channel < avctx->channels; channel++) { @@ -1273,6 +1302,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, unsigned int channel; uint16_t *samplesC; const uint8_t *srcC; + const uint8_t *src_end = buf + buf_size; samples_in_chunk = (big_endian ? bytestream_get_be32(&src) : bytestream_get_le32(&src)) / 28; @@ -1283,9 +1313,12 @@ static int adpcm_decode_frame(AVCodecContext *avctx, } for (channel=0; channelchannels; channel++) { - srcC = src + (big_endian ? bytestream_get_be32(&src) - : bytestream_get_le32(&src)) - + (avctx->channels-channel-1) * 4; + int32_t offset = (big_endian ? bytestream_get_be32(&src) + : bytestream_get_le32(&src)) + + (avctx->channels-channel-1) * 4; + + if ((offset < 0) || (offset >= src_end - src - 4)) break; + srcC = src + offset; samplesC = samples + channel; if (avctx->codec->id == CODEC_ID_ADPCM_EA_R1) { @@ -1299,6 +1332,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, for (count1=0; count1 src_end - 30*2) break; current_sample = (int16_t)bytestream_get_be16(&srcC); previous_sample = (int16_t)bytestream_get_be16(&srcC); @@ -1311,6 +1345,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, coeff2 = ea_adpcm_table[(*srcC>>4) + 4]; shift = (*srcC++ & 0x0F) + 8; + if (srcC > src_end - 14) break; for (count2=0; count2<28; count2++) { if (count2 & 1) next_sample = (int32_t)((*srcC++ & 0x0F) << 28) >> shift; @@ -1599,7 +1634,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, -#ifdef CONFIG_ENCODERS +#if CONFIG_ENCODERS #define ADPCM_ENCODER(id,name,long_name_) \ AVCodec name ## _encoder = { \ #name, \ @@ -1610,13 +1645,14 @@ AVCodec name ## _encoder = { \ adpcm_encode_frame, \ adpcm_encode_close, \ NULL, \ + .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, \ .long_name = NULL_IF_CONFIG_SMALL(long_name_), \ }; #else #define ADPCM_ENCODER(id,name,long_name_) #endif -#ifdef CONFIG_DECODERS +#if CONFIG_DECODERS #define ADPCM_DECODER(id,name,long_name_) \ AVCodec name ## _decoder = { \ #name, \ @@ -1637,28 +1673,29 @@ AVCodec name ## _decoder = { \ ADPCM_ENCODER(id,name,long_name_) ADPCM_DECODER(id,name,long_name_) /* Note: Do not forget to add new entries to the Makefile as well. */ -ADPCM_DECODER(CODEC_ID_ADPCM_4XM, adpcm_4xm, "4X Movie ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_CT, adpcm_ct, "Creative Technology ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA, adpcm_ea, "Electronic Arts ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "Electronic Arts Maxis CDROM XA ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA_R1, adpcm_ea_r1, "Electronic Arts R1 ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA_R2, adpcm_ea_r2, "Electronic Arts R2 ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA_R3, adpcm_ea_r3, "Electronic Arts R3 ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_EA_XAS, adpcm_ea_xas, "Electronic Arts XAS ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv, "IMA AMV ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3, "IMA Duck DK3 ADPCM"); -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_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"); -ADPCM_DECODER(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws, "IMA Westwood ADPCM"); -ADPCM_CODEC (CODEC_ID_ADPCM_MS, adpcm_ms, "Microsoft ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_2, adpcm_sbpro_2, "Sound Blaster Pro 2-bit ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_3, adpcm_sbpro_3, "Sound Blaster Pro 2.6-bit ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_4, adpcm_sbpro_4, "Sound Blaster Pro 4-bit ADPCM"); -ADPCM_CODEC (CODEC_ID_ADPCM_SWF, adpcm_swf, "Shockwave Flash ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_THP, adpcm_thp, "Nintendo Gamecube THP ADPCM"); -ADPCM_DECODER(CODEC_ID_ADPCM_XA, adpcm_xa, "CDROM XA ADPCM"); -ADPCM_CODEC (CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha, "Yamaha ADPCM"); +ADPCM_DECODER(CODEC_ID_ADPCM_4XM, adpcm_4xm, "ADPCM 4X Movie"); +ADPCM_DECODER(CODEC_ID_ADPCM_CT, adpcm_ct, "ADPCM Creative Technology"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA, adpcm_ea, "ADPCM Electronic Arts"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA_R1, adpcm_ea_r1, "ADPCM Electronic Arts R1"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA_R2, adpcm_ea_r2, "ADPCM Electronic Arts R2"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA_R3, adpcm_ea_r3, "ADPCM Electronic Arts R3"); +ADPCM_DECODER(CODEC_ID_ADPCM_EA_XAS, adpcm_ea_xas, "ADPCM Electronic Arts XAS"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv, "ADPCM IMA AMV"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3, "ADPCM IMA Duck DK3"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4, "ADPCM IMA Duck DK4"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_ISS, adpcm_ima_iss, "ADPCM IMA Funcom ISS"); +ADPCM_CODEC (CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt, "ADPCM IMA QuickTime"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG"); +ADPCM_CODEC (CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav, "ADPCM IMA WAV"); +ADPCM_DECODER(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws, "ADPCM IMA Westwood"); +ADPCM_CODEC (CODEC_ID_ADPCM_MS, adpcm_ms, "ADPCM Microsoft"); +ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_2, adpcm_sbpro_2, "ADPCM Sound Blaster Pro 2-bit"); +ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_3, adpcm_sbpro_3, "ADPCM Sound Blaster Pro 2.6-bit"); +ADPCM_DECODER(CODEC_ID_ADPCM_SBPRO_4, adpcm_sbpro_4, "ADPCM Sound Blaster Pro 4-bit"); +ADPCM_CODEC (CODEC_ID_ADPCM_SWF, adpcm_swf, "ADPCM Shockwave Flash"); +ADPCM_DECODER(CODEC_ID_ADPCM_THP, adpcm_thp, "ADPCM Nintendo Gamecube THP"); +ADPCM_DECODER(CODEC_ID_ADPCM_XA, adpcm_xa, "ADPCM CDROM XA"); +ADPCM_CODEC (CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha, "ADPCM Yamaha");