1625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved.
2625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*
3625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* Redistribution and use in source and binary forms, with or without
4625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* modification, are permitted provided that the following conditions are
5625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* met:
6625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*     * Redistributions of source code must retain the above copyright
7625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       notice, this list of conditions and the following disclaimer.
8625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*     * Redistributions in binary form must reproduce the above
9625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       copyright notice, this list of conditions and the following
10625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       disclaimer in the documentation and/or other materials provided
11625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       with the distribution.
12625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*     * Neither the name of The Linux Foundation nor the names of its
13625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       contributors may be used to endorse or promote products derived
14625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*       from this software without specific prior written permission.
15625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*
16625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*
28625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang*/
29625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
3097e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole#ifndef __QCAMERA3HARDWAREINTERFACE_H__
3197e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole#define __QCAMERA3HARDWAREINTERFACE_H__
32625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
339de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang#include <pthread.h>
34625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <utils/List.h>
351c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole#include <utils/KeyedVector.h>
36625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <hardware/camera3.h>
37625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <camera/CameraMetadata.h>
3897e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole#include "QCamera3HALHeader.h"
3966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru#include "QCamera3Channel.h"
40625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
4199119ea1812fef51559a48bff4be66624cc55b0dMekala Natarajan#include <hardware/power.h>
4299119ea1812fef51559a48bff4be66624cc55b0dMekala Natarajan
43625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangextern "C" {
44625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <mm_camera_interface.h>
45625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#include <mm_jpeg_interface.h>
46625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang}
47625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
48625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangusing namespace android;
49625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
50625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangnamespace qcamera {
51625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
52625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#ifndef TRUE
53625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#define TRUE 1
54625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#endif
55625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
56625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#ifndef FALSE
57625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#define FALSE 0
58625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#endif
59625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
600e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole/* Time related macros */
610e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godboletypedef int64_t nsecs_t;
620e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole#define NSEC_PER_SEC 1000000000LL
630e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole#define NSEC_PER_USEC 1000
64e502ddd6da40b9779e0d51e5f312f3d378ebe505Shuzhen Wang#define NSEC_PER_33MSEC 33000000LL
650e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole
66625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangclass QCamera3MetadataChannel;
6766cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguruclass QCamera3PicChannel;
689de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wangclass QCamera3HeapMemory;
6966cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguruclass QCamera3Exif;
70625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
71625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangclass QCamera3HardwareInterface {
72625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangpublic:
73625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    /* static variable and functions accessed by camera service */
74625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    static camera3_device_ops_t mCameraOps;
759de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static int initialize(const struct camera3_device *,
769de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                const camera3_callback_ops_t *callback_ops);
779de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static int configure_streams(const struct camera3_device *,
789de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                camera3_stream_configuration_t *stream_list);
799de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static int register_stream_buffers(const struct camera3_device *,
809de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                const camera3_stream_buffer_set_t *buffer_set);
819de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static const camera_metadata_t* construct_default_request_settings(
829de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                                const struct camera3_device *, int type);
839de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static int process_capture_request(const struct camera3_device *,
849de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                                camera3_capture_request_t *request);
859de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    static void get_metadata_vendor_tag_ops(const struct camera3_device *,
869de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang                                               vendor_tag_query_ops_t* ops);
87625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    static void dump(const struct camera3_device *, int fd);
88c232705a3fe88a15722efec36dba335e417b7febShuzhen Wang    static int flush(const struct camera3_device *);
89e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    static int close_camera_device(struct hw_device_t* device);
90625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangpublic:
91625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    QCamera3HardwareInterface(int cameraId);
92625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    virtual ~QCamera3HardwareInterface();
93625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int openCamera(struct hw_device_t **hw_device);
94625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int getMetadata(int type);
9597e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole    camera_metadata_t* translateCapabilityToMetadata(int type);
96625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
97625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    static int getCamInfo(int cameraId, struct camera_info *info);
98625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    static int initCapabilities(int cameraId);
99625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    static int initStaticMetadata(int cameraId);
100662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static void makeTable(cam_dimension_t* dimTable, uint8_t size, int32_t* sizeTable);
1010e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole    static void makeFPSTable(cam_fps_range_t* fpsTable, uint8_t size,
102c31ab1ae7cd6b6eb410e71ead51dd36089dc2397Shuzhen Wang                                          int32_t* fpsRangesTable);
1032dd2f652b9cdd9e1d3db1d4157e38756370d7409Shuzhen Wang    static void makeOverridesList(cam_scene_mode_overrides_t* overridesTable, uint8_t size,
1049443c6d3cd31da9b89221a4261debfeddafe3b00Mansoor Aftab                                   uint8_t* overridesList, uint8_t* supported_indexes, int camera_id);
10559a548ac1f29a32e40d5de6c3d911469ccdb3f73Shuzhen Wang    static void convertToRegions(cam_rect_t rect, int32_t* region, int weight);
106f7ce236f576484aae64ca6885248744f41c7ba0aVineeta Srivastava    static void convertFromRegions(cam_area_t* roi, const camera_metadata_t *settings,
10759a548ac1f29a32e40d5de6c3d911469ccdb3f73Shuzhen Wang                                   uint32_t tag);
108f7ce236f576484aae64ca6885248744f41c7ba0aVineeta Srivastava    static bool resetIfNeededROI(cam_area_t* roi, const cam_crop_region_t* scalerCropRegion);
10997e8019457b448a6e2141a49a0f471a467b70dc0Tanmaya Godbole    static void convertLandmarks(cam_face_detection_info_t face, int32_t* landmarks);
1107ee407aa1024789089aad411c372c79423699976Ajay Dudani    static void postproc_channel_cb_routine(mm_camera_super_buf_t *recvd_frame,
1117ee407aa1024789089aad411c372c79423699976Ajay Dudani                                            void *userdata);
112662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static int32_t getScalarFormat(int32_t format);
1133fa5d84cc454e0a301fe868d2a9aec3bf631f35cShuzhen Wang    static int32_t getSensorSensitivity(int32_t iso_mode);
1141c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    static void captureResultCb(mm_camera_super_buf_t *metadata,
115e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang                camera3_stream_buffer_t *buffer, uint32_t frame_number,
116e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang                void *userdata);
117625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
118625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int initialize(const camera3_callback_ops_t *callback_ops);
119625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int configureStreams(camera3_stream_configuration_t *stream_list);
120625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int registerStreamBuffers(const camera3_stream_buffer_set_t *buffer_set);
12180e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang    int processCaptureRequest(camera3_capture_request_t *request);
122e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    void getMetadataVendorTagOps(vendor_tag_query_ops_t* ops);
123e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    void dump(int fd);
124c232705a3fe88a15722efec36dba335e417b7febShuzhen Wang    int flush();
12580e50bfee66172f8a924573247aa99ee72bfe24fShuzhen Wang
126cc0a016e6051847dfe4ccfd015f38b9d94093c64Shuzhen Wang    int setFrameParameters(camera3_capture_request_t *request, cam_stream_ID_t streamID);
12762442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    int translateMetadataToParameters(const camera3_capture_request_t *request);
1283cf45155bb833d30f02ca71c3255c0e4580868ffShuzhen Wang    camera_metadata_t* translateCbUrgentMetadataToResultMetadata (
1293cf45155bb833d30f02ca71c3255c0e4580868ffShuzhen Wang                             metadata_buffer_t *metadata);
1303cf45155bb833d30f02ca71c3255c0e4580868ffShuzhen Wang
1310e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole    camera_metadata_t* translateCbMetadataToResultMetadata(metadata_buffer_t *metadata,
13217c34c93d837a49f778ed0294c3670a30f10396eMansoor Aftab                            nsecs_t timestamp, int32_t request_id, int32_t BlobRequest,
13317c34c93d837a49f778ed0294c3670a30f10396eMansoor Aftab                            jpeg_settings_t* InputJpegSettings);
134662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    int getJpegSettings(const camera_metadata_t *settings);
135662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    int initParameters();
13633cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang    void deinitParameters();
1377ee407aa1024789089aad411c372c79423699976Ajay Dudani    int getMaxUnmatchedFramesInQueue();
1387ee407aa1024789089aad411c372c79423699976Ajay Dudani    QCamera3ReprocessChannel *addOnlineReprocChannel(QCamera3Channel *pInputChannel, QCamera3PicChannel *picChHandle);
1397ee407aa1024789089aad411c372c79423699976Ajay Dudani    bool needRotationReprocess();
140c6f7291ea07883e0b6a274319f7e5b01c4a01578Mekala Natarajan    bool needReprocess();
141acddfe2d2fd672d8dbf21caedf4e0c64571b049dMekala Natarajan    bool isWNREnabled();
1427ee407aa1024789089aad411c372c79423699976Ajay Dudani    cam_denoise_process_type_t getWaveletDenoiseProcessPlate();
1439de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang
1441c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    void captureResultCb(mm_camera_super_buf_t *metadata,
145e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang                camera3_stream_buffer_t *buffer, uint32_t frame_number);
1469de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang
147662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    typedef struct {
1480e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole        uint8_t fwk_name;
1490e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole        uint8_t hal_name;
150662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    } QCameraMap;
151662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole
152625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangprivate:
153625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
154625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int openCamera();
155625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    int closeCamera();
156662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    int AddSetParmEntryToBatch(parm_buffer_t *p_table,
157662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole                               cam_intf_parm_type_t paramType,
158662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole                               uint32_t paramLength,
159662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole                               void *paramValue);
1600e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole    static int8_t lookupHalName(const QCameraMap arr[],
161662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole                      int len, int fwk_name);
1620e03eb09035f20fd3e45ad4b6be5eb84303377deTanmaya Godbole    static int8_t lookupFwkName(const QCameraMap arr[],
163662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole                      int len, int hal_name);
164625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
165e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    int validateCaptureRequest(camera3_capture_request_t *request);
166e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang
16762442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    void deriveMinFrameDuration();
16862442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    int64_t getMinFrameDuration(const camera3_capture_request_t *request);
169cc7a1db9ae6ca4ffcaf16d478247489bf40d1caeShuzhen Wang
170cc7a1db9ae6ca4ffcaf16d478247489bf40d1caeShuzhen Wang    void handleMetadataWithLock(mm_camera_super_buf_t *metadata_buf);
171cc7a1db9ae6ca4ffcaf16d478247489bf40d1caeShuzhen Wang    void handleBufferWithLock(camera3_stream_buffer_t *buffer,
172cc7a1db9ae6ca4ffcaf16d478247489bf40d1caeShuzhen Wang        uint32_t frame_number);
173cc7a1db9ae6ca4ffcaf16d478247489bf40d1caeShuzhen Wang    void unblockRequestIfNecessary();
174625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangpublic:
175625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
17666cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru    bool needOnlineRotation();
17766cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru    void getThumbnailSize(cam_dimension_t &dim);
17866cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru    int getJpegQuality();
1790a686661965fcbbfabf2d5e3c2768c9582828226Mansoor Aftab    int calcMaxJpegSize();
18066cadfdce2ea19f4707bf2a595b58bd36fbfdf3bApurva Rajguru    QCamera3Exif *getExifData();
181f060ebe7f00ea62a029df01482e32b1d57c3efe6Mansoor Aftabpublic:
182f060ebe7f00ea62a029df01482e32b1d57c3efe6Mansoor Aftab    static int kMaxInFlight;
183625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wangprivate:
184625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    camera3_device_t   mCameraDevice;
185625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    uint8_t            mCameraId;
186625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    mm_camera_vtbl_t  *mCameraHandle;
187625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    bool               mCameraOpened;
188cd500de28de7d527e4d6b1fbbfbe25bdc58829edShuzhen Wang    bool               mCameraInitialized;
189625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    camera_metadata_t *mDefaultMetadata[CAMERA3_TEMPLATE_COUNT];
1907ee407aa1024789089aad411c372c79423699976Ajay Dudani    int mBlobRequest;
191625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
192625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    const camera3_callback_ops_t *mCallbackOps;
193625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
194625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    camera3_stream_t *mInputStream;
195625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang    QCamera3MetadataChannel *mMetadataChannel;
1967ee407aa1024789089aad411c372c79423699976Ajay Dudani    QCamera3PicChannel *mPictureChannel;
1979de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang
19833cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang     //First request yet to be processed after configureStreams
19933cb7276f6c4d2eda72253d11cd9242e1f82bf7dShuzhen Wang    bool mFirstRequest;
2009de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    QCamera3HeapMemory *mParamHeap;
2019de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    parm_buffer_t* mParameters;
2027ee407aa1024789089aad411c372c79423699976Ajay Dudani    bool m_bWNROn;
2039de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang
2041c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    /* Data structure to store pending request */
2051c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    typedef struct {
2061c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole        camera3_stream_t *stream;
2071c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole        camera3_stream_buffer_t *buffer;
2081c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    } RequestedBufferInfo;
2091c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    typedef struct {
2101c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole        uint32_t frame_number;
2111c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole        uint32_t num_buffers;
21274f6761b0f475069b59e715fcf8753b1664e0bdbMansoor Aftab        int32_t request_id;
2131c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole        List<RequestedBufferInfo> buffers;
2147ee407aa1024789089aad411c372c79423699976Ajay Dudani        int blob_request;
21517c34c93d837a49f778ed0294c3670a30f10396eMansoor Aftab        jpeg_settings_t input_jpeg_settings;
2163cf45155bb833d30f02ca71c3255c0e4580868ffShuzhen Wang        nsecs_t timestamp;
2173cf45155bb833d30f02ca71c3255c0e4580868ffShuzhen Wang        uint8_t bNotified;
21813c48518ed9ba7e67d249841de56e51618e090a0Mansoor Aftab        int input_buffer_present;
2191c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    } PendingRequestInfo;
22045465b8d86296ba7aeeb1ee4f9ba07b4bddf1652Shuzhen Wang    typedef struct {
22145465b8d86296ba7aeeb1ee4f9ba07b4bddf1652Shuzhen Wang        uint32_t frame_number;
222cc0a016e6051847dfe4ccfd015f38b9d94093c64Shuzhen Wang        uint32_t stream_ID;
22345465b8d86296ba7aeeb1ee4f9ba07b4bddf1652Shuzhen Wang    } PendingFrameDropInfo;
2241c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    typedef KeyedVector<camera3_stream_t *, uint32_t> PendingBuffersMap;
225d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab    /*Data structure to store metadata information*/
226d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab    typedef struct {
227d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab       mm_camera_super_buf_t* meta_buf;
228d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab       buffer_handle_t*       zsl_buf_hdl;
229d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab       uint32_t               frame_number;
230d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab    }MetadataBufferInfo;
2311c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole
232d63e05e886cb66cbbd321c0f5441e17e66ba25daMansoor Aftab    List<MetadataBufferInfo> mStoredMetadataList;
2331c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    List<PendingRequestInfo> mPendingRequestsList;
23445465b8d86296ba7aeeb1ee4f9ba07b4bddf1652Shuzhen Wang    List<PendingFrameDropInfo> mPendingFrameDropList;
2351c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    PendingBuffersMap mPendingBuffersMap;
2369de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    pthread_cond_t mRequestCond;
2379de643761e1282fb5af14a9249618efa9d8ac8feShuzhen Wang    int mPendingRequest;
23874f6761b0f475069b59e715fcf8753b1664e0bdbMansoor Aftab    int32_t mCurrentRequestId;
239e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang
240e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    //mutex for serialized access to camera3_device_ops_t functions
241e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang    pthread_mutex_t mMutex;
242e6ab32d89cf169705236988f0f74309f914c88b7Shuzhen Wang
243662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    jpeg_settings_t* mJpegSettings;
2443fa5d84cc454e0a301fe868d2a9aec3bf631f35cShuzhen Wang    metadata_response_t mMetadataResponse;
2451c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole    List<stream_info_t*> mStreamInfo;
2468bb5784949bef76a5880ca3c9a795c71b6ac680bAjay Dudani    bool mIsZslMode;
2471c6fa865f97afe06b8b9d9520390a37dd86f55e1Tanmaya Godbole
24862442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    int64_t mMinProcessedFrameDuration;
24962442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    int64_t mMinJpegFrameDuration;
25062442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang    int64_t mMinRawFrameDuration;
25162442157951e325f2e7b9d81e669992e8ba5564aShuzhen Wang
25299119ea1812fef51559a48bff4be66624cc55b0dMekala Natarajan    power_module_t *m_pPowerModule;   // power module
25399119ea1812fef51559a48bff4be66624cc55b0dMekala Natarajan
254dd60b0cec98a84145dd88747b5cb642da3123802Mansoor Aftab#ifdef HAS_MULTIMEDIA_HINTS
255dd60b0cec98a84145dd88747b5cb642da3123802Mansoor Aftab    bool mHdrHint;
256dd60b0cec98a84145dd88747b5cb642da3123802Mansoor Aftab#endif
257662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap EFFECT_MODES_MAP[];
258662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap WHITE_BALANCE_MODES_MAP[];
259662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap SCENE_MODES_MAP[];
260662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap FOCUS_MODES_MAP[];
261662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap ANTIBANDING_MODES_MAP[];
262e9a0b4995192d264f75543f62efa089845456291Shuzhen Wang    static const QCameraMap AE_FLASH_MODE_MAP[];
263662d6f3c8101a94f45f3b0f892817e062a5c0faaTanmaya Godbole    static const QCameraMap FLASH_MODES_MAP[];
2646990dc70b744c1fa9eb3d2d7eb27bcc89857746eShuzhen Wang    static const QCameraMap FACEDETECT_MODES_MAP[];
265cd500de28de7d527e4d6b1fbbfbe25bdc58829edShuzhen Wang
266cd500de28de7d527e4d6b1fbbfbe25bdc58829edShuzhen Wang    static pthread_mutex_t mCameraSessionLock;
267cd500de28de7d527e4d6b1fbbfbe25bdc58829edShuzhen Wang    static unsigned int mCameraSessionActive;
268625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang};
269625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
270625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang}; // namespace qcamera
271625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang
272625515beb9c1347216a2d261930ceb0d85ba1c47Shuzhen Wang#endif /* __QCAMERA2HARDWAREINTERFACE_H__ */
273