diff options
author | trav90 <travawine@palemoon.org> | 2018-10-01 20:51:17 -0500 |
---|---|---|
committer | trav90 <travawine@palemoon.org> | 2018-10-01 20:51:17 -0500 |
commit | c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f (patch) | |
tree | 1885515de3fef357187a8f471b7b82a36cf82c29 /dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp | |
parent | 69d83c8fbe47b89d1d14f75ee99e638cbfb5dc31 (diff) | |
download | UXP-c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f.tar UXP-c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f.tar.gz UXP-c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f.tar.lz UXP-c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f.tar.xz UXP-c0d9931cffdf42cdd51c6bf9e44e2a8281a6254f.zip |
[ffmpeg] Always allocate memory to pass extradata
Despite wording of the documentation to the contrary, we can't provide a static pointer to an immutable object.
Diffstat (limited to 'dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp')
-rw-r--r-- | dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp index 8cb5c8578..8655ce25f 100644 --- a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp +++ b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp @@ -69,12 +69,21 @@ FFmpegDataDecoder<LIBAV_VER>::InitDecoder() mCodecContext->extradata_size = mExtraData->Length(); // FFmpeg may use SIMD instructions to access the data which reads the // data in 32 bytes block. Must ensure we have enough data to read. + uint32_t padding_size = #if LIBAVCODEC_VERSION_MAJOR >= 58 - mExtraData->AppendElements(AV_INPUT_BUFFER_PADDING_SIZE); + AV_INPUT_BUFFER_PADDING_SIZE; #else - mExtraData->AppendElements(FF_INPUT_BUFFER_PADDING_SIZE); + FF_INPUT_BUFFER_PADDING_SIZE; #endif - mCodecContext->extradata = mExtraData->Elements(); + mCodecContext->extradata = static_cast<uint8_t*>( + mLib->av_malloc(mExtraData->Length() + padding_size)); + if (!mCodecContext->extradata) { + return MediaResult(NS_ERROR_OUT_OF_MEMORY, + RESULT_DETAIL("Couldn't init ffmpeg extradata")); + } + memcpy(mCodecContext->extradata, + mExtraData->Elements(), + mExtraData->Length()); } else { mCodecContext->extradata_size = 0; } @@ -165,6 +174,9 @@ FFmpegDataDecoder<LIBAV_VER>::ProcessShutdown() StaticMutexAutoLock mon(sMonitor); if (mCodecContext) { + if (mCodecContext->extradata) { + mLib->av_freep(&mCodecContext->extradata); + } mLib->avcodec_close(mCodecContext); mLib->av_freep(&mCodecContext); #if LIBAVCODEC_VERSION_MAJOR >= 55 |