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