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