summaryrefslogtreecommitdiffstats
path: root/src/video_core/command_classes/codecs/codec.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/command_classes/codecs/codec.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/video_core/command_classes/codecs/codec.h b/src/video_core/command_classes/codecs/codec.h
index 5bbe6a332..c26b59fde 100644
--- a/src/video_core/command_classes/codecs/codec.h
+++ b/src/video_core/command_classes/codecs/codec.h
@@ -5,6 +5,7 @@
#pragma once
#include <memory>
+#include <queue>
#include "common/common_types.h"
#include "video_core/command_classes/nvdec_common.h"
@@ -22,6 +23,9 @@ namespace Tegra {
class GPU;
struct VicRegisters;
+void av_frame_deleter(AVFrame* ptr);
+using AVFramePtr = std::unique_ptr<AVFrame, decltype(&av_frame_deleter)>;
+
namespace Decoder {
class H264;
class VP9;
@@ -41,9 +45,8 @@ public:
/// Call decoders to construct headers, decode AVFrame with ffmpeg
void Decode();
- /// Returns most recently decoded frame
- [[nodiscard]] AVFrame* GetCurrentFrame();
- [[nodiscard]] const AVFrame* GetCurrentFrame() const;
+ /// Returns next decoded frame
+ [[nodiscard]] AVFramePtr GetCurrentFrame();
/// Returns the value of current_codec
[[nodiscard]] NvdecCommon::VideoCodec GetCurrentCodec() const;
@@ -54,13 +57,13 @@ private:
AVCodec* av_codec{nullptr};
AVCodecContext* av_codec_ctx{nullptr};
- AVFrame* av_frame{nullptr};
GPU& gpu;
std::unique_ptr<Decoder::H264> h264_decoder;
std::unique_ptr<Decoder::VP9> vp9_decoder;
NvdecCommon::NvdecRegisters state{};
+ std::queue<AVFramePtr> av_frames{};
};
} // namespace Tegra