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_JPEG_INTERFACE_H_ 3166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_JPEG_INTERFACE_H_ 3266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// System dependencies 3466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include <stdbool.h> 3566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 3666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin// Camera dependencies 3766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "QOMX_JpegExtensions.h" 3866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#include "cam_intf.h" 3966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_JPEG_MAX_PLANES 3 4166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_JPEG_MAX_BUF CAM_MAX_NUM_BUFS_PER_STREAM 4266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QUANT_SIZE 64 4366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define QTABLE_MAX 2 4466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#define MM_JPEG_MAX_MPO_IMAGES 2 4566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 4666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 4766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_FMT_YUV, 4866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_FMT_BITSTREAM 4966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_format_t; 5066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 5266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_TYPE_JPEG, 5366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_TYPE_MPO 5466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_image_type_t; 5566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 5666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 5766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_ae_exif_debug_t ae_debug_params; 5866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_awb_exif_debug_t awb_debug_params; 5966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_af_exif_debug_t af_debug_params; 6066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_asd_exif_debug_t asd_debug_params; 6166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_stats_buffer_exif_debug_t stats_debug_params; 6266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t ae_debug_params_valid; 6366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t awb_debug_params_valid; 6466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t af_debug_params_valid; 6566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t asd_debug_params_valid; 6666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t stats_debug_params_valid; 6766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_debug_exif_params_t; 6866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 6966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 7066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_3a_params_t cam_3a_params; 7166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t cam_3a_params_valid; 7266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_sensor_params_t sensor_params; 7366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_debug_exif_params_t *debug_params; 7466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_exif_params_t; 7566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 7666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 7766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Indicates if it is a single jpeg or part of a multi picture sequence*/ 7866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_image_type_t type; 7966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Indicates if image is the primary image in a sequence of images. 8166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin Applicable only to multi picture formats*/ 8266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t is_primary; 8366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Number of images in the sequence*/ 8566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_of_images; 8666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_multi_image_t; 8766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 8866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 8966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t sequence; /* for jpeg bit streams, assembling is based on sequence. sequence starts from 0 */ 9066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t *buf_vaddr; /* ptr to buf */ 9166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int fd; /* fd of buf */ 9266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t buf_size; /* total size of buf (header + image) */ 9366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_format_t format; /* buffer format*/ 9466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_frame_len_offset_t offset; /* offset of all the planes */ 9566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t index; /* index used to identify the buffers */ 9666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_buf_t; 9766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 9866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 9966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t *buf_vaddr; /* ptr to buf */ 10066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int fd; /* fd of buf */ 10166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t buf_filled_len; /* used for output image. filled by the client */ 10266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_output_t; 10366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 10466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 10566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2, 10666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V2, 10766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V1, 10866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V1, 10966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V2, 11066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V2, 11166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V1, 11266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V1, 11366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_MONOCHROME, 11466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V2, 11566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V1, 11666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V2, 11766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V1, 11866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin MM_JPEG_COLOR_FORMAT_MAX 11966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_color_format; 12066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 12266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin JPEG_JOB_STATUS_DONE = 0, 12366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin JPEG_JOB_STATUS_ERROR 12466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} jpeg_job_status_t; 12566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 12666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef void (*jpeg_encode_callback_t)(jpeg_job_status_t status, 12766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t client_hdl, 12866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t jobId, 12966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t *p_output, 13066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *userData); 13166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 13366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* src img dimension */ 13466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t src_dim; 13566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* jpeg output dimension */ 13766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_dimension_t dst_dim; 13866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 13966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* crop information */ 14066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_rect_t crop; 14166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_dim_t; 14266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 14466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* num of buf in src img */ 14566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_src_bufs; 14666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 14766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* num of src tmb bufs */ 14866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_tmb_bufs; 14966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* num of buf in src img */ 15166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_dst_bufs; 15266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* should create thumbnail from main image or not */ 15466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t encode_thumbnail; 15566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* src img bufs */ 15766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF]; 15866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 15966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* this will be used only for bitstream */ 16066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t src_thumb_buf[MM_JPEG_MAX_BUF]; 16166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* this will be used only for bitstream */ 16366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF]; 16466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* mainimage color format */ 16666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_color_format color_format; 16766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 16866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* thumbnail color format */ 16966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_color_format thumb_color_format; 17066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* jpeg quality: range 0~100 */ 17266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t quality; 17366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* jpeg thumbnail quality: range 0~100 */ 17566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t thumb_quality; 17666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 17766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* buf to exif entries, caller needs to 17866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * take care of the memory manage with insider ptr */ 17966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QOMX_EXIF_INFO exif_info; 18066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Callback registered to be called after encode*/ 18266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_encode_callback_t jpeg_cb; 18366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Appdata passed by the user*/ 18566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void* userdata; 18666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 18766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* thumbnail dimension */ 18866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_dim_t thumb_dim; 18966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* rotation informaiton */ 19166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t rotation; 19266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* thumb rotation informaiton */ 19466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t thumb_rotation; 19566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* main image dimension */ 19766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_dim_t main_dim; 19866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 19966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* enable encoder burst mode */ 20066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t burst_mode; 20166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* get memory function ptr */ 20366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*get_memory)( omx_jpeg_ouput_buf_t *p_out_buf); 20466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* release memory function ptr */ 20666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*put_memory)( omx_jpeg_ouput_buf_t *p_out_buf); 20766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 20866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Flag to indicate whether to generate thumbnail from postview */ 20966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin bool thumb_from_postview; 21066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_encode_params_t; 21166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 21266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 21366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* num of buf in src img */ 21466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_src_bufs; 21566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 21666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* num of buf in src img */ 21766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t num_dst_bufs; 21866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 21966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* src img bufs */ 22066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF]; 22166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* this will be used only for bitstream */ 22366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF]; 22466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* color format */ 22666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_color_format color_format; 22766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 22866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin jpeg_encode_callback_t jpeg_cb; 22966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void* userdata; 23166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_decode_params_t; 23366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 23466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 23566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* active indices of the buffers for encoding */ 23666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t src_index; 23766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t dst_index; 23866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t thumb_index; 23966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_dim_t thumb_dim; 24066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* rotation informaiton */ 24266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t rotation; 24366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* main image dimension */ 24566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_dim_t main_dim; 24666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 24766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*session id*/ 24866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t session_id; 24966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* jpeg output buffer ref count */ 25166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t ref_count; 25266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* allocated jpeg output buffer */ 25466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin void *alloc_out_buffer; 25566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Metadata stream*/ 25766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin metadata_buffer_t *p_metadata; 25866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 25966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*HAL version*/ 26066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_hal_version_t hal_version; 26166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* buf to exif entries, caller needs to 26366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * take care of the memory manage with insider ptr */ 26466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin QOMX_EXIF_INFO exif_info; 26566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* 3a parameters */ 26766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_exif_params_t cam_exif_params; 26866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 26966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* jpeg encoder QTable */ 27066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t qtable_set[QTABLE_MAX]; 27166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE qtable[QTABLE_MAX]; 27366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* flag to enable/disable mobicat */ 27566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint8_t mobicat_mask; 27666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 27766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Info associated with multiple image sequence*/ 27866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_multi_image_t multi_image_info; 27966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* work buf */ 28166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_buf_t work_buf; 28266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_encode_job_t; 28366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 28466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 28566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* active indices of the buffers for encoding */ 28666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t src_index; 28766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int32_t dst_index; 28866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t tmb_dst_index; 28966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* rotation informaiton */ 29166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t rotation; 29266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* main image */ 29466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_dim_t main_dim; 29566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 29666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*session id*/ 29766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t session_id; 29866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_decode_job_t; 29966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 30066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef enum { 30166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin JPEG_JOB_TYPE_ENCODE, 30266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin JPEG_JOB_TYPE_DECODE, 30366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin JPEG_JOB_TYPE_MAX 30466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_job_type_t; 30566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 30666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 30766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_job_type_t job_type; 30866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin union { 30966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_encode_job_t encode_job; 31066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_decode_job_t decode_job; 31166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin }; 31266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_job_t; 31366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 31566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t w; 31666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin uint32_t h; 31766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_dimension; 31866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 31966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 32066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Primary image in the MPO sequence*/ 32166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t primary_image; 32266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*All auxillary images in the sequence*/ 32466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t aux_images[MM_JPEG_MAX_MPO_IMAGES - 1]; 32566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Total number of images in the MPO sequence*/ 32766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int num_of_images; 32866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 32966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Output MPO buffer*/ 33066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_output_t output_buff; 33166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 33266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /*Size of the allocated output buffer*/ 33366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin size_t output_buff_size; 33466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_mpo_info_t; 33566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 33666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 33766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* config a job -- async call */ 33866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id); 33966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* abort a job -- sync call */ 34166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*abort_job)(uint32_t job_id); 34266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* create a session */ 34466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*create_session)(uint32_t client_hdl, 34566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_encode_params_t *p_params, uint32_t *p_session_id); 34666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 34766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* destroy session */ 34866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*destroy_session)(uint32_t session_id); 34966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* close a jpeg client -- sync call */ 35166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*close) (uint32_t clientHdl); 35266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_ops_t; 35466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 35666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* config a job -- async call */ 35766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id); 35866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 35966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* abort a job -- sync call */ 36066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*abort_job)(uint32_t job_id); 36166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* create a session */ 36366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*create_session)(uint32_t client_hdl, 36466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_jpeg_decode_params_t *p_params, uint32_t *p_session_id); 36566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* destroy session */ 36766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*destroy_session)(uint32_t session_id); 36866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 36966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* close a jpeg client -- sync call */ 37066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*close) (uint32_t clientHdl); 37166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpegdec_ops_t; 37266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjintypedef struct { 37466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Get Mpo size*/ 37666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*get_mpo_size)(mm_jpeg_output_t jpeg_buffer[MM_JPEG_MAX_MPO_IMAGES], 37766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int num_of_images); 37866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 37966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin /* Compose MPO*/ 38066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin int (*compose_mpo)(mm_jpeg_mpo_info_t *mpo_info); 38166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 38266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin} mm_jpeg_mpo_ops_t; 38366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 38466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* open a jpeg client -- sync call 38566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * returns client_handle. 38666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * failed if client_handle=0 38766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * jpeg ops tbl and mpo ops tbl will be filled in if open succeeds 38866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * and jpeg meta data will be cached */ 38966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t jpeg_open(mm_jpeg_ops_t *ops, mm_jpeg_mpo_ops_t *mpo_ops, 39066f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin mm_dimension picture_size, 39166f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin cam_jpeg_metadata_t *jpeg_metadata); 39266f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 39366f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin/* open a jpeg client -- sync call 39466f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * returns client_handle. 39566f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * failed if client_handle=0 39666f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin * jpeg ops tbl will be filled in if open succeeds */ 39766f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjinuint32_t jpegdec_open(mm_jpegdec_ops_t *ops); 39866f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin 39966f9976540f830b0090ff2ca557b0364a53f2008Patrick Tjin#endif /* MM_JPEG_INTERFACE_H_ */ 400