Signed-off-by: James Almer <jamrial@gmail.com>
James Almer authored on 2013/05/04 06:07:13... | ... |
@@ -771,6 +771,7 @@ following image formats are supported: |
771 | 771 |
@item ADPCM Microsoft @tab X @tab X |
772 | 772 |
@item ADPCM MS IMA @tab X @tab X |
773 | 773 |
@item ADPCM Nintendo Gamecube AFC @tab @tab X |
774 |
+@item ADPCM Nintendo Gamecube DTK @tab @tab X |
|
774 | 775 |
@item ADPCM Nintendo Gamecube THP @tab @tab X |
775 | 776 |
@item ADPCM QT IMA @tab X @tab X |
776 | 777 |
@item ADPCM SEGA CRI ADX @tab X @tab X |
... | ... |
@@ -569,6 +569,7 @@ OBJS-$(CONFIG_ADPCM_ADX_DECODER) += adxdec.o adx.o |
569 | 569 |
OBJS-$(CONFIG_ADPCM_ADX_ENCODER) += adxenc.o adx.o |
570 | 570 |
OBJS-$(CONFIG_ADPCM_AFC_DECODER) += adpcm.o adpcm_data.o |
571 | 571 |
OBJS-$(CONFIG_ADPCM_CT_DECODER) += adpcm.o adpcm_data.o |
572 |
+OBJS-$(CONFIG_ADPCM_DTK_DECODER) += adpcm.o adpcm_data.o |
|
572 | 573 |
OBJS-$(CONFIG_ADPCM_EA_DECODER) += adpcm.o adpcm_data.o |
573 | 574 |
OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER) += adpcm.o adpcm_data.o |
574 | 575 |
OBJS-$(CONFIG_ADPCM_EA_R1_DECODER) += adpcm.o adpcm_data.o |
... | ... |
@@ -95,6 +95,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) |
95 | 95 |
unsigned int max_channels = 2; |
96 | 96 |
|
97 | 97 |
switch(avctx->codec->id) { |
98 |
+ case AV_CODEC_ID_ADPCM_DTK: |
|
98 | 99 |
case AV_CODEC_ID_ADPCM_EA: |
99 | 100 |
min_channels = 2; |
100 | 101 |
break; |
... | ... |
@@ -147,6 +148,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) |
147 | 147 |
case AV_CODEC_ID_ADPCM_EA_XAS: |
148 | 148 |
case AV_CODEC_ID_ADPCM_THP: |
149 | 149 |
case AV_CODEC_ID_ADPCM_AFC: |
150 |
+ case AV_CODEC_ID_ADPCM_DTK: |
|
150 | 151 |
avctx->sample_fmt = AV_SAMPLE_FMT_S16P; |
151 | 152 |
break; |
152 | 153 |
case AV_CODEC_ID_ADPCM_IMA_WS: |
... | ... |
@@ -602,6 +604,9 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, |
602 | 602 |
case AV_CODEC_ID_ADPCM_XA: |
603 | 603 |
nb_samples = (buf_size / 128) * 224 / ch; |
604 | 604 |
break; |
605 |
+ case AV_CODEC_ID_ADPCM_DTK: |
|
606 |
+ nb_samples = buf_size / (16 * ch) * 28; |
|
607 |
+ break; |
|
605 | 608 |
} |
606 | 609 |
|
607 | 610 |
/* validate coded sample count */ |
... | ... |
@@ -1362,6 +1367,54 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, |
1362 | 1362 |
} |
1363 | 1363 |
break; |
1364 | 1364 |
} |
1365 |
+ case AV_CODEC_ID_ADPCM_DTK: |
|
1366 |
+ for (channel = 0; channel < avctx->channels; channel++) { |
|
1367 |
+ samples = samples_p[channel]; |
|
1368 |
+ |
|
1369 |
+ /* Read in every sample for this channel. */ |
|
1370 |
+ for (i = 0; i < nb_samples / 28; i++) { |
|
1371 |
+ int byte, header; |
|
1372 |
+ if (channel) |
|
1373 |
+ bytestream2_skipu(&gb, 1); |
|
1374 |
+ header = bytestream2_get_byteu(&gb); |
|
1375 |
+ bytestream2_skipu(&gb, 3 - channel); |
|
1376 |
+ |
|
1377 |
+ /* Decode 28 samples. */ |
|
1378 |
+ for (n = 0; n < 28; n++) { |
|
1379 |
+ int32_t sampledat, prev; |
|
1380 |
+ |
|
1381 |
+ switch (header >> 4) { |
|
1382 |
+ case 1: |
|
1383 |
+ prev = (c->status[channel].sample1 * 0x3c); |
|
1384 |
+ break; |
|
1385 |
+ case 2: |
|
1386 |
+ prev = (c->status[channel].sample1 * 0x73) - (c->status[channel].sample2 * 0x34); |
|
1387 |
+ break; |
|
1388 |
+ case 3: |
|
1389 |
+ prev = (c->status[channel].sample1 * 0x62) - (c->status[channel].sample2 * 0x37); |
|
1390 |
+ break; |
|
1391 |
+ default: |
|
1392 |
+ prev = 0; |
|
1393 |
+ } |
|
1394 |
+ |
|
1395 |
+ prev = av_clip((prev + 0x20) >> 6, -0x200000, 0x1fffff); |
|
1396 |
+ |
|
1397 |
+ byte = bytestream2_get_byteu(&gb); |
|
1398 |
+ if (!channel) |
|
1399 |
+ sampledat = sign_extend(byte, 4); |
|
1400 |
+ else |
|
1401 |
+ sampledat = sign_extend(byte >> 4, 4); |
|
1402 |
+ |
|
1403 |
+ sampledat = (((sampledat << 12) >> (header & 0xf)) << 6) + prev; |
|
1404 |
+ *samples++ = av_clip_int16(sampledat >> 6); |
|
1405 |
+ c->status[channel].sample2 = c->status[channel].sample1; |
|
1406 |
+ c->status[channel].sample1 = sampledat; |
|
1407 |
+ } |
|
1408 |
+ } |
|
1409 |
+ if (!channel) |
|
1410 |
+ bytestream2_seek(&gb, 0, SEEK_SET); |
|
1411 |
+ } |
|
1412 |
+ break; |
|
1365 | 1413 |
|
1366 | 1414 |
default: |
1367 | 1415 |
return -1; |
... | ... |
@@ -1403,6 +1456,7 @@ AVCodec ff_ ## name_ ## _decoder = { \ |
1403 | 1403 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_4XM, sample_fmts_s16p, adpcm_4xm, "ADPCM 4X Movie"); |
1404 | 1404 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_AFC, sample_fmts_s16p, adpcm_afc, "ADPCM Nintendo Gamecube AFC"); |
1405 | 1405 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_CT, sample_fmts_s16, adpcm_ct, "ADPCM Creative Technology"); |
1406 |
+ADPCM_DECODER(AV_CODEC_ID_ADPCM_DTK, sample_fmts_s16p, adpcm_dtk, "ADPCM Nintendo Gamecube DTK"); |
|
1406 | 1407 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA, sample_fmts_s16, adpcm_ea, "ADPCM Electronic Arts"); |
1407 | 1408 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_MAXIS_XA, sample_fmts_s16, adpcm_ea_maxis_xa, "ADPCM Electronic Arts Maxis CDROM XA"); |
1408 | 1409 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R1, sample_fmts_s16p, adpcm_ea_r1, "ADPCM Electronic Arts R1"); |
... | ... |
@@ -419,6 +419,7 @@ void avcodec_register_all(void) |
419 | 419 |
REGISTER_ENCDEC (ADPCM_ADX, adpcm_adx); |
420 | 420 |
REGISTER_DECODER(ADPCM_AFC, adpcm_afc); |
421 | 421 |
REGISTER_DECODER(ADPCM_CT, adpcm_ct); |
422 |
+ REGISTER_DECODER(ADPCM_DTK, adpcm_dtk); |
|
422 | 423 |
REGISTER_DECODER(ADPCM_EA, adpcm_ea); |
423 | 424 |
REGISTER_DECODER(ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa); |
424 | 425 |
REGISTER_DECODER(ADPCM_EA_R1, adpcm_ea_r1); |
... | ... |
@@ -362,6 +362,7 @@ enum AVCodecID { |
362 | 362 |
AV_CODEC_ID_VIMA = MKBETAG('V','I','M','A'), |
363 | 363 |
AV_CODEC_ID_ADPCM_AFC = MKBETAG('A','F','C',' '), |
364 | 364 |
AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '), |
365 |
+ AV_CODEC_ID_ADPCM_DTK = MKBETAG('D','T','K',' '), |
|
365 | 366 |
|
366 | 367 |
/* AMR */ |
367 | 368 |
AV_CODEC_ID_AMR_NB = 0x12000, |
... | ... |
@@ -1816,6 +1816,13 @@ static const AVCodecDescriptor codec_descriptors[] = { |
1816 | 1816 |
.long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Dialogic OKI"), |
1817 | 1817 |
.props = AV_CODEC_PROP_LOSSY, |
1818 | 1818 |
}, |
1819 |
+ { |
|
1820 |
+ .id = AV_CODEC_ID_ADPCM_DTK, |
|
1821 |
+ .type = AVMEDIA_TYPE_AUDIO, |
|
1822 |
+ .name = "adpcm_dtk", |
|
1823 |
+ .long_name = NULL_IF_CONFIG_SMALL("ADPCM Nintendo Gamecube DTK"), |
|
1824 |
+ .props = AV_CODEC_PROP_LOSSY, |
|
1825 |
+ }, |
|
1819 | 1826 |
|
1820 | 1827 |
/* AMR */ |
1821 | 1828 |
{ |
... | ... |
@@ -2835,6 +2835,8 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes) |
2835 | 2835 |
switch (id) { |
2836 | 2836 |
case AV_CODEC_ID_ADPCM_AFC: |
2837 | 2837 |
return frame_bytes / (9 * ch) * 16; |
2838 |
+ case AV_CODEC_ID_ADPCM_DTK: |
|
2839 |
+ return frame_bytes / (16 * ch) * 28; |
|
2838 | 2840 |
case AV_CODEC_ID_ADPCM_4XM: |
2839 | 2841 |
case AV_CODEC_ID_ADPCM_IMA_ISS: |
2840 | 2842 |
return (frame_bytes - 4 * ch) * 2 / ch; |
... | ... |
@@ -29,7 +29,7 @@ |
29 | 29 |
#include "libavutil/avutil.h" |
30 | 30 |
|
31 | 31 |
#define LIBAVCODEC_VERSION_MAJOR 55 |
32 |
-#define LIBAVCODEC_VERSION_MINOR 7 |
|
32 |
+#define LIBAVCODEC_VERSION_MINOR 8 |
|
33 | 33 |
#define LIBAVCODEC_VERSION_MICRO 100 |
34 | 34 |
|
35 | 35 |
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |