/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
#ifndef __MM_CAMERA_SHIMLAYER_H_
#define __MM_CAMERA_SHIMLAYER_H_
#include "cam_intf.h"
/*
* MCT shim layer APIs
*/
#define SHIMLAYER_LIB "/system/vendor/lib/libmmcamera2_mct_shimlayer.so"
struct cam_shim_packet;
/*
* Bundled events structure.
*/
typedef struct {
uint8_t cmd_count; /* Total number of events in this packet */
struct cam_shim_packet *cmd; /*Events to process*/
} cam_shim_cmd_packet_t;
/*
* Bundled stream event structure
*/
typedef struct {
uint8_t stream_count; /*Number of streams in a bundle*/
cam_shim_cmd_packet_t stream_event[MAX_NUM_STREAMS]; /*Event for different streams*/
} cam_shim_stream_cmd_packet_t;
/*
* Command types to process in shim layer
*/
typedef enum {
CAM_SHIM_SET_PARM, /*v4l2 set parameter*/
CAM_SHIM_GET_PARM, /*v4l2 get parameter*/
CAM_SHIM_REG_BUF, /*Reg/unreg buffers with back-end*/
CAM_SHIM_BUNDLE_CMD, /*Bundled command for streams*/
} cam_shim_cmd_type;
typedef struct {
uint32_t command; /*V4L2 or private command*/
uint32_t stream_id; /*streamID*/
void *value; /*command value/data*/
} cam_shim_cmd_data;
/*
* Structure to communicate command with shim layer
*/
typedef struct cam_shim_packet {
uint32_t session_id;
cam_shim_cmd_type cmd_type; /*Command type to process*/
union {
cam_shim_cmd_data cmd_data; /*get/set parameter structure*/
cam_reg_buf_t reg_buf; /*Buffer register and unregister*/
cam_shim_stream_cmd_packet_t bundle_cmd;/*Bundled command*/
};
} cam_shim_packet_t;
typedef int32_t (*mm_camera_shim_event_handler_func)(uint32_t session_id,
cam_event_t *event);
typedef struct {
cam_status_t (*mm_camera_shim_open_session) (int session,
mm_camera_shim_event_handler_func evt_cb);
int32_t (*mm_camera_shim_close_session)(int session);
int32_t (*mm_camera_shim_send_cmd)(cam_shim_packet_t *event);
} mm_camera_shim_ops_t;
int32_t (*mm_camera_shim_module_init)(mm_camera_shim_ops_t *shim_ops);
#endif /*__MM_CAMERA_SHIMLAYER_H_*/