- Updated libFLAC to the latest Git commit, post 1.3.4. - Updated libid3tag to 0.16.1. - Updated libopus to the latest Git commit. - Updated my FFmpeg libfdk-aac patch. Previously was overwriting memory when it was supposed to be skipping samples. Also added debug versions of several of the libraries, and changed the library extractor script to unpack the debug libraries over the release set to add the particular matching debug versions when building a debug build. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
65 lines
2.1 KiB
Diff
65 lines
2.1 KiB
Diff
diff --git a/configure b/configure
|
|
index 0de9b2abcb..7e9eb8f3b2 100755
|
|
--- a/configure
|
|
+++ b/configure
|
|
@@ -3328,7 +3328,7 @@ libdav1d_decoder_deps="libdav1d"
|
|
libdav1d_decoder_select="atsc_a53"
|
|
libdavs2_decoder_deps="libdavs2"
|
|
libdavs2_decoder_select="avs2_parser"
|
|
-libfdk_aac_decoder_deps="libfdk_aac"
|
|
+libfdk_aac_decoder_deps="libfdk_aac fmtconvert"
|
|
libfdk_aac_encoder_deps="libfdk_aac"
|
|
libfdk_aac_encoder_select="audio_frame_queue"
|
|
libgme_demuxer_deps="libgme"
|
|
diff --git a/libavcodec/libfdk-aacdec.c b/libavcodec/libfdk-aacdec.c
|
|
index 11eee51a98..9e199eb56f 100644
|
|
--- a/libavcodec/libfdk-aacdec.c
|
|
+++ b/libavcodec/libfdk-aacdec.c
|
|
@@ -25,6 +25,7 @@
|
|
#include "avcodec.h"
|
|
#include "codec_internal.h"
|
|
#include "internal.h"
|
|
+#include "fmtconvert.h"
|
|
|
|
#ifdef AACDECODER_LIB_VL0
|
|
#define FDKDEC_VER_AT_LEAST(vl0, vl1) \
|
|
@@ -65,6 +66,7 @@ typedef struct FDKAACDecContext {
|
|
int delay_samples;
|
|
#endif
|
|
AVChannelLayout downmix_layout;
|
|
+ FmtConvertContext fmt_conv;
|
|
} FDKAACDecContext;
|
|
|
|
|
|
@@ -367,13 +369,15 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|
}
|
|
#endif
|
|
|
|
- avctx->sample_fmt = AV_SAMPLE_FMT_S16;
|
|
+ avctx->sample_fmt = AV_SAMPLE_FMT_FLT;
|
|
|
|
s->decoder_buffer_size = DECODER_BUFFSIZE * DECODER_MAX_CHANNELS;
|
|
s->decoder_buffer = av_malloc(s->decoder_buffer_size);
|
|
if (!s->decoder_buffer)
|
|
return AVERROR(ENOMEM);
|
|
|
|
+ ff_fmt_convert_init(&s->fmt_conv, avctx);
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
@@ -452,9 +456,11 @@ static int fdk_aac_decode_frame(AVCodecContext *avctx, AVFrame *frame,
|
|
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
|
goto end;
|
|
|
|
- memcpy(frame->extended_data[0], s->decoder_buffer + input_offset,
|
|
- avctx->ch_layout.nb_channels * frame->nb_samples *
|
|
- av_get_bytes_per_sample(avctx->sample_fmt));
|
|
+ const int count = avctx->ch_layout.nb_channels * frame->nb_samples;
|
|
+ const float scale = 1.0f / (float)0x800000;
|
|
+ s->fmt_conv.int32_to_float_fmul_scalar((float *) frame->extended_data[0],
|
|
+ (INT_PCM *)s->decoder_buffer + input_offset,
|
|
+ scale, count);
|
|
|
|
*got_frame_ptr = 1;
|
|
ret = avpkt->size - valid;
|