Skip to content

Commit

Permalink
Clear hw_device_ctx in AVCodecContext.
Browse files Browse the repository at this point in the history
  • Loading branch information
john-preston committed Apr 19, 2022
1 parent acd76fc commit bfe47a1
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions Telegram/SourceFiles/ffmpeg/ffmpeg_utility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
}

[[nodiscard]] bool InitHw(AVCodecContext *context, AVHWDeviceType type) {
AVCodecContext *parent = static_cast<AVCodecContext*>(context->opaque);

auto hwDeviceContext = (AVBufferRef*)nullptr;
AvErrorWrap error = av_hwdevice_ctx_create(
&hwDeviceContext,
Expand All @@ -101,11 +103,13 @@ void PremultiplyLine(uchar *dst, const uchar *src, int intsCount) {
"Trying \"%1\" hardware acceleration for \"%2\" decoder."
).arg(av_hwdevice_get_type_name(type)
).arg(context->codec->name));
if (context->hw_device_ctx) {
av_buffer_unref(&context->hw_device_ctx);
if (parent->hw_device_ctx) {
av_buffer_unref(&parent->hw_device_ctx);
}
context->hw_device_ctx = av_buffer_ref(hwDeviceContext);
parent->hw_device_ctx = av_buffer_ref(hwDeviceContext);
av_buffer_unref(&hwDeviceContext);

context->hw_device_ctx = parent->hw_device_ctx;
return true;
}

Expand Down Expand Up @@ -294,6 +298,7 @@ CodecPointer MakeCodecPointer(CodecDescriptor descriptor) {

if (descriptor.hwAllowed) {
context->get_format = GetHwFormat;
context->opaque = context;
} else {
DEBUG_LOG(("Video Info: Using software \"%2\" decoder."
).arg(codec->name));
Expand Down

0 comments on commit bfe47a1

Please sign in to comment.