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