13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *
33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Redistribution and use in source and binary forms, with or without
43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * modification, are permitted provided that the following conditions are
53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * met:
63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *     * Redistributions of source code must retain the above copyright
73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       notice, this list of conditions and the following disclaimer.
83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *     * Redistributions in binary form must reproduce the above
93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       copyright notice, this list of conditions and the following
103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       disclaimer in the documentation and/or other materials provided
113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       with the distribution.
123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *     * Neither the name of The Linux Foundation nor the names of its
133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       contributors may be used to endorse or promote products derived
143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *       from this software without specific prior written permission.
153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *
163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *
283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */
293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#ifndef MM_JPEG_INTERFACE_H_
313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define MM_JPEG_INTERFACE_H_
323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// System dependencies
343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdbool.h>
353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// Camera dependencies
373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QOMX_JpegExtensions.h"
383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "cam_intf.h"
393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define MM_JPEG_MAX_PLANES 3
413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define MM_JPEG_MAX_BUF CAM_MAX_NUM_BUFS_PER_STREAM
423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define QUANT_SIZE 64
433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define QTABLE_MAX 2
443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define MM_JPEG_MAX_MPO_IMAGES 2
453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
46295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel/* bit mask for buffer usage*/
47295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel#define MM_JPEG_HAS_READ_BUF CPU_HAS_READ
48295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel#define MM_JPEG_HAS_WRITTEN_BUF CPU_HAS_WRITTEN
49295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef enum {
513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_FMT_YUV,
523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_FMT_BITSTREAM
533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_format_t;
543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef enum {
563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_TYPE_JPEG,
573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_TYPE_MPO
583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_image_type_t;
593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_ae_exif_debug_t ae_debug_params;
623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_awb_exif_debug_t awb_debug_params;
633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_af_exif_debug_t af_debug_params;
643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_asd_exif_debug_t asd_debug_params;
653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_stats_buffer_exif_debug_t stats_debug_params;
663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_bestats_buffer_exif_debug_t bestats_debug_params;
673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_bhist_buffer_exif_debug_t bhist_debug_params;
683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_q3a_tuning_info_t q3a_tuning_debug_params;
693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t ae_debug_params_valid;
703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t awb_debug_params_valid;
713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t af_debug_params_valid;
723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t asd_debug_params_valid;
733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t stats_debug_params_valid;
743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t bestats_debug_params_valid;
753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t bhist_debug_params_valid;
763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t q3a_tuning_debug_params_valid;
773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_debug_exif_params_t;
783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_3a_params_t cam_3a_params;
813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t cam_3a_params_valid;
823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_sensor_params_t sensor_params;
833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_debug_exif_params_t *debug_params;
843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_exif_params_t;
853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Indicates if it is a single jpeg or part of a multi picture sequence */
883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_image_type_t type;
893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Indicates if image is the primary image in a sequence of images.
913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  Applicable only to multi picture formats */
923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t is_primary;
933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Number of images in the sequence */
953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_of_images;
963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Flag to indicate if multi picture metadata need to be added to Exif */
983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t enable_metadata;
993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_multi_image_t;
1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t sequence;          /* for jpeg bit streams, assembling is based on sequence. sequence starts from 0 */
1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t *buf_vaddr;        /* ptr to buf */
1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int fd;                    /* fd of buf */
1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  size_t buf_size;         /* total size of buf (header + image) */
1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_format_t format;   /* buffer format*/
1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_frame_len_offset_t offset; /* offset of all the planes */
1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t index; /* index used to identify the buffers */
1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_buf_t;
1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t *buf_vaddr;        /* ptr to buf */
1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int fd;                    /* fd of buf */
1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  size_t buf_filled_len;   /* used for output image. filled by the client */
1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_output_t;
1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef enum {
1183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V2,
1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V2,
1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCRCBLP_H2V1,
1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCBCRLP_H2V1,
1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V2,
1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V2,
1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCRCBLP_H1V1,
1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_YCBCRLP_H1V1,
1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_MONOCHROME,
1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V2,
1283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_BITSTREAM_H2V1,
1293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V2,
1303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_BITSTREAM_H1V1,
1313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  MM_JPEG_COLOR_FORMAT_MAX
1323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_color_format;
1333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef enum {
1353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  JPEG_JOB_STATUS_DONE = 0,
1363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  JPEG_JOB_STATUS_ERROR
1373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} jpeg_job_status_t;
1383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef void (*jpeg_encode_callback_t)(jpeg_job_status_t status,
1403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t client_hdl,
1413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t jobId,
1423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_output_t *p_output,
1433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  void *userData);
1443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
1463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* src img dimension */
1473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_dimension_t src_dim;
1483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* jpeg output dimension */
1503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_dimension_t dst_dim;
1513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* crop information */
1533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_rect_t crop;
1543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_dim_t;
1553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
1573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* num of buf in src img */
1583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_src_bufs;
1593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* num of src tmb bufs */
1613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_tmb_bufs;
1623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* num of buf in src img */
1643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_dst_bufs;
1653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* should create thumbnail from main image or not */
1673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t encode_thumbnail;
1683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* src img bufs */
1703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF];
1713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* this will be used only for bitstream */
1733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t src_thumb_buf[MM_JPEG_MAX_BUF];
1743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* this will be used only for bitstream */
1763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF];
1773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* mainimage color format */
1793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_color_format color_format;
1803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* thumbnail color format */
1823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_color_format thumb_color_format;
1833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* jpeg quality: range 0~100 */
1853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t quality;
1863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* jpeg thumbnail quality: range 0~100 */
1883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t thumb_quality;
1893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* buf to exif entries, caller needs to
1913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel   * take care of the memory manage with insider ptr */
1923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  QOMX_EXIF_INFO exif_info;
1933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Callback registered to be called after encode*/
1953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  jpeg_encode_callback_t jpeg_cb;
1963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
1973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Appdata passed by the user*/
1983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  void* userdata;
1993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* thumbnail dimension */
2013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_dim_t thumb_dim;
2023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* rotation informaiton */
2043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t rotation;
2053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* thumb rotation informaiton */
2073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t thumb_rotation;
2083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* main image dimension */
2103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_dim_t main_dim;
2113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* enable encoder burst mode */
2133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t burst_mode;
2143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* get memory function ptr */
2163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*get_memory)( omx_jpeg_ouput_buf_t *p_out_buf);
2173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* release memory function ptr */
2193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*put_memory)( omx_jpeg_ouput_buf_t *p_out_buf);
2203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Flag to indicate whether to generate thumbnail from postview */
2223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  bool thumb_from_postview;
2233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_encode_params_t;
2243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
2263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* num of buf in src img */
2273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_src_bufs;
2283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* num of buf in src img */
2303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t num_dst_bufs;
2313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* src img bufs */
2333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t src_main_buf[MM_JPEG_MAX_BUF];
2343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* this will be used only for bitstream */
2363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t dest_buf[MM_JPEG_MAX_BUF];
2373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* color format */
2393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_color_format color_format;
2403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  jpeg_encode_callback_t jpeg_cb;
2423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  void* userdata;
2443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_decode_params_t;
2463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
247295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel/* This structure is populated by HAL to notify buffer
248295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  usage like has read or has written. This info is then
249295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  used to perform cache ops in jpeg */
250295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudeltypedef struct {
251295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  /* main image source buff usage */
252295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  uint8_t main_src_buf;
253295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
254295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  /* thumbnail source buff usage */
255295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  uint8_t thumb_src_buf;
256295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
257295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  /* destination buff usage */
258295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  uint8_t dest_buf;
259295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
260295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  /* work buff usage */
261295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  uint8_t work_buf;
262295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
263295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel} mm_jpeg_buf_usage_t;
264295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* active indices of the buffers for encoding */
2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int32_t src_index;
2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int32_t dst_index;
2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t thumb_index;
2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_dim_t thumb_dim;
2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* rotation informaiton */
2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t rotation;
2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* main image dimension */
2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_dim_t main_dim;
2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*session id*/
2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t session_id;
2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* jpeg output buffer ref count */
2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int32_t ref_count;
2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* allocated jpeg output buffer */
2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  void *alloc_out_buffer;
2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Metadata stream*/
2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  metadata_buffer_t *p_metadata;
2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*HAL version*/
2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_hal_version_t hal_version;
2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* buf to exif entries, caller needs to
2943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel   * take care of the memory manage with insider ptr */
2953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  QOMX_EXIF_INFO exif_info;
2963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
2973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* 3a parameters */
2983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_exif_params_t cam_exif_params;
2993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* jpeg encoder QTable */
3013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t qtable_set[QTABLE_MAX];
3023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE qtable[QTABLE_MAX];
3043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* flag to enable/disable mobicat */
3063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint8_t mobicat_mask;
3073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Info associated with multiple image sequence*/
3093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_multi_image_t multi_image_info;
3103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* work buf */
3123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_buf_t work_buf;
313295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
314295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  /* Input from HAL notifing the prior usage of buffers,
315295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  this info will be used to perform cache ops*/
316295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel  mm_jpeg_buf_usage_t buf_usage;
317295a0ca3b68291081f46052e545d5b0dec308710Thierry Strudel
3183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_encode_job_t;
3193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* active indices of the buffers for encoding */
3223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int32_t src_index;
3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int32_t dst_index;
3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t tmb_dst_index;
3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* rotation informaiton */
3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t rotation;
3283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* main image  */
3303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_dim_t main_dim;
3313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*session id*/
3333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t session_id;
3343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_decode_job_t;
3353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef enum {
3373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  JPEG_JOB_TYPE_ENCODE,
3383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  JPEG_JOB_TYPE_DECODE,
3393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  JPEG_JOB_TYPE_MAX
3403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_job_type_t;
3413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_job_type_t job_type;
3443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  union {
3453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel    mm_jpeg_encode_job_t encode_job;
3463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel    mm_jpeg_decode_job_t decode_job;
3473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  };
3483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_job_t;
3493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t w;
3523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  uint32_t h;
3533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_dimension;
3543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Primary image in the MPO sequence*/
3573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_output_t primary_image;
3583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*All auxillary images in the sequence*/
3603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_output_t aux_images[MM_JPEG_MAX_MPO_IMAGES - 1];
3613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Total number of images in the MPO sequence*/
3633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int num_of_images;
3643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Output MPO buffer*/
3663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_jpeg_output_t output_buff;
3673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /*Size of the allocated output buffer*/
3693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  size_t output_buff_size;
3703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_mpo_info_t;
3713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* config a job -- async call */
3743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id);
3753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* abort a job -- sync call */
3773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*abort_job)(uint32_t job_id);
3783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* create a session */
3803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*create_session)(uint32_t client_hdl,
3813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel    mm_jpeg_encode_params_t *p_params, uint32_t *p_session_id);
3823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* destroy session */
3843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*destroy_session)(uint32_t session_id);
3853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* close a jpeg client -- sync call */
3873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*close) (uint32_t clientHdl);
3883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_ops_t;
3903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
3923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* config a job -- async call */
3933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*start_job)(mm_jpeg_job_t* job, uint32_t* job_id);
3943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* abort a job -- sync call */
3963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*abort_job)(uint32_t job_id);
3973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
3983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* create a session */
3993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*create_session)(uint32_t client_hdl,
4003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel    mm_jpeg_decode_params_t *p_params, uint32_t *p_session_id);
4013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* destroy session */
4033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*destroy_session)(uint32_t session_id);
4043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* close a jpeg client -- sync call */
4063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*close) (uint32_t clientHdl);
4073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpegdec_ops_t;
4083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeltypedef struct {
4103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Get Mpo size*/
4123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*get_mpo_size)(mm_jpeg_output_t jpeg_buffer[MM_JPEG_MAX_MPO_IMAGES],
4133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel    int num_of_images);
4143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  /* Compose MPO*/
4163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  int (*compose_mpo)(mm_jpeg_mpo_info_t *mpo_info);
4173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} mm_jpeg_mpo_ops_t;
4193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* open a jpeg client -- sync call
4213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * returns client_handle.
4223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * failed if client_handle=0
4233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * jpeg ops tbl and mpo ops tbl will be filled in if open succeeds
4243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * and jpeg meta data will be cached */
4253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeluint32_t jpeg_open(mm_jpeg_ops_t *ops, mm_jpeg_mpo_ops_t *mpo_ops,
4263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  mm_dimension picture_size,
4273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel  cam_jpeg_metadata_t *jpeg_metadata);
4283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* open a jpeg client -- sync call
4303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * returns client_handle.
4313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * failed if client_handle=0
4323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * jpeg ops tbl will be filled in if open succeeds */
4333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudeluint32_t jpegdec_open(mm_jpegdec_ops_t *ops);
4343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel
4353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif /* MM_JPEG_INTERFACE_H_ */
436