11d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. 21d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * 31d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * Redistribution and use in source and binary forms, with or without 41d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * modification, are permitted provided that the following conditions are 51d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * met: 61d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * * Redistributions of source code must retain the above copyright 71d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * notice, this list of conditions and the following disclaimer. 81d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * * Redistributions in binary form must reproduce the above 91d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * copyright notice, this list of conditions and the following 101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * disclaimer in the documentation and/or other materials provided 111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * with the distribution. 121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * * Neither the name of The Linux Foundation nor the names of its 131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * contributors may be used to endorse or promote products derived 141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * from this software without specific prior written permission. 151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * 161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * 281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam */ 291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#ifndef __MM_CAMERA_H__ 311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define __MM_CAMERA_H__ 321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#include <cam_semaphore.h> 341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#include "mm_camera_interface.h" 361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#include <hardware/camera.h> 371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#include <utils/Timers.h> 381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/********************************************************************************** 401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam* Data structure declare 411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam***********************************************************************************/ 421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* num of callbacks allowed for an event type */ 431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define MM_CAMERA_EVT_ENTRY_MAX 4 441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* num of data callbacks allowed in a stream obj */ 451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define MM_CAMERA_STREAM_BUF_CB_MAX 4 461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* num of data poll threads allowed in a channel obj */ 471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define MM_CAMERA_CHANNEL_POLL_THREAD_MAX 1 481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define MM_CAMERA_DEV_NAME_LEN 32 50bee7b2b0d7f3ddc1d7a9f86e4754a8c681398e6dChien-Yu Chen#define MM_CAMERA_DEV_OPEN_TRIES 30 511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define MM_CAMERA_DEV_OPEN_RETRY_SLEEP 20 521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define THREAD_NAME_SIZE 15 531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#ifndef TRUE 551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define TRUE 1 561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#endif 571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#ifndef FALSE 591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define FALSE 0 601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#endif 611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#define ARRAY_SIZE(a) (sizeof(a)/sizeof((a)[0])) 631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamstruct mm_channel; 651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamstruct mm_stream; 661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamstruct mm_camera_obj; 671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum 691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam{ 701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_DATA_CB, /* dataB CMD */ 711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_EVT_CB, /* evtCB CMD */ 721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_EXIT, /* EXIT */ 731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_REQ_DATA_CB,/* request data */ 741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_SUPER_BUF_DATA_CB, /* superbuf dataB CMD */ 751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_CONFIG_NOTIFY, /* configure notify mode */ 761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_START_ZSL, /* start zsl snapshot for channel */ 771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_STOP_ZSL, /* stop zsl snapshot for channel */ 781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_FLUSH_QUEUE, /* flush queue */ 791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_GENERAL, /* general cmd */ 801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_CMD_TYPE_MAX 811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_cmdcb_type_t; 821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx; 861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t flags; 871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_def_t *buf; /* ref to buf */ 881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_buf_info_t; 891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t num_buf_requested; 921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t num_retro_buf_requested; 931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_req_buf_t; 941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_GENERIC_CMD_TYPE_AE_BRACKETING, 971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_GENERIC_CMD_TYPE_AF_BRACKETING, 981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_GENERIC_CMD_TYPE_FLASH_BRACKETING, 991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_GENERIC_CMD_TYPE_ZOOM_1X, 1001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_GENERIC_CMD_TYPE_CAPTURE_SETTING, 1011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_generic_cmd_type_t; 1021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 1041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_generic_cmd_type_t type; 1051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t payload[32]; 1061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam union { 1071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_capture_frame_config_t frame_config; 1081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam }; 1091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_generic_cmd_t; 1101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 1121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmdcb_type_t cmd_type; 1131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam union { 1141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_info_t buf; /* frame buf if dataCB */ 1151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_event_t evt; /* evt if evtCB */ 1161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_super_buf_t superbuf; /* superbuf if superbuf dataCB*/ 1171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_req_buf_t req_buf; /* num of buf requested */ 1181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx; /* frame idx boundary for flush superbuf queue*/ 1191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_super_buf_notify_mode_t notify_mode; /* notification mode */ 1201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_generic_cmd_t gen_cmd; 1211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam } u; 1221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_cmdcb_t; 1231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef void (*mm_camera_cmd_cb_t)(mm_camera_cmdcb_t * cmd_cb, void* user_data); 1251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 1271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_queue_t cmd_queue; /* cmd queue (queuing dataCB, asyncCB, or exitCMD) */ 1281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_t cmd_pid; /* cmd thread ID */ 1291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_semaphore_t cmd_sem; /* semaphore for cmd thread */ 1301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_cb_t cb; /* cb for cmd */ 1311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void* user_data; /* user_data for cb */ 1321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam char threadName[THREAD_NAME_SIZE]; 1331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_cmd_thread_t; 1341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 1361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_POLL_TYPE_EVT, 1371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_POLL_TYPE_DATA, 1381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_POLL_TYPE_MAX 1391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_poll_thread_type_t; 1401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* function ptr defined for poll notify CB, 1421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * registered at poll thread with poll fd */ 1431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef void (*mm_camera_poll_notify_t)(void *user_data); 1441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 1461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t fd; 1471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_notify_t notify_cb; 1481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t handler; 1491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void* user_data; 1501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_poll_entry_t; 1511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 1531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_type_t poll_type; 1541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* array to store poll fd and cb info 1551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * for MM_CAMERA_POLL_TYPE_EVT, only index 0 is valid; 1561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * for MM_CAMERA_POLL_TYPE_DATA, depends on valid stream fd */ 1571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_entry_t poll_entries[MAX_STREAM_NUM_IN_BUNDLE]; 1581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t pfds[2]; 1591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_t pid; 1601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t state; 1611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int timeoutms; 1621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t cmd; 1631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct pollfd poll_fds[MAX_STREAM_NUM_IN_BUNDLE + 1]; 1641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t num_fds; 1651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t mutex; 1661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_cond_t cond_v; 1671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t status; 1681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam char threadName[THREAD_NAME_SIZE]; 1691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam //void *my_obj; 1701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_poll_thread_t; 1711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm_stream */ 1731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 1741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_NOTUSED = 0, /* not used */ 1751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_INITED, /* inited */ 1761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_ACQUIRED, /* acquired, fd opened */ 1771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_CFG, /* fmt & dim configured */ 1781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_BUFFED, /* buf allocated */ 1791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_REG, /* buf regged, stream off */ 1801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_ACTIVE, /* active */ 1811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_STATE_MAX 1821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_stream_state_type_t; 1831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 1841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 1851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_ACQUIRE, 1861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_RELEASE, 1871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_SET_FMT, 1881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_GET_BUF, 1891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_PUT_BUF, 1901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_REG_BUF, 1911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_UNREG_BUF, 1921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_START, 1931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_STOP, 1941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_QBUF, 1951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_SET_PARM, 1961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_GET_PARM, 1971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_DO_ACTION, 1981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_GET_QUEUED_BUF_COUNT, 1991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_STREAM_EVT_MAX 2001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_stream_evt_type_t; 2011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 2031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_notify_t cb; 2041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *user_data; 2051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* cb_count = -1: infinite 2061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * cb_count > 0: register only for required times */ 2071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int8_t cb_count; 2081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_stream_data_cb_t; 2091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 2111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* buf reference count */ 2121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_refcnt; 2131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* This flag is to indicate if after allocation, 2151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * the corresponding buf needs to qbuf into kernel 2161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * (e.g. for preview usecase, display needs to hold two bufs, 2171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * so no need to qbuf these two bufs initially) */ 2181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t initial_reg_flag; 2191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* indicate if buf is in kernel(1) or client(0) */ 2211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t in_kernel; 2221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_stream_buf_status_t; 2231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct mm_stream { 2251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t my_hdl; /* local stream id */ 2261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t server_stream_id; /* stream id from server */ 2271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t fd; 2281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_state_type_t state; 2291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* stream info*/ 2311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_stream_info_t *stream_info; 2321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* padding info */ 2341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_padding_info_t padding_info; 2351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* offset */ 2371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_frame_len_offset_t frame_offset; 2381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_thread_t cmd_thread; 2401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* dataCB registered on this stream obj */ 2421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t cb_lock; /* cb lock to protect buf_cb */ 2431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_data_cb_t buf_cb[MM_CAMERA_STREAM_BUF_CB_MAX]; 2441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* stream buffer management */ 2461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t buf_lock; 2471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_num; /* num of buffers allocated */ 2481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_def_t* buf; /* ptr to buf array */ 2491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_buf_status_t* buf_status; /* ptr to buf status array */ 2501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t plane_buf_num; /* num of plane buffers allocated Used only in Batch mode*/ 2521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_def_t *plane_buf; /*Pointer to plane buffer array Used only in Batch mode */ 2531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t cur_buf_idx; /* Current container buffer active filling. Used only in Batch mode*/ 2541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t cur_bufs_staged; /*Number of plane buf freed by HAL for this usr buf*/ 2551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* reference to parent channel_obj */ 2581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct mm_channel* ch_obj; 2591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t is_bundled; /* flag if stream is bundled */ 2611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* reference to linked channel_obj */ 2631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct mm_channel* linked_obj; 2641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct mm_stream * linked_stream; /* original stream */ 2651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t is_linked; /* flag if stream is linked */ 2661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_stream_mem_vtbl_t mem_vtbl; /* mem ops tbl */ 2681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_map_unmap_ops_tbl_t map_ops; 2701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int8_t queued_buffer_count; 2721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /*latest timestamp of this stream frame received & last frameID*/ 2741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t prev_frameID; 2751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam nsecs_t prev_timestamp; 2761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_stream_t; 2771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm_channel */ 2791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 2801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_STATE_NOTUSED = 0, /* not used */ 2811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_STATE_STOPPED, /* stopped */ 2821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_STATE_ACTIVE, /* active, at least one stream active */ 2831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_STATE_PAUSED, /* paused */ 2841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_STATE_MAX 2851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_state_type_t; 2861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 2871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 2881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_ADD_STREAM, 2891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_DEL_STREAM, 2901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_LINK_STREAM, 2911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_CONFIG_STREAM, 2921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_GET_BUNDLE_INFO, 2931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_START, 2941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_STOP, 2951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_PAUSE, 2961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_RESUME, 2971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_REQUEST_SUPER_BUF, 2981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_CANCEL_REQUEST_SUPER_BUF, 2991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_FLUSH_SUPER_BUF_QUEUE, 3001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_CONFIG_NOTIFY_MODE, 3011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_START_ZSL_SNAPSHOT, 3021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_STOP_ZSL_SNAPSHOT, 3031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_MAP_STREAM_BUF, 3041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_UNMAP_STREAM_BUF, 3051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_SET_STREAM_PARM, 3061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_GET_STREAM_PARM, 3071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_DO_STREAM_ACTION, 3081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_DELETE, 3091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_AF_BRACKETING, 3101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_AE_BRACKETING, 3111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_FLASH_BRACKETING, 3121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_ZOOM_1X, 3131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CAMERA_EVT_CAPTURE_SETTING, 3141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_EVT_GET_STREAM_QUEUED_BUF_COUNT, 3151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_evt_type_t; 3161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 3191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_stream_config_t *config; 3201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_evt_paylod_config_stream_t; 3211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 3241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_stream_parm_buffer_t *parms; 3251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_evt_paylod_set_get_stream_parms_t; 3261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 3291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *actions; 3301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_evt_paylod_do_stream_action_t; 3311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 3341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type; 3351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t buf_idx; 3361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx; 3371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int fd; 3381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam size_t size; 3391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_evt_paylod_map_stream_buf_t; 3401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 3431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type; 3441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t buf_idx; 3451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx; 3461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_evt_paylod_unmap_stream_buf_t; 3471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t num_of_bufs; 3501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_info_t super_buf[MAX_STREAM_NUM_IN_BUNDLE]; 3511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t matched; 3521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t expected; 3531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx; 3541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_queue_node_t; 3551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_queue_t que; 3581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t num_streams; 3591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* container for bundled stream handlers */ 3601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t bundled_streams[MAX_STREAM_NUM_IN_BUNDLE]; 3611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_channel_attr_t attr; 3621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t expected_frame_id; 3631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t match_cnt; 3641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t expected_frame_id_without_led; 3651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t led_on_start_frame_id; 3661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t led_off_start_frame_id; 3671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t led_on_num_frames; 3681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t once; 3691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_skip_count; 3701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t nomatch_frame_id; 3711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_queue_t; 3721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 3741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t is_active; /* flag to indicate if bundle is valid */ 3751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* queue to store bundled super buffers */ 3761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_queue_t superbuf_queue; 3771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_notify_t super_buf_notify_cb; 3781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *user_data; 3791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_bundle_t; 3801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 3821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_BRACKETING_STATE_OFF, 3831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_BRACKETING_STATE_WAIT_GOOD_FRAME_IDX, 3841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam MM_CHANNEL_BRACKETING_STATE_ACTIVE, 3851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_bracketing_state_t; 3861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct mm_channel { 3881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t my_hdl; 3891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_state_type_t state; 3901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t ch_lock; /* channel lock */ 3911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* stream bundle info in the channel */ 3931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_bundle_t bundle; 3941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 3951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* num of pending suferbuffers */ 3961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t pending_cnt; 3971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t pending_retro_cnt; 3981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t bWaitForPrepSnapshotDone; 3991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t unLockAEC; 4001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* num of pending suferbuffers */ 4011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t stopZslSnapshot; 4021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* cmd thread for superbuffer dataCB and async stop*/ 4041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_thread_t cmd_thread; 4051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* cb thread for sending data cb */ 4071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_thread_t cb_thread; 4081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* data poll thread 4101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * currently one data poll thread per channel 4111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * could extended to support one data poll thread per stream in the channel */ 4121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t poll_thread[MM_CAMERA_CHANNEL_POLL_THREAD_MAX]; 4131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* container for all streams in channel */ 4151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_t streams[MAX_STREAM_NUM_IN_BUNDLE]; 4161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* reference to parent cam_obj */ 4181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct mm_camera_obj* cam_obj; 4191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* manual zsl snapshot control */ 4211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t manualZSLSnapshot; 4221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* control for zsl led */ 4241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t startZSlSnapshotCalled; 4251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t needLEDFlash; 4261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_bracketing_state_t bracketingState; 4271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t isFlashBracketingEnabled; 4281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t isZoom1xFrameRequested; 4291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t burstSnapNum; 4301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam char threadName[THREAD_NAME_SIZE]; 4311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /*Buffer diverted*/ 4331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t diverted_frame_id; 4341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /*Frame capture configaration*/ 4361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t cur_capture_idx; 4371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_capture_frame_config_t *frame_config; 4381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_t; 4391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 4411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_t *ch; 4421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id; 4431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_stream_link_t; 4441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* struct to store information about pp cookie*/ 4461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 4471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t cam_hdl; 4481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_hdl; 4491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_hdl; 4501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_queue_node_t* super_buf; 4511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_channel_pp_info_t; 4521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm_camera */ 4541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 4551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_event_notify_t evt_cb; 4561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *user_data; 4571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_evt_entry_t; 4581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 4601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_evt_entry_t evt[MM_CAMERA_EVT_ENTRY_MAX]; 4611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam /* reg_count <=0: infinite 4621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * reg_count > 0: register only for required times */ 4631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int reg_count; 4641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_evt_obj_t; 4651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct mm_camera_obj { 4671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t my_hdl; 4681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int ref_count; 4691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t ctrl_fd; 4701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t ds_fd; /* domain socket fd */ 4711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t cam_lock; 4721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t cb_lock; /* lock for evt cb */ 4731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_t ch[MM_CAMERA_CHANNEL_MAX]; 4741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_evt_obj_t evt; 4751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t evt_poll_thread; /* evt poll thread */ 4761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_thread_t evt_thread; /* thread for evt CB */ 4771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_vtbl_t vtbl; 4781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t evt_lock; 4801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_cond_t evt_cond; 4811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_event_t evt_rcvd; 4821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam pthread_mutex_t msg_lock; /* lock for sending msg through socket */ 4841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_obj_t; 4851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef struct { 4871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int8_t num_cam; 4881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam char video_dev_name[MM_CAMERA_MAX_NUM_SENSORS][MM_CAMERA_DEV_NAME_LEN]; 4891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_obj_t *cam_obj[MM_CAMERA_MAX_NUM_SENSORS]; 4901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam struct camera_info info[MM_CAMERA_MAX_NUM_SENSORS]; 4911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_ctrl_t; 4921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamtypedef enum { 4941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_async_call, 4951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_sync_call 4961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam} mm_camera_call_type_t; 4971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 4981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/********************************************************************************** 4991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam* external function declare 5001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam***********************************************************************************/ 5011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* utility functions */ 5021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* set int32_t value */ 5031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_util_s_ctrl(int32_t fd, 5041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t id, 5051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t *value); 5061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 5071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* get int32_t value */ 5081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_util_g_ctrl(int32_t fd, 5091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t id, 5101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t *value); 5111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 5121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* send msg throught domain socket for fd mapping */ 5131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_util_sendmsg(mm_camera_obj_t *my_obj, 5141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *msg, 5151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam size_t buf_size, 5161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int sendfd); 5171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* Check if hardware target is A family */ 5181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamuint8_t mm_camera_util_chip_is_a_family(void); 5191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 5201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm-camera */ 5211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_open(mm_camera_obj_t *my_obj); 5221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_close(mm_camera_obj_t *my_obj); 5231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_close_fd(mm_camera_obj_t *my_obj); 5241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_register_event_notify(mm_camera_obj_t *my_obj, 5251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_event_notify_t evt_cb, 5261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * user_data); 5271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_qbuf(mm_camera_obj_t *my_obj, 5281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_def_t *buf); 5301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_get_queued_buf_count(mm_camera_obj_t *my_obj, 5311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, uint32_t stream_id); 5321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_query_capability(mm_camera_obj_t *my_obj); 5331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_set_parms(mm_camera_obj_t *my_obj, 5341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam parm_buffer_t *parms); 5351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_get_parms(mm_camera_obj_t *my_obj, 5361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam parm_buffer_t *parms); 5371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_map_buf(mm_camera_obj_t *my_obj, 5381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type, 5391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int fd, 5401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam size_t size); 5411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_unmap_buf(mm_camera_obj_t *my_obj, 5421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type); 5431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_do_auto_focus(mm_camera_obj_t *my_obj); 5441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_cancel_auto_focus(mm_camera_obj_t *my_obj); 5451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_prepare_snapshot(mm_camera_obj_t *my_obj, 5461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t do_af_flag); 5471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_start_zsl_snapshot(mm_camera_obj_t *my_obj); 5481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_stop_zsl_snapshot(mm_camera_obj_t *my_obj); 5491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_start_zsl_snapshot_ch(mm_camera_obj_t *my_obj, 5501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_stop_zsl_snapshot_ch(mm_camera_obj_t *my_obj, 5521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern uint32_t mm_camera_add_channel(mm_camera_obj_t *my_obj, 5541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_channel_attr_t *attr, 5551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_notify_t channel_cb, 5561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *userdata); 5571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_del_channel(mm_camera_obj_t *my_obj, 5581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_get_bundle_info(mm_camera_obj_t *my_obj, 5601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_bundle_config_t *bundle_info); 5621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern uint32_t mm_camera_add_stream(mm_camera_obj_t *my_obj, 5631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_del_stream(mm_camera_obj_t *my_obj, 5651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id); 5671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern uint32_t mm_camera_link_stream(mm_camera_obj_t *my_obj, 5681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id, 5701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t linked_ch_id); 5711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_config_stream(mm_camera_obj_t *my_obj, 5721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id, 5741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_stream_config_t *config); 5751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_start_channel(mm_camera_obj_t *my_obj, 5761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_stop_channel(mm_camera_obj_t *my_obj, 5781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_request_super_buf(mm_camera_obj_t *my_obj, 5801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t num_buf_requested, 5821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t num_retro_buf_requested); 5831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_cancel_super_buf_request(mm_camera_obj_t *my_obj, 5841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id); 5851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_flush_super_buf_queue(mm_camera_obj_t *my_obj, 5861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx); 5881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_config_channel_notify(mm_camera_obj_t *my_obj, 5891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_super_buf_notify_mode_t notify_mode); 5911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_set_stream_parms(mm_camera_obj_t *my_obj, 5921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t s_id, 5941d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_stream_parm_buffer_t *parms); 5951d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_get_stream_parms(mm_camera_obj_t *my_obj, 5961d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 5971d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t s_id, 5981d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam cam_stream_parm_buffer_t *parms); 5991d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_register_event_notify_internal(mm_camera_obj_t *my_obj, 6001d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_event_notify_t evt_cb, 6011d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * user_data); 6021d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_map_stream_buf(mm_camera_obj_t *my_obj, 6031d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 6041d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id, 6051d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type, 6061d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t buf_idx, 6071d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx, 6081d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int fd, 6091d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam size_t size); 6101d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_unmap_stream_buf(mm_camera_obj_t *my_obj, 6111d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 6121d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id, 6131d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type, 6141d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t buf_idx, 6151d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx); 6161d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_do_stream_action(mm_camera_obj_t *my_obj, 6171d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, 6181d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t stream_id, 6191d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *actions); 6201d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 6211d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm_channel */ 6221d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_channel_fsm_fn(mm_channel_t *my_obj, 6231d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_channel_evt_type_t evt, 6241d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * in_val, 6251d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * out_val); 6261d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_channel_init(mm_channel_t *my_obj, 6271d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_channel_attr_t *attr, 6281d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_notify_t channel_cb, 6291d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *userdata); 6301d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* qbuf is a special case that not going through state machine. 6311d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * This is to avoid deadlock when trying to aquire ch_lock, 6321d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * from the context of dataCB, but async stop is holding ch_lock */ 6331d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_channel_qbuf(mm_channel_t *my_obj, 6341d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_buf_def_t *buf); 6351d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* mm_stream */ 6361d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_stream_fsm_fn(mm_stream_t *my_obj, 6371d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_evt_type_t evt, 6381d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * in_val, 6391d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void * out_val); 6401d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* Allow other stream to register dataCB at certain stream. 6411d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * This is for use case of video sized live snapshot, 6421d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * because snapshot stream need register one time CB at video stream. 6431d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * ext_image_mode and sensor_idx are used to identify the destinate stream 6441d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * to be register with dataCB. */ 6451d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_stream_reg_buf_cb(mm_stream_t *my_obj, 6461d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_stream_data_cb_t *val); 6471d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_stream_map_buf(mm_stream_t *my_obj, 6481d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type, 6491d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx, 6501d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx, 6511d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int fd, 6521d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam size_t size); 6531d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_stream_unmap_buf(mm_stream_t *my_obj, 6541d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint8_t buf_type, 6551d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t frame_idx, 6561d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t plane_idx); 6571d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 6581d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 6591d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* utiltity fucntion declared in mm-camera-inteface2.c 6601d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam * and need be used by mm-camera and below*/ 6611d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamuint32_t mm_camera_util_generate_handler(uint8_t index); 6621d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamconst char * mm_camera_util_get_dev_name(uint32_t cam_handler); 6631d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamuint8_t mm_camera_util_get_index_by_handler(uint32_t handler); 6641d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 6651d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam/* poll/cmd thread functions */ 6661d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_poll_thread_launch( 6671d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t * poll_cb, 6681d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_type_t poll_type); 6691d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_poll_thread_release(mm_camera_poll_thread_t *poll_cb); 6701d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_poll_thread_add_poll_fd( 6711d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t * poll_cb, 6721d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t handler, 6731d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam int32_t fd, 6741d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_notify_t nofity_cb, 6751d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void *userdata, 6761d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_call_type_t); 6771d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_poll_thread_del_poll_fd( 6781d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t * poll_cb, 6791d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t handler, 6801d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_call_type_t); 6811d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_poll_thread_commit_updates( 6821d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_poll_thread_t * poll_cb); 6831d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_cmd_thread_launch( 6841d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_thread_t * cmd_thread, 6851d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam mm_camera_cmd_cb_t cb, 6861d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam void* user_data); 6871d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_cmd_thread_name(const char* name); 6881d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_cmd_thread_release(mm_camera_cmd_thread_t * cmd_thread); 6891d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam 6901d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tamextern int32_t mm_camera_channel_advanced_capture(mm_camera_obj_t *my_obj, 6911d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t ch_id, mm_camera_advanced_capture_t type, 6921d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam uint32_t trigger, void *in_value); 6931d467d58305ab97eecfcbb94622b9ad3a7a9a853Ed Tam#endif /* __MM_CAMERA_H__ */ 694