C++程序  |  210行  |  6.07 KB

/* Copyright (c) 2015-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_LIB2D_H_
#define MM_LIB2D_H_

#include "cam_types.h"
#ifdef QCAMERA_REDEFINE_LOG
#define CAM_MODULE CAM_NO_MODULE

// Camera dependencies
extern "C" {
#include "mm_camera_dbg.h"
}
#endif

/** lib2d_error
 * @MM_LIB2D_SUCCESS: Success
 * @MM_LIB2D_ERR_GENERAL: General Error
 * @MM_LIB2D_ERR_MEMORY: Insufficient memory error
 * @MM_LIB2D_ERR_BAD_PARAM: Bad params error
**/
typedef enum lib2d_error_t {
  MM_LIB2D_SUCCESS,
  MM_LIB2D_ERR_GENERAL,
  MM_LIB2D_ERR_MEMORY,
  MM_LIB2D_ERR_BAD_PARAM,
} lib2d_error;

/** lib2d_mode
 * @MM_LIB2D_SYNC_MODE: Synchronous mode
 * @MM_LIB2D_ASYNC_MODE: Asynchronous mode
**/
typedef enum mm_lib2d_mode_t {
  MM_LIB2D_SYNC_MODE,
  MM_LIB2D_ASYNC_MODE,
} lib2d_mode;

/** mm_lib2d_buffer_type
 * @MM_LIB2D_BUFFER_TYPE_RGB: RGB Buffer type
 * @MM_LIB2D_BUFFER_TYPE_YUV: YUV buffer type
**/
typedef enum mm_lib2d_buffer_type_t {
  MM_LIB2D_BUFFER_TYPE_RGB,
  MM_LIB2D_BUFFER_TYPE_YUV,
} mm_lib2d_buffer_type;

/** mm_lib2d_rgb_buffer
 * @fd: handle to the buffer memory
 * @format: RGB color format
 * @width: defines width in pixels
 * @height: defines height in pixels
 * @buffer: pointer to the RGB buffer
 * @phys: gpu mapped physical address
 * @stride: defines stride in bytes
**/
typedef struct mm_lib2d_rgb_buffer_t {
  int32_t      fd;
  cam_format_t format;
  uint32_t     width;
  uint32_t     height;
  void        *buffer;
  void        *phys;
  int32_t      stride;
} mm_lib2d_rgb_buffer;

/** mm_lib2d_yuv_buffer
 * @fd: handle to the buffer memory
 * @format: YUV color format
 * @width: defines width in pixels
 * @height: defines height in pixels
 * @plane0: holds the whole buffer if YUV format is not planar
 * @phys0: gpu mapped physical address
 * @stride0: stride in bytes
 * @plane1: holds UV or VU plane for planar interleaved
 * @phys2: gpu mapped physical address
 * @stride1: stride in bytes
 * @plane2: holds the 3. plane, ignored if YUV format is not planar
 * @phys2: gpu mapped physical address
 * @stride2: stride in bytes
**/
typedef struct mm_lib2d_yuv_buffer_t {
  int32_t      fd;
  cam_format_t format;
  uint32_t     width;
  uint32_t     height;
  void        *plane0;
  void        *phys0;
  int32_t      stride0;
  void        *plane1;
  void        *phys1;
  int32_t      stride1;
  void        *plane2;
  void        *phys2;
  int32_t      stride2;
} mm_lib2d_yuv_buffer;

/** mm_lib2d_buffer
 * @buffer_type: Buffer type. whether RGB or YUV
 * @rgb_buffer: RGB buffer handle
 * @yuv_buffer: YUV buffer handle
**/
typedef struct mm_lib2d_buffer_t {
  mm_lib2d_buffer_type buffer_type;
  union {
    mm_lib2d_rgb_buffer rgb_buffer;
    mm_lib2d_yuv_buffer yuv_buffer;
  };
} mm_lib2d_buffer;

/** lib2d_client_cb
 * @userdata: App userdata
 * @jobid: job id
**/
typedef lib2d_error (*lib2d_client_cb) (void *userdata, int jobid);

/**
 * Function: mm_lib2d_init
 *
 * Description: Initialization function for Lib2D. src_format, dst_format
 *     are hints to the underlying component to initialize.
 *
 * Input parameters:
 *   mode - Mode (sync/async) in which App wants lib2d to run.
 *   src_format - source surface format
 *   dst_format - Destination surface format
 *   my_obj - handle that will be returned on succesful Init. App has to
 *       call other lib2d functions by passing this handle.
 *
 * Return values:
 *   MM_LIB2D_SUCCESS
 *   MM_LIB2D_ERR_MEMORY
 *   MM_LIB2D_ERR_BAD_PARAM
 *   MM_LIB2D_ERR_GENERAL
 *
 * Notes: none
 **/
lib2d_error mm_lib2d_init(lib2d_mode mode, cam_format_t src_format,
  cam_format_t dst_format, void **lib2d_obj_handle);

/**
 * Function: mm_lib2d_deinit
 *
 * Description: De-Initialization function for Lib2D
 *
 * Input parameters:
 *   lib2d_obj_handle - handle tto the lib2d object
 *
 * Return values:
 *   MM_LIB2D_SUCCESS
 *   MM_LIB2D_ERR_GENERAL
 *
 * Notes: none
 **/
lib2d_error mm_lib2d_deinit(void *lib2d_obj_handle);

/**
 * Function: mm_lib2d_start_job
 *
 * Description: Start executing the job
 *
 * Input parameters:
 *   lib2d_obj_handle - handle tto the lib2d object
 *   src_buffer - pointer to the source buffer
 *   dst_buffer - pointer to the destination buffer
 *   jobid - job id of this request
 *   userdata - userdata that will be pass through callback function
 *   cb - callback function that will be called on completion of this job
 *
 * Return values:
 *   MM_LIB2D_SUCCESS
 *   MM_LIB2D_ERR_MEMORY
 *   MM_LIB2D_ERR_GENERAL
 *
 * Notes: none
 **/
lib2d_error mm_lib2d_start_job(void *lib2d_obj_handle,
    mm_lib2d_buffer* src_buffer, mm_lib2d_buffer* dst_buffer,
    int jobid, void *userdata, lib2d_client_cb cb);

#endif /* MM_LIB2D_H_ */