Signed-off-by: Paul B Mahol <onemda@gmail.com>
Paul B Mahol authored on 2016/04/03 19:55:17... | ... |
@@ -695,6 +695,7 @@ OBJS-$(CONFIG_ADPCM_G726_ENCODER) += g726.o |
695 | 695 |
OBJS-$(CONFIG_ADPCM_G726LE_DECODER) += g726.o |
696 | 696 |
OBJS-$(CONFIG_ADPCM_IMA_AMV_DECODER) += adpcm.o adpcm_data.o |
697 | 697 |
OBJS-$(CONFIG_ADPCM_IMA_APC_DECODER) += adpcm.o adpcm_data.o |
698 |
+OBJS-$(CONFIG_ADPCM_IMA_DAT4_DECODER) += adpcm.o adpcm_data.o |
|
698 | 699 |
OBJS-$(CONFIG_ADPCM_IMA_DK3_DECODER) += adpcm.o adpcm_data.o |
699 | 700 |
OBJS-$(CONFIG_ADPCM_IMA_DK4_DECODER) += adpcm.o adpcm_data.o |
700 | 701 |
OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER) += adpcm.o adpcm_data.o |
... | ... |
@@ -110,6 +110,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) |
110 | 110 |
case AV_CODEC_ID_ADPCM_PSX: |
111 | 111 |
max_channels = 8; |
112 | 112 |
break; |
113 |
+ case AV_CODEC_ID_ADPCM_IMA_DAT4: |
|
113 | 114 |
case AV_CODEC_ID_ADPCM_THP: |
114 | 115 |
case AV_CODEC_ID_ADPCM_THP_LE: |
115 | 116 |
max_channels = 14; |
... | ... |
@@ -144,6 +145,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) |
144 | 144 |
|
145 | 145 |
switch(avctx->codec->id) { |
146 | 146 |
case AV_CODEC_ID_ADPCM_AICA: |
147 |
+ case AV_CODEC_ID_ADPCM_IMA_DAT4: |
|
147 | 148 |
case AV_CODEC_ID_ADPCM_IMA_QT: |
148 | 149 |
case AV_CODEC_ID_ADPCM_IMA_WAV: |
149 | 150 |
case AV_CODEC_ID_ADPCM_4XM: |
... | ... |
@@ -533,6 +535,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, |
533 | 533 |
header_size = 0; |
534 | 534 |
switch (avctx->codec->id) { |
535 | 535 |
case AV_CODEC_ID_ADPCM_4XM: |
536 |
+ case AV_CODEC_ID_ADPCM_IMA_DAT4: |
|
536 | 537 |
case AV_CODEC_ID_ADPCM_IMA_ISS: header_size = 4 * ch; break; |
537 | 538 |
case AV_CODEC_ID_ADPCM_IMA_AMV: header_size = 8; break; |
538 | 539 |
case AV_CODEC_ID_ADPCM_IMA_SMJPEG: header_size = 4 * ch; break; |
... | ... |
@@ -984,6 +987,18 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, |
984 | 984 |
*samples++ = adpcm_ima_expand_nibble(&c->status[st], v2, 3); |
985 | 985 |
} |
986 | 986 |
break; |
987 |
+ case AV_CODEC_ID_ADPCM_IMA_DAT4: |
|
988 |
+ for (channel = 0; channel < avctx->channels; channel++) { |
|
989 |
+ cs = &c->status[channel]; |
|
990 |
+ samples = samples_p[channel]; |
|
991 |
+ bytestream2_skip(&gb, 4); |
|
992 |
+ for (n = 0; n < nb_samples; n += 2) { |
|
993 |
+ int v = bytestream2_get_byteu(&gb); |
|
994 |
+ *samples++ = adpcm_ima_expand_nibble(cs, v >> 4 , 3); |
|
995 |
+ *samples++ = adpcm_ima_expand_nibble(cs, v & 0x0F, 3); |
|
996 |
+ } |
|
997 |
+ } |
|
998 |
+ break; |
|
987 | 999 |
case AV_CODEC_ID_ADPCM_IMA_APC: |
988 | 1000 |
while (bytestream2_get_bytes_left(&gb) > 0) { |
989 | 1001 |
int v = bytestream2_get_byteu(&gb); |
... | ... |
@@ -1670,6 +1685,7 @@ ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_R3, sample_fmts_s16p, adpcm_ea_r3, |
1670 | 1670 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_EA_XAS, sample_fmts_s16p, adpcm_ea_xas, "ADPCM Electronic Arts XAS"); |
1671 | 1671 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_AMV, sample_fmts_s16, adpcm_ima_amv, "ADPCM IMA AMV"); |
1672 | 1672 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_APC, sample_fmts_s16, adpcm_ima_apc, "ADPCM IMA CRYO APC"); |
1673 |
+ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DAT4, sample_fmts_s16, adpcm_ima_dat4, "ADPCM IMA Eurocom DAT4"); |
|
1673 | 1674 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK3, sample_fmts_s16, adpcm_ima_dk3, "ADPCM IMA Duck DK3"); |
1674 | 1675 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK4, sample_fmts_s16, adpcm_ima_dk4, "ADPCM IMA Duck DK4"); |
1675 | 1676 |
ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_EA_EACS, sample_fmts_s16, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS"); |
... | ... |
@@ -515,6 +515,7 @@ void avcodec_register_all(void) |
515 | 515 |
REGISTER_DECODER(ADPCM_G726LE, adpcm_g726le); |
516 | 516 |
REGISTER_DECODER(ADPCM_IMA_AMV, adpcm_ima_amv); |
517 | 517 |
REGISTER_DECODER(ADPCM_IMA_APC, adpcm_ima_apc); |
518 |
+ REGISTER_DECODER(ADPCM_IMA_DAT4, adpcm_ima_dat4); |
|
518 | 519 |
REGISTER_DECODER(ADPCM_IMA_DK3, adpcm_ima_dk3); |
519 | 520 |
REGISTER_DECODER(ADPCM_IMA_DK4, adpcm_ima_dk4); |
520 | 521 |
REGISTER_DECODER(ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs); |
... | ... |
@@ -2022,6 +2022,13 @@ static const AVCodecDescriptor codec_descriptors[] = { |
2022 | 2022 |
.long_name = NULL_IF_CONFIG_SMALL("ADPCM Yamaha AICA"), |
2023 | 2023 |
.props = AV_CODEC_PROP_LOSSY, |
2024 | 2024 |
}, |
2025 |
+ { |
|
2026 |
+ .id = AV_CODEC_ID_ADPCM_IMA_DAT4, |
|
2027 |
+ .type = AVMEDIA_TYPE_AUDIO, |
|
2028 |
+ .name = "adpcm_ima_dat4", |
|
2029 |
+ .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Eurocom DAT4"), |
|
2030 |
+ .props = AV_CODEC_PROP_LOSSY, |
|
2031 |
+ }, |
|
2025 | 2032 |
|
2026 | 2033 |
/* AMR */ |
2027 | 2034 |
{ |
... | ... |
@@ -3239,6 +3239,7 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, |
3239 | 3239 |
case AV_CODEC_ID_ADPCM_DTK: |
3240 | 3240 |
return frame_bytes / (16 * ch) * 28; |
3241 | 3241 |
case AV_CODEC_ID_ADPCM_4XM: |
3242 |
+ case AV_CODEC_ID_ADPCM_IMA_DAT4: |
|
3242 | 3243 |
case AV_CODEC_ID_ADPCM_IMA_ISS: |
3243 | 3244 |
return (frame_bytes - 4 * ch) * 2 / ch; |
3244 | 3245 |
case AV_CODEC_ID_ADPCM_IMA_SMJPEG: |
... | ... |
@@ -28,7 +28,7 @@ |
28 | 28 |
#include "libavutil/version.h" |
29 | 29 |
|
30 | 30 |
#define LIBAVCODEC_VERSION_MAJOR 57 |
31 |
-#define LIBAVCODEC_VERSION_MINOR 33 |
|
31 |
+#define LIBAVCODEC_VERSION_MINOR 34 |
|
32 | 32 |
#define LIBAVCODEC_VERSION_MICRO 100 |
33 | 33 |
|
34 | 34 |
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |