summaryrefslogtreecommitdiffstats
path: root/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp')
-rw-r--r--dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
index 1e8e488e25..381cbf71a8 100644
--- a/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
+++ b/dom/media/platforms/ffmpeg/FFmpegAudioDecoder.cpp
@@ -5,6 +5,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "FFmpegAudioDecoder.h"
+#include "FFmpegUtils.h"
#include "AudioSampleFormat.h"
#include "FFmpegLog.h"
#include "TimeUnits.h"
@@ -250,7 +251,7 @@ MediaResult FFmpegAudioDecoder<LIBAV_VER>::PostProcessOutput(
aSample->mDuration.ToString().get(),
mLib->av_get_sample_fmt_name(mFrame->format));
- uint32_t numChannels = mCodecContext->channels;
+ uint32_t numChannels = ChannelCount(mCodecContext);
uint32_t samplingRate = mCodecContext->sample_rate;
if (!numChannels) {
numChannels = mAudioInfo.mChannels;
@@ -284,7 +285,7 @@ MediaResult FFmpegAudioDecoder<LIBAV_VER>::PostProcessOutput(
RefPtr<AudioData> data =
new AudioData(aSample->mOffset, pts, std::move(audio), numChannels,
- samplingRate, mCodecContext->channel_layout);
+ samplingRate, numChannels);
MOZ_ASSERT(duration == data->mDuration, "must be equal");
aResults.AppendElement(std::move(data));
@@ -395,16 +396,23 @@ MediaResult FFmpegAudioDecoder<LIBAV_VER>::DoDecode(MediaRawData* aSample,
DecodedData& aResults) {
MOZ_ASSERT(mTaskQueue->IsOnCurrentThread());
PROCESS_DECODE_LOG(aSample);
- AVPacket packet;
- mLib->av_init_packet(&packet);
+ AVPacket* packet;
+#if LIBAVCODEC_VERSION_MAJOR >= 61
+ packet = mLib->av_packet_alloc();
+ auto freePacket = MakeScopeExit([&] { mLib->av_packet_free(&packet); });
+#else
+ AVPacket packet_mem;
+ packet = &packet_mem;
+ mLib->av_init_packet(packet);
+#endif
FFMPEG_LOG("FFmpegAudioDecoder::DoDecode: %d bytes, [%s,%s] (Duration: %s)",
aSize, aSample->mTime.ToString().get(),
aSample->GetEndTime().ToString().get(),
aSample->mDuration.ToString().get());
- packet.data = const_cast<uint8_t*>(aData);
- packet.size = aSize;
+ packet->data = const_cast<uint8_t*>(aData);
+ packet->size = aSize;
if (aGotFrame) {
*aGotFrame = false;
@@ -418,8 +426,9 @@ MediaResult FFmpegAudioDecoder<LIBAV_VER>::DoDecode(MediaRawData* aSample,
}
bool decoded = false;
- auto rv = DecodeUsingFFmpeg(&packet, decoded, aSample, aResults, aGotFrame);
+ auto rv = DecodeUsingFFmpeg(packet, decoded, aSample, aResults, aGotFrame);
NS_ENSURE_SUCCESS(rv, rv);
+
return NS_OK;
}