Просмотр исходного кода

vic: Implement RGBX frame format

ameerj 4 лет назад
Родитель
Сommit
899fdb9c44
2 измененных файлов с 15 добавлено и 3 удалено
  1. 14 3
      src/video_core/command_classes/vic.cpp
  2. 1 0
      src/video_core/command_classes/vic.h

+ 14 - 3
src/video_core/command_classes/vic.cpp

@@ -68,13 +68,24 @@ void Vic::Execute() {
     const auto pixel_format = static_cast<VideoPixelFormat>(config.pixel_format.Value());
     const auto pixel_format = static_cast<VideoPixelFormat>(config.pixel_format.Value());
     switch (pixel_format) {
     switch (pixel_format) {
     case VideoPixelFormat::BGRA8:
     case VideoPixelFormat::BGRA8:
+    case VideoPixelFormat::RGBX8:
     case VideoPixelFormat::RGBA8: {
     case VideoPixelFormat::RGBA8: {
         LOG_TRACE(Service_NVDRV, "Writing RGB Frame");
         LOG_TRACE(Service_NVDRV, "Writing RGB Frame");
 
 
         if (scaler_ctx == nullptr || frame->width != scaler_width ||
         if (scaler_ctx == nullptr || frame->width != scaler_width ||
             frame->height != scaler_height) {
             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);
             sws_freeContext(scaler_ctx);
             scaler_ctx = nullptr;
             scaler_ctx = nullptr;
@@ -190,7 +201,7 @@ void Vic::Execute() {
         break;
         break;
     }
     }
     default:
     default:
-        UNIMPLEMENTED_MSG("Unknown video pixel format {}", config.pixel_format.Value());
+        UNIMPLEMENTED_MSG("Unknown video pixel format {:X}", config.pixel_format.Value());
         break;
         break;
     }
     }
 }
 }

+ 1 - 0
src/video_core/command_classes/vic.h

@@ -38,6 +38,7 @@ private:
     enum class VideoPixelFormat : u64_le {
     enum class VideoPixelFormat : u64_le {
         RGBA8 = 0x1f,
         RGBA8 = 0x1f,
         BGRA8 = 0x20,
         BGRA8 = 0x20,
+        RGBX8 = 0x23,
         Yuv420 = 0x44,
         Yuv420 = 0x44,
     };
     };