Home | History | Annotate | Download | only in common
      1 /* Copyright (c) 2012, The Linux Foundation. All rights reserved.
      2  *
      3  * Redistribution and use in source and binary forms, with or without
      4  * modification, are permitted provided that the following conditions are
      5  * met:
      6  *     * Redistributions of source code must retain the above copyright
      7  *       notice, this list of conditions and the following disclaimer.
      8  *     * Redistributions in binary form must reproduce the above
      9  *       copyright notice, this list of conditions and the following
     10  *       disclaimer in the documentation and/or other materials provided
     11  *       with the distribution.
     12  *     * Neither the name of The Linux Foundation nor the names of its
     13  *       contributors may be used to endorse or promote products derived
     14  *       from this software without specific prior written permission.
     15  *
     16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  *
     28  */
     29 
     30 #ifndef MM_JPEG_INTERFACE_H_
     31 #define MM_JPEG_INTERFACE_H_
     32 #include "QOMX_JpegExtensions.h"
     33 #include "cam_intf.h"
     34 
     35 #define MM_JPEG_MAX_PLANES 3
     36 #define MM_JPEG_MAX_BUF CAM_MAX_NUM_BUFS_PER_STREAM
     37 
     38 typedef enum {
     39   MM_JPEG_FMT_YUV,
     40   MM_JPEG_FMT_BITSTREAM
     41 } mm_jpeg_format_t;
     42 
     43 typedef struct {
     44   cam_ae_params_t ae_params;
     45   cam_sensor_params_t sensor_params;
     46 } mm_jpeg_exif_params_t;
     47 typedef struct {
     48   uint32_t sequence;          /* for jpeg bit streams, assembling is based on sequence. sequence starts from 0 */
     49   uint8_t *buf_vaddr;        /* ptr to buf */
     50   int fd;                    /* fd of buf */
     51   uint32_t buf_size;         /* total size of buf (header + image) */
     52   mm_jpeg_format_t format;   /* buffer format*/
     53   cam_frame_len_offset_t offset; /* offset of all the planes */
     54   int index; /* index used to identify the buffers */
     55 } mm_jpeg_buf_t;
     56 
     57 typedef struct {
     58   uint8_t *buf_vaddr;        /* ptr to buf */
     59   int fd;                    /* fd of buf */
     60   uint32_t buf_filled_len;   /* used for output image. filled by the client */
     61 } mm_jpeg_output_t;
     62 
     63 typedef enum {
     64   MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2,
     65   MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V2,
     66   MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V1,
     67   MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V1,
     68   MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V2,
     69   MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V2,
     70   MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V1,
     71   MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V1,
     72   MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V2,
     73   MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V1,
     74   MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V2,
     75   MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V1,
     76   MM_JPEG_COLOR_FORMAT_MAX
     77 } mm_jpeg_color_format;
     78 
     79 typedef enum {
     80   JPEG_JOB_STATUS_DONE = 0,
     81   JPEG_JOB_STATUS_ERROR
     82 } jpeg_job_status_t;
     83 
     84 typedef void (*jpeg_encode_callback_t)(jpeg_job_status_t status,
     85   uint32_t client_hdl,
     86   uint32_t jobId,
     87   mm_jpeg_output_t *p_output,
     88   void *userData);
     89 
     90 typedef struct {
     91   /* src img dimension */
     92   cam_dimension_t src_dim;
     93 
     94   /* jpeg output dimension */
     95   cam_dimension_t dst_dim;
     96 
     97   /* crop information */
     98   cam_rect_t crop;
     99 } mm_jpeg_dim_t;
    100 
    101 typedef struct {
    102   /* num of buf in src img */
    103   uint32_t num_src_bufs;
    104 
    105   /* num of src tmb bufs */
    106   uint32_t num_tmb_bufs;
    107 
    108   /* num of buf in src img */
    109   uint32_t num_dst_bufs;
    110 
    111   int8_t encode_thumbnail;
    112 
    113   /* src img bufs */
    114   mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF];
    115 
    116   /* this will be used only for bitstream */
    117   mm_jpeg_buf_t src_thumb_buf[MM_JPEG_MAX_BUF];
    118 
    119   /* this will be used only for bitstream */
    120   mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF];
    121 
    122   /* color format */
    123   mm_jpeg_color_format color_format;
    124 
    125   /* jpeg quality: range 0~100 */
    126   uint32_t quality;
    127 
    128   /* buf to exif entries, caller needs to
    129    * take care of the memory manage with insider ptr */
    130   QOMX_EXIF_INFO exif_info;
    131 
    132   jpeg_encode_callback_t jpeg_cb;
    133   void* userdata;
    134 
    135 } mm_jpeg_encode_params_t;
    136 
    137 typedef struct {
    138   /* active indices of the buffers for encoding */
    139   uint32_t src_index;
    140   uint32_t dst_index;
    141   uint32_t thumb_index;
    142   mm_jpeg_dim_t thumb_dim;
    143 
    144   /* rotation informaiton */
    145   int rotation;
    146 
    147   /* main image dimension */
    148   mm_jpeg_dim_t main_dim;
    149 
    150   /*session id*/
    151   uint32_t session_id;
    152 
    153   /*Metadata from HAl version 1 */
    154   cam_metadata_info_t *p_metadata_v1;
    155 
    156   /*Metadata stream from HAL version 3*/
    157   metadata_buffer_t *p_metadata_v3;
    158 
    159   /* buf to exif entries, caller needs to
    160    * take care of the memory manage with insider ptr */
    161   QOMX_EXIF_INFO exif_info;
    162   /* 3a parameters */
    163   mm_jpeg_exif_params_t cam_exif_params;
    164 } mm_jpeg_encode_job_t;
    165 
    166 typedef enum {
    167   JPEG_JOB_TYPE_ENCODE,
    168   JPEG_JOB_TYPE_MAX
    169 } mm_jpeg_job_type_t;
    170 
    171 typedef struct {
    172   mm_jpeg_job_type_t job_type;
    173   union {
    174     mm_jpeg_encode_job_t encode_job;
    175   };
    176 } mm_jpeg_job_t;
    177 
    178 typedef struct {
    179   /* config a job -- async call */
    180   int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id);
    181 
    182   /* abort a job -- sync call */
    183   int (*abort_job)(uint32_t job_id);
    184 
    185   /* create a session */
    186   int (*create_session)(uint32_t client_hdl,
    187     mm_jpeg_encode_params_t *p_params, uint32_t *p_session_id);
    188 
    189   /* destroy session */
    190   int (*destroy_session)(uint32_t session_id);
    191 
    192   /* close a jpeg client -- sync call */
    193   int (*close) (uint32_t clientHdl);
    194 } mm_jpeg_ops_t;
    195 
    196 /* open a jpeg client -- sync call
    197  * returns client_handle.
    198  * failed if client_handle=0
    199  * jpeg ops tbl will be filled in if open succeeds */
    200 uint32_t jpeg_open(mm_jpeg_ops_t *ops);
    201 
    202 #endif /* MM_JPEG_INTERFACE_H_ */
    203