зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1486080 - Always allocate memory to pass extradata. r=padenot
Despite wording of the documentation to the contrary, we can't provide a static pointer to an immutable object. Apparently, it's always been that way. Differential Revision: https://phabricator.services.mozilla.com/D4323 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
5b894e11fe
Коммит
95343883e7
|
@ -77,12 +77,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;
|
||||
}
|
||||
|
@ -225,6 +234,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
|
||||
|
|
Загрузка…
Ссылка в новой задаче