#ifndef __JPEG_API_H__ #define __JPEG_API_H__ #define JPEG_DRIVER_NAME "/dev/s5p-jpeg" #define MAX_JPEG_WIDTH 3264 #define MAX_JPEG_HEIGHT 2448 #define MAX_JPEG_RES (MAX_JPEG_WIDTH * MAX_JPEG_HEIGHT) #define JPEG_STREAM_BUF_SIZE MAX_JPEG_RES #define JPEG_FRAME_BUF_SIZE (MAX_JPEG_RES * 3) #define JPEG_TOTAL_BUF_SIZE (JPEG_STREAM_BUF_SIZE + JPEG_FRAME_BUF_SIZE) #define JPEG_IOCTL_MAGIC 'J' #define IOCTL_JPEG_DEC_EXE _IO(JPEG_IOCTL_MAGIC, 1) #define IOCTL_JPEG_ENC_EXE _IO(JPEG_IOCTL_MAGIC, 2) #define IOCTL_GET_DEC_IN_BUF _IO(JPEG_IOCTL_MAGIC, 3) #define IOCTL_GET_DEC_OUT_BUF _IO(JPEG_IOCTL_MAGIC, 4) #define IOCTL_GET_ENC_IN_BUF _IO(JPEG_IOCTL_MAGIC, 5) #define IOCTL_GET_ENC_OUT_BUF _IO(JPEG_IOCTL_MAGIC, 6) #define IOCTL_SET_DEC_PARAM _IO(JPEG_IOCTL_MAGIC, 7) #define IOCTL_SET_ENC_PARAM _IO(JPEG_IOCTL_MAGIC, 8) enum jpeg_ret_type{ JPEG_FAIL, JPEG_OK, JPEG_ENCODE_FAIL, JPEG_ENCODE_OK, JPEG_DECODE_FAIL, JPEG_DECODE_OK, JPEG_OUT_OF_MEMORY, JPEG_UNKNOWN_ERROR }; enum jpeg_img_quality_level { QUALITY_LEVEL_1 = 0, /* high */ QUALITY_LEVEL_2, QUALITY_LEVEL_3, QUALITY_LEVEL_4, /* low */ }; /* raw data image format */ enum jpeg_frame_format { YUV_422, /* decode output, encode input */ YUV_420, /* decode output, encode output */ RGB_565, /* encode input */ }; /* jpeg data format */ enum jpeg_stream_format { JPEG_422, /* decode input, encode output */ JPEG_420, /* decode input, encode output */ JPEG_444, /* decode input*/ JPEG_GRAY, /* decode input*/ JPEG_RESERVED, }; enum jpeg_test_mode { encode_mode, decode_mode, }; struct jpeg_dec_param { unsigned int width; unsigned int height; unsigned int size; enum jpeg_stream_format in_fmt; enum jpeg_frame_format out_fmt; }; struct jpeg_enc_param { unsigned int width; unsigned int height; unsigned int size; enum jpeg_frame_format in_fmt; enum jpeg_stream_format out_fmt; enum jpeg_img_quality_level quality; }; struct jpeg_args{ char *in_buf; unsigned int in_cookie; unsigned int in_buf_size; char *out_buf; unsigned int out_cookie; unsigned int out_buf_size; char *mmapped_addr; struct jpeg_dec_param *dec_param; struct jpeg_enc_param *enc_param; }; struct jpeg_lib { int jpeg_fd; struct jpeg_args args; }; #ifdef __cplusplus extern "C" { #endif int api_jpeg_decode_init(); int api_jpeg_encode_init(); int api_jpeg_decode_deinit(int dev_fd); int api_jpeg_encode_deinit(int dev_fd); void *api_jpeg_get_decode_in_buf(int dev_fd, unsigned int size); void *api_jpeg_get_encode_in_buf(int dev_fd, unsigned int size); void *api_jpeg_get_decode_out_buf(int dev_fd); void *api_jpeg_get_encode_out_buf(int dev_fd); void api_jpeg_set_decode_param(struct jpeg_dec_param *param); void api_jpeg_set_encode_param(struct jpeg_enc_param *param); enum jpeg_ret_type api_jpeg_decode_exe(int dev_fd, struct jpeg_dec_param *dec_param); enum jpeg_ret_type api_jpeg_encode_exe(int dev_fd, struct jpeg_enc_param *enc_param); #ifdef __cplusplus } #endif #endif//__JPEG_API_H__