comparison adpcm.c @ 5854:29b36106bc9c libavcodec

EA IMA EACS decoder original patch by Peter Ross
author aurel
date Tue, 30 Oct 2007 23:20:26 +0000
parents 286738ef0a4e
children 37d9b732bd95
comparison
equal deleted inserted replaced
5853:286738ef0a4e 5854:29b36106bc9c
29 * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood) 29 * Fringe ADPCM codecs (e.g., DK3, DK4, Westwood)
30 * by Mike Melanson (melanson@pcisys.net) 30 * by Mike Melanson (melanson@pcisys.net)
31 * CD-ROM XA ADPCM codec by BERO 31 * CD-ROM XA ADPCM codec by BERO
32 * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com) 32 * EA ADPCM decoder by Robin Kay (komadori@myrealbox.com)
33 * EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org) 33 * EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org)
34 * EA IMA EACS decoder by Peter Ross (pross@xvid.org)
34 * EA IMA SEAD decoder by Peter Ross (pross@xvid.org) 35 * EA IMA SEAD decoder by Peter Ross (pross@xvid.org)
35 * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl) 36 * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl)
36 * 37 *
37 * Features and limitations: 38 * Features and limitations:
38 * 39 *
1136 src += 128; 1137 src += 128;
1137 samples += 28 * 8; 1138 samples += 28 * 8;
1138 buf_size -= 128; 1139 buf_size -= 128;
1139 } 1140 }
1140 break; 1141 break;
1142 case CODEC_ID_ADPCM_IMA_EA_EACS:
1143 samples_in_chunk = bytestream_get_le32(&src) >> (1-st);
1144
1145 if (samples_in_chunk > buf_size-4-(8<<st)) {
1146 src += buf_size - 4;
1147 break;
1148 }
1149
1150 for (i=0; i<=st; i++)
1151 c->status[i].step_index = bytestream_get_le32(&src);
1152 for (i=0; i<=st; i++)
1153 c->status[i].predictor = bytestream_get_le32(&src);
1154
1155 for (; samples_in_chunk; samples_in_chunk--, src++) {
1156 *samples++ = adpcm_ima_expand_nibble(&c->status[0], *src>>4, 3);
1157 *samples++ = adpcm_ima_expand_nibble(&c->status[st], *src&0x0F, 3);
1158 }
1159 break;
1141 case CODEC_ID_ADPCM_IMA_EA_SEAD: 1160 case CODEC_ID_ADPCM_IMA_EA_SEAD:
1142 for (; src < buf+buf_size; src++) { 1161 for (; src < buf+buf_size; src++) {
1143 *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[0] >> 4, 6); 1162 *samples++ = adpcm_ima_expand_nibble(&c->status[0], src[0] >> 4, 6);
1144 *samples++ = adpcm_ima_expand_nibble(&c->status[st],src[0]&0x0F, 6); 1163 *samples++ = adpcm_ima_expand_nibble(&c->status[st],src[0]&0x0F, 6);
1145 } 1164 }
1540 ADPCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct); 1559 ADPCM_CODEC(CODEC_ID_ADPCM_CT, adpcm_ct);
1541 ADPCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea); 1560 ADPCM_CODEC(CODEC_ID_ADPCM_EA, adpcm_ea);
1542 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv); 1561 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv);
1543 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3); 1562 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3);
1544 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4); 1563 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4);
1564 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs);
1545 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead); 1565 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead);
1546 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt); 1566 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt);
1547 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg); 1567 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg);
1548 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav); 1568 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav);
1549 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws); 1569 ADPCM_CODEC(CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws);