From 434ae89a6a9d6c5ea2d2ba4a5dfb39457e15cb5e Mon Sep 17 00:00:00 2001
From: Subv <subv2112@gmail.com>
Date: Mon, 23 Nov 2015 17:17:28 -0500
Subject: [PATCH] Services/Cam: Added new log type and camera enums from
 3dbrew.

Followup to #1102
Original author @mailwl
---
 src/common/logging/backend.cpp |   1 +
 src/common/logging/log.h       |   1 +
 src/core/hle/service/cam/cam.h | 156 +++++++++++++++++++++++++++++++++
 3 files changed, 158 insertions(+)

diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp
index 21a9ae8d0..d186ba8f8 100644
--- a/src/common/logging/backend.cpp
+++ b/src/common/logging/backend.cpp
@@ -44,6 +44,7 @@ namespace Log {
         SUB(Service, LDR) \
         SUB(Service, NIM) \
         SUB(Service, NWM) \
+        SUB(Service, CAM) \
         SUB(Service, CFG) \
         SUB(Service, DSP) \
         SUB(Service, HID) \
diff --git a/src/common/logging/log.h b/src/common/logging/log.h
index 43f0c59e4..2d9323a7b 100644
--- a/src/common/logging/log.h
+++ b/src/common/logging/log.h
@@ -59,6 +59,7 @@ enum class Class : ClassType {
     Service_LDR,                ///< The LDR (3ds dll loader) service
     Service_NIM,                ///< The NIM (Network interface manager) service
     Service_NWM,                ///< The NWM (Network wlan manager) service
+    Service_CAM,                ///< The CAM (Camera) service
     Service_CFG,                ///< The CFG (Configuration) service
     Service_DSP,                ///< The DSP (DSP control) service
     Service_HID,                ///< The HID (Human interface device) service
diff --git a/src/core/hle/service/cam/cam.h b/src/core/hle/service/cam/cam.h
index edd524841..e9abdcb1f 100644
--- a/src/core/hle/service/cam/cam.h
+++ b/src/core/hle/service/cam/cam.h
@@ -10,6 +10,162 @@
 namespace Service {
 namespace CAM {
 
+enum class Port : u8 {
+    None = 0,
+    Cam1 = 1,
+    Cam2 = 2,
+    Both = Cam1 | Cam2
+};
+
+enum class CameraSelect : u8 {
+    None = 0,
+    Out1 = 1,
+    In1 = 2,
+    Out2 = 4,
+    In1Out1 = Out1 | In1,
+    Out1Out2 = Out1 | Out2,
+    In1Out2 = In1 | Out2,
+    All = Out1 | In1 | Out2
+};
+
+enum class Effect : u8 {
+    None = 0,
+    Mono = 1,
+    Sepia = 2,
+    Negative = 3,
+    Negafilm = 4,
+    Sepia01 = 5
+};
+
+enum class Context : u8 {
+    None = 0,
+    A = 1,
+    B = 2,
+    Both = A | B
+};
+
+enum class Flip : u8 {
+    None = 0,
+    Horizontal = 1,
+    Vertical = 2,
+    Reverse = 3
+};
+
+enum class Size : u8 {
+    VGA = 0,
+    QVGA = 1,
+    QQVGA = 2,
+    CIF = 3,
+    QCIF = 4,
+    DS_LCD = 5,
+    DS_LCDx4 = 6,
+    CTR_TOP_LCD = 7,
+    CTR_BOTTOM_LCD = QVGA
+};
+
+enum class FrameRate : u8 {
+    Rate_15 = 0,
+    Rate_15_To_5 = 1,
+    Rate_15_To_2 = 2,
+    Rate_10 = 3,
+    Rate_8_5 = 4,
+    Rate_5 = 5,
+    Rate_20 = 6,
+    Rate_20_To_5 = 7,
+    Rate_30 = 8,
+    Rate_30_To_5 = 9,
+    Rate_15_To_10 = 10,
+    Rate_20_To_10 = 11,
+    Rate_30_To_10 = 12
+};
+
+enum class ShutterSoundType : u8 {
+    Normal = 0,
+    Movie = 1,
+    MovieEnd = 2
+};
+
+enum class WhiteBalance : u8 {
+    BalanceAuto = 0,
+    Balance3200K = 1,
+    Balance4150K = 2,
+    Balance5200K = 3,
+    Balance6000K = 4,
+    Balance7000K = 5,
+    BalanceMax = 6,
+    BalanceNormal = BalanceAuto,
+    BalanceTungsten = Balance3200K,
+    BalanceWhiteFluorescentLight = Balance4150K,
+    BalanceDaylight = Balance5200K,
+    BalanceCloudy = Balance6000K,
+    BalanceHorizon = Balance6000K,
+    BalanceShade = Balance7000K
+};
+
+enum class PhotoMode : u8 {
+    Normal = 0,
+    Portrait = 1,
+    Landscape = 2,
+    Nightview = 3,
+    Letter0 = 4
+};
+
+enum class LensCorrection : u8 {
+    Off = 0,
+    On70 = 1,
+    On90 = 2,
+    Dark = Off,
+    Normal = On70,
+    Bright = On90
+};
+
+enum class Contrast : u8 {
+    Pattern01 = 1,
+    Pattern02 = 2,
+    Pattern03 = 3,
+    Pattern04 = 4,
+    Pattern05 = 5,
+    Pattern06 = 6,
+    Pattern07 = 7,
+    Pattern08 = 8,
+    Pattern09 = 9,
+    Pattern10 = 10,
+    Pattern11 = 11,
+    Low = Pattern05,
+    Normal = Pattern06,
+    High = Pattern07
+};
+
+enum class OutputFormat : u8 {
+    YUV422 = 0,
+    RGB565 = 1
+};
+
+struct PackageParameterCameraSelect {
+    CameraSelect camera;
+    s8 exposure;
+    WhiteBalance white_balance;
+    s8 sharpness;
+    bool auto_exposure;
+    bool auto_white_balance;
+    FrameRate frame_rate;
+    PhotoMode photo_mode;
+    Contrast contrast;
+    LensCorrection lens_correction;
+    bool noise_filter;
+    u8 padding;
+    s16 auto_exposure_window_x;
+    s16 auto_exposure_window_y;
+    s16 auto_exposure_window_width;
+    s16 auto_exposure_window_height;
+    s16 auto_white_balance_window_x;
+    s16 auto_white_balance_window_y;
+    s16 auto_white_balance_window_width;
+    s16 auto_white_balance_window_height;
+};
+
+static_assert(sizeof(PackageParameterCameraSelect) == 28, "PackageParameterCameraSelect structure size is wrong");
+
 /// Initialize CAM service(s)
 void Init();