aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/command_classes/vic.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-12-02 15:55:15 -0800
committerGitHub <noreply@github.com>2020-12-02 15:55:15 -0800
commit9abb23cd2700b57611fc25bce67581eaa6d4d3b7 (patch)
tree75a2c41fbdfab51ea44e74e84c17204da171b938 /src/video_core/command_classes/vic.cpp
parent25f650e075c441798016d0e7a446a10ce82a2865 (diff)
parent979b60273889f070737d1fe3037991245180ca67 (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/vic.cpp')
-rw-r--r--src/video_core/command_classes/vic.cpp15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/video_core/command_classes/vic.cpp b/src/video_core/command_classes/vic.cpp
index 5b52da277..248443027 100644
--- a/src/video_core/command_classes/vic.cpp
+++ b/src/video_core/command_classes/vic.cpp
@@ -58,17 +58,18 @@ void Vic::Execute() {
return;
}
const VicConfig config{gpu.MemoryManager().Read<u64>(config_struct_address + 0x20)};
+ const AVFramePtr frame_ptr = std::move(nvdec_processor->GetFrame());
+ const auto* frame = frame_ptr.get();
+ if (!frame || frame->width == 0 || frame->height == 0) {
+ return;
+ }
const VideoPixelFormat pixel_format =
static_cast<VideoPixelFormat>(config.pixel_format.Value());
switch (pixel_format) {
case VideoPixelFormat::BGRA8:
case VideoPixelFormat::RGBA8: {
LOG_TRACE(Service_NVDRV, "Writing RGB Frame");
- const auto* frame = nvdec_processor->GetFrame();
- if (!frame || frame->width == 0 || frame->height == 0) {
- return;
- }
if (scaler_ctx == nullptr || frame->width != scaler_width ||
frame->height != scaler_height) {
const AVPixelFormat target_format =
@@ -121,12 +122,6 @@ void Vic::Execute() {
case VideoPixelFormat::Yuv420: {
LOG_TRACE(Service_NVDRV, "Writing YUV420 Frame");
- const auto* frame = nvdec_processor->GetFrame();
-
- if (!frame || frame->width == 0 || frame->height == 0) {
- return;
- }
-
const std::size_t surface_width = config.surface_width_minus1 + 1;
const std::size_t surface_height = config.surface_height_minus1 + 1;
const std::size_t half_width = surface_width / 2;