| @@ -14,6 +14,7 @@ · 13 unmodified lines |
| 14 | * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl) | 14 | * THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl) |
| 15 | * Argonaut Games ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com) | 15 | * Argonaut Games ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com) |
| 16 | * Simon & Schuster Interactive ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com) | 16 | * Simon & Schuster Interactive ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com) |
| | 17 | * Ubisoft ADPCM decoder by Zane van Iperen (zane@zanevaniperen.com) |
| 17 | * | 18 | * |
| 18 | * This file is part of FFmpeg. | 19 | * This file is part of FFmpeg. |
| 19 | * | 20 | * |
| @@ -150,6 +151,14 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) · 130 unmodified lines |
| 150 | c->status[1].predictor = av_clip_intp2(AV_RL32(avctx->extradata + 4), 18); | 151 | c->status[1].predictor = av_clip_intp2(AV_RL32(avctx->extradata + 4), 18); |
| 151 | } | 152 | } |
| 152 | break; | 153 | break; |
| | 154 | case AV_CODEC_ID_ADPCM_IMA_APM: |
| | 155 | if (avctx->extradata && avctx->extradata_size >= 16) { |
| | 156 | c->status[0].predictor = AV_RL32(avctx->extradata + 0); |
| | 157 | c->status[0].step_index = AV_RL32(avctx->extradata + 4); |
| | 158 | c->status[1].predictor = AV_RL32(avctx->extradata + 8); |
| | 159 | c->status[1].step_index = AV_RL32(avctx->extradata + 12); |
| | 160 | } |
| | 161 | break; |
| 153 | case AV_CODEC_ID_ADPCM_IMA_WS: | 162 | case AV_CODEC_ID_ADPCM_IMA_WS: |
| 154 | if (avctx->extradata && avctx->extradata_size >= 2) | 163 | if (avctx->extradata && avctx->extradata_size >= 2) |
| 155 | c->vqa_version = AV_RL16(avctx->extradata); | 164 | c->vqa_version = AV_RL16(avctx->extradata); |
| @@ -665,6 +674,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, · 509 unmodified lines |
| 665 | case AV_CODEC_ID_ADPCM_YAMAHA: | 674 | case AV_CODEC_ID_ADPCM_YAMAHA: |
| 666 | case AV_CODEC_ID_ADPCM_AICA: | 675 | case AV_CODEC_ID_ADPCM_AICA: |
| 667 | case AV_CODEC_ID_ADPCM_IMA_SSI: | 676 | case AV_CODEC_ID_ADPCM_IMA_SSI: |
| | 677 | case AV_CODEC_ID_ADPCM_IMA_APM: |
| 668 | nb_samples = buf_size * 2 / ch; | 678 | nb_samples = buf_size * 2 / ch; |
| 669 | break; | 679 | break; |
| 670 | } | 680 | } |
| @@ -1227,6 +1237,16 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, · 556 unmodified lines |
| 1227 | *samples++ = adpcm_ima_qt_expand_nibble(&c->status[st], v & 0x0F, 3); | 1237 | *samples++ = adpcm_ima_qt_expand_nibble(&c->status[st], v & 0x0F, 3); |
| 1228 | } | 1238 | } |
| 1229 | break; | 1239 | break; |
| | 1240 | case AV_CODEC_ID_ADPCM_IMA_APM: |
| | 1241 | for (n = nb_samples / 2; n > 0; n--) { |
| | 1242 | for (channel = 0; channel < avctx->channels; channel++) { |
| | 1243 | int v = bytestream2_get_byteu(&gb); |
| | 1244 | *samples++ = adpcm_ima_qt_expand_nibble(&c->status[channel], v >> 4 , 3); |
| | 1245 | samples[st] = adpcm_ima_qt_expand_nibble(&c->status[channel], v & 0x0F, 3); |
| | 1246 | } |
| | 1247 | samples += avctx->channels; |
| | 1248 | } |
| | 1249 | break; |
| 1230 | case AV_CODEC_ID_ADPCM_IMA_OKI: | 1250 | case AV_CODEC_ID_ADPCM_IMA_OKI: |
| 1231 | while (bytestream2_get_bytes_left(&gb) > 0) { | 1251 | while (bytestream2_get_bytes_left(&gb) > 0) { |
| 1232 | int v = bytestream2_get_byteu(&gb); | 1252 | int v = bytestream2_get_byteu(&gb); |
| @@ -1965,6 +1985,7 @@ ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R3, sample_fmts_s16p, adpcm_ea_r3, · 732 unmodified lines |
| 1965 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_XAS, sample_fmts_s16p, adpcm_ea_xas, "ADPCM Electronic Arts XAS"); | 1985 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_XAS, sample_fmts_s16p, adpcm_ea_xas, "ADPCM Electronic Arts XAS"); |
| 1966 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_AMV, sample_fmts_s16, adpcm_ima_amv, "ADPCM IMA AMV"); | 1986 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_AMV, sample_fmts_s16, adpcm_ima_amv, "ADPCM IMA AMV"); |
| 1967 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APC, sample_fmts_s16, adpcm_ima_apc, "ADPCM IMA CRYO APC"); | 1987 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APC, sample_fmts_s16, adpcm_ima_apc, "ADPCM IMA CRYO APC"); |
| | 1988 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APM, sample_fmts_s16, adpcm_ima_apm, "ADPCM IMA Ubisoft APM"); |
| 1968 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DAT4, sample_fmts_s16, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4"); | 1989 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DAT4, sample_fmts_s16, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4"); |
| 1969 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK3, sample_fmts_s16, adpcm_ima_dk3, "ADPCM IMA Duck DK3"); | 1990 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK3, sample_fmts_s16, adpcm_ima_dk3, "ADPCM IMA Duck DK3"); |
| 1970 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK4, sample_fmts_s16, adpcm_ima_dk4, "ADPCM IMA Duck DK4"); | 1991 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK4, sample_fmts_s16, adpcm_ima_dk4, "ADPCM IMA Duck DK4"); |