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