mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 08:18:41 +09:00
[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.
This commit is contained in:
parent
87117726dc
commit
c582c801da
1 changed files with 15 additions and 3 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue