1a652547af51c07ca7c8c6ecb4c6eed26e5c5feabSamuel Ha/* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved. 26a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * 36a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * Redistribution and use in source and binary forms, with or without 46a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * modification, are permitted provided that the following conditions are 56a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * met: 66a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * * Redistributions of source code must retain the above copyright 76a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * notice, this list of conditions and the following disclaimer. 86a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * * Redistributions in binary form must reproduce the above 96a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * copyright notice, this list of conditions and the following 106a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * disclaimer in the documentation and/or other materials provided 116a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * with the distribution. 126a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * * Neither the name of The Linux Foundation nor the names of its 136a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * contributors may be used to endorse or promote products derived 146a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * from this software without specific prior written permission. 156a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * 166a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 176a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 186a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 196a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 206a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 216a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 226a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 236a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 246a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 256a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 266a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 276a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang * 286a57acb5e05a61c51a01a67557a93e8c2815b280Shuzhen Wang */ 2940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 3040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#ifndef __MM_CAMERA_H__ 3140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define __MM_CAMERA_H__ 3240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 33caa40ca90569900a549e51d669fc82b1982233ceShuzhen Wang#include <cam_semaphore.h> 34caa40ca90569900a549e51d669fc82b1982233ceShuzhen Wang 3540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#include "mm_camera_interface.h" 3604f71ed32ea4abdbb953eaa74a072d73ed4f27a3Sai Kumar Sanagavarapu#include <hardware/camera.h> 3740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/********************************************************************************** 3840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab* Data structure declare 3940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab***********************************************************************************/ 4040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* num of callbacks allowed for an event type */ 4140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define MM_CAMERA_EVT_ENTRY_MAX 4 4240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* num of data callbacks allowed in a stream obj */ 4340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define MM_CAMERA_STREAM_BUF_CB_MAX 4 4440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* num of data poll threads allowed in a channel obj */ 4540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define MM_CAMERA_CHANNEL_POLL_THREAD_MAX 1 4640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 4740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define MM_CAMERA_DEV_NAME_LEN 32 4887667771cd5cac1f178ad255e8704d365bdf8fbcMansoor Aftab#define MM_CAMERA_DEV_OPEN_TRIES 20 4940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define MM_CAMERA_DEV_OPEN_RETRY_SLEEP 20 5040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 5140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#ifndef TRUE 5240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define TRUE 1 5340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#endif 5440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 5540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#ifndef FALSE 5640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#define FALSE 0 5740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#endif 5840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 597ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) 607ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev 6140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabstruct mm_channel; 6240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabstruct mm_stream; 6340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabstruct mm_camera_obj; 6440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 6540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum 6640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab{ 6740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_DATA_CB, /* dataB CMD */ 6840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_EVT_CB, /* evtCB CMD */ 6940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_EXIT, /* EXIT */ 7040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_REQ_DATA_CB,/* request data */ 7140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_SUPER_BUF_DATA_CB, /* superbuf dataB CMD */ 7248a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peev MM_CAMERA_CMD_TYPE_CONFIG_NOTIFY, /* configure notify mode */ 73cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev MM_CAMERA_CMD_TYPE_START_ZSL, /* start zsl snapshot for channel */ 74cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev MM_CAMERA_CMD_TYPE_STOP_ZSL, /* stop zsl snapshot for channel */ 75205b6ac45d9bc4f7bb342f2a4329253ee7ff9afcMuhua Li MM_CAMERA_CMD_TYPE_FLUSH_QUEUE, /* flush queue */ 7676e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CAMERA_CMD_TYPE_GENERAL, /* general cmd */ 7740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_CMD_TYPE_MAX 7840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_cmdcb_type_t; 7940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 8040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 8140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 8240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t frame_idx; 83919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t flags; 8440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_def_t *buf; /* ref to buf */ 8540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_buf_info_t; 8640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 8740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 8840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t num_buf_requested; 89919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t num_retro_buf_requested; 9040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_req_buf_t; 9140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 9276e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solankitypedef enum { 9376e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CAMERA_GENERIC_CMD_TYPE_AE_BRACKETING, 9476e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CAMERA_GENERIC_CMD_TYPE_AF_BRACKETING, 9576e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CAMERA_GENERIC_CMD_TYPE_FLASH_BRACKETING, 967ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev MM_CAMERA_GENERIC_CMD_TYPE_ZOOM_1X, 9776e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki} mm_camera_generic_cmd_type_t; 9876e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki 9976e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solankitypedef struct { 10076e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki mm_camera_generic_cmd_type_t type; 10176e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki uint32_t payload[32]; 10276e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki} mm_camera_generic_cmd_t; 10376e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki 10440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 10540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmdcb_type_t cmd_type; 10640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab union { 10740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_info_t buf; /* frame buf if dataCB */ 10840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_event_t evt; /* evt if evtCB */ 10940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_super_buf_t superbuf; /* superbuf if superbuf dataCB*/ 11040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_req_buf_t req_buf; /* num of buf requested */ 11193887f485109893b9a612ca21b737e5c81362c5aShuzhen Wang uint32_t frame_idx; /* frame idx boundary for flush superbuf queue*/ 11248a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peev mm_camera_super_buf_notify_mode_t notify_mode; /* notification mode */ 11376e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki mm_camera_generic_cmd_t gen_cmd; 11440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab } u; 11540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_cmdcb_t; 11640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 11740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef void (*mm_camera_cmd_cb_t)(mm_camera_cmdcb_t * cmd_cb, void* user_data); 11840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 11940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 12040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab cam_queue_t cmd_queue; /* cmd queue (queuing dataCB, asyncCB, or exitCMD) */ 12140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_t cmd_pid; /* cmd thread ID */ 122caa40ca90569900a549e51d669fc82b1982233ceShuzhen Wang cam_semaphore_t cmd_sem; /* semaphore for cmd thread */ 12340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_cb_t cb; /* cb for cmd */ 12440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void* user_data; /* user_data for cb */ 12540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_cmd_thread_t; 12640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 12740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum { 12840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_POLL_TYPE_EVT, 12940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CAMERA_POLL_TYPE_DATA, 1309376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li MM_CAMERA_POLL_TYPE_MAX 13140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_poll_thread_type_t; 1329376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li 13340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* function ptr defined for poll notify CB, 13440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * registered at poll thread with poll fd */ 13540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef void (*mm_camera_poll_notify_t)(void *user_data); 13640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 13740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 13840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t fd; 13940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_notify_t notify_cb; 14040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t handler; 14140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void* user_data; 14240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_poll_entry_t; 14340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 14440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 14540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_type_t poll_type; 14640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* array to store poll fd and cb info 14740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * for MM_CAMERA_POLL_TYPE_EVT, only index 0 is valid; 14840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * for MM_CAMERA_POLL_TYPE_DATA, depends on valid stream fd */ 14970b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li mm_camera_poll_entry_t poll_entries[MAX_STREAM_NUM_IN_BUNDLE]; 15040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t pfds[2]; 15140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_t pid; 15240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t state; 15340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int timeoutms; 15440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t cmd; 15570b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li struct pollfd poll_fds[MAX_STREAM_NUM_IN_BUNDLE + 1]; 15640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t num_fds; 15740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t mutex; 15840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_cond_t cond_v; 15940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t status; 16040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab //void *my_obj; 16140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_poll_thread_t; 16240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 16340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm_stream */ 16440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum { 16540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_NOTUSED = 0, /* not used */ 16640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_INITED, /* inited */ 16740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_ACQUIRED, /* acquired, fd opened */ 16840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_CFG, /* fmt & dim configured */ 16940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_BUFFED, /* buf allocated */ 17040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_REG, /* buf regged, stream off */ 17140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_ACTIVE, /* active */ 17240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_STATE_MAX 17340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_stream_state_type_t; 17440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 17540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum { 17640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_ACQUIRE, 17740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_RELEASE, 17840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_SET_FMT, 17940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_GET_BUF, 18040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_PUT_BUF, 18140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_REG_BUF, 18240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_UNREG_BUF, 18340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_START, 18440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_STOP, 18540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_QBUF, 18640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_SET_PARM, 18740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_GET_PARM, 18840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_DO_ACTION, 18940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_STREAM_EVT_MAX 19040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_stream_evt_type_t; 19140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 19240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 19340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_notify_t cb; 19440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *user_data; 19540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* cb_count = -1: infinite 19640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * cb_count > 0: register only for required times */ 19740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int8_t cb_count; 19840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_stream_data_cb_t; 19940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 20040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 20140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* buf reference count */ 20240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_refcnt; 20340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 20440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* This flag is to indicate if after allocation, 20540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * the corresponding buf needs to qbuf into kernel 20640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * (e.g. for preview usecase, display needs to hold two bufs, 20740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * so no need to qbuf these two bufs initially) */ 20840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t initial_reg_flag; 20940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 21040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* indicate if buf is in kernel(1) or client(0) */ 21140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t in_kernel; 21240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_stream_buf_status_t; 21340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 21440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct mm_stream { 21540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t my_hdl; /* local stream id */ 21640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t server_stream_id; /* stream id from server */ 21740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t fd; 21840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_stream_state_type_t state; 21940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 22040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* stream info*/ 22140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab cam_stream_info_t *stream_info; 22240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 2239376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li /* padding info */ 2249376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li cam_padding_info_t padding_info; 2259376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li 22670b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li /* offset */ 22770b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li cam_frame_len_offset_t frame_offset; 22870b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li 22940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_thread_t cmd_thread; 23040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 23140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* dataCB registered on this stream obj */ 23240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t cb_lock; /* cb lock to protect buf_cb */ 23340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_stream_data_cb_t buf_cb[MM_CAMERA_STREAM_BUF_CB_MAX]; 23440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 23540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* stream buffer management */ 23640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t buf_lock; 23740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_num; /* num of buffers allocated */ 23840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_def_t* buf; /* ptr to buf array */ 23940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_stream_buf_status_t* buf_status; /* ptr to buf status array */ 24040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 24140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* reference to parent channel_obj */ 24240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab struct mm_channel* ch_obj; 24340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 24440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t is_bundled; /* flag if stream is bundled */ 24540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 24640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_stream_mem_vtbl_t mem_vtbl; /* mem ops tbl */ 24713b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab 2482f2bee491becea57998e77607af5cca31304ed23Ranjith Kagathi Ananda mm_camera_map_unmap_ops_tbl_t map_ops; 2492f2bee491becea57998e77607af5cca31304ed23Ranjith Kagathi Ananda 25013b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab int8_t queued_buffer_count; 25140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_stream_t; 25240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 25340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm_channel */ 25440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum { 25540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_STATE_NOTUSED = 0, /* not used */ 25640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_STATE_STOPPED, /* stopped */ 25740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_STATE_ACTIVE, /* active, at least one stream active */ 25840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_STATE_PAUSED, /* paused */ 25940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_STATE_MAX 26040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_state_type_t; 26140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 26240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef enum { 26340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_ADD_STREAM, 26440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_DEL_STREAM, 26540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_CONFIG_STREAM, 2663de90b6340b8c7dedb86a220f86bc43d372d668eMuhua Li MM_CHANNEL_EVT_GET_BUNDLE_INFO, 26740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_START, 26840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_STOP, 26940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_PAUSE, 27040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_RESUME, 27140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_REQUEST_SUPER_BUF, 27240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_CANCEL_REQUEST_SUPER_BUF, 273205b6ac45d9bc4f7bb342f2a4329253ee7ff9afcMuhua Li MM_CHANNEL_EVT_FLUSH_SUPER_BUF_QUEUE, 27448a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peev MM_CHANNEL_EVT_CONFIG_NOTIFY_MODE, 275cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev MM_CHANNEL_EVT_START_ZSL_SNAPSHOT, 276cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev MM_CHANNEL_EVT_STOP_ZSL_SNAPSHOT, 27740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_MAP_STREAM_BUF, 27840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_UNMAP_STREAM_BUF, 27940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_SET_STREAM_PARM, 28040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_GET_STREAM_PARM, 28140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_DO_STREAM_ACTION, 28240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab MM_CHANNEL_EVT_DELETE, 28376e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CHANNEL_EVT_AF_BRACKETING, 28476e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CHANNEL_EVT_AE_BRACKETING, 28576e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki MM_CHANNEL_EVT_FLASH_BRACKETING, 2867ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev MM_CHANNEL_EVT_ZOOM_1X, 28740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_evt_type_t; 28840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 28940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 29040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 29140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_stream_config_t *config; 29240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_evt_paylod_config_stream_t; 29340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 29440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 29540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 2969376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li cam_stream_parm_buffer_t *parms; 29740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_evt_paylod_set_get_stream_parms_t; 29840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 29940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 30040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 30140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *actions; 30240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_evt_paylod_do_stream_action_t; 30340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 30440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 30540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 30640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type; 3079376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li uint32_t buf_idx; 3089376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx; 30940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int fd; 31040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t size; 31140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_evt_paylod_map_stream_buf_t; 31240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 31340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 31440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id; 31540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type; 3169376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li uint32_t buf_idx; 3179376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx; 31840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_evt_paylod_unmap_stream_buf_t; 31940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 32040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 32140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t num_of_bufs; 32270b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li mm_camera_buf_info_t super_buf[MAX_STREAM_NUM_IN_BUNDLE]; 32340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t matched; 3240a63e1f47eec0f3de7d72c59991cdde12a7d246eEmilian Peev uint32_t frame_idx; 32540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_queue_node_t; 32640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 32740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 32840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab cam_queue_t que; 32940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t num_streams; 33040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* container for bundled stream handlers */ 33170b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li uint32_t bundled_streams[MAX_STREAM_NUM_IN_BUNDLE]; 33240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_channel_attr_t attr; 33340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t expected_frame_id; 33440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t match_cnt; 33576e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki uint32_t expected_frame_id_without_led; 336919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t led_on_start_frame_id; 337919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t led_off_start_frame_id; 338919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t led_on_num_frames; 339919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t once; 340919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t frame_skip_count; 34140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_queue_t; 34240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 34340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 34440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t is_active; /* flag to indicate if bundle is valid */ 34540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* queue to store bundled super buffers */ 34640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_queue_t superbuf_queue; 34740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_notify_t super_buf_notify_cb; 34840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *user_data; 34940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_bundle_t; 35040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 35140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct mm_channel { 35240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t my_hdl; 35340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_state_type_t state; 35440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t ch_lock; /* channel lock */ 35540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 35640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* stream bundle info in the channel */ 35740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_bundle_t bundle; 35840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 35940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* num of pending suferbuffers */ 36040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t pending_cnt; 361919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t pending_retro_cnt; 362919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t bWaitForPrepSnapshotDone; 363919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t unLockAEC; 364919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla /* num of pending suferbuffers */ 365919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint8_t stopZslSnapshot; 36640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 36740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* cmd thread for superbuffer dataCB and async stop*/ 36840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_thread_t cmd_thread; 36940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 37040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* cb thread for sending data cb */ 37140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_thread_t cb_thread; 37240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 37340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* data poll thread 37440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * currently one data poll thread per channel 37540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * could extended to support one data poll thread per stream in the channel */ 37640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_t poll_thread[MM_CAMERA_CHANNEL_POLL_THREAD_MAX]; 37740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 37840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* container for all streams in channel */ 37970b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li mm_stream_t streams[MAX_STREAM_NUM_IN_BUNDLE]; 38040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 38140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* reference to parent cam_obj */ 38240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab struct mm_camera_obj* cam_obj; 383888a9fe0b0a4d975dc0d8204c0f836194c09c9e0Muhua Li 384cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev /* manual zsl snapshot control */ 385cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev uint8_t manualZSLSnapshot; 386cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev 387888a9fe0b0a4d975dc0d8204c0f836194c09c9e0Muhua Li /* control for zsl led */ 388888a9fe0b0a4d975dc0d8204c0f836194c09c9e0Muhua Li uint8_t startZSlSnapshotCalled; 389888a9fe0b0a4d975dc0d8204c0f836194c09c9e0Muhua Li uint8_t needLEDFlash; 39076e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki uint8_t need3ABracketing; 39176e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki uint8_t isFlashBracketingEnabled; 3927ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev uint8_t isZoom1xFrameRequested; 393919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t burstSnapNum; 39440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_t; 39540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 39640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* struct to store information about pp cookie*/ 39740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 39840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t cam_hdl; 39940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_hdl; 40040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_hdl; 40140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_queue_node_t* super_buf; 40240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_channel_pp_info_t; 40340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 40440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm_camera */ 40540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 40640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_event_notify_t evt_cb; 40740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *user_data; 40840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_evt_entry_t; 40940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 41040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 41140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_evt_entry_t evt[MM_CAMERA_EVT_ENTRY_MAX]; 41240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab /* reg_count <=0: infinite 41340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * reg_count > 0: register only for required times */ 41440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int reg_count; 41540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_evt_obj_t; 41640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 41740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct mm_camera_obj { 41840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t my_hdl; 41940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int ref_count; 42040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t ctrl_fd; 42140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t ds_fd; /* domain socket fd */ 42240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t cam_lock; 42340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t cb_lock; /* lock for evt cb */ 42440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_t ch[MM_CAMERA_CHANNEL_MAX]; 42540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_evt_obj_t evt; 42640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_t evt_poll_thread; /* evt poll thread */ 42740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_thread_t evt_thread; /* thread for evt CB */ 42840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_vtbl_t vtbl; 42940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 43040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_mutex_t evt_lock; 43140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab pthread_cond_t evt_cond; 43240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_event_t evt_rcvd; 4330468d6a36ef504df1636dc86de3c6473d54d946cMuhua Li 4340468d6a36ef504df1636dc86de3c6473d54d946cMuhua Li pthread_mutex_t msg_lock; /* lock for sending msg through socket */ 43540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_obj_t; 43640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 43740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabtypedef struct { 43840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int8_t num_cam; 43970b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li char video_dev_name[MM_CAMERA_MAX_NUM_SENSORS][MM_CAMERA_DEV_NAME_LEN]; 44070b9a18a83c667fe749b6e1dd4b7f7188ee81f70Muhua Li mm_camera_obj_t *cam_obj[MM_CAMERA_MAX_NUM_SENSORS]; 44104f71ed32ea4abdbb953eaa74a072d73ed4f27a3Sai Kumar Sanagavarapu struct camera_info info[MM_CAMERA_MAX_NUM_SENSORS]; 44240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab} mm_camera_ctrl_t; 44340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 44413b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftabtypedef enum { 44513b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab mm_camera_async_call, 44613b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab mm_camera_sync_call 44713b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab} mm_camera_call_type_t; 44813b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab 44940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/********************************************************************************** 45040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab* external function declare 45140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab***********************************************************************************/ 45240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* utility functions */ 45340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* set int32_t value */ 45440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_util_s_ctrl(int32_t fd, 45540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t id, 456c5bafeb72b56487c5a9ac91efda0c1b4c2d43607Muhua Li int32_t *value); 45740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 45840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* get int32_t value */ 45940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_util_g_ctrl(int32_t fd, 46040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t id, 461c5bafeb72b56487c5a9ac91efda0c1b4c2d43607Muhua Li int32_t *value); 46240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 46340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* send msg throught domain socket for fd mapping */ 46440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_util_sendmsg(mm_camera_obj_t *my_obj, 46540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *msg, 46640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t buf_size, 46740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int sendfd); 4689376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li/* Check if hardware target is A family */ 4699376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Liuint8_t mm_camera_util_chip_is_a_family(void); 47040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 47140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm-camera */ 47240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_open(mm_camera_obj_t *my_obj); 47340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_close(mm_camera_obj_t *my_obj); 47440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_register_event_notify(mm_camera_obj_t *my_obj, 47540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_event_notify_t evt_cb, 47640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * user_data); 47740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_qbuf(mm_camera_obj_t *my_obj, 47840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 47940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_def_t *buf); 48040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_query_capability(mm_camera_obj_t *my_obj); 48140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_set_parms(mm_camera_obj_t *my_obj, 482a652547af51c07ca7c8c6ecb4c6eed26e5c5feabSamuel Ha parm_buffer_t *parms); 48340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_get_parms(mm_camera_obj_t *my_obj, 484a652547af51c07ca7c8c6ecb4c6eed26e5c5feabSamuel Ha parm_buffer_t *parms); 48540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_map_buf(mm_camera_obj_t *my_obj, 48640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type, 48740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int fd, 48840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t size); 48940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_unmap_buf(mm_camera_obj_t *my_obj, 49040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type); 491412e8b2a4c304249d97b0fd75513cc1907bd9d8eMuhua Liextern int32_t mm_camera_do_auto_focus(mm_camera_obj_t *my_obj); 492412e8b2a4c304249d97b0fd75513cc1907bd9d8eMuhua Liextern int32_t mm_camera_cancel_auto_focus(mm_camera_obj_t *my_obj); 493412e8b2a4c304249d97b0fd75513cc1907bd9d8eMuhua Liextern int32_t mm_camera_prepare_snapshot(mm_camera_obj_t *my_obj, 494412e8b2a4c304249d97b0fd75513cc1907bd9d8eMuhua Li int32_t do_af_flag); 49593887f485109893b9a612ca21b737e5c81362c5aShuzhen Wangextern int32_t mm_camera_start_zsl_snapshot(mm_camera_obj_t *my_obj); 49693887f485109893b9a612ca21b737e5c81362c5aShuzhen Wangextern int32_t mm_camera_stop_zsl_snapshot(mm_camera_obj_t *my_obj); 497cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peevextern int32_t mm_camera_start_zsl_snapshot_ch(mm_camera_obj_t *my_obj, 498cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev uint32_t ch_id); 499cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peevextern int32_t mm_camera_stop_zsl_snapshot_ch(mm_camera_obj_t *my_obj, 500cc41f7496e2fb2226da2cf642c64309f85a61c50Emilian Peev uint32_t ch_id); 50140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern uint32_t mm_camera_add_channel(mm_camera_obj_t *my_obj, 50240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_channel_attr_t *attr, 50340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_notify_t channel_cb, 50440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *userdata); 50540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_del_channel(mm_camera_obj_t *my_obj, 50640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id); 5073de90b6340b8c7dedb86a220f86bc43d372d668eMuhua Liextern int32_t mm_camera_get_bundle_info(mm_camera_obj_t *my_obj, 5083de90b6340b8c7dedb86a220f86bc43d372d668eMuhua Li uint32_t ch_id, 5093de90b6340b8c7dedb86a220f86bc43d372d668eMuhua Li cam_bundle_config_t *bundle_info); 51040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern uint32_t mm_camera_add_stream(mm_camera_obj_t *my_obj, 51140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id); 51240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_del_stream(mm_camera_obj_t *my_obj, 51340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 51440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id); 51540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_config_stream(mm_camera_obj_t *my_obj, 51640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 51740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id, 51840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_stream_config_t *config); 51940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_start_channel(mm_camera_obj_t *my_obj, 52040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id); 52140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_stop_channel(mm_camera_obj_t *my_obj, 52240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id); 52340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_request_super_buf(mm_camera_obj_t *my_obj, 52440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 525919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t num_buf_requested, 526919946dff116866d6d53aab0f1543c356f4a36d2Susmitha Gummalla uint32_t num_retro_buf_requested); 52740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_cancel_super_buf_request(mm_camera_obj_t *my_obj, 52840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id); 529205b6ac45d9bc4f7bb342f2a4329253ee7ff9afcMuhua Liextern int32_t mm_camera_flush_super_buf_queue(mm_camera_obj_t *my_obj, 53093887f485109893b9a612ca21b737e5c81362c5aShuzhen Wang uint32_t ch_id, 53193887f485109893b9a612ca21b737e5c81362c5aShuzhen Wang uint32_t frame_idx); 53248a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peevextern int32_t mm_camera_config_channel_notify(mm_camera_obj_t *my_obj, 53348a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peev uint32_t ch_id, 53448a039e9e81767eda9f95e36363df0b1ed59ea62Emilian Peev mm_camera_super_buf_notify_mode_t notify_mode); 53540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_set_stream_parms(mm_camera_obj_t *my_obj, 53640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 53740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t s_id, 5389376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li cam_stream_parm_buffer_t *parms); 53940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_get_stream_parms(mm_camera_obj_t *my_obj, 54040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 54140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t s_id, 5429376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li cam_stream_parm_buffer_t *parms); 54340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_register_event_notify_internal(mm_camera_obj_t *my_obj, 54440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_event_notify_t evt_cb, 54540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * user_data); 54640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_map_stream_buf(mm_camera_obj_t *my_obj, 54740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 54840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id, 54940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type, 5509376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li uint32_t buf_idx, 5519376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx, 55240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int fd, 55340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t size); 55440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_unmap_stream_buf(mm_camera_obj_t *my_obj, 55540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 55640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id, 55740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type, 5589376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li uint32_t buf_idx, 5599376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx); 56040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_do_stream_action(mm_camera_obj_t *my_obj, 56140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t ch_id, 56240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t stream_id, 56340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *actions); 56440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 56540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm_channel */ 56640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_channel_fsm_fn(mm_channel_t *my_obj, 56740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_channel_evt_type_t evt, 56840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * in_val, 56940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * out_val); 57040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_channel_init(mm_channel_t *my_obj, 57140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_channel_attr_t *attr, 57240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_notify_t channel_cb, 57340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void *userdata); 57440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* qbuf is a special case that not going through state machine. 57540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * This is to avoid deadlock when trying to aquire ch_lock, 57640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * from the context of dataCB, but async stop is holding ch_lock */ 57740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_channel_qbuf(mm_channel_t *my_obj, 57840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_buf_def_t *buf); 57940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 58040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* mm_stream */ 58140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_stream_fsm_fn(mm_stream_t *my_obj, 58240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_stream_evt_type_t evt, 58340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * in_val, 58440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void * out_val); 58540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* Allow other stream to register dataCB at certain stream. 58640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * This is for use case of video sized live snapshot, 58740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * because snapshot stream need register one time CB at video stream. 58840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * ext_image_mode and sensor_idx are used to identify the destinate stream 58940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * to be register with dataCB. */ 59040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_stream_reg_buf_cb(mm_stream_t *my_obj, 59140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_stream_data_cb_t *val); 59240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_stream_map_buf(mm_stream_t *my_obj, 59340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type, 59440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t frame_idx, 5959376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx, 59640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int fd, 59740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t size); 59840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_stream_unmap_buf(mm_stream_t *my_obj, 59940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint8_t buf_type, 6009376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li uint32_t frame_idx, 6019376681fc1c945a9789cab5bbd0b3badbb7165deMuhua Li int32_t plane_idx); 60240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 60340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 60440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* utiltity fucntion declared in mm-camera-inteface2.c 60540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab * and need be used by mm-camera and below*/ 60640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabuint32_t mm_camera_util_generate_handler(uint8_t index); 60740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabconst char * mm_camera_util_get_dev_name(uint32_t cam_handler); 60840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabuint8_t mm_camera_util_get_index_by_handler(uint32_t handler); 60940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 61040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab/* poll/cmd thread functions */ 61140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_poll_thread_launch( 61240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_t * poll_cb, 61340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_type_t poll_type); 61440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb); 61540f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_poll_thread_add_poll_fd( 61640f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_t * poll_cb, 61740f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab uint32_t handler, 61840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab int32_t fd, 61940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_notify_t nofity_cb, 620d41551d252066e91d572d1d9df07ca324c55ed22Shuzhen Wang void *userdata, 621d41551d252066e91d572d1d9df07ca324c55ed22Shuzhen Wang mm_camera_call_type_t); 62240f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_poll_thread_del_poll_fd( 62340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_poll_thread_t * poll_cb, 62413b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab uint32_t handler, 62513b5c43bb1fa4f216b7d4eac16f1d7fe43ed5deeMansoor Aftab mm_camera_call_type_t); 6260d4a692c00faea6eaef0671d4a9c7d8de89536faEmilian Peevextern int32_t mm_camera_poll_thread_commit_updates( 6270d4a692c00faea6eaef0671d4a9c7d8de89536faEmilian Peev mm_camera_poll_thread_t * poll_cb); 62840f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_cmd_thread_launch( 62940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_thread_t * cmd_thread, 63040f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab mm_camera_cmd_cb_t cb, 63140f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab void* user_data); 632d6b8ec68388356464fc16557f793192dc0a5777eMansoor Aftabextern int32_t mm_camera_cmd_thread_name(const char* name); 63340f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftabextern int32_t mm_camera_cmd_thread_release(mm_camera_cmd_thread_t * cmd_thread); 63440f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab 6357ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogievextern int32_t mm_camera_channel_advanced_capture(mm_camera_obj_t *my_obj, 6367ad7168522ea35ee5505000ea3a4f5b4e77e0206Ivan Evlogiev mm_camera_advanced_capture_t advanced_capturetype, 63776e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki uint32_t ch_id, 63876e02c50e52e8dcefe538fd3ffb8f31b9358bb28Ajit Singh Solanki int32_t start_flag); 63940f2a8d5488cb10a1a6f30e20f1acb6eee372da0Mansoor Aftab#endif /* __MM_CAMERA_H__ */ 640