codeworkx | f1be2fe | 2012-03-24 17:38:29 +0100 | [diff] [blame] | 1 | #ifndef __JPEG_API_H__ |
| 2 | #define __JPEG_API_H__ |
| 3 | |
| 4 | #define JPEG_DRIVER_NAME "/dev/s5p-jpeg" |
| 5 | |
| 6 | #define MAX_JPEG_WIDTH 3264 |
| 7 | #define MAX_JPEG_HEIGHT 2448 |
| 8 | |
| 9 | #define MAX_JPEG_RES (MAX_JPEG_WIDTH * MAX_JPEG_HEIGHT) |
| 10 | |
| 11 | #define JPEG_STREAM_BUF_SIZE MAX_JPEG_RES |
| 12 | #define JPEG_FRAME_BUF_SIZE (MAX_JPEG_RES * 3) |
| 13 | |
| 14 | #define JPEG_TOTAL_BUF_SIZE (JPEG_STREAM_BUF_SIZE + JPEG_FRAME_BUF_SIZE) |
| 15 | |
| 16 | #define JPEG_IOCTL_MAGIC 'J' |
| 17 | |
| 18 | #define IOCTL_JPEG_DEC_EXE _IO(JPEG_IOCTL_MAGIC, 1) |
| 19 | #define IOCTL_JPEG_ENC_EXE _IO(JPEG_IOCTL_MAGIC, 2) |
| 20 | #define IOCTL_GET_DEC_IN_BUF _IO(JPEG_IOCTL_MAGIC, 3) |
| 21 | #define IOCTL_GET_DEC_OUT_BUF _IO(JPEG_IOCTL_MAGIC, 4) |
| 22 | #define IOCTL_GET_ENC_IN_BUF _IO(JPEG_IOCTL_MAGIC, 5) |
| 23 | #define IOCTL_GET_ENC_OUT_BUF _IO(JPEG_IOCTL_MAGIC, 6) |
| 24 | #define IOCTL_SET_DEC_PARAM _IO(JPEG_IOCTL_MAGIC, 7) |
| 25 | #define IOCTL_SET_ENC_PARAM _IO(JPEG_IOCTL_MAGIC, 8) |
| 26 | |
| 27 | enum jpeg_ret_type{ |
| 28 | JPEG_FAIL, |
| 29 | JPEG_OK, |
| 30 | JPEG_ENCODE_FAIL, |
| 31 | JPEG_ENCODE_OK, |
| 32 | JPEG_DECODE_FAIL, |
| 33 | JPEG_DECODE_OK, |
| 34 | JPEG_OUT_OF_MEMORY, |
| 35 | JPEG_UNKNOWN_ERROR |
| 36 | }; |
| 37 | |
| 38 | enum jpeg_img_quality_level { |
| 39 | QUALITY_LEVEL_1 = 0, /* high */ |
| 40 | QUALITY_LEVEL_2, |
| 41 | QUALITY_LEVEL_3, |
| 42 | QUALITY_LEVEL_4, /* low */ |
| 43 | }; |
| 44 | |
| 45 | /* raw data image format */ |
| 46 | enum jpeg_frame_format { |
| 47 | YUV_422, /* decode output, encode input */ |
| 48 | YUV_420, /* decode output, encode output */ |
| 49 | RGB_565, /* encode input */ |
| 50 | }; |
| 51 | |
| 52 | /* jpeg data format */ |
| 53 | enum jpeg_stream_format { |
| 54 | JPEG_422, /* decode input, encode output */ |
| 55 | JPEG_420, /* decode input, encode output */ |
| 56 | JPEG_444, /* decode input*/ |
| 57 | JPEG_GRAY, /* decode input*/ |
| 58 | JPEG_RESERVED, |
| 59 | }; |
| 60 | |
| 61 | enum jpeg_test_mode { |
| 62 | encode_mode, |
| 63 | decode_mode, |
| 64 | }; |
| 65 | |
| 66 | struct jpeg_dec_param { |
| 67 | unsigned int width; |
| 68 | unsigned int height; |
| 69 | unsigned int size; |
| 70 | enum jpeg_stream_format in_fmt; |
| 71 | enum jpeg_frame_format out_fmt; |
| 72 | }; |
| 73 | |
| 74 | struct jpeg_enc_param { |
| 75 | unsigned int width; |
| 76 | unsigned int height; |
| 77 | unsigned int size; |
| 78 | enum jpeg_frame_format in_fmt; |
| 79 | enum jpeg_stream_format out_fmt; |
| 80 | enum jpeg_img_quality_level quality; |
| 81 | }; |
| 82 | |
| 83 | struct jpeg_args{ |
| 84 | char *in_buf; |
| 85 | unsigned int in_cookie; |
| 86 | unsigned int in_buf_size; |
| 87 | char *out_buf; |
| 88 | unsigned int out_cookie; |
| 89 | unsigned int out_buf_size; |
| 90 | char *mmapped_addr; |
| 91 | struct jpeg_dec_param *dec_param; |
| 92 | struct jpeg_enc_param *enc_param; |
| 93 | }; |
| 94 | |
| 95 | struct jpeg_lib { |
| 96 | int jpeg_fd; |
| 97 | struct jpeg_args args; |
| 98 | }; |
| 99 | |
| 100 | #ifdef __cplusplus |
| 101 | extern "C" { |
| 102 | #endif |
| 103 | int api_jpeg_decode_init(); |
| 104 | int api_jpeg_encode_init(); |
| 105 | int api_jpeg_decode_deinit(int dev_fd); |
| 106 | int api_jpeg_encode_deinit(int dev_fd); |
| 107 | void *api_jpeg_get_decode_in_buf(int dev_fd, unsigned int size); |
| 108 | void *api_jpeg_get_encode_in_buf(int dev_fd, unsigned int size); |
| 109 | void *api_jpeg_get_decode_out_buf(int dev_fd); |
| 110 | void *api_jpeg_get_encode_out_buf(int dev_fd); |
| 111 | void api_jpeg_set_decode_param(struct jpeg_dec_param *param); |
| 112 | void api_jpeg_set_encode_param(struct jpeg_enc_param *param); |
| 113 | enum jpeg_ret_type api_jpeg_decode_exe(int dev_fd, |
| 114 | struct jpeg_dec_param *dec_param); |
| 115 | enum jpeg_ret_type api_jpeg_encode_exe(int dev_fd, |
| 116 | struct jpeg_enc_param *enc_param); |
| 117 | #ifdef __cplusplus |
| 118 | } |
| 119 | #endif |
| 120 | |
| 121 | #endif//__JPEG_API_H__ |