mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-08-15 21:19:47 +00:00
90515bc6a2
- fix va-api not being used on freebsd small thingies dont affect a lot: - removes some pointer indirection (why save pointer to GMMU if its accesible via host1x) - use std::variant<> for decoder - miscelly vp9/v8/h264 opts Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3878 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
58 lines
1.5 KiB
C++
58 lines
1.5 KiB
C++
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <optional>
|
|
#include <string_view>
|
|
#include <ankerl/unordered_dense.h>
|
|
#include <queue>
|
|
|
|
#include "common/common_types.h"
|
|
#include "video_core/host1x/ffmpeg.h"
|
|
#include "video_core/host1x/nvdec_common.h"
|
|
|
|
namespace Tegra {
|
|
|
|
namespace Host1x {
|
|
class Host1x;
|
|
class FrameQueue;
|
|
} // namespace Host1x
|
|
|
|
class Decoder {
|
|
public:
|
|
virtual ~Decoder();
|
|
|
|
/// Call decoders to construct headers, decode AVFrame with ffmpeg
|
|
void Decode();
|
|
|
|
bool UsingDecodeOrder() const {
|
|
return decode_api.UsingDecodeOrder();
|
|
}
|
|
|
|
/// Return name of the current codec
|
|
[[nodiscard]] virtual std::string_view GetCurrentCodecName() const = 0;
|
|
|
|
protected:
|
|
explicit Decoder(Host1x::Host1x& host1x, s32 id, const Host1x::NvdecCommon::NvdecRegisters& regs);
|
|
|
|
virtual std::span<const u8> ComposeFrame() = 0;
|
|
virtual std::tuple<u64, u64> GetProgressiveOffsets() = 0;
|
|
virtual std::tuple<u64, u64, u64, u64> GetInterlacedOffsets() = 0;
|
|
virtual bool IsInterlaced() = 0;
|
|
|
|
FFmpeg::DecodeApi decode_api;
|
|
Host1x::Host1x& host1x;
|
|
const Host1x::NvdecCommon::NvdecRegisters& regs;
|
|
s32 id;
|
|
bool initialized : 1 = false;
|
|
bool vp9_hidden_frame : 1 = false;
|
|
};
|
|
|
|
} // namespace Tegra
|