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> 4052f543089f42c4d008a4e729ece05676fd644e36Sungjoong Kang#include <utils/List.h> 41c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "SignalDrivenThread.h" 42c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "MetadataConverter.h" 43c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "exynos_v4l2.h" 4413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosRect.h" 4513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosBuffer.h" 46c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "videodev2_exynos_camera.h" 47c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "gralloc_priv.h" 4813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosJpegEncoderForCamera.h" 49c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include <fcntl.h> 50c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "fimc-is-metadata.h" 51c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#include "ion.h" 5213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "ExynosExif.h" 5313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#include "csc.h" 54daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang#include "ExynosCamera2.h" 55eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang#include "cutils/properties.h" 56c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 57c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinnamespace android { 58c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 594aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi//#define EXYNOS_CAMERA_LOG 602adfa429e61241b94e6435b328030df53f27b3b0Jiyoung Shin#define ENABLE_FRAME_SYNC 61c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NODE_PREFIX "/dev/video" 62c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 63c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define NUM_MAX_STREAM_THREAD (5) 641c5e692d86d92906c7bde609fddb4af0742ce896Sungjoong Kang#define NUM_MAX_REQUEST_MGR_ENTRY (5) 6513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_MAX_CAMERA_BUFFERS (16) 6613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NUM_BAYER_BUFFERS (8) 67ac8c20603200744b8be1f15e348614ab60aaafe6Sungjoong Kang#define NUM_SCC_BUFFERS (8) 68ac8c20603200744b8be1f15e348614ab60aaafe6Sungjoong Kang#define NUM_SCP_BUFFERS (8) 6952f543089f42c4d008a4e729ece05676fd644e36Sungjoong Kang#define NUM_MIN_SENSOR_QBUF (3) 705506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define NUM_MAX_SUBSTREAM (4) 7113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 7213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define PICTURE_GSC_NODE_NUM (2) 7315fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang#define VIDEO_GSC_NODE_NUM (1) 74c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 7537e122d5da65e360abd566114cc30da7295358efSungjoong Kang#define STREAM_TYPE_DIRECT (0) 7637e122d5da65e360abd566114cc30da7295358efSungjoong Kang#define STREAM_TYPE_INDIRECT (1) 7737e122d5da65e360abd566114cc30da7295358efSungjoong Kang 7813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_REQ_Q_NOT_EMPTY (SIGNAL_THREAD_COMMON_LAST<<1) 795506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 8013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_MAIN_STREAM_OUTPUT_DONE (SIGNAL_THREAD_COMMON_LAST<<3) 8113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_SENSOR_START_REQ_PROCESSING (SIGNAL_THREAD_COMMON_LAST<<4) 825506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 8313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define SIGNAL_THREAD_RELEASE (SIGNAL_THREAD_COMMON_LAST<<8) 84c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 855506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define SIGNAL_STREAM_REPROCESSING_START (SIGNAL_THREAD_COMMON_LAST<<14) 86c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#define SIGNAL_STREAM_DATA_COMING (SIGNAL_THREAD_COMMON_LAST<<15) 87c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 880f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define NO_TRANSITION (0) 890f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_INACTIVE (1) 900f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_NEEDS_COMMAND (2) 910f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_STARTED (3) 920f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_SCANNING (4) 930f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_LOCKED (5) 940f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_FAILED (6) 950f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_NEEDS_DETERMINATION (7) 960f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang#define HAL_AFSTATE_PASSIVE_FOCUSED (8) 9713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 985506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_PREVIEW (0) 995506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_MASK_PREVIEW (1<<STREAM_ID_PREVIEW) 1005506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_RECORD (1) 1015506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_MASK_RECORD (1<<STREAM_ID_RECORD) 1025506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_PRVCB (2) 1035506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_MASK_PRVCB (1<<STREAM_ID_PRVCB) 1045506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_JPEG (4) 1055506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_MASK_JPEG (1<<STREAM_ID_JPEG) 1065506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_ZSL (5) 1075506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_MASK_ZSL (1<<STREAM_ID_ZSL) 1085506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 1095506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_JPEG_REPROCESS (8) 1105506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define STREAM_ID_LAST STREAM_ID_JPEG_REPROCESS 1115506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 1125506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define MASK_OUTPUT_SCP (STREAM_MASK_PREVIEW|STREAM_MASK_RECORD|STREAM_MASK_PRVCB) 1135506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define MASK_OUTPUT_SCC (STREAM_MASK_JPEG|STREAM_MASK_ZSL) 1145506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 1155506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define SUBSTREAM_TYPE_NONE (0) 1165506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define SUBSTREAM_TYPE_JPEG (1) 1175506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define SUBSTREAM_TYPE_RECORD (2) 1185506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define SUBSTREAM_TYPE_PRVCB (3) 1195506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang#define FLASH_STABLE_WAIT_TIMEOUT (10) 1205506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 121041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang#define SIG_WAITING_TICK (5000) 122041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang 1234aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#ifdef EXYNOS_CAMERA_LOG 1244aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 1254aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 1264aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) 1274aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) 1284aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#else 1294aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGV(...) ((void)0) 1304aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGD(...) ((void)0) 1314aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGW(...) ((void)0) 1324aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#define CAM_LOGE(...) ((void)0) 1334aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi#endif 1344aa4d73919168b1cd26a22d4b536697937259f80hyeonmyeong Choi 135c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinenum sensor_name { 136c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K3H2 = 1, 137c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K6A3 = 2, 138c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K4E5 = 3, 139c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_S5K3H7 = 4, 140c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_CUSTOM = 5, 141c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SENSOR_NAME_END 142c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 143c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 14415fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kangenum is_subscenario_id { 14515fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_SCENARIO_STILL, 14615fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_SCENARIO_VIDEO, 14715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_SCENARIO_SCENE1, 14815fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_SCENARIO_SCENE2, 14915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_SCENARIO_SCENE3, 15015fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang ISS_SUB_END 15115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang}; 152c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 1532d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kangint SUPPORT_THUMBNAIL_REAR_SIZE[][2] = 1542d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang{ 1552d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {160, 120}, 1562d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {160, 90}, 1572d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {144, 96} 1582d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang}; 1592d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 1602d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kangint SUPPORT_THUMBNAIL_FRONT_SIZE[][2] = 1612d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang{ 1622d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {160, 120}, 1632d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {160, 160}, 1642d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {160, 90}, 1652d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang {144, 96} 1662d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang}; 1672d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang 168e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Jooenum is_set_flash_command_state { 169e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_NONE = 0, 170e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_ON = 1, 171e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_ON_WAIT, 172e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_ON_DONE, 173e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_AUTO_AE_AWB_LOCK, 174e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_AE_AWB_LOCK_WAIT, 175e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_AUTO_WAIT, 176e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_AUTO_DONE, 177e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_AUTO_OFF, 178e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_CAPTURE, 179e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_CAPTURE_WAIT, 180e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_CAPTURE_JPEG, 181e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FLASH_STATE_CAPTURE_END, 182e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo IS_FALSH_STATE_MAX 1836f19b6cfec2e31a06fb7fc62ee0440e1e52d99fdYounghwan Joo}; 1846f19b6cfec2e31a06fb7fc62ee0440e1e52d99fdYounghwan Joo 18553f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Jooenum is_set_command_state { 18653f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo IS_COMMAND_NONE = 0, 18753f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo IS_COMMAND_EXECUTION, 18853f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo IS_COMMAND_CLEAR, 18953f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo IS_COMMAND_MAX 19053f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo}; 19153f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo 192c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct node_info { 193c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int fd; 194c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int width; 195c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int height; 196c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int format; 197c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int planes; 198c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int buffers; 199c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin enum v4l2_memory memory; 200c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin enum v4l2_buf_type type; 201be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang ExynosBuffer buffer[NUM_MAX_CAMERA_BUFFERS]; 20215fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang int status; 203c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} node_info_t; 204c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 205c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 206c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct camera_hw_info { 207c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int sensor_id; 208c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 209c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin node_info_t sensor; 21013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang node_info_t isp; 21113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang node_info_t capture; 2125506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang node_info_t scp; 21313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 21413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang /*shot*/ // temp 21513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang struct camera2_shot_ext dummy_shot; 216c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 217c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} camera_hw_info_t; 218c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 21913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef enum request_entry_status { 220c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin EMPTY, 221c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin REGISTERED, 222be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang REQUESTED, 2232adfa429e61241b94e6435b328030df53f27b3b0Jiyoung Shin CAPTURED, 224f9a066096bec3b4e3dc53d7c245226907ecc3e99Sungjoong Kang METADONE, 225f9a066096bec3b4e3dc53d7c245226907ecc3e99Sungjoong Kang COMPLETED 226c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_entry_status_t; 227c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 228c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shintypedef struct request_manager_entry { 22913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang request_entry_status_t status; 23013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera_metadata_t *original_request; 231be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang struct camera2_shot_ext internal_shot; 23213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int output_stream_count; 233c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} request_manager_entry_t; 234c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 2359a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo// structure related to a specific function of camera 2364a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Jootypedef struct af_control_info { 2374a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Joo int m_afTriggerTimeOut; 2384a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Joo} ctl_af_info_t; 2394a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Joo 2409a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Jootypedef struct flash_control_info { 2419a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo // UI flash mode indicator 2429a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo enum aa_aemode i_flashMode; 2439a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo // AF flash 2449a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo bool m_afFlashDoneFlg; 2459a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo // Capture flash 2469a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo bool m_flashEnableFlg; 2479a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo int m_flashFrameCount; 2489a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo int m_flashCnt; 2499a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo int m_flashTimeOut; 250caea49e60fd81033920e9d923f76d7c5aa8b495cYounghwan Joo // Flash decision 251caea49e60fd81033920e9d923f76d7c5aa8b495cYounghwan Joo // At flash auto mode only : 1 -> flash is needed, 0 -> normal case 252caea49e60fd81033920e9d923f76d7c5aa8b495cYounghwan Joo bool m_flashDecisionResult; 253caea49e60fd81033920e9d923f76d7c5aa8b495cYounghwan Joo // torch indicator. this will be replaced by flashMode meta 254caea49e60fd81033920e9d923f76d7c5aa8b495cYounghwan Joo bool m_flashTorchMode; 255e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo // for precapture metering 256e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo int m_precaptureState; 257e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo int m_precaptureTriggerId; 2589a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo} ctl_flash_info_t; 2599a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo 26073f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Jootypedef struct ae_control_info { 26173f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo // pre-capture notification state 26273f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo enum ae_state aeStateNoti; 26373f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo} ctl_ae_info_t; 26473f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo 265275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Jootypedef struct scene_control_info { 266275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo // pre-capture notification state 267275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo enum aa_scene_mode prevSceneMode; 268275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo} ctl_scene_info_t; 269275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo 2709a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Jootypedef struct request_control_info { 2719a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo ctl_flash_info_t flash; 27273f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo ctl_ae_info_t ae; 2734a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Joo ctl_af_info_t af; 274275c974460bee1fdb9fde2713e60dec91c3a551eYounghwan Joo ctl_scene_info_t scene; 2759a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo} ctl_request_info_t; 2769a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo 277c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass RequestManager { 278c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic: 279c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin RequestManager(SignalDrivenThread* main_thread); 280c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ~RequestManager(); 2812adfa429e61241b94e6435b328030df53f27b3b0Jiyoung Shin void ResetEntry(); 282c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int GetNumEntries(); 283c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool IsRequestQueueFull(); 28413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 285ca714238a7b555c412637d25006c17f1f0ce2751Sungjoong Kang void RegisterRequest(camera_metadata_t *new_request, int * afMode, uint32_t * afRegion); 28613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void DeregisterRequest(camera_metadata_t **deregistered_request); 28713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool PrepareFrame(size_t *num_entries, size_t *frame_size, 2880f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang camera_metadata_t **prepared_frame, int afState); 289ca714238a7b555c412637d25006c17f1f0ce2751Sungjoong Kang int MarkProcessingRequest(ExynosBuffer * buf); 2902adfa429e61241b94e6435b328030df53f27b3b0Jiyoung Shin void NotifyStreamOutput(int frameCnt); 291ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang void ApplyDynamicMetadata(struct camera2_shot_ext *shot_ext); 29213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void CheckCompleted(int index); 29353f62ad92ec5a5d11114420ca83cb122c38c2ef1Younghwan Joo void UpdateIspParameters(struct camera2_shot_ext *shot_ext, int frameCnt, ctl_request_info_t *ctl_info); 2949dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void RegisterTimestamp(int frameCnt, nsecs_t *frameTime); 2955506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang nsecs_t GetTimestampByFrameCnt(int frameCnt); 2965506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang nsecs_t GetTimestamp(int index); 2972f4d175d9bc927fd7c7fb7d42d8671fe1ba17bdbSungjoong Kang uint8_t GetOutputStreamByFrameCnt(int frameCnt); 2982f4d175d9bc927fd7c7fb7d42d8671fe1ba17bdbSungjoong Kang uint8_t GetOutputStream(int index); 29969d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang camera2_shot_ext * GetInternalShotExtByFrameCnt(int frameCnt); 30069d1e6e9c2036cc231544f61df9ee13e00d1fe0cSungjoong Kang camera2_shot_ext * GetInternalShotExt(int index); 3019dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int FindFrameCnt(struct camera2_shot_ext * shot_ext); 3025c88d1f2e176e716cd51df32c6835ec3b89b20e1hyeonmyeong Choi bool IsVdisEnable(void); 3039dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int FindEntryIndexByFrameCnt(int frameCnt); 304b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void Dump(void); 305b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang int GetNextIndex(int index); 306f9a066096bec3b4e3dc53d7c245226907ecc3e99Sungjoong Kang int GetPrevIndex(int index); 307b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void SetDefaultParameters(int cropX); 308b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang void SetInitialSkip(int count); 309ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang int GetSkipCnt(); 310f9a066096bec3b4e3dc53d7c245226907ecc3e99Sungjoong Kang int GetCompletedIndex(); 311041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang void pushSensorQ(int index); 312041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang int popSensorQ(); 313041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang void releaseSensorQ(); 314a3bcc37bef2d394aaf9651686b72a7d0a74da7b0Alex Ray 315a3bcc37bef2d394aaf9651686b72a7d0a74da7b0Alex Ray bool m_vdisEnable; 316a3bcc37bef2d394aaf9651686b72a7d0a74da7b0Alex Ray 317c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate: 318c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 319c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin MetadataConverter *m_metadataConverter; 320c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SignalDrivenThread *m_mainThread; 3211264ab1629accf444d13831e209eafe4657d7664Alex Ray Mutex m_numOfEntriesLock; 322c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_numOfEntries; 323c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryInsertionIndex; 324c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryProcessingIndex; 325c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_entryFrameOutputIndex; 326c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin request_manager_entry_t entries[NUM_MAX_REQUEST_MGR_ENTRY]; 32713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int m_completedIndex; 328c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 329c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin Mutex m_requestMutex; 330c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 331c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //TODO : alloc dynamically 332c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin char m_tempFrameMetadataBuf[2000]; 333c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera_metadata_t *m_tempFrameMetadata; 3349dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 335b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang int m_sensorPipelineSkipCnt; 3369dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_cropX; 337041f38de75652a9afb68c03eb5559932ea63ed92Sungjoong Kang int m_lastCompletedFrameCnt; 3382bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int m_lastAeMode; 3392bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int m_lastAaMode; 3402bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int m_lastAwbMode; 3412bdec0603559f57a420e8926da22cc437e1336ecSungjoong Kang int m_lastAeComp; 3425c88d1f2e176e716cd51df32c6835ec3b89b20e1hyeonmyeong Choi bool m_vdisBubbleEn; 3435506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang nsecs_t m_lastTimeStamp; 34452f543089f42c4d008a4e729ece05676fd644e36Sungjoong Kang List<int> m_sensorQ; 345c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 346c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 3479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3489dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangtypedef struct bayer_buf_entry { 3499dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int status; 3509dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int reqFrameCnt; 3519dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang nsecs_t timeStamp; 3529dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang} bayer_buf_entry_t; 3539dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3549dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3559dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangclass BayerBufManager { 3569dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangpublic: 3579dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang BayerBufManager(); 3589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang ~BayerBufManager(); 3599dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForSensorEnqueue(); 3609dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkSensorEnqueue(int index); 3619dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkSensorDequeue(int index, int reqFrameCnt, nsecs_t *timeStamp); 3629dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForIspEnqueue(int *reqFrameCnt); 3639dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetIndexForIspDequeue(int *reqFrameCnt); 3649dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkIspEnqueue(int index); 3659dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int MarkIspDequeue(int index); 3669dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnSensor(); 3679dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnHalFilled(); 3689dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNumOnIsp(); 3699dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3709dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kangprivate: 3719dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int GetNextIndex(int index); 3729dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3739dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int sensorEnqueueHead; 3749dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int sensorDequeueHead; 3759dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int ispEnqueueHead; 3769dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int ispDequeueHead; 3779dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnSensor; 3789dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnIsp; 3799dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnHalFilled; 3809dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numOnHalEmpty; 3819dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3829dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bayer_buf_entry_t entries[NUM_BAYER_BUFFERS]; 3839dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang}; 3849dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 3859dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 38613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define NOT_AVAILABLE (0) 38713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define REQUIRES_DQ_FROM_SVC (1) 38813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_DRIVER (2) 38913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_HAL (3) 39013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define ON_SERVICE (4) 39113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 39213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_NOT_AVAILABLE (0) 39313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SENSOR (1) 39413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_FILLED (2) 39513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_ISP (3) 39613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_SERVICE (4) 39713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang#define BAYER_ON_HAL_EMPTY (5) 39813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 39913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangtypedef struct stream_parameters { 4005506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang uint32_t width; 4015506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang uint32_t height; 4025506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int format; 403c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin const camera2_stream_ops_t* streamOps; 404c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t usage; 40513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int numHwBuffers; 40613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int numSvcBuffers; 407be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numOwnSvcBuffers; 4085506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int planes; 409feb7df4c2d6e953395eef7b4389ab2e142df9613Sungjoong Kang int metaPlanes; 410be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numSvcBufsInHal; 41113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS]; 41213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS]; 4135506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang ExynosBuffer metaBuffers[NUM_MAX_CAMERA_BUFFERS]; 41413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int svcBufStatus[NUM_MAX_CAMERA_BUFFERS]; 4155506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int bufIndex; 4165506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang node_info_t *node; 4175506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int minUndequedBuffer; 418bf96172c9e9a71d1c48e619869579002cbbc2268Sungjoong Kang bool needsIonMap; 419c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin} stream_parameters_t; 420c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 4215506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kangtypedef struct substream_parameters { 4225506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int type; 4235506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang uint32_t width; 4245506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang uint32_t height; 4255506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int format; 4269dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang const camera2_stream_ops_t* streamOps; 4279dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang uint32_t usage; 4289dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int numSvcBuffers; 429be494d19b61b202bc071ec8f6bc5d395ebf397bbSungjoong Kang int numOwnSvcBuffers; 43074d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int internalFormat; 43174d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int internalPlanes; 43274d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int svcPlanes; 43374d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang buffer_handle_t svcBufHandle[NUM_MAX_CAMERA_BUFFERS]; 43474d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang ExynosBuffer svcBuffers[NUM_MAX_CAMERA_BUFFERS]; 43574d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int svcBufStatus[NUM_MAX_CAMERA_BUFFERS]; 43674d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int svcBufIndex; 43774d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang int numSvcBufsInHal; 4385506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang bool needBufferInit; 4395506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int minUndequedBuffer; 4405506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang} substream_parameters_t; 4415506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang 4425506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kangtypedef struct substream_entry { 4435506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int priority; 4445506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int streamId; 4455506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang} substream_entry_t; 44674d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang 447c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinclass ExynosCameraHWInterface2 : public virtual RefBase { 448c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinpublic: 4496044e50955303fde3b50a2758df721b29addbd98Sungjoong Kang ExynosCameraHWInterface2(int cameraId, camera2_device_t *dev, ExynosCamera2 * camera, int *openInvalid); 450c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual ~ExynosCameraHWInterface2(); 451c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 452c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual void release(); 45313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 454c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin inline int getCameraId() const; 455c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 456c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setRequestQueueSrcOps(const camera2_request_queue_src_ops_t *request_src_ops); 457c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int notifyRequestQueueNotEmpty(); 458c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setFrameQueueDstOps(const camera2_frame_queue_dst_ops_t *frame_dst_ops); 459c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int getInProgressCount(); 460c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int flushCapturesInProgress(); 461c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int constructDefaultRequest(int request_template, camera_metadata_t **request); 46213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang virtual int allocateStream(uint32_t width, uint32_t height, 463c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int format, const camera2_stream_ops_t *stream_ops, 464c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t *stream_id, uint32_t *format_actual, uint32_t *usage, uint32_t *max_buffers); 465c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int registerStreamBuffers(uint32_t stream_id, int num_buffers, buffer_handle_t *buffers); 466c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int releaseStream(uint32_t stream_id); 467c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int allocateReprocessStream(uint32_t width, uint32_t height, 468c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t format, const camera2_stream_in_ops_t *reprocess_stream_ops, 469c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers); 4705506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang virtual int allocateReprocessStreamFromStream(uint32_t output_stream_id, 4715506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang const camera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id); 472c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int releaseReprocessStream(uint32_t stream_id); 473c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int triggerAction(uint32_t trigger_id, int ext1, int ext2); 474c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int setNotifyCallback(camera2_notify_callback notify_cb, void *user); 475c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int getMetadataVendorTagOps(vendor_tag_query_ops_t **ops); 476c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin virtual int dump(int fd); 477c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shinprivate: 47813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kangclass MainThread : public SignalDrivenThread { 47913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosCameraHWInterface2 *mHardware; 48013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang public: 48113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang MainThread(ExynosCameraHWInterface2 *hw): 48213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang SignalDrivenThread(), 483053d38cf3db8e79ccde6996b2c44e77ccff54bfcSungjoong Kang mHardware(hw) { } 48413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~MainThread(); 48513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() 486053d38cf3db8e79ccde6996b2c44e77ccff54bfcSungjoong Kang { 48713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang mHardware->m_mainThreadFunc(this); 48813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang return; 48913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang } 49013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void release(void); 49115fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang bool m_releasing; 49213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang }; 4939dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 494c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin class SensorThread : public SignalDrivenThread { 495c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ExynosCameraHWInterface2 *mHardware; 496c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin public: 497c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin SensorThread(ExynosCameraHWInterface2 *hw): 498053d38cf3db8e79ccde6996b2c44e77ccff54bfcSungjoong Kang SignalDrivenThread(), 4995506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang mHardware(hw) { } 50013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~SensorThread(); 50113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() { 502c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware->m_sensorThreadFunc(this); 503c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return; 504c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 5059dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void release(void); 506c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin //private: 50715fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang bool m_releasing; 508c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin }; 509c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 510c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin class StreamThread : public SignalDrivenThread { 511c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ExynosCameraHWInterface2 *mHardware; 512c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin public: 513c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin StreamThread(ExynosCameraHWInterface2 *hw, uint8_t new_index): 514053d38cf3db8e79ccde6996b2c44e77ccff54bfcSungjoong Kang SignalDrivenThread(), 515c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware(hw), 516c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin m_index(new_index) { } 51713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ~StreamThread(); 51813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void threadFunctionInternal() { 519c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin mHardware->m_streamThreadFunc(this); 520c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin return; 521c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin } 52213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void setParameter(stream_parameters_t * new_parameters); 5235506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang status_t attachSubStream(int stream_id, int priority); 5245506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang status_t detachSubStream(int stream_id); 52513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void release(void); 52613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int findBufferIndex(void * bufAddr); 5275506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int findBufferIndex(buffer_handle_t * bufHandle); 528c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 52913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang uint8_t m_index; 5309dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_activated; 53113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang //private: 53213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang stream_parameters_t m_parameters; 5339dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang stream_parameters_t *m_tempParameters; 5345506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang substream_entry_t m_attachedSubStreams[NUM_MAX_SUBSTREAM]; 53513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isBufferInit; 536b5237e6bdb2c87f61ccf5b22cdb922691095fc2fSungjoong Kang bool m_releasing; 5375506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int streamType; 5385506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_numRegisteredStream; 53913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang }; 540c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 541c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sp<MainThread> m_mainThread; 542c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin sp<SensorThread> m_sensorThread; 54313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang sp<StreamThread> m_streamThreads[NUM_MAX_STREAM_THREAD]; 5445506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang substream_parameters_t m_subStreams[STREAM_ID_LAST+1]; 54513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 54613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 5479dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang 548c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin RequestManager *m_requestManager; 5499dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang BayerBufManager *m_BayerManager; 550daa1fcd6e8861944412e5c77db5eb441512aef38Sungjoong Kang ExynosCamera2 *m_camera2; 551c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 552c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_mainThreadFunc(SignalDrivenThread * self); 553c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_sensorThreadFunc(SignalDrivenThread * self); 554c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void m_streamThreadFunc(SignalDrivenThread * self); 55513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_streamThreadInitialize(SignalDrivenThread * self); 55613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 5575506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang void m_streamFunc_direct(SignalDrivenThread *self); 5585506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang void m_streamFunc_indirect(SignalDrivenThread *self); 55986646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang 56086646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang void m_streamBufferInit(SignalDrivenThread *self); 56186646da4ec54337c658278271ee5cbfcde9165d6Sungjoong Kang 5625506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_runSubStreamFunc(StreamThread *selfThread, ExynosBuffer *srcImageBuf, 5635506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int stream_id, nsecs_t frameTimeStamp); 5645506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_jpegCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp); 5655506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_recordCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp); 5665506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_prvcbCreator(StreamThread *selfThread, ExynosBuffer *srcImageBuf, nsecs_t frameTimeStamp); 56713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void m_getAlignedYUVSize(int colorFormat, int w, int h, 56813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer *buf); 56913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_getRatioSize(int src_w, int src_h, 57013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int dst_w, int dst_h, 57113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int *crop_x, int *crop_y, 57213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int *crop_w, int *crop_h, 57313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int zoom); 57413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int createIonClient(ion_client ionClient); 57513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int deleteIonClient(ion_client ionClient); 57613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 57713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum); 578181e425e6d6f304986ad5154f35034c615e94947Sungjoong Kang int allocCameraMemory(ion_client ionClient, ExynosBuffer *buf, int iMemoryNum, int cacheFlag); 57913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void freeCameraMemory(ExynosBuffer *buf, int iMemoryNum); 58013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void initCameraMemory(ExynosBuffer *buf, int iMemoryNum); 58113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 58213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void DumpInfoWithShot(struct camera2_shot_ext * shot_ext); 5832d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang bool m_checkThumbnailSize(int w, int h); 58413d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool yuv2Jpeg(ExynosBuffer *yuvBuf, 58513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer *jpegBuf, 58613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosRect *rect); 5875506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int InitializeISPChain(); 588ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang void StartISP(); 5895506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang void StartSCCThread(bool threadExists); 5900f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang int GetAfState(); 5910f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void SetAfMode(enum aa_afmode afMode); 592ca714238a7b555c412637d25006c17f1f0ce2751Sungjoong Kang void SetAfRegion(uint32_t * afRegion); 5930f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfTrigger(int id); 5940f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfTriggerAutoMacro(int id); 5950f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfTriggerCAFPicture(int id); 5960f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfTriggerCAFVideo(int id); 597e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo void OnPrecaptureMeteringTriggerStart(int id); 5980f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfCancel(int id); 5990f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfCancelAutoMacro(int id); 6000f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfCancelCAFPicture(int id); 6010f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfCancelCAFVideo(int id); 60273f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo void OnPrecaptureMeteringNotificationISP(); 60373f5ad606f9e59e0442f0b3f06ae0f64836c3c48Younghwan Joo void OnPrecaptureMeteringNotificationSensor(); 6040f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfNotification(enum aa_afstate noti); 6050f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfNotificationAutoMacro(enum aa_afstate noti); 6060f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfNotificationCAFPicture(enum aa_afstate noti); 6070f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void OnAfNotificationCAFVideo(enum aa_afstate noti); 6080f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang void SetAfStateForService(int newState); 6090f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang int GetAfStateForService(); 61013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang exif_attribute_t mExifInfo; 611eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang void m_setExifFixedAttribute(void); 612eed7ed1bffb083b112a3366e740ebdc186203afaSungjoong Kang void m_setExifChangedAttribute(exif_attribute_t *exifInfo, ExynosRect *rect, 61348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang camera2_shot_ext *currentEntry); 614e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo void m_preCaptureSetter(struct camera2_shot_ext * shot_ext); 615e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo void m_preCaptureListenerSensor(struct camera2_shot_ext * shot_ext); 616e117f7565971e9036b3c5e8dd5dd202ad6208c60Younghwan Joo void m_preCaptureListenerISP(struct camera2_shot_ext * shot_ext); 617cdd53a9f3bfbd35a715b9fe56ff7e3e1c3e32a10Younghwan Joo void m_preCaptureAeState(struct camera2_shot_ext * shot_ext); 6184a9565ae8328e47faae2e91c8b9e8eb4f0ff51f6Younghwan Joo void m_updateAfRegion(struct camera2_shot_ext * shot_ext); 6198a3fc5dddd1aecdc2acd4af9705119a4df12d6b7Younghwan Joo void m_afTrigger(struct camera2_shot_ext * shot_ext, int mode); 62013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang void *m_exynosPictureCSC; 6219dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang void *m_exynosVideoCSC; 62213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 623c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 624c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_request_queue_src_ops_t *m_requestQueueOps; 625c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_frame_queue_dst_ops_t *m_frameQueueOps; 626c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin camera2_notify_callback m_notifyCb; 627c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin void *m_callbackCookie; 628c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 629c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin int m_numOfRemainingReqInSvc; 630c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin bool m_isRequestQueuePending; 63113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_isRequestQueueNull; 63213d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera2_device_t *m_halDevice; 63313d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang static gralloc_module_t const* m_grallocHal; 634c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 635c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 63613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang camera_hw_info_t m_camera_info; 637c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 638c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin ion_client m_ionCameraClient; 639c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 640ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang bool m_isIspStarted; 64113d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 642ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang int m_need_streamoff; 64390e439c14994b2f82da00c131a5e76646a2e127bSungjoong Kang ExynosBuffer m_sccLocalBuffer[NUM_MAX_CAMERA_BUFFERS]; 64490e439c14994b2f82da00c131a5e76646a2e127bSungjoong Kang bool m_sccLocalBufferValid; 64513d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 64613d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang int indexToQueue[3+1]; 64713d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang 64813d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_scp_flushing; 64913d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang bool m_closing; 65013d8c7b4650fb7897b4291ed9b3d57b19f7d1ccdSungjoong Kang ExynosBuffer m_resizeBuf; 6512f4d175d9bc927fd7c7fb7d42d8671fe1ba17bdbSungjoong Kang#ifndef ENABLE_FRAME_SYNC 6525506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_currentOutputStreams; 6532f4d175d9bc927fd7c7fb7d42d8671fe1ba17bdbSungjoong Kang#endif 6545506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_currentReprocessOutStreams; 65574d78ebea3d2d2bbcf46e7156d42f5e0450e3a9bSungjoong Kang ExynosBuffer m_previewCbBuf; 6569dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang int m_cameraId; 6579dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_scp_closing; 6589dd63e1fc352306d6680c517b7ce9936683c78c4Sungjoong Kang bool m_scp_closed; 65915fd82319b9d931a31f40c504d3acbc7e62d4cedSungjoong Kang bool m_wideAspect; 660ca714238a7b555c412637d25006c17f1f0ce2751Sungjoong Kang uint32_t currentAfRegion[4]; 661308291dee65548eccf93232e60da7d8c32ad7f27hyeonmyeong Choi float m_zoomRatio; 662ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 6635c88d1f2e176e716cd51df32c6835ec3b89b20e1hyeonmyeong Choi int m_vdisBubbleCnt; 6645c88d1f2e176e716cd51df32c6835ec3b89b20e1hyeonmyeong Choi int m_vdisDupFrame; 6655c88d1f2e176e716cd51df32c6835ec3b89b20e1hyeonmyeong Choi 6665506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang mutable Mutex m_qbufLock; 66732cf94013c9ba94ffaab68f942c7926ed007956fSungjoong Kang mutable Mutex m_jpegEncoderLock; 66832cf94013c9ba94ffaab68f942c7926ed007956fSungjoong Kang int m_jpegEncodingCount; 669ca714238a7b555c412637d25006c17f1f0ce2751Sungjoong Kang mutable Mutex m_afModeTriggerLock; 670ad37861e56882dcb5fa42beb9dba60637d6e3c0fSungjoong Kang 671f9a066096bec3b4e3dc53d7c245226907ecc3e99Sungjoong Kang bool m_scpForceSuspended; 6720f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang int m_afState; 6730f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang int m_afTriggerId; 6740f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang enum aa_afmode m_afMode; 6750f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang enum aa_afmode m_afMode2; 6760f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang bool m_IsAfModeUpdateRequired; 6770f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang bool m_IsAfTriggerRequired; 6780f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang bool m_IsAfLockRequired; 6790f26b20fd328df0ad1cfed28eb456217b22d7780Sungjoong Kang int m_serviceAfState; 68036c106c906c67fec0d0b36e2e967312ce99dcc9eSungjoong Kang bool m_AfHwStateFailed; 6818e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang int m_afPendingTriggerId; 6828e2c2fdbd940265e8413d512c3a0549bbc53c8a2Sungjoong Kang int m_afModeWaitingCnt; 68348728d495b8aa54d3c6cc95229f49f3135107aecSungjoong Kang struct camera2_shot_ext m_jpegMetadata; 684b55ed6644478926b4f46307103774e100e167025Sungjoong Kang int m_scpOutputSignalCnt; 685b55ed6644478926b4f46307103774e100e167025Sungjoong Kang int m_scpOutputImageCnt; 686a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang int m_nightCaptureCnt; 687a15b4e3ffb3e1822af22ccbfab876c3b0e2dbf08Sungjoong Kang int m_nightCaptureFrameCnt; 688572470e2f220641581282c0d3f199a0faa52f8b7Sungjoong Kang int m_lastSceneMode; 6892d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang int m_thumbNailW; 6902d5e6ec2fb1a3868f882d058ebd8286be0bb6185Sungjoong Kang int m_thumbNailH; 6915506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_reprocessStreamId; 6925506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang const camera2_stream_in_ops_t * m_reprocessOps; 6935506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_reprocessOutputStreamId; 6945506cebff05ff1356ae17fe4c30c033d2285d5f5Sungjoong Kang int m_reprocessingFrameCnt; 6959a710a4598b2ea5b676c2ad8ad40b9088661c366Younghwan Joo ctl_request_info_t m_ctlInfo; 696c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; 697c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 698c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin}; // namespace android 699c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin 700c15a6b003394494149ef7d65ae35c38755cb8b93Jiyoung Shin#endif 701