blob: f2685e177343c810d7758ff28d61c859dee63289 [file] [log] [blame]
codeworkxf1be2fe2012-03-24 17:38:29 +01001#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
27enum 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
38enum 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 */
46enum 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 */
53enum 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
61enum jpeg_test_mode {
62 encode_mode,
63 decode_mode,
64};
65
66struct 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
74struct 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
83struct 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
95struct jpeg_lib {
96 int jpeg_fd;
97 struct jpeg_args args;
98};
99
100#ifdef __cplusplus
101extern "C" {
102#endif
103int api_jpeg_decode_init();
104int api_jpeg_encode_init();
105int api_jpeg_decode_deinit(int dev_fd);
106int api_jpeg_encode_deinit(int dev_fd);
107void *api_jpeg_get_decode_in_buf(int dev_fd, unsigned int size);
108void *api_jpeg_get_encode_in_buf(int dev_fd, unsigned int size);
109void *api_jpeg_get_decode_out_buf(int dev_fd);
110void *api_jpeg_get_encode_out_buf(int dev_fd);
111void api_jpeg_set_decode_param(struct jpeg_dec_param *param);
112void api_jpeg_set_encode_param(struct jpeg_enc_param *param);
113enum jpeg_ret_type api_jpeg_decode_exe(int dev_fd,
114 struct jpeg_dec_param *dec_param);
115enum 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__