Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2013 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_CAMERA3_H
     18 #define HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H
     19 
     20 /**
     21  * Contains declaration of a class EmulatedCamera that encapsulates
     22  * functionality common to all version 3.0 emulated camera devices.  Instances
     23  * of this class (for each emulated camera) are created during the construction
     24  * of the EmulatedCameraFactory instance.  This class serves as an entry point
     25  * for all camera API calls that defined by camera3_device_ops_t API.
     26  */
     27 
     28 #include "hardware/camera3.h"
     29 #include "system/camera_metadata.h"
     30 #include "EmulatedBaseCamera.h"
     31 
     32 namespace android {
     33 
     34 /**
     35  * Encapsulates functionality common to all version 3.0 emulated camera devices
     36  *
     37  * Note that EmulatedCameraFactory instantiates an object of this class just
     38  * once, when EmulatedCameraFactory instance gets constructed. Connection to /
     39  * disconnection from the actual camera device is handled by calls to
     40  * connectDevice(), and closeCamera() methods of this class that are invoked in
     41  * response to hw_module_methods_t::open, and camera_device::close callbacks.
     42  */
     43 class EmulatedCamera3 : public camera3_device, public EmulatedBaseCamera {
     44 public:
     45     /* Constructs EmulatedCamera3 instance.
     46      * Param:
     47      *  cameraId - Zero based camera identifier, which is an index of the camera
     48      *      instance in camera factory's array.
     49      *  module - Emulated camera HAL module descriptor.
     50      */
     51     EmulatedCamera3(int cameraId,
     52             struct hw_module_t* module);
     53 
     54     /* Destructs EmulatedCamera2 instance. */
     55     virtual ~EmulatedCamera3();
     56 
     57     /* List of all defined capabilities plus useful HW levels */
     58     enum AvailableCapabilities {
     59         BACKWARD_COMPATIBLE,
     60         MANUAL_SENSOR,
     61         MANUAL_POST_PROCESSING,
     62         RAW,
     63         PRIVATE_REPROCESSING,
     64         READ_SENSOR_SETTINGS,
     65         BURST_CAPTURE,
     66         YUV_REPROCESSING,
     67         DEPTH_OUTPUT,
     68         CONSTRAINED_HIGH_SPEED_VIDEO,
     69         // Levels
     70         FULL_LEVEL,
     71 
     72         NUM_CAPABILITIES
     73     };
     74 
     75     // Char strings for above enum, with size NUM_CAPABILITIES
     76     static const char *sAvailableCapabilitiesStrings[];
     77 
     78     /****************************************************************************
     79      * Abstract API
     80      ***************************************************************************/
     81 
     82 public:
     83 
     84     /****************************************************************************
     85      * Public API
     86      ***************************************************************************/
     87 
     88 public:
     89     virtual status_t Initialize();
     90 
     91     /****************************************************************************
     92      * Camera module API and generic hardware device API implementation
     93      ***************************************************************************/
     94 
     95 public:
     96     virtual status_t connectCamera(hw_device_t** device);
     97 
     98     virtual status_t closeCamera();
     99 
    100     virtual status_t getCameraInfo(struct camera_info* info);
    101 
    102     /****************************************************************************
    103      * Camera API implementation.
    104      * These methods are called from the camera API callback routines.
    105      ***************************************************************************/
    106 
    107 protected:
    108 
    109     virtual status_t initializeDevice(
    110         const camera3_callback_ops *callbackOps);
    111 
    112     virtual status_t configureStreams(
    113         camera3_stream_configuration *streamList);
    114 
    115     virtual status_t registerStreamBuffers(
    116         const camera3_stream_buffer_set *bufferSet) ;
    117 
    118     virtual const camera_metadata_t* constructDefaultRequestSettings(
    119         int type);
    120 
    121     virtual status_t processCaptureRequest(camera3_capture_request *request);
    122 
    123     virtual status_t flush();
    124 
    125     /** Debug methods */
    126 
    127     virtual void dump(int fd);
    128 
    129     /****************************************************************************
    130      * Camera API callbacks as defined by camera3_device_ops structure.  See
    131      * hardware/libhardware/include/hardware/camera3.h for information on each
    132      * of these callbacks. Implemented in this class, these callbacks simply
    133      * dispatch the call into an instance of EmulatedCamera3 class defined in
    134      * the 'camera_device3' parameter.
    135      ***************************************************************************/
    136 
    137 private:
    138 
    139     /** Startup */
    140     static int initialize(const struct camera3_device *,
    141             const camera3_callback_ops_t *callback_ops);
    142 
    143     /** Stream configuration and buffer registration */
    144 
    145     static int configure_streams(const struct camera3_device *,
    146             camera3_stream_configuration_t *stream_list);
    147 
    148     static int register_stream_buffers(const struct camera3_device *,
    149             const camera3_stream_buffer_set_t *buffer_set);
    150 
    151     /** Template request settings provision */
    152 
    153     static const camera_metadata_t* construct_default_request_settings(
    154             const struct camera3_device *, int type);
    155 
    156     /** Submission of capture requests to HAL */
    157 
    158     static int process_capture_request(const struct camera3_device *,
    159             camera3_capture_request_t *request);
    160 
    161     static void dump(const camera3_device_t *, int fd);
    162 
    163     static int flush(const camera3_device_t *);
    164 
    165     /** For hw_device_t ops */
    166     static int close(struct hw_device_t* device);
    167 
    168     /****************************************************************************
    169      * Data members shared with implementations
    170      ***************************************************************************/
    171   protected:
    172 
    173     enum {
    174         // State at construction time, and after a device operation error
    175         STATUS_ERROR = 0,
    176         // State after startup-time init and after device instance close
    177         STATUS_CLOSED,
    178         // State after being opened, before device instance init
    179         STATUS_OPEN,
    180         // State after device instance initialization
    181         STATUS_READY,
    182         // State while actively capturing data
    183         STATUS_ACTIVE
    184     } mStatus;
    185 
    186     /**
    187      * Callbacks back to the framework
    188      */
    189 
    190     void sendCaptureResult(camera3_capture_result_t *result);
    191     void sendNotify(camera3_notify_msg_t *msg);
    192 
    193     /****************************************************************************
    194      * Data members
    195      ***************************************************************************/
    196   private:
    197     static camera3_device_ops_t   sDeviceOps;
    198     const camera3_callback_ops_t *mCallbackOps;
    199 };
    200 
    201 }; /* namespace android */
    202 
    203 #endif  /* HW_EMULATOR_CAMERA_EMULATED_CAMERA3_H */
    204