166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* Redistribution and use in source and binary forms, with or without 466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* modification, are permitted provided that the following conditions are 566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* met: 666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* * Redistributions of source code must retain the above copyright 766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* notice, this list of conditions and the following disclaimer. 866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* * Redistributions in binary form must reproduce the above 966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* copyright notice, this list of conditions and the following 1066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* disclaimer in the documentation and/or other materials provided 1166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* with the distribution. 1266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* * Neither the name of The Linux Foundation nor the names of its 1366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* contributors may be used to endorse or promote products derived 1466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* from this software without specific prior written permission. 1566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 1666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* 2866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*/ 2966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef __QCAMERA3HARDWAREINTERFACE_H__ 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define __QCAMERA3HARDWAREINTERFACE_H__ 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <camera/CameraMetadata.h> 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <pthread.h> 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/KeyedVector.h> 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/List.h> 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "camera3.h" 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3Channel.h" 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3CropRegionMapper.h" 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3HALHeader.h" 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCamera3Mem.h" 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraPerf.h" 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinextern "C" { 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_camera_interface.h" 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_jpeg_interface.h" 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinusing namespace android; 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinnamespace qcamera { 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef TRUE 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define TRUE 1 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef FALSE 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define FALSE 0 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Time related macros */ 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef int64_t nsecs_t; 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define NSEC_PER_SEC 1000000000LLU 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define NSEC_PER_USEC 1000LLU 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define NSEC_PER_33MSEC 33000000LLU 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin SET_ENABLE, 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin SET_CONTROLENABLE, 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin SET_RELOAD_CHROMATIX, 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin SET_STATUS, 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} optype_t; 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MODULE_ALL 0 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinextern volatile uint32_t gCamHal3LogLevel; 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3MetadataChannel; 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3PicChannel; 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3HeapMemory; 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3Exif; 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream; 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_set_t buffer_set; 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_status_t status; 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int registered; 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ProcessingChannel *channel; 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} stream_info_t; 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 94d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschtypedef struct { 95d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Stream handle 96d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch camera3_stream_t *stream; 97d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Buffer handle 98d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch buffer_handle_t *buffer; 99d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} PendingBufferInfo; 100d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 101d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschtypedef struct { 102d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Frame number corresponding to request 103d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t frame_number; 104d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Time when request queued into system 105d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch nsecs_t timestamp; 106d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch List<PendingBufferInfo> mPendingBufferList; 107d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch} PendingBuffersInRequest; 108d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 109d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschclass PendingBuffersMap { 110d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetschpublic: 111d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // Number of outstanding buffers at flush 112d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t numPendingBufsAtFlush; 113d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch // List of pending buffers per request 114d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch List<PendingBuffersInRequest> mPendingBuffersInRequest; 115d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t get_num_overall_buffers(); 116d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch void removeBuf(buffer_handle_t *buffer); 117d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch}; 118d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 119d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera3HardwareInterface { 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* static variable and functions accessed by camera service */ 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static camera3_device_ops_t mCameraOps; 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int initialize(const struct camera3_device *, 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera3_callback_ops_t *callback_ops); 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int configure_streams(const struct camera3_device *, 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_configuration_t *stream_list); 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const camera_metadata_t* construct_default_request_settings( 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const struct camera3_device *, int type); 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int process_capture_request(const struct camera3_device *, 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_capture_request_t *request); 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void dump(const struct camera3_device *, int fd); 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int flush(const struct camera3_device *); 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int close_camera_device(struct hw_device_t* device); 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3HardwareInterface(uint32_t cameraId, 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera_module_callbacks_t *callbacks); 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera3HardwareInterface(); 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void camEvtHandle(uint32_t camera_handle, mm_camera_event_t *evt, 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user_data); 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int openCamera(struct hw_device_t **hw_device); 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_metadata_t* translateCapabilityToMetadata(int type); 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int getCamInfo(uint32_t cameraId, struct camera_info *info); 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int initCapabilities(uint32_t cameraId); 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int initStaticMetadata(uint32_t cameraId); 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void makeTable(cam_dimension_t *dimTable, size_t size, 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t max_size, int32_t *sizeTable); 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void makeFPSTable(cam_fps_range_t *fpsTable, size_t size, 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t max_size, int32_t *fpsRangesTable); 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void makeOverridesList(cam_scene_mode_overrides_t *overridesTable, 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t size, size_t max_size, uint8_t *overridesList, 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t *supported_indexes, uint32_t camera_id); 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static size_t filterJpegSizes(int32_t *jpegSizes, int32_t *processedSizes, 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t processedSizesCnt, size_t maxCount, cam_rect_t active_array_size, 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t downscale_factor); 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void convertToRegions(cam_rect_t rect, int32_t* region, int weight); 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void convertFromRegions(cam_area_t &roi, const camera_metadata_t *settings, 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t tag); 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static bool resetIfNeededROI(cam_area_t* roi, const cam_crop_region_t* scalerCropRegion); 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void convertLandmarks(cam_face_landmarks_info_t face, int32_t* landmarks); 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int32_t getSensorSensitivity(int32_t iso_mode); 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double computeNoiseModelEntryS(int32_t sensitivity); 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double computeNoiseModelEntryO(int32_t sensitivity); 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void captureResultCb(mm_camera_super_buf_t *metadata, 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *buffer, uint32_t frame_number, 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isInputBuffer, void *userdata); 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int initialize(const camera3_callback_ops_t *callback_ops); 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int configureStreams(camera3_stream_configuration_t *stream_list); 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int configureStreamsPerfLocked(camera3_stream_configuration_t *stream_list); 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int processCaptureRequest(camera3_capture_request_t *request); 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dump(int fd); 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int flushPerf(); 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int setFrameParameters(camera3_capture_request_t *request, 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_ID_t streamID, int blob_request, uint32_t snapshotStreamId); 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setReprocParameters(camera3_capture_request_t *request, 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *reprocParam, uint32_t snapshotStreamId); 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int translateToHalMetadata(const camera3_capture_request_t *request, 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *parm, uint32_t snapshotStreamId); 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_metadata_t* translateCbUrgentMetadataToResultMetadata ( 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *metadata); 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_metadata_t* translateFromHalMetadata(metadata_buffer_t *metadata, 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nsecs_t timestamp, int32_t request_id, 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const CameraMetadata& jpegMetadata, uint8_t pipeline_depth, 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t capture_intent, bool pprocDone, uint8_t fwk_cacMode); 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_metadata_t* saveRequestSettings(const CameraMetadata& jpegMetadata, 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_capture_request_t *request); 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int initParameters(); 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void deinitParameters(); 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ReprocessChannel *addOfflineReprocChannel(const reprocess_config_t &config, 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3ProcessingChannel *inputChHandle); 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needRotationReprocess(); 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needReprocess(uint32_t postprocess_mask); 200d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch bool needJpegExifRotation(); 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_denoise_process_type_t getWaveletDenoiseProcessPlate(); 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_denoise_process_type_t getTemporalDenoiseProcessPlate(); 20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void captureResultCb(mm_camera_super_buf_t *metadata, 20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *buffer, uint32_t frame_number, 20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isInputBuffer); 20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t calcMaxJpegDim(); 20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needOnlineRotation(); 20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getJpegQuality(); 21066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3Exif *getExifData(); 21166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_exif_params_t get3AExifParams(); 21266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t getMobicatMask(); 21366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void getFlashInfo(const int cameraId, 21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool& hasFlash, 21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char (&flashNode)[QCAMERA_MAX_FILEPATH_LENGTH]); 21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *getEepromVersionInfo(); 21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const uint32_t *getLdafCalib(); 21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void get3AVersion(cam_q3a_version_t &swVersion); 21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin template <typename fwkType, typename halType> struct QCameraMap { 22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin fwkType fwk_name; 22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin halType hal_name; 22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }; 22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const char *const desc; 22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_cds_mode_type_t val; 22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } QCameraPropMap; 22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // State transition conditions: 23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // "\" means not applicable 23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // "x" means not valid 23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | | CLOSED | OPENED | INITIALIZED | CONFIGURED | STARTED | ERROR | DEINIT | 23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | CLOSED | \ | open | x | x | x | x | x | 24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | OPENED | close | \ | initialize | x | x | error | x | 24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // |INITIALIZED | close | x | \ | configure | x | error | x | 24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | CONFIGURED | close | x | x | configure | request | error | x | 24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | STARTED | close | x | x | configure | \ | error | x | 24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | ERROR | close | x | x | x | x | \ | any | 25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // | DEINIT | close | x | x | x | x | x | \ | 25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // +------------+----------+----------+-------------+------------+---------+-------+--------+ 25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef enum { 25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CLOSED, 25666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin OPENED, 25766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin INITIALIZED, 25866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CONFIGURED, 25966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin STARTED, 26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin ERROR, 26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DEINIT 26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } State; 26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int openCamera(); 26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int closeCamera(); 26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int flush(bool restartChannels); 26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static size_t calcMaxJpegSize(uint32_t camera_id); 26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t getMaxRawSize(uint32_t camera_id); 26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void addStreamConfig(Vector<int32_t> &available_stream_configs, 27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t scalar_format, const cam_dimension_t &dim, 27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t config_type); 27266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int validateCaptureRequest(camera3_capture_request_t *request); 27466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int validateStreamDimensions(camera3_stream_configuration_t *streamList); 27566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int validateStreamRotations(camera3_stream_configuration_t *streamList); 27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void deriveMinFrameDuration(); 277d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch void handleBuffersDuringFlushLock(camera3_stream_buffer_t *buffer); 27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t handlePendingReprocResults(uint32_t frame_number); 27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t getMinFrameDuration(const camera3_capture_request_t *request); 28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void handleMetadataWithLock(mm_camera_super_buf_t *metadata_buf, 28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool free_and_bufdone_meta_buf); 28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void handleBatchMetadata(mm_camera_super_buf_t *metadata_buf, 28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool free_and_bufdone_meta_buf); 28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void handleBufferWithLock(camera3_stream_buffer_t *buffer, 28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_number); 28666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void handleInputBufferWithLock(uint32_t frame_number); 28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void unblockRequestIfNecessary(); 28866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpMetadataToFile(tuning_params_t &meta, uint32_t &dumpFrameCount, 28966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool enabled, const char *type, uint32_t frameNumber); 29066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void getLogLevel(); 29166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void cleanAndSortStreamInfo(); 29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void extractJpegMetadata(CameraMetadata& jpegMetadata, 29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera3_capture_request_t *request); 29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isSupportChannelNeeded(camera3_stream_configuration_t *streamList, 29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_size_info_t stream_config_info); 29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setMobicat(); 29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getSensorOutputSize(cam_dimension_t &sensor_dim); 30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setHalFpsRange(const CameraMetadata &settings, 30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *hal_metadata); 30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t extractSceneMode(const CameraMetadata &frame_settings, uint8_t metaMode, 30466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *hal_metadata); 30566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t numOfSizesOnEncoder(const camera3_stream_configuration_t *streamList, 30666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const cam_dimension_t &maxViewfinderSize); 30766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void addToPPFeatureMask(int stream_format, uint32_t stream_idx); 30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void updateFpsInPreviewBuffer(metadata_buffer_t *metadata, uint32_t frame_number); 31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void enablePowerHint(); 31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void disablePowerHint(); 31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t dynamicUpdateMetaStreamInfo(); 31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t startAllChannels(); 31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t stopAllChannels(); 31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t notifyErrorForPendingRequests(); 31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getReprocessibleOutputStreamId(uint32_t &id); 31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t handleCameraDeviceError(); 31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isOnEncoder(const cam_dimension_t max_viewfinder_size, 32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t width, uint32_t height); 32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void hdrPlusPerfLock(mm_camera_super_buf_t *metadata_buf); 32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static bool supportBurstCapture(uint32_t cameraId); 32566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setBundleInfo(); 32666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_device_t mCameraDevice; 32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mCameraId; 32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_vtbl_t *mCameraHandle; 33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mCameraInitialized; 33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_metadata_t *mDefaultMetadata[CAMERA3_TEMPLATE_COUNT]; 33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera3_callback_ops_t *mCallbackOps; 33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3MetadataChannel *mMetadataChannel; 33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3PicChannel *mPictureChannel; 33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RawChannel *mRawChannel; 33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3SupportChannel *mSupportChannel; 33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3SupportChannel *mAnalysisChannel; 33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RawDumpChannel *mRawDumpChannel; 34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3RegularChannel *mDummyBatchChannel; 34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraPerfLock m_perfLock; 34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mChannelHandle; 34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void saveExifParams(metadata_buffer_t *metadata); 34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_exif_params_t mExifParams; 34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //First request yet to be processed after configureStreams 34966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mFirstConfiguration; 35066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mFlush; 35166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mFlushPerf; 35266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mEnableRawDump; 35366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3HeapMemory *mParamHeap; 35466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* mParameters; 35566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t* mPrevParameters; 35666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraMetadata mCurJpegMeta; 35766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bIsVideo; 35866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bIs4KVideo; 35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bEisSupportedSize; 36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bEisEnable; 36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t dim; 36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int format; 36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t usage; 36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } InputStreamInfo; 36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin InputStreamInfo mInputStreamInfo; 36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t m_MobicatMask; 36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t m_bTnrEnabled; 37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t mSupportedFaceDetectMode; 37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t m_bTnrPreview; 37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t m_bTnrVideo; 37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Data structure to store pending request */ 37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t *stream; 37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *buffer; 37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // metadata needs to be consumed by the corresponding stream 37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // in order to generate the buffer. 38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool need_metadata; 38166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } RequestedBufferInfo; 38266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_number; 38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_buffers; 38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t request_id; 38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<RequestedBufferInfo> buffers; 38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int blob_request; 38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t bUrgentReceived; 38966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nsecs_t timestamp; 39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t *input_buffer; 39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera_metadata_t *settings; 39266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CameraMetadata jpegMetadata; 39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t pipeline_depth; 39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t partial_result_cnt; 39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t capture_intent; 39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t fwkCacMode; 39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool shutter_notified; 39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } PendingRequestInfo; 39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 40066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_number; 40166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t stream_ID; 40266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } PendingFrameDropInfo; 40366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 40466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 40566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_notify_msg_t notify_msg; 40666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_buffer_t buffer; 40766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_number; 40866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } PendingReprocessResult; 40966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 41066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef KeyedVector<uint32_t, Vector<PendingBufferInfo> > FlushMap; 41166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef List<QCamera3HardwareInterface::PendingRequestInfo>::iterator 41266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pendingRequestIterator; 41366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef List<QCamera3HardwareInterface::RequestedBufferInfo>::iterator 41466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pendingBufferIterator; 41566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 41666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<PendingReprocessResult> mPendingReprocessResultList; 41766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<PendingRequestInfo> mPendingRequestsList; 41866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<PendingFrameDropInfo> mPendingFrameDropList; 41966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Use last frame number of the batch as key and first frame number of the 42066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * batch as value for that key */ 42166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin KeyedVector<uint32_t, uint32_t> mPendingBatchMap; 42266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 42366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin PendingBuffersMap mPendingBuffersMap; 42466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t mRequestCond; 42566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mPendingLiveRequest; 42666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mWokenUpByDaemon; 42766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mCurrentRequestId; 42866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_size_info_t mStreamConfigInfo; 42966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //mutex for serialized access to camera3_device_ops_t functions 43166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t mMutex; 43266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //condition used to signal flush after buffers have returned 43466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t mBuffersCond; 43566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin List<stream_info_t*> mStreamInfo; 43766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t mMinProcessedFrameDuration; 43966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t mMinJpegFrameDuration; 44066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t mMinRawFrameDuration; 44166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mMetaFrameCount; 44366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mUpdateDebugLevel; 44466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera_module_callbacks_t *mCallbacks; 44566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 44666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mCaptureIntent; 44766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mCacMode; 44866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t mReprocMeta; //scratch meta buffer 44966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* 0: Not batch, non-zero: Number of image buffers in a batch */ 45066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mBatchSize; 45166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Used only in batch mode 45266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mToBeQueuedVidBufs; 45366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Fixed video fps 45466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin float mHFRVideoFps; 45566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mOpMode; 45666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mFirstFrameNumberInBatch; 45766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera3_stream_t mDummyBatchStream; 45866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mNeedSensorRestart; 45966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 46066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* sensor output size with current stream configuration */ 46166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera3CropRegionMapper mCropRegionMapper; 46266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 46366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Ldaf calibration data */ 46466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mLdafCalibExist; 46566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mLdafCalib[2]; 46666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mPowerHintEnabled; 46766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mLastCustIntentFrmNum; 46866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 46966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_effect_mode_t, 47066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_effect_mode_type> EFFECT_MODES_MAP[]; 47166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_awb_mode_t, 47266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_wb_mode_type> WHITE_BALANCE_MODES_MAP[]; 47366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_scene_mode_t, 47466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_scene_mode_type> SCENE_MODES_MAP[]; 47566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_af_mode_t, 47666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_focus_mode_type> FOCUS_MODES_MAP[]; 47766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_color_correction_aberration_mode_t, 47866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_aberration_mode_t> COLOR_ABERRATION_MAP[]; 47966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_ae_antibanding_mode_t, 48066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_antibanding_mode_type> ANTIBANDING_MODES_MAP[]; 48166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_lens_state_t, 48266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_af_lens_state_t> LENS_STATE_MAP[]; 48366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_control_ae_mode_t, 48466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_flash_mode_t> AE_FLASH_MODE_MAP[]; 48566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_flash_mode_t, 48666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_flash_mode_t> FLASH_MODES_MAP[]; 48766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_statistics_face_detect_mode_t, 48866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_face_detect_mode_t> FACEDETECT_MODES_MAP[]; 48966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_lens_info_focus_distance_calibration_t, 49066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_focus_calibration_t> FOCUS_CALIBRATION_MAP[]; 49166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_sensor_test_pattern_mode_t, 49266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_test_pattern_mode_t> TEST_PATTERN_MAP[]; 49366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<camera_metadata_enum_android_sensor_reference_illuminant1_t, 49466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_illuminat_t> REFERENCE_ILLUMINANT_MAP[]; 49566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraMap<int32_t, 49666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_hfr_mode_t> HFR_MODE_MAP[]; 49766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static const QCameraPropMap CDS_MAP[]; 49966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pendingRequestIterator erasePendingRequest(pendingRequestIterator i); 50166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //GPU library to read buffer padding details. 50266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *lib_surface_utils; 50366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*LINK_get_surface_pixel_alignment)(); 50466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mSurfaceStridePadding; 50566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin State mState; 50766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 50866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 50966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; // namespace qcamera 51066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 51166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /* __QCAMERA2HARDWAREINTERFACE_H__ */ 512