mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2025-07-20 11:45:47 +00:00
Fix FFmpeg GPU decoding (#242)
This fixes the FFmpeg GPU decoding on some platforms. Co-authored-by: MaranBr <maranbr@outlook.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/242
This commit is contained in:
parent
fa600b88b1
commit
2fe728766e
2 changed files with 13 additions and 6 deletions
|
@ -237,16 +237,22 @@ std::shared_ptr<Frame> DecoderContext::ReceiveFrame() {
|
|||
if (m_codec_context->hw_device_ctx) {
|
||||
// If we have a hardware context, make a separate frame here to receive the
|
||||
// hardware result before sending it to the output.
|
||||
Frame intermediate_frame;
|
||||
std::shared_ptr<Frame> intermediate_frame = std::make_shared<Frame>();
|
||||
|
||||
if (!receive(intermediate_frame.GetFrame())) {
|
||||
if (!receive(intermediate_frame->GetFrame())) {
|
||||
return {};
|
||||
}
|
||||
|
||||
m_temp_frame->SetFormat(PreferredGpuFormat);
|
||||
if (int ret = av_hwframe_transfer_data(m_temp_frame->GetFrame(), intermediate_frame.GetFrame(), 0); ret < 0) {
|
||||
LOG_ERROR(HW_GPU, "av_hwframe_transfer_data error: {}", AVError(ret));
|
||||
return {};
|
||||
const auto fmt = intermediate_frame->GetPixelFormat();
|
||||
const auto desc = av_pix_fmt_desc_get(fmt);
|
||||
if (desc && (desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) {
|
||||
m_temp_frame->SetFormat(PreferredGpuFormat);
|
||||
if (int ret = av_hwframe_transfer_data(m_temp_frame->GetFrame(), intermediate_frame->GetFrame(), 0); ret < 0) {
|
||||
LOG_ERROR(HW_GPU, "av_hwframe_transfer_data error: {}", AVError(ret));
|
||||
return {};
|
||||
}
|
||||
} else {
|
||||
m_temp_frame = std::move(intermediate_frame);
|
||||
}
|
||||
} else {
|
||||
// Otherwise, decode the frame as normal.
|
||||
|
|
|
@ -21,6 +21,7 @@ extern "C" {
|
|||
|
||||
#include <libavcodec/avcodec.h>
|
||||
#include <libavutil/opt.h>
|
||||
#include <libavutil/pixdesc.h>
|
||||
#include <libavcodec/codec_internal.h>
|
||||
|
||||
#if defined(__GNUC__) || defined(__clang__)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue