summaryrefslogtreecommitdiffstats
path: root/exynos5/hal/include/jpeg_api.h
blob: f2685e177343c810d7758ff28d61c859dee63289 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#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__