From cf3a272332b03640730d1434e9802e166ca931da Mon Sep 17 00:00:00 2001
From: wwylele <wwylele@gmail.com>
Date: Wed, 21 Dec 2016 20:05:56 +0200
Subject: CAM: implement basic camera functions with a blank camera

---
 src/core/frontend/camera/interface.h | 61 ++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 src/core/frontend/camera/interface.h

(limited to 'src/core/frontend/camera/interface.h')

diff --git a/src/core/frontend/camera/interface.h b/src/core/frontend/camera/interface.h
new file mode 100644
index 0000000000..a55a495c93
--- /dev/null
+++ b/src/core/frontend/camera/interface.h
@@ -0,0 +1,61 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <vector>
+#include "common/common_types.h"
+#include "core/hle/service/cam/cam.h"
+
+namespace Camera {
+
+/// An abstract class standing for a camera. All camera implementations should inherit from this.
+class CameraInterface {
+public:
+    virtual ~CameraInterface();
+
+    /// Starts the camera for video capturing.
+    virtual void StartCapture() = 0;
+
+    /// Stops the camera for video capturing.
+    virtual void StopCapture() = 0;
+
+    /**
+     * Sets the video resolution from raw CAM service parameters.
+     * For the meaning of the parameters, please refer to Service::CAM::Resolution. Note that the
+     * actual camera implementation doesn't need to respect all the parameters. However, the width
+     * and the height parameters must be respected and be used to determine the size of output
+     * frames.
+     * @param resolution The resolution parameters to set
+     */
+    virtual void SetResolution(const Service::CAM::Resolution& resolution) = 0;
+
+    /**
+     * Configures how received frames should be flipped by the camera.
+     * @param flip Flip applying to the frame
+     */
+    virtual void SetFlip(Service::CAM::Flip flip) = 0;
+
+    /**
+     * Configures what effect should be applied to received frames by the camera.
+     * @param effect Effect applying to the frame
+     */
+    virtual void SetEffect(Service::CAM::Effect effect) = 0;
+
+    /**
+     * Sets the output format of the all frames received after this function is called.
+     * @param format Output format of the frame
+     */
+    virtual void SetFormat(Service::CAM::OutputFormat format) = 0;
+
+    /**
+     * Receives a frame from the camera.
+     * This function should be only called between a StartCapture call and a StopCapture call.
+     * @returns A std::vector<u16> containing pixels. The total size of the vector is width * height
+     *     where width and height are set by a call to SetResolution.
+     */
+    virtual std::vector<u16> ReceiveFrame() const = 0;
+};
+
+} // namespace Camera
-- 
cgit v1.2.3-70-g09d2