From 899fdb9c44b0d7c59c30c44963369c92bdc83d23 Mon Sep 17 00:00:00 2001 From: ameerj <52414509+ameerj@users.noreply.github.com> Date: Thu, 7 Oct 2021 11:06:57 -0400 Subject: [PATCH] vic: Implement RGBX frame format --- src/video_core/command_classes/vic.cpp | 17 ++++++++++++++--- src/video_core/command_classes/vic.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/video_core/command_classes/vic.cpp b/src/video_core/command_classes/vic.cpp index 0ee07f3982..d77eb0c850 100644 --- a/src/video_core/command_classes/vic.cpp +++ b/src/video_core/command_classes/vic.cpp @@ -68,13 +68,24 @@ void Vic::Execute() { const auto pixel_format = static_cast(config.pixel_format.Value()); switch (pixel_format) { case VideoPixelFormat::BGRA8: + case VideoPixelFormat::RGBX8: case VideoPixelFormat::RGBA8: { LOG_TRACE(Service_NVDRV, "Writing RGB Frame"); if (scaler_ctx == nullptr || frame->width != scaler_width || frame->height != scaler_height) { - const AVPixelFormat target_format = - (pixel_format == VideoPixelFormat::RGBA8) ? AV_PIX_FMT_RGBA : AV_PIX_FMT_BGRA; + const AVPixelFormat target_format = [pixel_format]() { + switch (pixel_format) { + case VideoPixelFormat::BGRA8: + return AV_PIX_FMT_BGRA; + case VideoPixelFormat::RGBX8: + return AV_PIX_FMT_RGB0; + case VideoPixelFormat::RGBA8: + return AV_PIX_FMT_RGBA; + default: + return AV_PIX_FMT_RGBA; + } + }(); sws_freeContext(scaler_ctx); scaler_ctx = nullptr; @@ -190,7 +201,7 @@ void Vic::Execute() { break; } default: - UNIMPLEMENTED_MSG("Unknown video pixel format {}", config.pixel_format.Value()); + UNIMPLEMENTED_MSG("Unknown video pixel format {:X}", config.pixel_format.Value()); break; } } diff --git a/src/video_core/command_classes/vic.h b/src/video_core/command_classes/vic.h index 74246e08c9..ea10c2f0f4 100644 --- a/src/video_core/command_classes/vic.h +++ b/src/video_core/command_classes/vic.h @@ -38,6 +38,7 @@ private: enum class VideoPixelFormat : u64_le { RGBA8 = 0x1f, BGRA8 = 0x20, + RGBX8 = 0x23, Yuv420 = 0x44, };