aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/command_classes/vic.cpp
diff options
context:
space:
mode:
authorameerj <aj662@drexel.edu>2020-11-25 17:10:44 -0500
committerameerj <aj662@drexel.edu>2020-11-25 17:10:44 -0500
commiteab041866b7c766aa38258aecef8a00c03612459 (patch)
tree7ca30459bcdfb9a277c3afac9d37f7198c01f535 /src/video_core/command_classes/vic.cpp
parentb834c21894ca905cacce2bda04cf24e81175f434 (diff)
Queue 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;