diff options
| author | bunnei <bunneidev@gmail.com> | 2020-12-02 15:55:15 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-02 15:55:15 -0800 |
| commit | 14c58ebe23ff756273651b38733caf6ffd16369a (patch) | |
| tree | 75a2c41fbdfab51ea44e74e84c17204da171b938 /src/video_core/command_classes/codecs/codec.h | |
| parent | eba344f85968618af2f8a78b254d1c0ffbd503fd (diff) | |
| parent | 0a89ea1ca7c4eda5842b096c82b9a1750912b9b2 (diff) | |
Merge pull request #5002 from ameerj/nvdec-frameskip
nvdec: Queue and display all decoded frames, cleanup decoders
Diffstat (limited to 'src/video_core/command_classes/codecs/codec.h')
| -rw-r--r-- | src/video_core/command_classes/codecs/codec.h | 11 |
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 ee5d62540e..8a2a6c360d 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" @@ -23,6 +24,9 @@ namespace Tegra { class GPU; struct VicRegisters; +void AVFrameDeleter(AVFrame* ptr); +using AVFramePtr = std::unique_ptr<AVFrame, decltype(&AVFrameDeleter)>; + namespace Decoder { class H264; class VP9; @@ -42,9 +46,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; @@ -55,13 +58,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 |
