blob: 50eaaa5b60a49bae77c569e1abacf20d13f94f3d [file] [log] [blame]
/* Copyright (c) 2012, 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_JPEG_INTERFACE_H_
#define MM_JPEG_INTERFACE_H_
#include "QCamera_Intf.h"
typedef struct {
int width;
int height;
} image_resolution;
typedef enum {
JPEG_SRC_IMAGE_FMT_YUV,
JPEG_SRC_IMAGE_FMT_BITSTREAM
} jpeg_enc_src_img_fmt_t;
typedef enum {
JPEG_SRC_IMAGE_TYPE_MAIN,
JPEG_SRC_IMAGE_TYPE_THUMB,
JPEG_SRC_IMAGE_TYPE_MAX
} jpeg_enc_src_img_type_t;
typedef struct {
int32_t offset_x;
int32_t offset_y;
int32_t width;
int32_t height;
} image_crop_t;
typedef struct {
uint8_t sequence; /*for jpeg bit streams, assembling is based on sequence. sequence starts from 0*/
uint8_t *buf_vaddr; /*ptr to buf*/
int fd; /*fd of buf*/
uint32_t buf_size; /* total size of buf (header + image) */
uint32_t data_offset; /*data offset*/
} src_bitstream_buffer_t;
typedef struct {
uint8_t *buf_vaddr; /*ptr to buf*/
int fd; /*fd of buf*/
cam_frame_len_offset_t offset; /*alway use multi-planar, offset is used to skip the metadata header*/
} src_image_buffer_t;
typedef enum {
MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2,
MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V2,
MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V1,
MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V1,
MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V2,
MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V2,
MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V1,
MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V1,
MM_JPEG_COLOR_FORMAT_RGB565,
MM_JPEG_COLOR_FORMAT_RGB888,
MM_JPEG_COLOR_FORMAT_RGBa,
MM_JPEG_COLOR_FORMAT_BITSTREAM,
MM_JPEG_COLOR_FORMAT_MAX
} mm_jpeg_color_format;
#define MAX_SRC_BUF_NUM 2
typedef struct {
/* src img format: YUV, Bitstream */
jpeg_enc_src_img_fmt_t img_fmt;
/* num of buf in src img */
uint8_t num_bufs;
/* src img bufs */
union {
src_bitstream_buffer_t bit_stream[MAX_SRC_BUF_NUM];
src_image_buffer_t src_image[MAX_SRC_BUF_NUM];
};
/* src img type: main or thumbnail */
jpeg_enc_src_img_type_t type;
/* color format */
mm_jpeg_color_format color_format;
/* src img dimension */
image_resolution src_dim;
/* jpeg output dimension */
image_resolution out_dim;
/* crop information */
image_crop_t crop;
/* jpeg quality: range 0~100 */
uint32_t quality;
} src_image_buffer_info;
typedef struct {
uint8_t *buf_vaddr; /*ptr to buf*/
int fd; /*fd of buf*/
int buf_len;
} out_image_buffer_info;
typedef struct {
/* num of src imgs: e.g. main/thumbnail img
* if main img only: src_img_num = 1;
* if main+thumbnail: src_img_num = 2;
* No support for thumbnail only case */
uint8_t src_img_num;
/* index 0 is always for main image
* if thumbnail presented, it will be in index 1 */
src_image_buffer_info src_img[JPEG_SRC_IMAGE_TYPE_MAX];
} src_image_buffer_config;
typedef struct {
src_image_buffer_config src_imgs;
out_image_buffer_info sink_img;
} jpeg_image_buffer_config;
typedef struct {
/* config for scr images */
jpeg_image_buffer_config buf_info;
/* rotation informaiton */
int rotation;
/* num of exif entries */
int exif_numEntries;
/* buf to exif entries, caller needs to
* take care of the memory manage with insider ptr */
exif_tags_info_t *exif_data;
} mm_jpeg_encode_params;
typedef enum {
JPEG_JOB_STATUS_DONE = 0,
JPEG_JOB_STATUS_ERROR
} jpeg_job_status_t;
typedef void (*jpeg_encode_callback_t)(jpeg_job_status_t status,
uint8_t thumbnailDroppedFlag,
uint32_t client_hdl,
uint32_t jobId,
uint8_t* out_data,
uint32_t data_size,
void *userData);
typedef struct {
mm_jpeg_encode_params encode_parm;
jpeg_encode_callback_t jpeg_cb;
void* userdata;
} mm_jpeg_encode_job;
typedef enum {
JPEG_JOB_TYPE_ENCODE,
//JPEG_JOB_TYPE_DECODE, /*enable decode later*/
JPEG_JOB_TYPE_MAX
} mm_jpeg_job_type_t;
typedef struct {
mm_jpeg_job_type_t job_type;
union {
mm_jpeg_encode_job encode_job;
};
} mm_jpeg_job;
typedef struct {
/* start a job -- async call
* the result of job (DONE/ERROR) will rcvd through CB */
int32_t (* start_job) (uint32_t client_hdl, mm_jpeg_job* job, uint32_t* jobId);
/* abort a job -- sync call */
int32_t (* abort_job) (uint32_t client_hdl, uint32_t jobId);
/* close a jpeg client -- sync call */
int32_t (* close) (uint32_t clientHdl);
} mm_jpeg_ops_t;
/* open a jpeg client -- sync call
* returns client_handle.
* failed if client_handle=0
* jpeg ops tbl will be filled in if open succeeds */
uint32_t jpeg_open(mm_jpeg_ops_t *ops);
#endif /* MM_JPEG_INTERFACE_H_ */