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 | 9abb23cd2700b57611fc25bce67581eaa6d4d3b7 (patch) | |
| tree | 75a2c41fbdfab51ea44e74e84c17204da171b938 /src/video_core/command_classes/codecs/codec.h | |
| parent | 25f650e075c441798016d0e7a446a10ce82a2865 (diff) | |
| parent | 979b60273889f070737d1fe3037991245180ca67 (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 ee5d62540..8a2a6c360 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 |
