Signed-off-by: Paul B Mahol <onemda@gmail.com>
Paul B Mahol authored on 2012/11/22 00:29:15... | ... |
@@ -749,6 +749,7 @@ following image formats are supported: |
749 | 749 |
@item ADPCM IMA Westwood @tab @tab X |
750 | 750 |
@item ADPCM ISS IMA @tab @tab X |
751 | 751 |
@tab Used in FunCom games. |
752 |
+@item ADPCM IMA Dialogic @tab @tab X |
|
752 | 753 |
@item ADPCM IMA Duck DK3 @tab @tab X |
753 | 754 |
@tab Used in some Sega Saturn console games. |
754 | 755 |
@item ADPCM IMA Duck DK4 @tab @tab X |
... | ... |
@@ -585,6 +585,7 @@ OBJS-$(CONFIG_ADPCM_IMA_DK4_DECODER) += adpcm.o adpcm_data.o |
585 | 585 |
OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER) += adpcm.o adpcm_data.o |
586 | 586 |
OBJS-$(CONFIG_ADPCM_IMA_EA_SEAD_DECODER) += adpcm.o adpcm_data.o |
587 | 587 |
OBJS-$(CONFIG_ADPCM_IMA_ISS_DECODER) += adpcm.o adpcm_data.o |
588 |
+OBJS-$(CONFIG_ADPCM_IMA_OKI_DECODER) += adpcm.o adpcm_data.o |
|
588 | 589 |
OBJS-$(CONFIG_ADPCM_IMA_QT_DECODER) += adpcm.o adpcm_data.o |
589 | 590 |
OBJS-$(CONFIG_ADPCM_IMA_QT_ENCODER) += adpcmenc.o adpcm_data.o |
590 | 591 |
OBJS-$(CONFIG_ADPCM_IMA_SMJPEG_DECODER) += adpcm.o adpcm_data.o |
... | ... |
@@ -229,6 +229,27 @@ static inline short adpcm_ms_expand_nibble(ADPCMChannelStatus *c, int nibble) |
229 | 229 |
return c->sample1; |
230 | 230 |
} |
231 | 231 |
|
232 |
+static inline short adpcm_ima_oki_expand_nibble(ADPCMChannelStatus *c, int nibble) |
|
233 |
+{ |
|
234 |
+ int step_index, predictor, sign, delta, diff, step; |
|
235 |
+ |
|
236 |
+ step = ff_adpcm_oki_step_table[c->step_index]; |
|
237 |
+ step_index = c->step_index + ff_adpcm_index_table[(unsigned)nibble]; |
|
238 |
+ step_index = av_clip(step_index, 0, 48); |
|
239 |
+ |
|
240 |
+ sign = nibble & 8; |
|
241 |
+ delta = nibble & 7; |
|
242 |
+ diff = ((2 * delta + 1) * step) >> 3; |
|
243 |
+ predictor = c->predictor; |
|
244 |
+ if (sign) predictor -= diff; |
|
245 |
+ else predictor += diff; |
|
246 |
+ |
|
247 |
+ c->predictor = av_clip(predictor, -2048, 2047); |
|
248 |
+ c->step_index = step_index; |
|
249 |
+ |
|
250 |
+ return c->predictor << 4; |
|
251 |
+} |
|
252 |
+ |
|
232 | 253 |
static inline short adpcm_ct_expand_nibble(ADPCMChannelStatus *c, char nibble) |
233 | 254 |
{ |
234 | 255 |
int sign, delta, diff; |
... | ... |
@@ -460,6 +481,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, |
460 | 460 |
case AV_CODEC_ID_ADPCM_CT: |
461 | 461 |
case AV_CODEC_ID_ADPCM_IMA_APC: |
462 | 462 |
case AV_CODEC_ID_ADPCM_IMA_EA_SEAD: |
463 |
+ case AV_CODEC_ID_ADPCM_IMA_OKI: |
|
463 | 464 |
case AV_CODEC_ID_ADPCM_IMA_WS: |
464 | 465 |
case AV_CODEC_ID_ADPCM_YAMAHA: |
465 | 466 |
nb_samples = buf_size * 2 / ch; |
... | ... |
@@ -877,6 +899,13 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, |
877 | 877 |
*samples++ = adpcm_ima_expand_nibble(&c->status[st], v & 0x0F, 3); |
878 | 878 |
} |
879 | 879 |
break; |
880 |
+ case AV_CODEC_ID_ADPCM_IMA_OKI: |
|
881 |
+ while (bytestream2_get_bytes_left(&gb) > 0) { |
|
882 |
+ int v = bytestream2_get_byteu(&gb); |
|
883 |
+ *samples++ = adpcm_ima_oki_expand_nibble(&c->status[0], v >> 4 ); |
|
884 |
+ *samples++ = adpcm_ima_oki_expand_nibble(&c->status[st], v & 0x0F); |
|
885 |
+ } |
|
886 |
+ break; |
|
880 | 887 |
case AV_CODEC_ID_ADPCM_IMA_WS: |
881 | 888 |
if (c->vqa_version == 3) { |
882 | 889 |
for (channel = 0; channel < avctx->channels; channel++) { |
... | ... |
@@ -1371,6 +1400,7 @@ ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK4, sample_fmts_s16, adpcm_ima_dk4, |
1371 | 1371 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_EA_EACS, sample_fmts_s16, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS"); |
1372 | 1372 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_EA_SEAD, sample_fmts_s16, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD"); |
1373 | 1373 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_ISS, sample_fmts_s16, adpcm_ima_iss, "ADPCM IMA Funcom ISS"); |
1374 |
+ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_OKI, sample_fmts_s16, adpcm_ima_oki, "ADPCM IMA Dialogic OKI"); |
|
1374 | 1375 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_QT, sample_fmts_s16p, adpcm_ima_qt, "ADPCM IMA QuickTime"); |
1375 | 1376 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_SMJPEG, sample_fmts_s16, adpcm_ima_smjpeg, "ADPCM IMA Loki SDL MJPEG"); |
1376 | 1377 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_WAV, sample_fmts_s16p, adpcm_ima_wav, "ADPCM IMA WAV"); |
... | ... |
@@ -49,6 +49,14 @@ const int16_t ff_adpcm_step_table[89] = { |
49 | 49 |
15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 |
50 | 50 |
}; |
51 | 51 |
|
52 |
+const int16_t ff_adpcm_oki_step_table[49] = { |
|
53 |
+ 16, 17, 19, 21, 23, 25, 28, 31, 34, 37, |
|
54 |
+ 41, 45, 50, 55, 60, 66, 73, 80, 88, 97, |
|
55 |
+ 107, 118, 130, 143, 157, 173, 190, 209, 230, 253, |
|
56 |
+ 279, 307, 337, 371, 408, 449, 494, 544, 598, 658, |
|
57 |
+ 724, 796, 876, 963, 1060, 1166, 1282, 1411, 1552 |
|
58 |
+}; |
|
59 |
+ |
|
52 | 60 |
/* These are for MS-ADPCM */ |
53 | 61 |
/* ff_adpcm_AdaptationTable[], ff_adpcm_AdaptCoeff1[], and |
54 | 62 |
ff_adpcm_AdaptCoeff2[] are from libsndfile */ |
... | ... |
@@ -30,6 +30,7 @@ |
30 | 30 |
|
31 | 31 |
extern const int8_t ff_adpcm_index_table[16]; |
32 | 32 |
extern const int16_t ff_adpcm_step_table[89]; |
33 |
+extern const int16_t ff_adpcm_oki_step_table[49]; |
|
33 | 34 |
extern const int16_t ff_adpcm_AdaptationTable[]; |
34 | 35 |
extern const uint8_t ff_adpcm_AdaptCoeff1[]; |
35 | 36 |
extern const int8_t ff_adpcm_AdaptCoeff2[]; |
... | ... |
@@ -404,6 +404,7 @@ void avcodec_register_all(void) |
404 | 404 |
REGISTER_DECODER (ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs); |
405 | 405 |
REGISTER_DECODER (ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead); |
406 | 406 |
REGISTER_DECODER (ADPCM_IMA_ISS, adpcm_ima_iss); |
407 |
+ REGISTER_DECODER (ADPCM_IMA_OKI, adpcm_ima_oki); |
|
407 | 408 |
REGISTER_ENCDEC (ADPCM_IMA_QT, adpcm_ima_qt); |
408 | 409 |
REGISTER_DECODER (ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg); |
409 | 410 |
REGISTER_ENCDEC (ADPCM_IMA_WAV, adpcm_ima_wav); |
... | ... |
@@ -353,6 +353,7 @@ enum AVCodecID { |
353 | 353 |
AV_CODEC_ID_ADPCM_IMA_APC, |
354 | 354 |
AV_CODEC_ID_VIMA = MKBETAG('V','I','M','A'), |
355 | 355 |
AV_CODEC_ID_ADPCM_AFC = MKBETAG('A','F','C',' '), |
356 |
+ AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '), |
|
356 | 357 |
|
357 | 358 |
/* AMR */ |
358 | 359 |
AV_CODEC_ID_AMR_NB = 0x12000, |
... | ... |
@@ -1763,6 +1763,13 @@ static const AVCodecDescriptor codec_descriptors[] = { |
1763 | 1763 |
.long_name = NULL_IF_CONFIG_SMALL("ADPCM Nintendo Gamecube AFC"), |
1764 | 1764 |
.props = AV_CODEC_PROP_LOSSY, |
1765 | 1765 |
}, |
1766 |
+ { |
|
1767 |
+ .id = AV_CODEC_ID_ADPCM_IMA_OKI, |
|
1768 |
+ .type = AVMEDIA_TYPE_AUDIO, |
|
1769 |
+ .name = "adpcm_ima_oki", |
|
1770 |
+ .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Dialogic OKI"), |
|
1771 |
+ .props = AV_CODEC_PROP_LOSSY, |
|
1772 |
+ }, |
|
1766 | 1773 |
|
1767 | 1774 |
/* AMR */ |
1768 | 1775 |
{ |
... | ... |
@@ -2300,6 +2300,7 @@ int av_get_exact_bits_per_sample(enum AVCodecID codec_id) |
2300 | 2300 |
case AV_CODEC_ID_ADPCM_CT: |
2301 | 2301 |
case AV_CODEC_ID_ADPCM_IMA_APC: |
2302 | 2302 |
case AV_CODEC_ID_ADPCM_IMA_EA_SEAD: |
2303 |
+ case AV_CODEC_ID_ADPCM_IMA_OKI: |
|
2303 | 2304 |
case AV_CODEC_ID_ADPCM_IMA_WS: |
2304 | 2305 |
case AV_CODEC_ID_ADPCM_G722: |
2305 | 2306 |
case AV_CODEC_ID_ADPCM_YAMAHA: |
... | ... |
@@ -29,7 +29,7 @@ |
29 | 29 |
#include "libavutil/avutil.h" |
30 | 30 |
|
31 | 31 |
#define LIBAVCODEC_VERSION_MAJOR 54 |
32 |
-#define LIBAVCODEC_VERSION_MINOR 76 |
|
32 |
+#define LIBAVCODEC_VERSION_MINOR 77 |
|
33 | 33 |
#define LIBAVCODEC_VERSION_MICRO 100 |
34 | 34 |
|
35 | 35 |
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |
... | ... |
@@ -338,8 +338,10 @@ const AVCodecTag ff_codec_wav_tags[] = { |
338 | 338 |
{ AV_CODEC_ID_PCM_ALAW, 0x0006 }, |
339 | 339 |
{ AV_CODEC_ID_PCM_MULAW, 0x0007 }, |
340 | 340 |
{ AV_CODEC_ID_WMAVOICE, 0x000A }, |
341 |
+ { AV_CODEC_ID_ADPCM_IMA_OKI, 0x0010 }, |
|
341 | 342 |
{ AV_CODEC_ID_ADPCM_IMA_WAV, 0x0011 }, |
342 | 343 |
{ AV_CODEC_ID_PCM_ZORK, 0x0011 }, /* must come after adpcm_ima_wav in this list */ |
344 |
+ { AV_CODEC_ID_ADPCM_IMA_OKI, 0x0017 }, |
|
343 | 345 |
{ AV_CODEC_ID_ADPCM_YAMAHA, 0x0020 }, |
344 | 346 |
{ AV_CODEC_ID_TRUESPEECH, 0x0022 }, |
345 | 347 |
{ AV_CODEC_ID_GSM_MS, 0x0031 }, |