1d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala/*
2d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala *
4d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * you may not use this file except in compliance with the License.
6d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * You may obtain a copy of the License at
7d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala *
8d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala *
10d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * See the License for the specific language governing permissions and
14d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * limitations under the License.
15d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala */
16d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
17d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#ifndef HW_EMULATOR_CAMERA_EMULATED_BASE_CAMERA_H
18d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#define HW_EMULATOR_CAMERA_EMULATED_BASE_CAMERA_H
19d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
20d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#include <hardware/camera_common.h>
21d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#include <utils/Errors.h>
22d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
23d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvalanamespace android {
24d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
25d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala/*
26d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * Contains declaration of a class EmulatedBaseCamera that encapsulates
27d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * functionality common to all emulated camera device versions ("fake",
28d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * "webcam", "video file", etc.).  Instances of this class (for each emulated
29d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * camera) are created during the construction of the EmulatedCameraFactory
30d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * instance.  This class serves as an entry point for all camera API calls that
31d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * are common across all versions of the camera_device_t/camera_module_t
32d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala * structures.
33d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala */
34d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
35d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvalaclass EmulatedBaseCamera {
36d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala  public:
37d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    EmulatedBaseCamera(int cameraId,
38d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala            uint32_t cameraVersion,
39d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala            struct hw_device_t* device,
40d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala            struct hw_module_t* module);
41d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
42d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    virtual ~EmulatedBaseCamera();
43d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
44d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /****************************************************************************
45d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Public API
46d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     ***************************************************************************/
47d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
48d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala  public:
49d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Initializes EmulatedCamera instance.
50d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Return:
51d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     *  NO_ERROR on success, or an appropriate error status on failure.
52d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     */
53d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    virtual status_t Initialize() = 0;
54d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
55d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /****************************************************************************
56d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Camera API implementation
57d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     ***************************************************************************/
58d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
59d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala  public:
60d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Creates connection to the emulated camera device.
61d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * This method is called in response to hw_module_methods_t::open callback.
62d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * NOTE: When this method is called the object is locked.
63d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Note that failures in this method are reported as negative EXXX statuses.
64d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     */
65d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    virtual status_t connectCamera(hw_device_t** device) = 0;
66d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
67d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Closes connection to the emulated camera.
68d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * This method is called in response to camera_device::close callback.
69d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * NOTE: When this method is called the object is locked.
70d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Note that failures in this method are reported as negative EXXX statuses.
71d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     */
72d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    virtual status_t closeCamera() = 0;
73d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
74d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Gets camera information.
75d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * This method is called in response to camera_module_t::get_camera_info
76d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * callback.
77d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * NOTE: When this method is called the object is locked.
78d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Note that failures in this method are reported as negative EXXX statuses.
79d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     */
80d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    virtual status_t getCameraInfo(struct camera_info* info) = 0;
81d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
82d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /****************************************************************************
83d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * Data members
84d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     ***************************************************************************/
85d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
86d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala  protected:
87d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Fixed camera information for camera2 devices. Must be valid to access if
88d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala     * mCameraDeviceVersion is >= HARDWARE_DEVICE_API_VERSION(2,0)  */
89d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    camera_metadata_t *mCameraInfo;
90d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
91d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala  private:
92d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Zero-based ID assigned to this camera. */
93d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    int mCameraID;
94d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
95d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    /* Version of the camera device HAL implemented by this camera */
96d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala    int mCameraDeviceVersion;
97d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala};
98d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
99d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala} /* namespace android */
100d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala
101d6a3832650c70e3cfd6efe88077d62b96a357e70Eino-Ville Talvala#endif /* HW_EMULATOR_CAMERA_EMULATED_BASE_CAMERA_H */
102