ExynosCameraHWInterface2.h revision daa1fcd6e8861944412e5c77db5eb441512aef38
1c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/* 2c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** 3c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2008, The Android Open Source Project 4c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Copyright 2012, Samsung Electronics Co. LTD 5c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** 6c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Licensed under the Apache License, Version 2.0 (the "License"); 7c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** you may not use this file except in compliance with the License. 8c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** You may obtain a copy of the License at 9c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** 10c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** http://www.apache.org/licenses/LICENSE-2.0 11c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** 12c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** Unless required by applicable law or agreed to in writing, software 13c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** distributed under the License is distributed on an "AS IS" BASIS, 14c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** See the License for the specific language governing permissions and 16c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin** limitations under the License. 17c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin*/ 18c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 19c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin/*! 20c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \file ExynosCameraHWInterface2.h 21c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \brief header file for Android Camera API 2.0 HAL 22c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * \author Sungjoong Kang(sj3.kang@samsung.com) 2313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * \date 2012/07/10 24c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * 25c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * <b>Revision History: </b> 26c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * - 2012/05/31 : Sungjoong Kang(sj3.kang@samsung.com) \n 27c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin * Initial Release 2813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * 2913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * - 2012/07/10 : Sungjoong Kang(sj3.kang@samsung.com) \n 3013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * 2nd Release 3113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang * 32c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin */ 3313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 34c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#ifndef EXYNOS_CAMERA_HW_INTERFACE_2_H 35c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define EXYNOS_CAMERA_HW_INTERFACE_2_H 36c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 37c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <hardware/camera2.h> 38c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <camera/Camera.h> 39c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <camera/CameraParameters.h> 40c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "SignalDrivenThread.h" 41c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "MetadataConverter.h" 42c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "exynos_v4l2.h" 4313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosRect.h" 4413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosBuffer.h" 45c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "videodev2_exynos_camera.h" 46c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "gralloc_priv.h" 4713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosJpegEncoderForCamera.h" 48c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <fcntl.h> 49c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "fimc-is-metadata.h" 50c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "ion.h" 5113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosExif.h" 5213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "csc.h" 53daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#include "ExynosCamera2.h" 54c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 55c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinnamespace android { 56c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 57c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 58c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NODE_PREFIX "/dev/video" 59c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 60c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NUM_MAX_STREAM_THREAD (5) 6113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_DEQUEUED_REQUEST (8) 6213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang/* #define NUM_MAX_REQUEST_MGR_ENTRY NUM_MAX_DEQUEUED_REQUEST */ 6313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_REQUEST_MGR_ENTRY (10) 64c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define MAX_CAMERA_MEMORY_PLANE_NUM (4) 6513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_CAMERA_BUFFERS (16) 6613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_BAYER_BUFFERS (8) 679dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang#define NUM_SENSOR_QBUF (4) 6813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 699dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang#define PREVIEW_GSC_NODE_NUM (1) 7013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define PICTURE_GSC_NODE_NUM (2) 71c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 7213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1) 7313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_REPROCESS_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<2) 7413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3) 7513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4) 76c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_GET_BUFFER (SIGNAL_THREAD_COMMON_LAST<<5) 77c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_PUT_BUFFER (SIGNAL_THREAD_COMMON_LAST<<6) 78c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_CHANGE_PARAMETER (SIGNAL_THREAD_COMMON_LAST<<7) 7913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8) 8013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_ISP_START_BAYER_INPUT (SIGNAL_THREAD_COMMON_LAST<<9) 819dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang#define SIGNAL_ISP_START_BAYER_DEQUEUE (SIGNAL_THREAD_COMMON_LAST<<10) 82c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 83c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15) 84c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 85c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 8613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinenum sensor_name { 88c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K3H2 = 1, 89c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K6A3 = 2, 90c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K4E5 = 3, 91c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K3H7 = 4, 92c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_CUSTOM = 5, 93c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_END 94c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 95c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 96c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 97c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct node_info { 98c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int fd; 99c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int width; 100c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int height; 101c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int format; 102c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int planes; 103c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int buffers; 104c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin enum v4l2_memory memory; 105c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin enum v4l2_buf_type type; 106be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang ion_client ionClient; 107be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS]; 108be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang bool streamOn; 109c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} node_info_t; 110c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 111c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 112c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct camera_hw_info { 113c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int sensor_id; 114c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 115c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin node_info_t sensor; 11613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang node_info_t isp; 11713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang node_info_t capture; 11813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 11913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang /*shot*/ // temp 12013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang struct camera2_shot_ext dummy_shot; 121c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 122c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} camera_hw_info_t; 123c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 12413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef enum request_entry_status { 125c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin EMPTY, 126c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin REGISTERED, 127be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang REQUESTED, 128be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang CAPTURED 129c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_entry_status_t; 130c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 131c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct request_manager_entry { 13213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang request_entry_status_t status; 13313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera_metadata_t *original_request; 134be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang struct camera2_shot_ext internal_shot; 13513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int output_stream_count; 13613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool dynamic_meta_vaild; 137c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_manager_entry_t; 138c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 139c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass RequestManager { 140c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic: 141c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin RequestManager(SignalDrivenThread* main_thread); 142c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ~RequestManager(); 143c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int GetNumEntries(); 144c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool IsRequestQueueFull(); 14513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 14613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void RegisterRequest(camera_metadata_t *new_request); 14713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void DeregisterRequest(camera_metadata_t **deregistered_request); 14813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool PrepareFrame(size_t *num_entries, size_t *frame_size, 14913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera_metadata_t **prepared_frame); 15013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int MarkProcessingRequest(ExynosBuffer *buf); 1519dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void NotifyStreamOutput(int frameCnt, int stream_id); 15213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void DumpInfoWithIndex(int index); 1539dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext, int frameCnt); 15413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void CheckCompleted(int index); 1559dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void UpdateOutputStreamInfo(struct camera2_shot_ext *shot_ext, int frameCnt); 1569dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void RegisterTimestamp(int frameCnt, nsecs_t *frameTime); 1579dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang uint64_t GetTimestamp(int frameCnt); 1589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int FindFrameCnt(struct camera2_shot_ext * shot_ext); 1599dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int FindEntryIndexByFrameCnt(int frameCnt); 160b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void Dump(void); 161b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang int GetNextIndex(int index); 162b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void SetDefaultParameters(int cropX); 163b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void SetInitialSkip(int count); 164c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate: 165c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 166c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin MetadataConverter *m_metadataConverter; 167c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SignalDrivenThread *m_mainThread; 168c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_numOfEntries; 169c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryInsertionIndex; 170c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryProcessingIndex; 171c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryFrameOutputIndex; 172c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY]; 17313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int m_completedIndex; 174c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 175c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Mutex m_requestMutex; 176c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 177c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //TODO : alloc dynamically 178c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin char m_tempFrameMetadataBuf[2000]; 179c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera_metadata_t *m_tempFrameMetadata; 1809dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 181b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang int m_sensorPipelineSkipCnt; 1829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_cropX; 1839dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 184c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 185c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1869dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 1879dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangtypedef struct bayer_buf_entry { 1889dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int status; 1899dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int reqFrameCnt; 1909dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang nsecs_t timeStamp; 1919dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} bayer_buf_entry_t; 1929dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 1939dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 1949dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangclass BayerBufManager { 1959dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangpublic: 1969dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang BayerBufManager(); 1979dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ~BayerBufManager(); 1989dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForSensorEnqueue(); 1999dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkSensorEnqueue(int index); 2009dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp); 2019dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForIspEnqueue(int *reqFrameCnt); 2029dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForIspDequeue(int *reqFrameCnt); 2039dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkIspEnqueue(int index); 2049dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkIspDequeue(int index); 2059dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnSensor(); 2069dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnHalFilled(); 2079dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnIsp(); 2089dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 2099dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangprivate: 2109dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNextIndex(int index); 2119dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 2129dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int sensorEnqueueHead; 2139dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int sensorDequeueHead; 2149dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int ispEnqueueHead; 2159dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int ispDequeueHead; 2169dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnSensor; 2179dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnIsp; 2189dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnHalFilled; 2199dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnHalEmpty; 2209dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 2219dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bayer_buf_entry_t entries[NUM_BAYER_BUFFERS]; 2229dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang}; 2239dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 2249dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 22513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NOT_AVAILABLE (0) 22613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define REQUIRES_DQ_FROM_SVC (1) 22713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_DRIVER (2) 22813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_HAL (3) 22913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_SERVICE (4) 23013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 23113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_NOT_AVAILABLE (0) 23213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SENSOR (1) 23313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_FILLED (2) 23413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_ISP (3) 23513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SERVICE (4) 23613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_EMPTY (5) 23713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 23813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef struct stream_parameters { 23913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int streamType; 24013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint32_t outputWidth; 24113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint32_t outputHeight; 24213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint32_t nodeWidth; 24313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint32_t nodeHeight; 24413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int outputFormat; 24513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int nodeFormat; 246c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin const camera2_stream_ops_t* streamOps; 247c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t usage; 24813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int numHwBuffers; 24913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int numSvcBuffers; 250be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numOwnSvcBuffers; 251c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int fd; 25213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int svcPlanes; 25313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int nodePlanes; 25413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang enum v4l2_memory memory; 25513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang enum v4l2_buf_type halBuftype; 256be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numSvcBufsInHal; 25713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS]; 25813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS]; 25913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int svcBufStatus[NUM_MAX_CAMERA_BUFFERS]; 260be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int svcBufIndex; 261be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang ion_client ionClient; 26213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang node_info_t node; 263c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} stream_parameters_t; 264c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 2659dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangtypedef struct record_parameters { 2669dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang uint32_t outputWidth; 2679dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang uint32_t outputHeight; 2689dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int outputFormat; 2699dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang const camera2_stream_ops_t* streamOps; 2709dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang uint32_t usage; 2719dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numSvcBuffers; 272be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numOwnSvcBuffers; 2739dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int svcPlanes; 2749dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS]; 2759dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS]; 2769dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int svcBufStatus[NUM_MAX_CAMERA_BUFFERS]; 277be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int svcBufIndex; 278be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numSvcBufsInHal; 2799dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} record_parameters_t; 28013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 281c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass ExynosCameraHWInterface2 : public virtual RefBase { 282c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic: 283daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev, ExynosCamera2 * camera); 284c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual ~ExynosCameraHWInterface2(); 285c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 286c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual void release(); 28713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 288c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin inline int getCameraId() const; 289c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 290c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops); 291c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int notifyRequestQueueNotEmpty(); 292c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops); 293c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int getInProgressCount(); 294c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int flushCapturesInProgress(); 295c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int constructDefaultRequest(int request_template, camera_metadata_t **request); 29613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang virtual int allocateStream(uint32_t width, uint32_t height, 297c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int format, const camera2_stream_ops_t *stream_ops, 298c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers); 299c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers); 300c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int releaseStream(uint32_t stream_id); 301c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int allocateReprocessStream(uint32_t width, uint32_t height, 302c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, 303c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers); 304c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int releaseReprocessStream(uint32_t stream_id); 305c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2); 306c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user); 307c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops); 308c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int dump(int fd); 309c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate: 31013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangclass MainThread : public SignalDrivenThread { 31113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosCameraHWInterface2 *mHardware; 31213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang public: 31313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang MainThread(ExynosCameraHWInterface2 *hw): 31413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang SignalDrivenThread(), 31513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware(hw) { 31613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang// Start("MainThread", PRIORITY_DEFAULT, 0); 31713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 31813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~MainThread(); 31913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang status_t readyToRunInternal() 32013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang { 32113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang return NO_ERROR; 32213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 32313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() 32413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang { 32513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_mainThreadFunc(this); 32613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang return; 32713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 32813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void release(void); 32913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang }; 3309dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin class SensorThread : public SignalDrivenThread { 332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ExynosCameraHWInterface2 *mHardware; 333c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin public: 334c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SensorThread(ExynosCameraHWInterface2 *hw): 335c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SignalDrivenThread("SensorThread", PRIORITY_DEFAULT, 0), 336c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware(hw), 337c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin m_isBayerOutputEnabled(false) { } 33813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~SensorThread(); 339c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t readyToRunInternal() { 34013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_sensorThreadInitialize(this); 341c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_ERROR; 342c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 34313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() { 344c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware->m_sensorThreadFunc(this); 345c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return; 346c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 3479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void release(void); 348c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //private: 349c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool m_isBayerOutputEnabled; 350c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_sensorFd; 35113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang }; 35213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 35313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang class IspThread : public SignalDrivenThread { 35413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosCameraHWInterface2 *mHardware; 35513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang public: 35613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang IspThread(ExynosCameraHWInterface2 *hw): 35713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang SignalDrivenThread("IspThread", PRIORITY_DEFAULT, 0), 35813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware(hw) { } 35913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~IspThread(); 36013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang status_t readyToRunInternal() { 36113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_ispThreadInitialize(this); 36213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang return NO_ERROR; 36313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 36413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() { 36513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_ispThreadFunc(this); 36613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang return; 36713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 36813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void release(void); 36913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang //private: 370c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_ispFd; 371c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 372c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 373c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin class StreamThread : public SignalDrivenThread { 374c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ExynosCameraHWInterface2 *mHardware; 375c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin public: 376c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index): 377c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SignalDrivenThread("StreamThread", PRIORITY_DEFAULT, 0), 378c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware(hw), 379c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin m_index(new_index) { } 38013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~StreamThread(); 381c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin status_t readyToRunInternal() { 38213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_streamThreadInitialize(this); 383c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return NO_ERROR; 384c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 38513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() { 386c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware->m_streamThreadFunc(this); 387c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return; 388c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 3899dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void setRecordingParameter(record_parameters_t * recordParm); 39013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void setParameter(stream_parameters_t * new_parameters); 39113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void applyChange(void); 39213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void release(void); 39313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int findBufferIndex(void * bufAddr); 394c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 395c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 39613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint8_t m_index; 3979dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_activated; 39813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang //private: 39913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang stream_parameters_t m_parameters; 4009dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang stream_parameters_t *m_tempParameters; 4019dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang record_parameters_t m_recordParameters; 40213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isBufferInit; 403b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang bool m_releasing; 40413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang }; 405c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 406c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sp<MainThread> m_mainThread; 407c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sp<SensorThread> m_sensorThread; 40813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang sp<IspThread> m_ispThread; 40913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD]; 41013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 41113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 4129dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 413c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin RequestManager *m_requestManager; 4149dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang BayerBufManager *m_BayerManager; 415daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ExynosCamera2 *m_camera2; 416c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 417c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_mainThreadFunc(SignalDrivenThread * self); 418c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_sensorThreadFunc(SignalDrivenThread * self); 41913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_sensorThreadInitialize(SignalDrivenThread * self); 42013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_ispThreadFunc(SignalDrivenThread * self); 42113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_ispThreadInitialize(SignalDrivenThread * self); 422c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_streamThreadFunc(SignalDrivenThread * self); 42313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_streamThreadInitialize(SignalDrivenThread * self); 42413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 42513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_getAlignedYUVSize(int colorFormat, int w, int h, 42613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer *buf); 42713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_getRatioSize(int src_w, int src_h, 42813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int dst_w, int dst_h, 42913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int *crop_x, int *crop_y, 43013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int *crop_w, int *crop_h, 43113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int zoom); 43213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int createIonClient(ion_client ionClient); 43313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int deleteIonClient(ion_client ionClient); 43413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 43513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum); 43613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum); 43713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void initCameraMemory(ExynosBuffer *buf, int iMemoryNum); 43813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 43913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void DumpInfoWithShot(struct camera2_shot_ext * shot_ext); 44013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool yuv2Jpeg(ExynosBuffer *yuvBuf, 44113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer *jpegBuf, 44213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosRect *rect); 44313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang exif_attribute_t mExifInfo; 44413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void *m_exynosPictureCSC; 4459dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void *m_exynosVideoCSC; 44613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 4479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_jpegEncodingFrameCnt; 448c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 449c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_request_queue_src_ops_t *m_requestQueueOps; 450c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_frame_queue_dst_ops_t *m_frameQueueOps; 451c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_notify_callback m_notifyCb; 452c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void *m_callbackCookie; 453c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 454c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_numOfRemainingReqInSvc; 455c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool m_isRequestQueuePending; 45613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isRequestQueueNull; 45713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera2_device_t *m_halDevice; 45813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang static gralloc_module_t const* m_grallocHal; 459c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 460c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 46113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera_hw_info_t m_camera_info; 462c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 463c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ion_client m_ionCameraClient; 464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 46513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isSensorThreadOn; 46613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isSensorStarted; 46713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 46813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 46913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 47013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_initFlag1; 47113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_initFlag2; 4729dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_ispProcessingFrameCnt; 47313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 47413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int indexToQueue[3+1]; 47513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int m_fd_scp; 47613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 47713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_scp_flushing; 47813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_closing; 47913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer m_resizeBuf; 4809dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_recordingEnabled; 4819dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_previewOutput; 4829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_recordOutput; 4839dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_needsRecordBufferInit; 4849dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int lastFrameCnt; 4859dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_cameraId; 4869dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_scp_closing; 4879dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_scp_closed; 4889dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 489c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 490c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 491c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; // namespace android 492c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 493c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#endif 494