Unified · Split
| @@ -15,6 +15,7 @@ version <next>: · 14 unmodified lines | ||
| 15 | 15 | - Argonaut Games ASF muxer |
| 16 | 16 | - AV1 Low overhead bitstream format demuxer |
| 17 | 17 | - RPZA video encoder |
| 18 | +- ADPCM IMA MOFLEX decoder | |
| 18 | 19 | |
| 19 | 20 | |
| 20 | 21 | version 4.3: |
| @@ -866,6 +866,7 @@ OBJS-$(CONFIG_ADPCM_IMA_DK4_DECODER) += adpcm.o adpcm_data.o · 865 unmodified lines | ||
| 866 | 866 | OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER) += adpcm.o adpcm_data.o |
| 867 | 867 | OBJS-$(CONFIG_ADPCM_IMA_EA_SEAD_DECODER) += adpcm.o adpcm_data.o |
| 868 | 868 | OBJS-$(CONFIG_ADPCM_IMA_ISS_DECODER) += adpcm.o adpcm_data.o |
| 869 | +OBJS-$(CONFIG_ADPCM_IMA_MOFLEX_DECODER) += adpcm.o adpcm_data.o | |
| 869 | 870 | OBJS-$(CONFIG_ADPCM_IMA_MTF_DECODER) += adpcm.o adpcm_data.o |
| 870 | 871 | OBJS-$(CONFIG_ADPCM_IMA_OKI_DECODER) += adpcm.o adpcm_data.o |
| 871 | 872 | OBJS-$(CONFIG_ADPCM_IMA_QT_DECODER) += adpcm.o adpcm_data.o |
| @@ -210,6 +210,7 @@ static av_cold int adpcm_decode_init(AVCodecContext * avctx) · 209 unmodified lines | ||
| 210 | 210 | case AV_CODEC_ID_ADPCM_PSX: |
| 211 | 211 | case AV_CODEC_ID_ADPCM_MTAF: |
| 212 | 212 | case AV_CODEC_ID_ADPCM_ARGO: |
| 213 | + case AV_CODEC_ID_ADPCM_IMA_MOFLEX: | |
| 213 | 214 | avctx->sample_fmt = AV_SAMPLE_FMT_S16P; |
| 214 | 215 | break; |
| 215 | 216 | case AV_CODEC_ID_ADPCM_IMA_WS: |
| @@ -774,6 +775,7 @@ static int get_nb_samples(AVCodecContext *avctx, GetByteContext *gb, · 558 unmodified lines | ||
| 774 | 775 | case AV_CODEC_ID_ADPCM_4XM: |
| 775 | 776 | case AV_CODEC_ID_ADPCM_AGM: |
| 776 | 777 | case AV_CODEC_ID_ADPCM_IMA_DAT4: |
| 778 | + case AV_CODEC_ID_ADPCM_IMA_MOFLEX: | |
| 777 | 779 | case AV_CODEC_ID_ADPCM_IMA_ISS: header_size = 4 * ch; break; |
| 778 | 780 | case AV_CODEC_ID_ADPCM_IMA_AMV: header_size = 8; break; |
| 779 | 781 | case AV_CODEC_ID_ADPCM_IMA_SMJPEG: header_size = 4 * ch; break; |
| @@ -1298,6 +1300,29 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, · 518 unmodified lines | ||
| 1298 | 1300 | *samples++ = adpcm_ima_expand_nibble(&c->status[st], v2, 3); |
| 1299 | 1301 | } |
| 1300 | 1302 | break; |
| 1303 | + case AV_CODEC_ID_ADPCM_IMA_MOFLEX: | |
| 1304 | + for (channel = 0; channel < avctx->channels; channel++) { | |
| 1305 | + cs = &c->status[channel]; | |
| 1306 | + cs->step_index = sign_extend(bytestream2_get_le16u(&gb), 16); | |
| 1307 | + cs->predictor = sign_extend(bytestream2_get_le16u(&gb), 16); | |
| 1308 | + if (cs->step_index > 88u){ | |
| 1309 | + av_log(avctx, AV_LOG_ERROR, "ERROR: step_index[%d] = %i\n", | |
| 1310 | + channel, cs->step_index); | |
| 1311 | + return AVERROR_INVALIDDATA; | |
| 1312 | + } | |
| 1313 | + } | |
| 1314 | + | |
| 1315 | + for (int subframe = 0; subframe < nb_samples / 256; subframe++) { | |
| 1316 | + for (channel = 0; channel < avctx->channels; channel++) { | |
| 1317 | + samples = samples_p[channel] + 256 * subframe; | |
| 1318 | + for (n = 0; n < 256; n += 2) { | |
| 1319 | + int v = bytestream2_get_byteu(&gb); | |
| 1320 | + *samples++ = adpcm_ima_expand_nibble(&c->status[channel], v & 0x0F, 3); | |
| 1321 | + *samples++ = adpcm_ima_expand_nibble(&c->status[channel], v >> 4 , 3); | |
| 1322 | + } | |
| 1323 | + } | |
| 1324 | + } | |
| 1325 | + break; | |
| 1301 | 1326 | case AV_CODEC_ID_ADPCM_IMA_DAT4: |
| 1302 | 1327 | for (channel = 0; channel < avctx->channels; channel++) { |
| 1303 | 1328 | cs = &c->status[channel]; |
| @@ -2107,6 +2132,7 @@ ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_DK4, sample_fmts_s16, adpcm_ima_dk4, · 803 unmodified lines | ||
| 2107 | 2132 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_EA_EACS, sample_fmts_s16, adpcm_ima_ea_eacs, "ADPCM IMA Electronic Arts EACS"); |
| 2108 | 2133 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_EA_SEAD, sample_fmts_s16, adpcm_ima_ea_sead, "ADPCM IMA Electronic Arts SEAD"); |
| 2109 | 2134 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_ISS, sample_fmts_s16, adpcm_ima_iss, "ADPCM IMA Funcom ISS"); |
| 2135 | +ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_MOFLEX, sample_fmts_s16p, adpcm_ima_moflex, "ADPCM IMA MobiClip MOFLEX"); | |
| 2110 | 2136 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_MTF, sample_fmts_s16, adpcm_ima_mtf, "ADPCM IMA Capcom's MT Framework"); |
| 2111 | 2137 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_OKI, sample_fmts_s16, adpcm_ima_oki, "ADPCM IMA Dialogic OKI"); |
| 2112 | 2138 | ADPCM_DECODER(AV_CODEC_ID_ADPCM_IMA_QT, sample_fmts_s16p, adpcm_ima_qt, "ADPCM IMA QuickTime"); |
| @@ -619,6 +619,7 @@ extern AVCodec ff_adpcm_ima_dk4_decoder; · 618 unmodified lines | ||
| 619 | 619 | extern AVCodec ff_adpcm_ima_ea_eacs_decoder; |
| 620 | 620 | extern AVCodec ff_adpcm_ima_ea_sead_decoder; |
| 621 | 621 | extern AVCodec ff_adpcm_ima_iss_decoder; |
| 622 | +extern AVCodec ff_adpcm_ima_moflex_decoder; | |
| 622 | 623 | extern AVCodec ff_adpcm_ima_mtf_decoder; |
| 623 | 624 | extern AVCodec ff_adpcm_ima_oki_decoder; |
| 624 | 625 | extern AVCodec ff_adpcm_ima_qt_encoder; |
| @@ -2376,6 +2376,13 @@ static const AVCodecDescriptor codec_descriptors[] = { · 2375 unmodified lines | ||
| 2376 | 2376 | .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA Cunning Developments"), |
| 2377 | 2377 | .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, |
| 2378 | 2378 | }, |
| 2379 | + { | |
| 2380 | + .id = AV_CODEC_ID_ADPCM_IMA_MOFLEX, | |
| 2381 | + .type = AVMEDIA_TYPE_AUDIO, | |
| 2382 | + .name = "adpcm_ima_moflex", | |
| 2383 | + .long_name = NULL_IF_CONFIG_SMALL("ADPCM IMA MobiClip MOFLEX"), | |
| 2384 | + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, | |
| 2385 | + }, | |
| 2379 | 2386 | |
| 2380 | 2387 | /* AMR */ |
| 2381 | 2388 | { |
| @@ -388,6 +388,7 @@ enum AVCodecID { · 387 unmodified lines | ||
| 388 | 388 | AV_CODEC_ID_ADPCM_IMA_ALP, |
| 389 | 389 | AV_CODEC_ID_ADPCM_IMA_MTF, |
| 390 | 390 | AV_CODEC_ID_ADPCM_IMA_CUNNING, |
| 391 | + AV_CODEC_ID_ADPCM_IMA_MOFLEX, | |
| 391 | 392 | |
| 392 | 393 | /* AMR */ |
| 393 | 394 | AV_CODEC_ID_AMR_NB = 0x12000, |
| @@ -1664,6 +1664,8 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, · 1663 unmodified lines | ||
| 1664 | 1664 | if (ch > 0 && ch < INT_MAX/16) { |
| 1665 | 1665 | /* calc from frame_bytes and channels */ |
| 1666 | 1666 | switch (id) { |
| 1667 | + case AV_CODEC_ID_ADPCM_IMA_MOFLEX: | |
| 1668 | + return (frame_bytes - 4 * ch) / (128 * ch) * 256; | |
| 1667 | 1669 | case AV_CODEC_ID_ADPCM_AFC: |
| 1668 | 1670 | return frame_bytes / (9 * ch) * 16; |
| 1669 | 1671 | case AV_CODEC_ID_ADPCM_PSX: |
| @@ -28,8 +28,8 @@ · 27 unmodified lines | ||
| 28 | 28 | #include "libavutil/version.h" |
| 29 | 29 | |
| 30 | 30 | #define LIBAVCODEC_VERSION_MAJOR 58 |
| 31 | −#define LIBAVCODEC_VERSION_MINOR 101 | |
| 32 | −#define LIBAVCODEC_VERSION_MICRO 101 | |
| 31 | +#define LIBAVCODEC_VERSION_MINOR 102 | |
| 32 | +#define LIBAVCODEC_VERSION_MICRO 100 | |
| 33 | 33 | |
| 34 | 34 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |
| 35 | 35 | LIBAVCODEC_VERSION_MINOR, \ |