Mercurial > libavcodec.hg
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); |