Unified · Split
| @@ -34,6 +34,7 @@ version <next>: · 33 unmodified lines | |||
| 34 | - ssim360 video filter | 34 | - ssim360 video filter |
| 35 | - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt] | 35 | - ffmpeg CLI new options: -enc_stats_pre[_fmt], -enc_stats_post[_fmt] |
| 36 | - hstack_vaapi, vstack_vaapi and xstack_vaapi filters | 36 | - hstack_vaapi, vstack_vaapi and xstack_vaapi filters |
| 37 | - XMD ADPCM decoder | ||
| 37 | 38 | ||
| 38 | 39 | ||
| 39 | version 5.1: | 40 | version 5.1: |
| @@ -959,6 +959,7 @@ OBJS-$(CONFIG_ADPCM_THP_DECODER) += adpcm.o adpcm_data.o · 958 unmodified lines | |||
| 959 | OBJS-$(CONFIG_ADPCM_THP_LE_DECODER) += adpcm.o adpcm_data.o | 959 | OBJS-$(CONFIG_ADPCM_THP_LE_DECODER) += adpcm.o adpcm_data.o |
| 960 | OBJS-$(CONFIG_ADPCM_VIMA_DECODER) += vima.o adpcm_data.o | 960 | OBJS-$(CONFIG_ADPCM_VIMA_DECODER) += vima.o adpcm_data.o |
| 961 | OBJS-$(CONFIG_ADPCM_XA_DECODER) += adpcm.o adpcm_data.o | 961 | OBJS-$(CONFIG_ADPCM_XA_DECODER) += adpcm.o adpcm_data.o |
| 962 | OBJS-$(CONFIG_ADPCM_XMD_DECODER) += adpcm.o adpcm_data.o | ||
| 962 | OBJS-$(CONFIG_ADPCM_YAMAHA_DECODER) += adpcm.o adpcm_data.o | 963 | OBJS-$(CONFIG_ADPCM_YAMAHA_DECODER) += adpcm.o adpcm_data.o |
| 963 | OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER) += adpcmenc.o adpcm_data.o | 964 | OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER) += adpcmenc.o adpcm_data.o |
| 964 | OBJS-$(CONFIG_ADPCM_ZORK_DECODER) += adpcm.o adpcm_data.o | 965 | OBJS-$(CONFIG_ADPCM_ZORK_DECODER) += adpcm.o adpcm_data.o |
| @@ -324,6 +324,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) · 323 unmodified lines | |||
| 324 | case AV_CODEC_ID_ADPCM_IMA_WAV: | 324 | case AV_CODEC_ID_ADPCM_IMA_WAV: |
| 325 | case AV_CODEC_ID_ADPCM_4XM: | 325 | case AV_CODEC_ID_ADPCM_4XM: |
| 326 | case AV_CODEC_ID_ADPCM_XA: | 326 | case AV_CODEC_ID_ADPCM_XA: |
| 327 | case AV_CODEC_ID_ADPCM_XMD: | ||
| 327 | case AV_CODEC_ID_ADPCM_EA_R1: | 328 | case AV_CODEC_ID_ADPCM_EA_R1: |
| 328 | case AV_CODEC_ID_ADPCM_EA_R2: | 329 | case AV_CODEC_ID_ADPCM_EA_R2: |
| 329 | case AV_CODEC_ID_ADPCM_EA_R3: | 330 | case AV_CODEC_ID_ADPCM_EA_R3: |
| @@ -1043,6 +1044,9 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, · 713 unmodified lines | |||
| 1043 | case AV_CODEC_ID_ADPCM_XA: | 1044 | case AV_CODEC_ID_ADPCM_XA: |
| 1044 | nb_samples = (buf_size / 128) * 224 / ch; | 1045 | nb_samples = (buf_size / 128) * 224 / ch; |
| 1045 | break; | 1046 | break; |
| 1047 | case AV_CODEC_ID_ADPCM_XMD: | ||
| 1048 | nb_samples = buf_size / (21 * ch) * 32; | ||
| 1049 | break; | ||
| 1046 | case AV_CODEC_ID_ADPCM_DTK: | 1050 | case AV_CODEC_ID_ADPCM_DTK: |
| 1047 | case AV_CODEC_ID_ADPCM_PSX: | 1051 | case AV_CODEC_ID_ADPCM_PSX: |
| 1048 | nb_samples = buf_size / (16 * ch) * 28; | 1052 | nb_samples = buf_size / (16 * ch) * 28; |
| @@ -1553,6 +1557,45 @@ static int adpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame, · 504 unmodified lines | |||
| 1553 | } | 1557 | } |
| 1554 | bytestream2_seek(&gb, 0, SEEK_END); | 1558 | bytestream2_seek(&gb, 0, SEEK_END); |
| 1555 | ) /* End of CASE */ | 1559 | ) /* End of CASE */ |
| 1560 | CASE(ADPCM_XMD, | ||
| 1561 | int bytes_remaining, block = 0; | ||
| 1562 | while (bytestream2_get_bytes_left(&gb) >= 21 * channels) { | ||
| 1563 | for (int channel = 0; channel < channels; channel++) { | ||
| 1564 | int16_t *out = samples_p[channel] + block * 32; | ||
| 1565 | int16_t history[2]; | ||
| 1566 | uint16_t scale; | ||
| 1567 | |||
| 1568 | history[1] = sign_extend(bytestream2_get_le16(&gb), 16); | ||
| 1569 | history[0] = sign_extend(bytestream2_get_le16(&gb), 16); | ||
| 1570 | scale = bytestream2_get_le16(&gb); | ||
| 1571 | |||
| 1572 | out[0] = history[1]; | ||
| 1573 | out[1] = history[0]; | ||
| 1574 | |||
| 1575 | for (int n = 0; n < 15; n++) { | ||
| 1576 | unsigned byte = bytestream2_get_byte(&gb); | ||
| 1577 | int32_t nibble[2]; | ||
| 1578 | |||
| 1579 | nibble[0] = sign_extend(byte & 15, 4); | ||
| 1580 | nibble[1] = sign_extend(byte >> 4, 4); | ||
| 1581 | |||
| 1582 | out[2+n*2] = (nibble[0]*(scale<<14) + (history[0]*29336) - (history[1]*13136)) >> 14; | ||
| 1583 | history[1] = history[0]; | ||
| 1584 | history[0] = out[2+n*2]; | ||
| 1585 | |||
| 1586 | out[2+n*2+1] = (nibble[1]*(scale<<14) + (history[0]*29336) - (history[1]*13136)) >> 14; | ||
| 1587 | history[1] = history[0]; | ||
| 1588 | history[0] = out[2+n*2+1]; | ||
| 1589 | } | ||
| 1590 | } | ||
| 1591 | |||
| 1592 | block++; | ||
| 1593 | } | ||
| 1594 | bytes_remaining = bytestream2_get_bytes_left(&gb); | ||
| 1595 | if (bytes_remaining > 0) { | ||
| 1596 | bytestream2_skip(&gb, bytes_remaining); | ||
| 1597 | } | ||
| 1598 | ) /* End of CASE */ | ||
| 1556 | CASE(ADPCM_XA, | 1599 | CASE(ADPCM_XA, |
| 1557 | int16_t *out0 = samples_p[0]; | 1600 | int16_t *out0 = samples_p[0]; |
| 1558 | int16_t *out1 = samples_p[1]; | 1601 | int16_t *out1 = samples_p[1]; |
| @@ -2350,5 +2393,6 @@ ADPCM_DECODER(ADPCM_SWF, sample_fmts_s16, adpcm_swf, "ADPCM Sho · 791 unmodified lines | |||
| 2350 | ADPCM_DECODER(ADPCM_THP_LE, sample_fmts_s16p, adpcm_thp_le, "ADPCM Nintendo THP (little-endian)") | 2393 | ADPCM_DECODER(ADPCM_THP_LE, sample_fmts_s16p, adpcm_thp_le, "ADPCM Nintendo THP (little-endian)") |
| 2351 | ADPCM_DECODER(ADPCM_THP, sample_fmts_s16p, adpcm_thp, "ADPCM Nintendo THP") | 2394 | ADPCM_DECODER(ADPCM_THP, sample_fmts_s16p, adpcm_thp, "ADPCM Nintendo THP") |
| 2352 | ADPCM_DECODER(ADPCM_XA, sample_fmts_s16p, adpcm_xa, "ADPCM CDROM XA") | 2395 | ADPCM_DECODER(ADPCM_XA, sample_fmts_s16p, adpcm_xa, "ADPCM CDROM XA") |
| 2396 | ADPCM_DECODER(ADPCM_XMD, sample_fmts_s16p, adpcm_xmd, "ADPCM Konami XMD") | ||
| 2353 | ADPCM_DECODER(ADPCM_YAMAHA, sample_fmts_s16, adpcm_yamaha, "ADPCM Yamaha") | 2397 | ADPCM_DECODER(ADPCM_YAMAHA, sample_fmts_s16, adpcm_yamaha, "ADPCM Yamaha") |
| 2354 | ADPCM_DECODER(ADPCM_ZORK, sample_fmts_s16, adpcm_zork, "ADPCM Zork") | 2398 | ADPCM_DECODER(ADPCM_ZORK, sample_fmts_s16, adpcm_zork, "ADPCM Zork") |
| @@ -695,6 +695,7 @@ extern const FFCodec ff_adpcm_thp_decoder; · 694 unmodified lines | |||
| 695 | extern const FFCodec ff_adpcm_thp_le_decoder; | 695 | extern const FFCodec ff_adpcm_thp_le_decoder; |
| 696 | extern const FFCodec ff_adpcm_vima_decoder; | 696 | extern const FFCodec ff_adpcm_vima_decoder; |
| 697 | extern const FFCodec ff_adpcm_xa_decoder; | 697 | extern const FFCodec ff_adpcm_xa_decoder; |
| 698 | extern const FFCodec ff_adpcm_xmd_decoder; | ||
| 698 | extern const FFCodec ff_adpcm_yamaha_encoder; | 699 | extern const FFCodec ff_adpcm_yamaha_encoder; |
| 699 | extern const FFCodec ff_adpcm_yamaha_decoder; | 700 | extern const FFCodec ff_adpcm_yamaha_decoder; |
| 700 | extern const FFCodec ff_adpcm_zork_decoder; | 701 | extern const FFCodec ff_adpcm_zork_decoder; |
| @@ -2536,6 +2536,13 @@ static const AVCodecDescriptor codec_descriptors[] = { · 2535 unmodified lines | |||
| 2536 | .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Acorn Replay"), | 2536 | .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Acorn Replay"), |
| 2537 | .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, | 2537 | .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, |
| 2538 | }, | 2538 | }, |
| 2539 | { | ||
| 2540 | .id = AV_CODEC_ID_ADPCM_XMD, | ||
| 2541 | .type = AVMEDIA_TYPE_AUDIO, | ||
| 2542 | .name = "adpcm_xmd", | ||
| 2543 | .long_name = NULL_IF_CONFIG_SMALL("ADPCM Konami XMD"), | ||
| 2544 | .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, | ||
| 2545 | }, | ||
| 2539 | 2546 | ||
| 2540 | /* AMR */ | 2547 | /* AMR */ |
| 2541 | { | 2548 | { |
| @@ -413,6 +413,7 @@ enum AVCodecID { · 412 unmodified lines | |||
| 413 | AV_CODEC_ID_ADPCM_IMA_CUNNING, | 413 | AV_CODEC_ID_ADPCM_IMA_CUNNING, |
| 414 | AV_CODEC_ID_ADPCM_IMA_MOFLEX, | 414 | AV_CODEC_ID_ADPCM_IMA_MOFLEX, |
| 415 | AV_CODEC_ID_ADPCM_IMA_ACORN, | 415 | AV_CODEC_ID_ADPCM_IMA_ACORN, |
| 416 | AV_CODEC_ID_ADPCM_XMD, | ||
| 416 | 417 | ||
| 417 | /* AMR */ | 418 | /* AMR */ |
| 418 | AV_CODEC_ID_AMR_NB = 0x12000, | 419 | AV_CODEC_ID_AMR_NB = 0x12000, |
| @@ -769,6 +769,9 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, · 768 unmodified lines | |||
| 769 | case AV_CODEC_ID_ADPCM_MTAF: | 769 | case AV_CODEC_ID_ADPCM_MTAF: |
| 770 | tmp = blocks * (ba - 16LL) * 2 / ch; | 770 | tmp = blocks * (ba - 16LL) * 2 / ch; |
| 771 | break; | 771 | break; |
| 772 | case AV_CODEC_ID_ADPCM_XMD: | ||
| 773 | tmp = blocks * 32; | ||
| 774 | break; | ||
| 772 | } | 775 | } |
| 773 | if (tmp) { | 776 | if (tmp) { |
| 774 | if (tmp != (int)tmp) | 777 | if (tmp != (int)tmp) |
| @@ -29,7 +29,7 @@ · 28 unmodified lines | |||
| 29 | 29 | ||
| 30 | #include "version_major.h" | 30 | #include "version_major.h" |
| 31 | 31 | ||
| 32 | #define LIBAVCODEC_VERSION_MINOR 59 | 32 | #define LIBAVCODEC_VERSION_MINOR 60 |
| 33 | #define LIBAVCODEC_VERSION_MICRO 100 | 33 | #define LIBAVCODEC_VERSION_MICRO 100 |
| 34 | 34 | ||
| 35 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | 35 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |