From c2fa3895a18b1c87e45d10bb8fb2aeeb51310389 Mon Sep 17 00:00:00 2001 From: Nikita Savyolov Date: Thu, 24 Oct 2024 22:49:51 +0300 Subject: [PATCH] rpcsx: free resampler in at9 initialize --- rpcsx/iodev/ajm.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/rpcsx/iodev/ajm.cpp b/rpcsx/iodev/ajm.cpp index 3d1aa3f13..1fe621772 100644 --- a/rpcsx/iodev/ajm.cpp +++ b/rpcsx/iodev/ajm.cpp @@ -248,6 +248,10 @@ static orbis::ErrorCode ajm_ioctl(orbis::File *file, std::uint64_t request, instance.at9.inputChannels > maxChannels ? maxChannels : instance.at9.inputChannels; + if (instance.resampler) { + swr_free(&instance.resampler); + instance.resampler = NULL; + } if (instance.at9.inputChannels != outputChannels || instance.outputFormat != AJM_FORMAT_S16) { instance.resampler = swr_alloc(); @@ -284,7 +288,8 @@ static orbis::ErrorCode ajm_ioctl(orbis::File *file, std::uint64_t request, ORBIS_LOG_TODO("CONTROL_INITIALIZE", pCodecInfo.channels, pCodecInfo.samplingRate, pCodecInfo.frameSamples, pCodecInfo.superframeSize, maxChannels, - outputChannels, initializeBuffer->configData, &initializeBuffer->configData); + outputChannels, initializeBuffer->configData, + &initializeBuffer->configData); } else if (instance.codec == AJM_CODEC_AAC) { struct InitalizeBuffer { orbis::uint32_t headerIndex; @@ -428,7 +433,8 @@ static orbis::ErrorCode ajm_ioctl(orbis::File *file, std::uint64_t request, instance.at9.superFrameDataLeft = instance.at9.superFrameSize; } - ORBIS_LOG_TODO("used size", bytesUsed, instance.at9.estimatedSizeUsed); + ORBIS_LOG_TODO("used size", bytesUsed, + instance.at9.estimatedSizeUsed); // TODO: possible memory leak because "genius" code to avoiding // memory copying framesProcessed += 1; @@ -462,7 +468,7 @@ static orbis::ErrorCode ajm_ioctl(orbis::File *file, std::uint64_t request, instance.at9.frameSamples, &tempBuffer, instance.at9.frameSamples); if (nb_samples < 0) { - ORBIS_LOG_FATAL("Error while resampling"); + ORBIS_LOG_FATAL("Error while resampling", nb_samples); std::abort(); } av_freep(&tempBuffer);