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 __QCAMERA2HARDWAREINTERFACE_H__ 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define __QCAMERA2HARDWAREINTERFACE_H__ 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/Mutex.h> 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <utils/Condition.h> 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "camera.h" 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraAllocator.h" 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraChannel.h" 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraCmdThread.h" 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraDisplay.h" 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraMem.h" 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraParameters.h" 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraParametersIntf.h" 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraPerf.h" 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraPostProc.h" 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraQueue.h" 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraStream.h" 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraStateMachine.h" 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraThermalAdapter.h" 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef TARGET_TS_MAKEUP 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "ts_makeup_engine.h" 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "ts_detectface_engine.h" 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinextern "C" { 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_camera_interface.h" 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "mm_jpeg_interface.h" 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QCameraTrace.h" 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinnamespace qcamera { 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef TRUE 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define TRUE 1 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef FALSE 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define FALSE 0 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_ZSL, 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_CAPTURE, 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_PREVIEW, 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_VIDEO, 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_SNAPSHOT, 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_RAW, 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_METADATA, 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_ANALYSIS, 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_CALLBACK, 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_CH_TYPE_MAX 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} qcamera_ch_type_enum_t; 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t msg_type; 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ext1; 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ext2; 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} qcamera_evt_argm_t; 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_PREVIEW 1 9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_VIDEO (1<<1) 9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_SNAPSHOT (1<<2) 9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_THUMBNAIL (1<<3) 9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_RAW (1<<4) 9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_JPEG (1<<5) 9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_INPUT_REPROCESS (1<<6) 10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_DUMP_FRM_MASK_ALL 0x000000ff 10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_ION_USE_CACHE true 10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QCAMERA_ION_USE_NOCACHE false 10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MAX_ONGOING_JOBS 25 10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MAX(a, b) ((a) > (b) ? (a) : (b)) 10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define EXIF_ASCII_PREFIX_SIZE 8 //(sizeof(ExifAsciiPrefix)) 11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_NOTIFY_CALLBACK, 11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_DATA_CALLBACK, 11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_DATA_TIMESTAMP_CALLBACK, 11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCAMERA_DATA_SNAPSHOT_CALLBACK 11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} qcamera_callback_type_m; 11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*camera_release_callback)(void *user_data, 11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *cookie, 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cb_status); 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*jpeg_data_callback)(int32_t msg_type, 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const camera_memory_t *data, unsigned int index, 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_frame_metadata_t *metadata, void *user, 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_idx, camera_release_callback release_cb, 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *release_cookie, void *release_data); 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qcamera_callback_type_m cb_type; // event type 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t msg_type; // msg type 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ext1; // extended parameter 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ext2; // extended parameter 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_memory_t * data; // ptr to data memory struct 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin unsigned int index; // index of the buf in the whole buffer 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int64_t timestamp; // buffer timestamp 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_frame_metadata_t *metadata; // meta data 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user_data; // any data needs to be released after callback 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *cookie; // release callback cookie 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_release_callback release_cb; // release callback 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_index; // frame index for the buffer 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} qcamera_callback_argm_t; 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCameraCbNotifier { 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraCbNotifier(QCamera2HardwareInterface *parent) : 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mNotifyCb (NULL), 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mDataCb (NULL), 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mDataCbTimestamp (NULL), 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mCallbackCookie (NULL), 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mJpegCb(NULL), 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mJpegCallbackCookie(NULL), 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mParent (parent), 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mDataQ(releaseNotifications, this), 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mActive(false){} 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCameraCbNotifier(); 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t notifyCallback(qcamera_callback_argm_t &cbArgs); 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void setCallbacks(camera_notify_callback notifyCb, 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback dataCb, 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback dataCbTimestamp, 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *callbackCookie); 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void setJpegCallBacks( 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_data_callback jpegCb, void *callbackCookie); 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t startSnapshots(); 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void stopSnapshots(); 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void exit(); 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void * cbNotifyRoutine(void * data); 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void releaseNotifications(void *data, void *user_data); 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static bool matchSnapshotNotifications(void *data, void *user_data); 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static bool matchPreviewNotifications(void *data, void *user_data); 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t flushPreviewNotifications(); 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_notify_callback mNotifyCb; 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback mDataCb; 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback mDataCbTimestamp; 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *mCallbackCookie; 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_data_callback mJpegCb; 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *mJpegCallbackCookie; 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera2HardwareInterface *mParent; 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraQueue mDataQ; 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraCmdThread mProcTh; 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mActive; 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinclass QCamera2HardwareInterface : public QCameraAllocator, 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin public QCameraThermalCallback, public QCameraAdjustFPS 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin{ 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* static variable and functions accessed by camera service */ 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static camera_device_ops_t mCameraOps; 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int set_preview_window(struct camera_device *, 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct preview_stream_ops *window); 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void set_CallBacks(struct camera_device *, 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_notify_callback notify_cb, 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback data_cb, 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback data_cb_timestamp, 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_request_memory get_memory, 20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user); 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void enable_msg_type(struct camera_device *, int32_t msg_type); 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void disable_msg_type(struct camera_device *, int32_t msg_type); 20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int msg_type_enabled(struct camera_device *, int32_t msg_type); 20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int start_preview(struct camera_device *); 20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void stop_preview(struct camera_device *); 20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int preview_enabled(struct camera_device *); 20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int store_meta_data_in_buffers(struct camera_device *, int enable); 20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int restart_start_preview(struct camera_device *); 20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int restart_stop_preview(struct camera_device *); 21066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int pre_start_recording(struct camera_device *); 21166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int start_recording(struct camera_device *); 21266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void stop_recording(struct camera_device *); 21366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int recording_enabled(struct camera_device *); 21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void release_recording_frame(struct camera_device *, const void *opaque); 21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int auto_focus(struct camera_device *); 21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int cancel_auto_focus(struct camera_device *); 21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int pre_take_picture(struct camera_device *); 21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int take_picture(struct camera_device *); 21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takeLiveSnapshot_internal(); 22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takeBackendPic_internal(bool *JpegMemOpt, char *raw_format); 22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void clearIntPendingEvents(); 22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void checkIntPicPending(bool JpegMemOpt, char *raw_format); 22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int cancel_picture(struct camera_device *); 22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int set_parameters(struct camera_device *, const char *parms); 22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int stop_after_set_params(struct camera_device *); 22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int commit_params(struct camera_device *); 22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int restart_after_set_params(struct camera_device *); 22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static char* get_parameters(struct camera_device *); 22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void put_parameters(struct camera_device *, char *); 23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int send_command(struct camera_device *, 23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cmd, int32_t arg1, int32_t arg2); 23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int send_command_restart(struct camera_device *, 23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cmd, int32_t arg1, int32_t arg2); 23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void release(struct camera_device *); 23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int dump(struct camera_device *, int fd); 23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int close_camera_device(hw_device_t *); 23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int register_face_image(struct camera_device *, 23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *img_ptr, 24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_offline_src_config_t *config); 24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int prepare_preview(struct camera_device *); 24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int prepare_snapshot(struct camera_device *device); 24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinpublic: 24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCamera2HardwareInterface(uint32_t cameraId); 24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual ~QCamera2HardwareInterface(); 24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int openCamera(struct hw_device_t **hw_device); 24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Dual camera specific oprations 25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int bundleRelatedCameras(bool syncOn, 25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t related_sensor_session_id); 25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int getCameraSessionId(uint32_t* session_id); 25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const cam_sync_related_sensors_event_info_t* getRelatedCamSyncInfo( 25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void); 25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setRelatedCamSyncInfo( 25666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_sync_related_sensors_event_info_t* info); 25766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setMpoComposition(bool enable); 25866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool getMpoComposition(void); 25966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool getRecordingHintValue(void); 26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setRecordingHintValue(int32_t value); 26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isPreviewRestartNeeded(void) { return mPreviewRestartNeeded; }; 26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int getCapabilities(uint32_t cameraId, 26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct camera_info *info, cam_sync_type_t *cam_type); 26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static int initCapabilities(uint32_t cameraId, mm_camera_vtbl_t *cameraHandle); 26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_capability_t *getCamHalCapabilities(); 26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Implementation of QCameraAllocator 26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCameraMemory *allocateStreamBuf(cam_stream_type_t stream_type, 26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t size, int stride, int scanline, uint8_t &bufferCnt); 27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t allocateMoreStreamBuf(QCameraMemory *mem_obj, 27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t size, uint8_t &bufferCnt); 27266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCameraHeapMemory *allocateStreamInfoBuf(cam_stream_type_t stream_type); 27466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCameraHeapMemory *allocateMiscBuf(cam_stream_info_t *streamInfo); 27566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual QCameraMemory *allocateStreamUserBuf(cam_stream_info_t *streamInfo); 27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual void waitForDeferredAlloc(cam_stream_type_t stream_type); 27766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Implementation of QCameraThermalCallback 27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int thermalEvtHandle(qcamera_thermal_level_enum_t *level, 28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata, void *data); 28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int recalcFPSRange(int &minFPS, int &maxFPS, 28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const float &minVideoFPS, const float &maxVideoFPS, 28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_fps_range_t &adjustedRange); 28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin friend class QCameraStateMachine; 28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin friend class QCameraPostProcessor; 28866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin friend class QCameraCbNotifier; 28966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin friend class QCameraMuxer; 29066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void setJpegCallBacks(jpeg_data_callback jpegCb, 29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *callbackCookie); 29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t initJpegHandle(); 29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t deinitJpegHandle(); 29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setJpegHandleInfo(mm_jpeg_ops_t *ops, 29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_mpo_ops_t *mpo_ops, uint32_t pJpegClientHandle); 29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getJpegHandleInfo(mm_jpeg_ops_t *ops, 29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_mpo_ops_t *mpo_ops, uint32_t *pJpegClientHandle); 29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getCameraId() { return mCameraId; }; 30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int setPreviewWindow(struct preview_stream_ops *window); 30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int setCallBacks( 30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_notify_callback notify_cb, 30466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback data_cb, 30566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback data_cb_timestamp, 30666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_request_memory get_memory, 30766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user); 30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int enableMsgType(int32_t msg_type); 30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int disableMsgType(int32_t msg_type); 31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int msgTypeEnabled(int32_t msg_type); 31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int msgTypeEnabledWithLock(int32_t msg_type); 31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int startPreview(); 31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int stopPreview(); 31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int storeMetaDataInBuffers(int enable); 31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int preStartRecording(); 31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int startRecording(); 31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int stopRecording(); 31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int releaseRecordingFrame(const void *opaque); 31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int autoFocus(); 32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int cancelAutoFocus(); 32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int preTakePicture(); 32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takePicture(); 32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int stopCaptureChannel(bool destroy); 32466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int cancelPicture(); 32566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takeLiveSnapshot(); 32666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int takePictureInternal(); 32766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int cancelLiveSnapshot(); 32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char* getParameters() {return mParameters.getParameters(); } 32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int putParameters(char *); 33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int sendCommand(int32_t cmd, int32_t &arg1, int32_t &arg2); 33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int release(); 33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int dump(int fd); 33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int registerFaceImage(void *img_ptr, 33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_offline_src_config_t *config, 33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t &faceID); 33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t longShot(); 33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t deferPPInit(); 33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int openCamera(); 34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int closeCamera(); 34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int processAPI(qcamera_sm_evt_enum_t api, void *api_payload); 34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int processEvt(qcamera_sm_evt_enum_t evt, void *evt_payload); 34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int processSyncEvt(qcamera_sm_evt_enum_t evt, void *evt_payload); 34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void lockAPI(); 34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void waitAPIResult(qcamera_sm_evt_enum_t api_evt, qcamera_api_result_t *apiResult); 34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void unlockAPI(); 34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void signalAPIResult(qcamera_api_result_t *result); 34966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void signalEvtResult(qcamera_api_result_t *result); 35066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int calcThermalLevel(qcamera_thermal_level_enum_t level, 35266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const int minFPSi, const int maxFPSi, 35366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin const float &minVideoFPS, const float &maxVideoFPS, 35466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_fps_range_t &adjustedRange, 35566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin enum msm_vfe_frame_skip_pattern &skipPattern); 35666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int updateThermalLevel(void *level); 35766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // update entris to set parameters and check if restart is needed 35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int updateParameters(const char *parms, bool &needRestart); 36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // send request to server to set parameters 36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int commitParameterChanges(); 36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isCaptureShutterEnabled(); 36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needDebugFps(); 36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isRegularCapture(); 36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isCACEnabled(); 36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool is4k2kResolution(cam_dimension_t* resolution); 36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isPreviewRestartEnabled(); 36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needReprocess(); 37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needRotationReprocess(); 37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void debugShowVideoFPS(); 37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void debugShowPreviewFPS(); 37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpJpegToFile(const void *data, size_t size, uint32_t index); 37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpFrameToFile(QCameraStream *stream, 37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_buf_def_t *frame, uint32_t dump_type, const char *misc = NULL); 37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void dumpMetadataToFile(QCameraStream *stream, 37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_buf_def_t *frame,char *type); 37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void releaseSuperBuf(mm_camera_super_buf_t *super_buf); 37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void playShutter(); 38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void getThumbnailSize(cam_dimension_t &dim); 38166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t getJpegQuality(); 38266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraExif *getExifData(); 38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_sensor_t getSensorType(); 38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isLowPowerMode(); 38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processAutoFocusEvent(cam_auto_focus_data_t &focus_data); 38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processZoomEvent(cam_crop_data_t &crop_info); 38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processPrepSnapshotDoneEvent(cam_prep_snapshot_state_t prep_snapshot_state); 389d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch int32_t processASDUpdate(cam_asd_decision_t asd_decision); 39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processJpegNotify(qcamera_jpeg_evt_payload_t *jpeg_job); 39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processHDRData(cam_asd_hdr_scene_data_t hdr_scene); 39266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processRetroAECUnlock(); 39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processZSLCaptureDone(); 39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processSceneData(cam_scene_mode_type scene); 39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t transAwbMetaToParams(cam_awb_params_t &awb_params); 39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processFocusPositionInfo(cam_focus_pos_info_t &cur_pos_info); 39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processAEInfo(cam_3a_params_t &ae_params); 39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t sendEvtNotify(int32_t msg_type, int32_t ext1, int32_t ext2); 40066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t sendDataNotify(int32_t msg_type, 40166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_memory_t *data, 40266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t index, 40366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_frame_metadata_t *metadata, 40466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t frame_idx); 40566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 40666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t sendPreviewCallback(QCameraStream *stream, 40766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraMemory *memory, uint32_t idx); 40866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t selectScene(QCameraChannel *pChannel, 40966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_super_buf_t *recvd_frame); 41066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 41166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addChannel(qcamera_ch_type_enum_t ch_type); 41266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t startChannel(qcamera_ch_type_enum_t ch_type); 41366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t stopChannel(qcamera_ch_type_enum_t ch_type); 41466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t delChannel(qcamera_ch_type_enum_t ch_type, bool destroy = true); 41566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addPreviewChannel(); 41666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addSnapshotChannel(); 41766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addVideoChannel(); 41866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addZSLChannel(); 41966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addCaptureChannel(); 42066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addRawChannel(); 42166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addMetaDataChannel(); 42266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addAnalysisChannel(); 42366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraReprocessChannel *addReprocChannel(QCameraChannel *pInputChannel, 42466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t cur_channel_index = 0); 42566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraReprocessChannel *addOfflineReprocChannel( 42666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_offline_src_config_t &img_config, 42766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_pp_feature_config_t &pp_feature, 42866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_cb_routine stream_cb, 42966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 43066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addCallbackChannel(); 43166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 43266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t addStreamToChannel(QCameraChannel *pChannel, 43366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t streamType, 43466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin stream_cb_routine streamCB, 43566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData); 43666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t preparePreview(); 43766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void unpreparePreview(); 43866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t prepareRawStream(QCameraChannel *pChannel); 43966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraChannel *getChannelByHandle(uint32_t channelHandle); 44066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_buf_def_t *getSnapshotFrame(mm_camera_super_buf_t *recvd_frame); 44166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processFaceDetectionResult(cam_faces_data_t *fd_data); 44266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needPreviewFDCallback(uint8_t num_faces); 44366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t processHistogramStats(cam_hist_stats_t &stats_data); 44466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setHistogram(bool histogram_en); 44566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t setFaceDetection(bool enabled); 44666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t prepareHardwareForSnapshot(int32_t afNeeded); 447d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch bool needProcessPreviewFrame(uint32_t frameID); 44866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needSendPreviewCallback(); 44966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isNoDisplayMode() {return mParameters.isNoDisplayMode();}; 45066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isZSLMode() {return mParameters.isZSLMode();}; 45166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isRdiMode() {return mParameters.isRdiMode();}; 45266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t numOfSnapshotsExpected() { 45366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin return mParameters.getNumOfSnapshots();}; 45466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isSecureMode() {return mParameters.isSecureMode();}; 45566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isLongshotEnabled() { return mLongshotEnabled; }; 45666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isHFRMode() {return mParameters.isHfrMode();}; 45766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isLiveSnapshot() {return m_stateMachine.isRecording();}; 45866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void setRetroPicture(bool enable) { bRetroPicture = enable; }; 45966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isRetroPicture() {return bRetroPicture; }; 46066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool isHDRMode() {return mParameters.isHDREnabled();}; 46166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t getBufNumRequired(cam_stream_type_t stream_type); 46266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needFDMetadata(qcamera_ch_type_enum_t channel_type); 46366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureOnlineRotation(QCameraChannel &ch); 46466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t declareSnapshotStreams(); 46566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t unconfigureAdvancedCapture(); 46666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureAdvancedCapture(); 46766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureAFBracketing(bool enable = true); 46866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureHDRBracketing(); 46966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t stopAdvancedCapture(QCameraPicChannel *pChannel); 47066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t startAdvancedCapture(QCameraPicChannel *pChannel); 47166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureOptiZoom(); 47266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureStillMore(); 47366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t configureAEBracketing(); 47466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t updatePostPreviewParameters(); 47566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin inline void setOutputImageCount(uint32_t aCount) {mOutputCount = aCount;} 47666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin inline uint32_t getOutputImageCount() {return mOutputCount;} 47766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool processUFDumps(qcamera_jpeg_evt_payload_t *evt); 47866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void captureDone(); 47966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t updateMetadata(metadata_buffer_t *pMetaData); 48066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void fillFacesData(cam_faces_data_t &faces_data, metadata_buffer_t *metadata); 48166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 48266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getPPConfig(cam_pp_feature_config_t &pp_config, 48366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int8_t curIndex = 0, bool multipass = FALSE); 48466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual uint32_t scheduleBackgroundTask(BackgroundTask* bgTask); 48566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin virtual int32_t waitForBackgroundTask(uint32_t &taskId); 48666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool needDeferred(cam_stream_type_t stream_type); 48766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void camEvtHandle(uint32_t camera_handle, 48866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_event_t *evt, 48966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user_data); 49066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void jpegEvtHandle(jpeg_job_status_t status, 49166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t client_hdl, 49266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t jobId, 49366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t *p_buf, 49466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 49566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void *evtNotifyRoutine(void *data); 49766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 49866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // functions for different data notify cb 49966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void zsl_channel_cb(mm_camera_super_buf_t *recvd_frame, void *userdata); 50066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void capture_channel_cb_routine(mm_camera_super_buf_t *recvd_frame, 50166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 50266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void postproc_channel_cb_routine(mm_camera_super_buf_t *recvd_frame, 50366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 50466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void rdi_mode_stream_cb_routine(mm_camera_super_buf_t *frame, 50566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 50666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 50766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void nodisplay_preview_stream_cb_routine(mm_camera_super_buf_t *frame, 50866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 50966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 51066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void preview_stream_cb_routine(mm_camera_super_buf_t *frame, 51166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 51266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 51366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void synchronous_stream_cb_routine(mm_camera_super_buf_t *frame, 51466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, void *userdata); 51566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void postview_stream_cb_routine(mm_camera_super_buf_t *frame, 51666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 51766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 51866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void video_stream_cb_routine(mm_camera_super_buf_t *frame, 51966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 52066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 52166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void snapshot_channel_cb_routine(mm_camera_super_buf_t *frame, 52266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 52366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void raw_channel_cb_routine(mm_camera_super_buf_t *frame, 52466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 52566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void raw_stream_cb_routine(mm_camera_super_buf_t *frame, 52666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 52766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 52866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void preview_raw_stream_cb_routine(mm_camera_super_buf_t * super_frame, 52966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream * stream, 53066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void * userdata); 53166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void snapshot_raw_stream_cb_routine(mm_camera_super_buf_t * super_frame, 53266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream * stream, 53366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void * userdata); 53466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void metadata_stream_cb_routine(mm_camera_super_buf_t *frame, 53566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 53666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 53766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void callback_stream_cb_routine(mm_camera_super_buf_t *frame, 53866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, void *userdata); 53966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void reprocess_stream_cb_routine(mm_camera_super_buf_t *frame, 54066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStream *stream, 54166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userdata); 54266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 54366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void releaseCameraMemory(void *data, 54466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *cookie, 54566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cbStatus); 54666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void returnStreamBuffer(void *data, 54766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *cookie, 54866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t cbStatus); 54966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void getLogLevel(); 55066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 55166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t startRAWChannel(QCameraChannel *pChannel); 55266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t stopRAWChannel(); 55366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 55466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin inline bool getNeedRestart() {return m_bNeedRestart;} 55566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin inline void setNeedRestart(bool needRestart) {m_bNeedRestart = needRestart;} 55666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 557d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch /*Start display skip. Skip starts after 558d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch skipCnt number of frames from current frame*/ 559d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch void setDisplaySkip(bool enabled, uint8_t skipCnt = 0); 560d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch /*Caller can specify range frameID to skip. 561d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch if end is 0, all the frames after start will be skipped*/ 562d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch void setDisplayFrameSkip(uint32_t start = 0, uint32_t end = 0); 563d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch /*Verifies if frameId is valid to skip*/ 564d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch bool isDisplayFrameToSkip(uint32_t frameId); 565d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 56666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinprivate: 56766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_device_t mCameraDevice; 56866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mCameraId; 56966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_camera_vtbl_t *mCameraHandle; 57066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mCameraOpened; 57166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 57266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_jpeg_metadata_t mJpegMetadata; 57366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bRelCamCalibValid; 57466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 57566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin preview_stream_ops_t *mPreviewWindow; 57666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraParametersIntf mParameters; 57766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mMsgEnabled; 57866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mStoreMetaDataInFrame; 57966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 58066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_notify_callback mNotifyCb; 58166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_callback mDataCb; 58266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_data_timestamp_callback mDataCbTimestamp; 58366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin camera_request_memory mGetMemory; 58466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_data_callback mJpegCb; 58566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *mCallbackCookie; 58666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *mJpegCallbackCookie; 58766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bMpoEnabled; 58866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 58966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraStateMachine m_stateMachine; // state machine 59066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_smThreadActive; 59166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraPostProcessor m_postprocessor; // post processor 59266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraThermalAdapter &m_thermalAdapter; 59366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraCbNotifier m_cbNotifier; 59466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraPerfLock m_perfLock; 59566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t m_lock; 59666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t m_cond; 59766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin api_result_list *m_apiResultList; 59866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraMemoryPool m_memoryPool; 59966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t m_evtLock; 60166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t m_evtCond; 60266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qcamera_api_result_t m_evtResult; 60366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraChannel *m_channels[QCAMERA_CH_TYPE_MAX]; // array holding channel ptr 60666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 60766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bPreviewStarted; //flag indicates first preview frame callback is received 60866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bRecordStarted; //flag indicates Recording is started for first time 60966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 61066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Signifies if ZSL Retro Snapshots are enabled 61166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool bRetroPicture; 61266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Signifies AEC locked during zsl snapshots 61366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bLedAfAecLock; 61466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_af_state_t m_currentFocusState; 61566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 61666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mDumpFrmCnt; // frame dump count 61766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mDumpSkipCnt; // frame skip count 61866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_exif_params_t mExifParams; 61966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin qcamera_thermal_level_enum_t mThermalLevel; 62066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mActiveAF; 62166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_HDRSceneEnabled; 62266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mLongshotEnabled; 62366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 62466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_t mLiveSnapshotThread; 62566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_t mIntPicThread; 62666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mFlashNeeded; 62766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mDeviceRotation; 62866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mCaptureRotation; 62966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mJpegExifRotation; 63066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mUseJpegExifRotation; 63166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mIs3ALocked; 63266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mPrepSnapRun; 63366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mZoomLevel; 63466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Flag to indicate whether preview restart needed (for dual camera mode) 63566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mPreviewRestartNeeded; 63666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 63766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mVFrameCount; 63866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mVLastFrameCount; 63966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nsecs_t mVLastFpsTime; 64066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double mVFps; 64166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mPFrameCount; 64266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int mPLastFrameCount; 64366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin nsecs_t mPLastFpsTime; 64466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin double mPFps; 645d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint8_t mInstantAecFrameCount; 64666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 64766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //eztune variables for communication with eztune server at backend 64866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bIntJpegEvtPending; 64966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bIntRawEvtPending; 65066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin char m_BackendFileName[QCAMERA_MAX_FILEPATH_LENGTH]; 65166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t mBackendFileSize; 65266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t m_int_lock; 65366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_cond_t m_int_cond; 65466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 65566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin enum DeferredWorkCmd { 65666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_ALLOCATE_BUFF, 65766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_PPROC_START, 65866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_PPROC_INIT, 65966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_METADATA_ALLOC, 66066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_CREATE_JPEG_SESSION, 66166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_PARAM_ALLOC, 66266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_PARAM_INIT, 66366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_GENERIC, 66466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin CMD_DEF_MAX 66566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }; 66666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 66766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 66866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraChannel *ch; 66966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stream_type_t type; 67066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } DeferAllocBuffArgs; 67166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 67266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 67366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t bufferCnt; 67466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t size; 67566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } DeferMetadataAllocArgs; 67666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 67766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 67866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_encode_callback_t jpeg_cb; 67966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *user_data; 68066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } DeferPProcInitArgs; 68166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 68266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef union { 68366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferAllocBuffArgs allocArgs; 68466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraChannel *pprocArgs; 68566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferMetadataAllocArgs metadataAllocArgs; 68666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferPProcInitArgs pprocInitArgs; 68766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin BackgroundTask *genericArgs; 68866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } DeferWorkArgs; 68966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 69066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin typedef struct { 69166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mDefJobId; 69266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 69366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Job status is needed to check job was successful or failed 69466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Error code when job was not sucessful and there is error 69566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //0 when is initialized. 69666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //for sucessfull job, do not need to maintain job status 69766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mDefJobStatus; 69866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin } DefOngoingJob; 69966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 70066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DefOngoingJob mDefOngoingJobs[MAX_ONGOING_JOBS]; 70166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 70266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin struct DefWork 70366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin { 70466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DefWork(DeferredWorkCmd cmd_, 70566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t id_, 70666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferWorkArgs args_) 70766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin : cmd(cmd_), 70866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin id(id_), 70966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin args(args_){}; 71066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 71166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferredWorkCmd cmd; 71266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t id; 71366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferWorkArgs args; 71466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }; 71566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 71666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraCmdThread mDeferredWorkThread; 71766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraQueue mCmdQueue; 71866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 71966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mDefLock; 72066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Condition mDefCond; 72166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 72266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t queueDeferredWork(DeferredWorkCmd cmd, 72366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin DeferWorkArgs args); 72466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t dequeueDeferredWork(DefWork* dw, int32_t jobStatus); 72566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t waitDeferredWork(uint32_t &job_id); 72666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static void *deferredWorkRoutine(void *obj); 72766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool checkDeferredWork(uint32_t &job_id); 72866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t getDefJobStatus(uint32_t &job_id); 72966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 73066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mReprocJob; 73166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mJpegJob; 73266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mMetadataAllocJob; 73366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mInitPProcJob; 73466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mParamAllocJob; 73566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mParamInitJob; 73666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mOutputCount; 73766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mInputCount; 73866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mAdvancedCaptureConfigured; 73966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mHDRBracketingEnabled; 74066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t mNumPreviewFaces; 74166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // Jpeg Handle shared between HWI instances 74266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_ops_t mJpegHandle; 74366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // MPO handle shared between HWI instances 74466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // this is needed for MPO composition of related 74566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin // cam images 74666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_mpo_ops_t mJpegMpoHandle; 74766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mJpegClientHandle; 74866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mJpegHandleOwner; 74966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 75066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //ts add for makeup 75166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifdef TARGET_TS_MAKEUP 75266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin TSRect mFaceRect; 75366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool TsMakeupProcess_Preview(mm_camera_buf_def_t *pFrame,QCameraStream * pStream); 75466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool TsMakeupProcess_Snapshot(mm_camera_buf_def_t *pFrame,QCameraStream * pStream); 75566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool TsMakeupProcess(mm_camera_buf_def_t *frame,QCameraStream * stream,TSRect& faceRect); 75666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif 75766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraMemory *mMetadataMem; 75866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 75966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin static uint32_t sNextJobId; 76066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 76166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //Gralloc memory details 76266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin pthread_mutex_t mGrallocLock; 76366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mEnqueuedBuffers; 76466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool mCACDoneReceived; 76566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 76666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //GPU library to read buffer padding details. 76766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *lib_surface_utils; 76866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*LINK_get_surface_pixel_alignment)(); 76966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t mSurfaceStridePadding; 77066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 77166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin //QCamera Display Object 77266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QCameraDisplay mCameraDisplay; 77366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 77466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool m_bNeedRestart; 77566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Mutex mMapLock; 77666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Condition mMapCond; 777d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch 778d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch //Used to decide the next frameID to be skipped 779d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t mLastPreviewFrameID; 780d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch //FrameID to start frame skip. 781d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t mFrameSkipStart; 782d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch /*FrameID to stop frameskip. If this is not set, 783d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch all frames are skipped till we set this*/ 784d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch uint32_t mFrameSkipEnd; 78566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; 78666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 78766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin}; // namespace qcamera 78866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 78966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /* __QCAMERA2HARDWAREINTERFACE_H__ */ 790