166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *
366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * Redistribution and use in source and binary forms, with or without
466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * modification, are permitted provided that the following conditions are
566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * met:
666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *     * Redistributions of source code must retain the above copyright
766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       notice, this list of conditions and the following disclaimer.
866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *     * Redistributions in binary form must reproduce the above
966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       copyright notice, this list of conditions and the following
1066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       disclaimer in the documentation and/or other materials provided
1166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       with the distribution.
1266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *     * Neither the name of The Linux Foundation nor the names of its
1366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       contributors may be used to endorse or promote products derived
1466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *       from this software without specific prior written permission.
1566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *
1666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
1766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
1966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
2066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
2366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
2566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
2666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *
2866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin */
2966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
3066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#ifndef __MM_CAMERA_INTERFACE_H__
3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define __MM_CAMERA_INTERFACE_H__
3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies
3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <media/msmb_camera.h>
3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies
3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "cam_intf.h"
3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "cam_queue.h"
3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_CAMERA_MAX_NUM_SENSORS MSM_MAX_CAMERA_SENSORS
4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_CAMERA_MAX_NUM_FRAMES CAM_MAX_NUM_BUFS_PER_STREAM
4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* num of channels allowed in a camera obj */
4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_CAMERA_CHANNEL_MAX 16
4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define PAD_TO_SIZE(size, padding) \
4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        ((size + (typeof(size))(padding - 1)) & \
4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        (typeof(size))(~(padding - 1)))
4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
491687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan#define CEIL_DIVISION(n, d) ((n+d-1)/d)
501687b440bcda598006d1950f74915f0cea3b66a3Mekala Natarajan
5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** CAM_DUMP_TO_FILE:
5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @filename: file name
5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @name:filename
5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @index: index of the file
5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @extn: file extension
5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @p_addr: address of the buffer
5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  @len: buffer length
5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *
5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin *  dump the image to the file
6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin **/
6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define CAM_DUMP_TO_FILE(path, name, index, extn, p_addr, len) ({ \
6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  size_t rc = 0; \
6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  char filename[FILENAME_MAX]; \
6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  if (index >= 0) \
6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    snprintf(filename, FILENAME_MAX, "%s/%s%d.%s", path, name, index, extn); \
6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  else \
6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    snprintf(filename, FILENAME_MAX, "%s/%s.%s", path, name, extn); \
6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  FILE *fp = fopen(filename, "w+"); \
6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  if (fp) { \
7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    rc = fwrite(p_addr, 1, len, fp); \
7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    LOGE("written size %d", len); \
7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    fclose(fp); \
7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  } else { \
7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    LOGE("open %s failed", filename); \
7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  } \
7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin})
7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* Declaring Buffer structure */
7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstruct mm_camera_buf_def;
8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_plane_def_t : structure for frame plane info
8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @num_planes : num of planes for the frame buffer, to be
8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*               filled during mem allocation
8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @planes : plane info for the frame buffer, to be filled
8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*               during mem allocation
8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int8_t num_planes;
8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    struct v4l2_plane planes[VIDEO_MAX_PLANES];
9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_plane_buf_def_t;
9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_user_buf_def_t : structure for frame plane info
9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @num_buffers : num of buffers in this user defined structure
9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @bufs_used : actual number of buffer filled
9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @buf_in_use : flag to notify buffer usage status.
9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @plane_buf : Plane buffer array pointer.
9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t num_buffers;
10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t bufs_used;     /*Num of Buffer filled by Kernel*/
10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t buf_in_use;  /* Container buffer is freed to fill*/
10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t buf_idx[MSM_CAMERA_MAX_USER_BUFF_CNT];
10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    struct mm_camera_buf_def *plane_buf;
10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_user_buf_def_t;
10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_buf_def_t: structure for stream frame buf
10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @stream_id : stream handler to uniquely identify a stream
10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*               object
10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @buf_idx : index of the buf within the stream bufs, to be
11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*               filled during mem allocation
11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @timespec_ts : time stamp, to be filled when DQBUF is
11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                 called
11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @frame_idx : frame sequence num, to be filled when DQBUF
11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @plane_buf  : Frame plane definition
11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @fd : file descriptor of the frame buffer, to be filled
11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*        during mem allocation
11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @buffer : pointer to the frame buffer, to be filled during
11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*            mem allocation
11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @frame_len : length of the whole frame, to be filled during
12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*               mem allocation
12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @mem_info : user specific pointer to additional mem info
12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @flags:  v4l2_buffer flags, used to report error in data buffers
12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct mm_camera_buf_def {
12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t stream_id;
12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    cam_stream_type_t stream_type;
12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    cam_stream_buf_type buf_type;
12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t buf_idx;
12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t is_uv_subsampled;
13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    struct timespec ts;
13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t frame_idx;
13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    union {
13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        mm_camera_plane_buf_def_t planes_buf;
13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        mm_camera_user_buf_def_t user_buf;
13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    };
13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int fd;
13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    void *buffer;
13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    size_t frame_len;
13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    void *mem_info;
14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t flags;
14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_buf_def_t;
14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_super_buf_t: super buf structure for bundled
14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*   stream frames
14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @camera_handle : camera handler to uniquely identify
14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*              a camera object
14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @ch_id : channel handler to uniquely ideentify a channel
14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*           object
14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @num_bufs : number of buffers in the super buf, should not
15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*              exceeds MAX_STREAM_NUM_IN_BUNDLE
15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @bufs : array of buffers in the bundle
15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t camera_handle;
15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t ch_id;
15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t num_bufs;
15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t bUnlockAEC;
15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t bReadyForPrepareSnapshot;
15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_buf_def_t* bufs[MAX_STREAM_NUM_IN_BUNDLE];
16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_super_buf_t;
16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_req_buf_type_t
16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin* Request type for super buf from channel
16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum {
16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_REQ_SUPER_BUF,
16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_REQ_FRAME_SYNC_BUF
16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_req_buf_type_t;
16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_req_buf_t: Attributes for super buf request
17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*
17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @type : type of super buf requested
17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @num_buf_requested : num of super bufs requested
17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @num_retro_buf_requested : number of retro bufs requested
17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @primary_only : specifies if only primary camera frame for a dual
17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*     camera is requested
17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_req_buf_type_t type;
18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t num_buf_requested;
18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t num_retro_buf_requested;
18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t primary_only;
18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_req_buf_t;
18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_event_t: structure for event
18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @server_event_type : event type from serer
18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @status : status of an event, value could be
18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*              CAM_STATUS_SUCCESS
18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*              CAM_STATUS_FAILED
19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    cam_event_type_t server_event_type;
19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t status;
19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_event_t;
19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_event_notify_t: function definition for event
19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*   notify handling
19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @camera_handle : camera handler
19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @evt : pointer to an event struct
20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @user_data: user data pointer
20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*mm_camera_event_notify_t)(uint32_t camera_handle,
20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                         mm_camera_event_t *evt,
20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                         void *user_data);
20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_buf_notify_t: function definition for frame notify
20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*   handling
20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @mm_camera_super_buf_t : received frame buffers
20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @user_data: user data pointer
21066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
21166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*mm_camera_buf_notify_t) (mm_camera_super_buf_t *bufs,
21266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        void *user_data);
21366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** map_stream_buf_op_t: function definition for operation of
21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*   mapping stream buffers via domain socket
21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @frame_idx : buffer index within stream buffers
21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @plane_idx    : plane index. If all planes share the same
21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                   fd, plane_idx = -1; otherwise, plean_idx is
21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                   the index to plane (0..num_of_planes)
22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @fd : file descriptor of the stream buffer
22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @size: size of the stream buffer
22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @userdata : user data pointer
22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef int32_t (*map_stream_buf_op_t) (uint32_t frame_idx,
22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        int32_t plane_idx,
22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        int fd,
22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        size_t size,
22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        cam_mapping_buf_type type,
22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                        void *userdata);
23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef int32_t (*map_stream_bufs_op_t) (const cam_buf_map_type_list *buf_map_list,
23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                         void *userdata);
23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** unmap_stream_buf_op_t: function definition for operation of
23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                          unmapping stream buffers via domain
23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                          socket
23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @frame_idx : buffer index within stream buffers
23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @plane_idx : plane index. If all planes share the same
23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                 fd, plane_idx = -1; otherwise, plean_idx is
24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                 the index to plane (0..num_of_planes)
24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @userdata : user data pointer
24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef int32_t (*unmap_stream_buf_op_t) (uint32_t frame_idx,
24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                          int32_t plane_idx,
24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                          cam_mapping_buf_type type,
24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                          void *userdata);
24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_map_unmap_ops_tbl_t: virtual table
24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                      for mapping/unmapping stream buffers via
25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                      domain socket
25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @map_ops : operation for mapping
25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @unmap_ops : operation for unmapping
25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @userdata: user data pointer
25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
25666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    map_stream_buf_op_t map_ops;
25766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    map_stream_bufs_op_t bundled_map_ops;
25866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    unmap_stream_buf_op_t unmap_ops;
25966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    void *userdata;
26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_map_unmap_ops_tbl_t;
26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_stream_mem_vtbl_t: virtual table for stream
26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                      memory allocation and deallocation
26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @get_bufs : function definition for allocating
26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                stream buffers
26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @put_bufs : function definition for deallocating
26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                stream buffers
26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @user_data: user data pointer
26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  void *user_data;
27266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  int32_t (*set_config_ops) (mm_camera_map_unmap_ops_tbl_t *ops_tbl,
27366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin          void *user_data);
27466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  int32_t (*get_bufs) (cam_frame_len_offset_t *offset,
27566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       uint8_t *num_bufs,
27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       uint8_t **initial_reg_flag,
27766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       mm_camera_buf_def_t **bufs,
27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       mm_camera_map_unmap_ops_tbl_t *ops_tbl,
27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       void *user_data);
28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  int32_t (*put_bufs) (mm_camera_map_unmap_ops_tbl_t *ops_tbl,
28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                       void *user_data);
28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  int32_t (*invalidate_buf)(uint32_t index, void *user_data);
28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin  int32_t (*clean_invalidate_buf)(uint32_t index, void *user_data);
28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_stream_mem_vtbl_t;
28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
28666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_stream_config_t: structure for stream
28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                              configuration
28866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @stream_info : pointer to a stream info structure
28966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @padding_info: padding info obtained from querycapability
29066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @mem_tbl : memory operation table for
29166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*              allocating/deallocating stream buffers
29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @stream_cb_sync : SYNC callback handling stream frame notify
29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @stream_cb : ASYNC callback handling stream frame notify
29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @userdata : user data pointer
29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    cam_stream_info_t *stream_info;
29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    cam_padding_info_t padding_info;
29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_stream_mem_vtbl_t mem_vtbl;
30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_buf_notify_t stream_cb_sync;
30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_buf_notify_t stream_cb;
30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    void *userdata;
30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_stream_config_t;
30466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
30566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_super_buf_notify_mode_t: enum for super uffer
30666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                                      notification mode
30766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_SUPER_BUF_NOTIFY_BURST :
30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       ZSL use case: get burst of frames
30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_SUPER_BUF_NOTIFY_CONTINUOUS :
31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       get continuous frames: when the super buf is ready
31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       dispatch it to HAL
31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum {
31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_NOTIFY_BURST = 0,
31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_NOTIFY_CONTINUOUS,
31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_NOTIFY_MAX
31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_super_buf_notify_mode_t;
31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_super_buf_priority_t: enum for super buffer
32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                                   matching priority
32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_SUPER_BUF_PRIORITY_NORMAL :
32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       Save the frame no matter focused or not. Currently only
32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       this type is supported.
32466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_SUPER_BUF_PRIORITY_FOCUS :
32566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       only queue the frame that is focused. Will enable meta
32666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       data header to carry focus info
32766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_SUPER_BUF_PRIORITY_EXPOSURE_BRACKETING :
32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       after shutter, only queue matched exposure index
32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum {
33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_PRIORITY_NORMAL = 0,
33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_PRIORITY_FOCUS,
33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_PRIORITY_EXPOSURE_BRACKETING,
33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_PRIORITY_LOW,/* Bundled metadata frame may not match*/
33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_SUPER_BUF_PRIORITY_MAX
33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_super_buf_priority_t;
33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_advanced_capture_t: enum for advanced capture type.
33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_AF_BRACKETING :
34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       to enable AF Bracketig.
34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_AE_BRACKETING :
34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       to enable AF Bracketing.
34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_FLASH_BRACKETING :
34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       to enable Flash Bracketing.
34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_ZOOM_1X :
34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       to enable zoom 1x capture request
34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum {
34966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   MM_CAMERA_AF_BRACKETING = 0,
35066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   MM_CAMERA_AE_BRACKETING,
35166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   MM_CAMERA_FLASH_BRACKETING,
35266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   MM_CAMERA_ZOOM_1X,
35366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   MM_CAMERA_FRAME_CAPTURE,
35466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_advanced_capture_t;
35566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
35666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_stream_cb_type: enum for stream buffer callback type.
35766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_STREAM_CB_TYPE_ASYNC :
35866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       callback is async type. buffer process done in client thread context
35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @MM_CAMERA_STREAM_CB_TYPE_SYNC :
36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*       callback is sync type. buffer process done interface thread context
36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum {
36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_STREAM_CB_TYPE_ASYNC,
36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    MM_CAMERA_STREAM_CB_TYPE_SYNC,
36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_stream_cb_type;
36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_channel_attr_t: structure for defining channel
36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                             attributes
37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @notify_mode : notify mode: burst or continuous
37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @water_mark : queue depth. Only valid for burst mode
37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @look_back : look back how many frames from last buf.
37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                 Only valid for burst mode
37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @post_frame_skip : after send first frame to HAL, how many
37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                     frames needing to be skipped for next
37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                     delivery. Only valid for burst mode
37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @max_unmatched_frames : max number of unmatched frames in
37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                     queue
37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @enable_frame_sync: Enables frame sync for dual camera
38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @priority : save matched priority frames only
381d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch*    @user_expected_frame_id : Number of frames, camera interface
382d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch*                     will wait for getting the instant capture frame.
38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_super_buf_notify_mode_t notify_mode;
38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t water_mark;
38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t look_back;
38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t post_frame_skip;
38966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t max_unmatched_frames;
39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint8_t enable_frame_sync;
39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_super_buf_priority_t priority;
392d59d4ae1e81b3b4f85c59b75636580830b3f0833Steve Pfetsch    uint8_t user_expected_frame_id;
39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_channel_attr_t;
39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** query_capability: fucntion definition for querying static
39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    camera capabilities
39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
40066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
40166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: would assume cam_capability_t is already mapped
40266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
40366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*query_capability) (uint32_t camera_handle);
40466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
40566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** register_event_notify: fucntion definition for registering
40666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                         for event notification
40766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
40866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @evt_cb : callback for event notify
40966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @user_data : user data poiner
41066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
41166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
41266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
41366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*register_event_notify) (uint32_t camera_handle,
41466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                      mm_camera_event_notify_t evt_cb,
41566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                      void *user_data);
41666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
41766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** close_camera: fucntion definition for closing a camera
41866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
41966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
42066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
42166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
42266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*close_camera) (uint32_t camera_handle);
42366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
42466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** map_buf: fucntion definition for mapping a camera buffer
42566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *           via domain socket
42666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
42766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_type : type of mapping buffers, can be value of
42866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_CAPABILITY
42966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_SETPARM_BUF
43066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_GETPARM_BUF
43166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @fd : file descriptor of the stream buffer
43266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @size :  size of the stream buffer
43366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
43466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
43566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
43666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*map_buf) (uint32_t camera_handle,
43766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                        uint8_t buf_type,
43866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                        int fd,
43966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                        size_t size);
44066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
44166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** map_bufs: function definition for mapping multiple camera buffers
44266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *           via domain socket
44366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handler
44466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_map_list : list of buffers to map
44566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
44666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
44766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
44866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*map_bufs) (uint32_t camera_handle,
44966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                         const cam_buf_map_type_list *buf_map_list);
45066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
45166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** unmap_buf: fucntion definition for unmapping a camera buffer
45266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *           via domain socket
45366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
45466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_type : type of mapping buffers, can be value of
45566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_CAPABILITY
45666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_SETPARM_BUF
45766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                CAM_MAPPING_BUF_TYPE_GETPARM_BUF
45866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
45966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
46066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
46166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*unmap_buf) (uint32_t camera_handle,
46266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                          uint8_t buf_type);
46366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
46466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** set_parms: fucntion definition for setting camera
46566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             based parameters to server
46666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
46766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @parms : batch for parameters to be set, stored in
46866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               parm_buffer_t
46966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
47066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
47166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: would assume parm_buffer_t is already mapped, and
47266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       according parameter entries to be set are filled in the
47366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       buf before this call
47466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
47566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*set_parms) (uint32_t camera_handle,
47666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                          parm_buffer_t *parms);
47766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
47866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** get_parms: fucntion definition for querying camera
47966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             based parameters from server
48066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
48166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @parms : batch for parameters to be queried, stored in
48266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               parm_buffer_t
48366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
48466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
48566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: would assume parm_buffer_t is already mapped, and
48666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       according parameter entries to be queried are filled in
48766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       the buf before this call
48866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
48966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*get_parms) (uint32_t camera_handle,
49066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                          parm_buffer_t *parms);
49166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
49266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** do_auto_focus: fucntion definition for performing auto focus
49366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
49466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
49566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
49666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: if this call success, we will always assume there will
49766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *        be an auto_focus event following up.
49866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
49966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*do_auto_focus) (uint32_t camera_handle);
50066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
50166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** cancel_auto_focus: fucntion definition for cancelling
50266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     previous auto focus request
50366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
50466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    *  Return value: 0 -- success
50566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    *                -1 -- failure
50666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
50766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*cancel_auto_focus) (uint32_t camera_handle);
50866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
50966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** prepare_snapshot: fucntion definition for preparing hardware
51066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    for snapshot.
51166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
51266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @do_af_flag    : flag indicating if AF needs to be done
51366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     0 -- no AF needed
51466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     1 -- AF needed
51566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
51666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
51766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
51866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*prepare_snapshot) (uint32_t camera_handle,
51966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 int32_t do_af_flag);
52066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
52166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** start_zsl_snapshot: function definition for starting
52266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    zsl snapshot.
52366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
52466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id         : channel id
52566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
52666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
52766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
52866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*start_zsl_snapshot) (uint32_t camera_handle, uint32_t ch_id);
52966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
53066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** stop_zsl_snapshot: function definition for stopping
53166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    zsl snapshot.
53266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
53366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id         : channel id
53466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
53566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
53666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
53766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*stop_zsl_snapshot) (uint32_t camera_handle, uint32_t ch_id);
53866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
53966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** add_channel: fucntion definition for adding a channel
54066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
54166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
54266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @attr : pointer to channel attribute structure
54366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @channel_cb : callbak to handle bundled super buffer
54466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @userdata : user data pointer
54566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: channel id, zero is invalid ch_id
54666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     * Note: attr, channel_cb, and userdata can be NULL if no
54766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       superbufCB is needed
54866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
54966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t (*add_channel) (uint32_t camera_handle,
55066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                             mm_camera_channel_attr_t *attr,
55166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                             mm_camera_buf_notify_t channel_cb,
55266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                             void *userdata);
55366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
55466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** delete_channel: fucntion definition for deleting a channel
55566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
55666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
55766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
55866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
55966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
56066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*delete_channel) (uint32_t camera_handle,
56166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               uint32_t ch_id);
56266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
56366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** get_bundle_info: function definition for querying bundle
56466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  info of the channel
56566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handler
56666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id         : channel handler
56766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @bundle_info   : bundle info to be filled in
56866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
56966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
57066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
57166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*get_bundle_info) (uint32_t camera_handle,
57266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                uint32_t ch_id,
57366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                cam_bundle_config_t *bundle_info);
57466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
57566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** add_stream: fucntion definition for adding a stream
57666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
57766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
57866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: stream_id. zero is invalid stream_id
57966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
58066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t (*add_stream) (uint32_t camera_handle,
58166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                            uint32_t ch_id);
58266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
58366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** delete_stream: fucntion definition for deleting a stream
58466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
58566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
58666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
58766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
58866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
58966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
59066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*delete_stream) (uint32_t camera_handle,
59166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              uint32_t ch_id,
59266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              uint32_t stream_id);
59366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
59466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** link_stream: function definition for linking a stream
59566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handle
59666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handle from which the stream originates
59766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handle
59866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @linked_ch_id: channel handle in which the stream will be linked
59966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
60066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
60166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
60266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*link_stream) (uint32_t camera_handle,
60366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin          uint32_t ch_id,
60466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin          uint32_t stream_id,
60566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin          uint32_t linked_ch_id);
60666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
60766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** config_stream: fucntion definition for configuring a stream
60866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
60966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
61066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
61166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @confid : pointer to a stream configuration structure
61266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
61366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
61466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
61566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*config_stream) (uint32_t camera_handle,
61666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              uint32_t ch_id,
61766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              uint32_t stream_id,
61866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              mm_camera_stream_config_t *config);
61966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
62066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** map_stream_buf: fucntion definition for mapping
62166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                 stream buffer via domain socket
62266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
62366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
62466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
62566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_type : type of mapping buffers, can be value of
62666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_STREAM_BUF
62766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_STREAM_INFO
62866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF
62966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_idx : buffer index within the stream buffers
63066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @plane_idx : plane index. If all planes share the same fd,
63166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               plane_idx = -1; otherwise, plean_idx is the
63266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               index to plane (0..num_of_planes)
63366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @fd : file descriptor of the stream buffer
63466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @size :  size of the stream buffer
63566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
63666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
63766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
63866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*map_stream_buf) (uint32_t camera_handle,
63966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               uint32_t ch_id,
64066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               uint32_t stream_id,
64166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               uint8_t buf_type,
64266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               uint32_t buf_idx,
64366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               int32_t plane_idx,
64466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               int fd,
64566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                               size_t size);
64666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
64766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** map_stream_bufs: function definition for mapping multiple
64866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                 stream buffers via domain socket
64966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handler
65066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
65166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_map_list : list of buffers to map
65266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
65366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
65466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
65566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*map_stream_bufs) (uint32_t camera_handle,
65666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                uint32_t ch_id,
65766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                const cam_buf_map_type_list *buf_map_list);
65866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
65966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** unmap_stream_buf: fucntion definition for unmapping
66066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                 stream buffer via domain socket
66166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
66266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
66366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
66466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_type : type of mapping buffers, can be value of
66566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_STREAM_BUF
66666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_STREAM_INFO
66766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *             CAM_MAPPING_BUF_TYPE_OFFLINE_INPUT_BUF
66866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_idx : buffer index within the stream buffers
66966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @plane_idx : plane index. If all planes share the same fd,
67066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               plane_idx = -1; otherwise, plean_idx is the
67166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               index to plane (0..num_of_planes)
67266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
67366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
67466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
67566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*unmap_stream_buf) (uint32_t camera_handle,
67666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t ch_id,
67766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t stream_id,
67866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint8_t buf_type,
67966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t buf_idx,
68066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 int32_t plane_idx);
68166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
68266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** set_stream_parms: fucntion definition for setting stream
68366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    specific parameters to server
68466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
68566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
68666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
68766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @parms : batch for parameters to be set
68866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
68966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
69066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: would assume parm buffer is already mapped, and
69166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       according parameter entries to be set are filled in the
69266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       buf before this call
69366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
69466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*set_stream_parms) (uint32_t camera_handle,
69566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t ch_id,
69666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t s_id,
69766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 cam_stream_parm_buffer_t *parms);
69866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
69966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** get_stream_parms: fucntion definition for querying stream
70066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    specific parameters from server
70166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
70266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
70366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
70466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @parms : batch for parameters to be queried
70566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
70666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
70766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: would assume parm buffer is already mapped, and
70866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       according parameter entries to be queried are filled in
70966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *       the buf before this call
71066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
71166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*get_stream_parms) (uint32_t camera_handle,
71266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t ch_id,
71366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 uint32_t s_id,
71466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                 cam_stream_parm_buffer_t *parms);
71566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
71666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** start_channel: fucntion definition for starting a channel
71766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
71866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
71966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
72066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
72166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     * This call will start all streams belongs to the channel
72266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
72366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*start_channel) (uint32_t camera_handle,
72466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                              uint32_t ch_id);
72566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
72666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** stop_channel: fucntion definition for stopping a channel
72766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
72866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
72966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
73066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
73166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     * This call will stop all streams belongs to the channel
73266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
73366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*stop_channel) (uint32_t camera_handle,
73466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                             uint32_t ch_id);
73566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
73666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** qbuf: fucntion definition for queuing a frame buffer back to
73766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *        kernel for reuse
73866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
73966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
74066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf : a frame buffer to be queued back to kernel
74166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
74266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
74366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
74466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*qbuf) (uint32_t camera_handle,
74566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                     uint32_t ch_id,
74666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                     mm_camera_buf_def_t *buf);
74766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
74866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** get_queued_buf_count: fucntion definition for querying queued buf count
74966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
75066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
75166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
75266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: queued buf count
75366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
75466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*get_queued_buf_count) (uint32_t camera_handle,
75566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            uint32_t ch_id,
75666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            uint32_t stream_id);
75766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
75866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** request_super_buf: fucntion definition for requesting frames
75966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     from superbuf queue in burst mode
76066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
76166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
76266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf : provides info related to the super buf request
76366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
76466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
76566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
76666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*request_super_buf) (uint32_t camera_handle,
76766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                  uint32_t ch_id,
76866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                  mm_camera_req_buf_t *buf);
76966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
77066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** cancel_super_buf_request: fucntion definition for canceling
77166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     frames dispatched from superbuf queue in
77266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     burst mode
77366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
77466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
77566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
77666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
77766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
77866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*cancel_super_buf_request) (uint32_t camera_handle,
77966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                         uint32_t ch_id);
78066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
78166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** flush_super_buf_queue: function definition for flushing out
78266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     all frames in the superbuf queue up to frame_idx,
78366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     even if frames with frame_idx come in later than
78466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     this call.
78566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
78666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
78766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @frame_idx : frame index up until which all superbufs are flushed
78866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
78966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
79066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
79166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*flush_super_buf_queue) (uint32_t camera_handle,
79266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                      uint32_t ch_id, uint32_t frame_idx);
79366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
79466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** configure_notify_mode: function definition for configuring the
79566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                         notification mode of channel
79666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handler
79766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
79866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @notify_mode : notification mode
79966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
80066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
80166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
80266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*configure_notify_mode) (uint32_t camera_handle,
80366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                      uint32_t ch_id,
80466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin                                      mm_camera_super_buf_notify_mode_t notify_mode);
80566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
80666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   /** process_advanced_capture: function definition for start/stop advanced capture
80766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                    for snapshot.
80866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handle
80966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
81066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @type :  advanced capture type.
81166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @trigger    : flag indicating if advanced capture needs to be done
81266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     0 -- stop advanced capture
81366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                     1 -- start advanced capture
81466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @in_value: Input value. Configaration
81566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
81666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
81766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
81866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*process_advanced_capture) (uint32_t camera_handle,
81966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin             uint32_t ch_id, mm_camera_advanced_capture_t type,
82066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin             int8_t start_flag, void *in_value);
82166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
82266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   /** get_session_id: gets the backend session id from the kernel
82366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camera handle
82466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @sessionid : session id to be retrieved
82566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *     Return value: 0 -- success
82666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -1 -- failure
82766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Note: if this call succeeds, we will get a valid session id
82866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
82966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*get_session_id) (uint32_t camera_handle,
83066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            uint32_t* sessionid);
83166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
83266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** sync_related_sensors: sends sync cmd
83366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      *    @camera_handle : camera handle
83466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      *    @related_cam_info : related cam info to be sent to server
83566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      *     Return value: 0 -- success
83666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      *                -1 -- failure
83766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      *  Note: if this call succeeds, we will get linking established in back end
83866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin      **/
83966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     int32_t (*sync_related_sensors) (uint32_t camera_handle,
84066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            cam_sync_related_sensors_event_info_t*
84166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            related_cam_info);
84266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    /** flush: function definition for flush
84366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  @camera_handle: camera handler
84466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *  Return value: 0 -- success
84566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *               -1 -- failure
84666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
84766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*flush) (uint32_t camera_handle);
84866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
84966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin   /** register_stream_buf_cb: fucntion definition for registering special stream callbacks
85066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @camera_handle : camer handler
85166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @ch_id : channel handler
85266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @stream_id : stream handler
85366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @buf_cb : callback function pointer
85466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @cb_type : Callback type SYNC/ASYNC
85566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    @userdata : user data pointer
85666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *    Return value: 0 -- success
85766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     *                -       1 -- failure
85866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin     **/
85966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    int32_t (*register_stream_buf_cb) (uint32_t camera_handle,
86066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            uint32_t ch_id, uint32_t stream_id, mm_camera_buf_notify_t buf_cb,
86166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin            mm_camera_stream_cb_type cb_type, void *userdata);
86266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_ops_t;
86366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
86466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/** mm_camera_vtbl_t: virtual table for camera operations
86566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @camera_handle : camera handler which uniquely identifies a
86666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*                   camera object
86766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin*    @ops : API call table
86866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin**/
86966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct {
87066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    uint32_t camera_handle;
87166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin    mm_camera_ops_t *ops;
87266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_camera_vtbl_t;
87366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
87466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* return number of cameras */
87566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t get_num_of_cameras();
87666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
87766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* return reference pointer of camera vtbl */
87866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t camera_open(uint8_t camera_idx, mm_camera_vtbl_t **camera_obj);
87966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
88066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* helper functions */
88166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_preview(cam_stream_info_t *stream_info,
88266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
88366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
88466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
88566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
88666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_post_view(cam_format_t fmt,
88766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
88866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
88966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
89066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_snapshot(cam_format_t fmt,
89166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
89266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
89366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
89466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
89566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_raw(cam_format_t fmt,
89666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
89766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
89866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
89966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
90066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_video(cam_format_t fmt,
90166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
90266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
90366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
90466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_metadata(cam_dimension_t *dim,
90566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
90666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
90766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
90866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_postproc(cam_stream_info_t *stream_info,
90966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
91066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
91166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
91266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinint32_t mm_stream_calc_offset_analysis(cam_format_t fmt,
91366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_dimension_t *dim,
91466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_padding_info_t *padding,
91566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin        cam_stream_buf_plane_info_t *buf_planes);
91666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
91766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t mm_stream_calc_lcm (int32_t num1, int32_t num2);
91866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
91966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinstruct camera_info *get_cam_info(uint32_t camera_id, cam_sync_type_t *pCamType);
92066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
92166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint8_t is_yuv_sensor(uint32_t camera_id);
92266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin
92366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /*__MM_CAMERA_INTERFACE_H__*/
924