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