diff --git a/src/camera/CMakeLists.txt b/src/camera/CMakeLists.txt index ee846929..ce5aa8a8 100644 --- a/src/camera/CMakeLists.txt +++ b/src/camera/CMakeLists.txt @@ -11,6 +11,8 @@ set_property(TARGET CemuCamera PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$ -#include #include +#include #include #include diff --git a/src/camera/CameraManager.h b/src/camera/CameraManager.h index b6181c0d..54eaaede 100644 --- a/src/camera/CameraManager.h +++ b/src/camera/CameraManager.h @@ -1,18 +1,13 @@ #pragma once -#include -#include -#include -#include -#include namespace CameraManager { - constexpr uint32_t CAMERA_WIDTH = 640; - constexpr uint32_t CAMERA_HEIGHT = 480; - constexpr uint32_t CAMERA_PITCH = 768; + constexpr uint32 CAMERA_WIDTH = 640; + constexpr uint32 CAMERA_HEIGHT = 480; + constexpr uint32 CAMERA_PITCH = 768; - constexpr uint32_t CAMERA_NV12_BUFFER_SIZE = (CAMERA_HEIGHT * CAMERA_PITCH * 3) >> 1; - constexpr uint32_t CAMERA_RGB_BUFFER_SIZE = CAMERA_HEIGHT * CAMERA_WIDTH * 3; + constexpr uint32 CAMERA_NV12_BUFFER_SIZE = (CAMERA_HEIGHT * CAMERA_PITCH * 3) >> 1; + constexpr uint32 CAMERA_RGB_BUFFER_SIZE = CAMERA_HEIGHT * CAMERA_WIDTH * 3; struct DeviceInfo { @@ -23,12 +18,12 @@ namespace CameraManager void Open(); void Close(); - void FillNV12Buffer(std::span nv12Buffer); - void FillRGBBuffer(std::span rgbBuffer); + void FillNV12Buffer(std::span nv12Buffer); + void FillRGBBuffer(std::span rgbBuffer); - void SetDevice(uint32_t deviceNo); + void SetDevice(uint32 deviceNo); void ResetDevice(); std::vector EnumerateDevices(); void SaveDevice(); - std::optional GetCurrentDevice(); + std::optional GetCurrentDevice(); } // namespace CameraManager diff --git a/src/camera/Rgb2Nv12.cpp b/src/camera/Rgb2Nv12.cpp index ab914f81..7b599309 100644 --- a/src/camera/Rgb2Nv12.cpp +++ b/src/camera/Rgb2Nv12.cpp @@ -1,7 +1,5 @@ // Based on https://github.com/cohenrotem/Rgb2NV12 #include "Rgb2Nv12.h" -#include -#include constexpr static glm::mat3x3 COEFFICIENT_MATRIX = { @@ -15,12 +13,12 @@ constexpr static glm::mat4x3 OFFSET_MATRIX = { 16.0f + 0.5f, 128.0f + 2.0f, 128.0f + 2.0f, 16.0f + 0.5f, 128.0f + 2.0f, 128.0f + 2.0f}; -static void Rgb2Nv12TwoRows(const uint8_t* topLine, - const uint8_t* bottomLine, +static void Rgb2Nv12TwoRows(const uint8* topLine, + const uint8* bottomLine, unsigned imageWidth, - uint8_t* topLineY, - uint8_t* bottomLineY, - uint8_t* uv) + uint8* topLineY, + uint8* bottomLineY, + uint8* uv) { auto* topIn = reinterpret_cast(topLine); auto* botIn = reinterpret_cast(bottomLine); @@ -46,12 +44,13 @@ static void Rgb2Nv12TwoRows(const uint8_t* topLine, } } -void Rgb2Nv12(const uint8_t* rgbImage, +void Rgb2Nv12(const uint8* rgbImage, unsigned imageWidth, unsigned imageHeight, - uint8_t* outNv12Image, + uint8* outNv12Image, unsigned nv12Pitch) { + cemu_assert_debug(!((imageWidth | imageHeight) & 1)); unsigned char* UV = outNv12Image + nv12Pitch * imageHeight; for (auto row = 0u; row < imageHeight; row += 2) diff --git a/src/camera/Rgb2Nv12.h b/src/camera/Rgb2Nv12.h index ea73a3f1..d0e01d01 100644 --- a/src/camera/Rgb2Nv12.h +++ b/src/camera/Rgb2Nv12.h @@ -1,8 +1,7 @@ #pragma once -#include -void Rgb2Nv12(const uint8_t* rgbImage, +void Rgb2Nv12(const uint8* rgbImage, unsigned imageWidth, unsigned imageHeight, - uint8_t* outNv12Image, + uint8* outNv12Image, unsigned nv12Pitch); \ No newline at end of file