e54dcde571e4f63f2992e6cb2297576ae1b0f922
[GitHub/LineageOS/android_hardware_samsung_slsi_exynos5.git] / include / ExynosJpegApi.h
1 /*
2 * Copyright Samsung Electronics Co.,LTD.
3 * Copyright (C) 2011 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 #ifndef __EXYNOS_JPEG_BASE_H__
19 #define __EXYNOS_JPEG_BASE_H__
20
21 #include <linux/videodev2.h>
22 #include "videodev2_exynos_media.h"
23
24 #define JPEG_CACHE_OFF (0)
25 #define JPEG_CACHE_ON (1)
26 #define KERNEL_33_JPEG_API (1)
27
28 class ExynosJpegBase {
29 public:
30 ;
31 #define JPEG_MAX_PLANE_CNT (3)
32 ExynosJpegBase();
33 virtual ~ExynosJpegBase();
34
35 enum ERROR_JPEG_HAL {
36 ERROR_JPEG_DEVICE_ALREADY_CREATE = -0x100,
37 ERROR_INVALID_JPEG_MODE,
38 ERROR_CANNOT_OPEN_JPEG_DEVICE,
39 ERROR_JPEG_DEVICE_ALREADY_CLOSED,
40 ERROR_JPEG_DEVICE_ALREADY_DESTROY,
41 ERROR_JPEG_DEVICE_NOT_CREATE_YET,
42 ERROR_INVALID_COLOR_FORMAT,
43 ERROR_INVALID_JPEG_FORMAT,
44 ERROR_INVALID_IMAGE_SIZE,
45 ERROR_JPEG_CONFIG_POINTER_NULL,
46 ERROR_INVALID_JPEG_CONFIG,
47 ERROR_IN_BUFFER_CREATE_FAIL,
48 ERROR_OUT_BUFFER_CREATE_FAIL,
49 ERROR_EXCUTE_FAIL,
50 ERROR_JPEG_SIZE_TOO_SMALL,
51 ERROR_CANNOT_CHANGE_CACHE_SETTING,
52 ERROR_SIZE_NOT_SET_YET,
53 ERROR_BUFFR_IS_NULL,
54 ERROR_BUFFER_TOO_SMALL,
55 ERROR_GET_SIZE_FAIL,
56 ERROR_BUF_NOT_SET_YET,
57 ERROR_REQBUF_FAIL,
58 ERROR_INVALID_V4l2_BUF_TYPE = -0x80,
59 ERROR_MMAP_FAILED,
60 ERROR_FAIL,
61 ERROR_NONE = 0
62 };
63
64 enum MODE {
65 MODE_ENCODE = 0,
66 MODE_DECODE
67 };
68
69 struct BUFFER{
70 int numOfPlanes;
71 int addr[JPEG_MAX_PLANE_CNT];
72 int size[JPEG_MAX_PLANE_CNT];
73 };
74
75 struct BUF_INFO{
76 int numOfPlanes;
77 enum v4l2_memory memory;
78 enum v4l2_buf_type buf_type;
79 int reserved[4];
80 };
81
82 struct PIX_FMT{
83 int in_fmt;
84 int out_fmt;
85 int reserved[4];
86 };
87
88 struct CONFIG{
89 int mode;
90 int enc_qual;
91
92 int width;
93 int height;
94 int scaled_width;
95 int scaled_height;
96
97 int numOfPlanes;
98
99 int sizeJpeg;
100
101 union {
102 PIX_FMT enc_fmt;
103 PIX_FMT dec_fmt;
104 } pix;
105
106 int reserved[8];
107 };
108
109 int setSize(int iW, int iH);
110 int setCache(int iValue);
111 void *getJpegConfig(void);
112
113 protected:
114 // variables
115 bool t_bFlagCreate;
116 bool t_bFlagCreateInBuf;
117 bool t_bFlagCreateOutBuf;
118 bool t_bFlagExcute;
119
120 int t_iPlaneNum;
121
122 int t_iJpegFd;
123 struct CONFIG t_stJpegConfig;
124 struct BUFFER t_stJpegInbuf;
125 struct BUFFER t_stJpegOutbuf;
126
127 //functions
128 int t_v4l2Querycap(int iFd);
129 int t_v4l2SetJpegcomp(int iFd, int iQuality);
130 int t_v4l2SetFmt(int iFd, enum v4l2_buf_type eType, struct CONFIG *pstConfig);
131 int t_v4l2GetFmt(int iFd, enum v4l2_buf_type eType, struct CONFIG *pstConfig);
132 int t_v4l2Reqbufs(int iFd, int iBufCount, struct BUF_INFO *pstBufInfo);
133 int t_v4l2Qbuf(int iFd, struct BUF_INFO *pstBufInfo, struct BUFFER *pstBuf);
134 int t_v4l2Dqbuf(int iFd, enum v4l2_buf_type eType, enum v4l2_memory eMemory, int iNumPlanes);
135 int t_v4l2StreamOn(int iFd, enum v4l2_buf_type eType);
136 int t_v4l2StreamOff(int iFd, enum v4l2_buf_type eType);
137 int t_v4l2SetCtrl(int iFd, int iCid, int iValue);
138 int t_v4l2GetCtrl(int iFd, int iCid);
139
140 int create(enum MODE eMode);
141 int destroy(int iInBufs, int iOutBufs);
142 int setJpegConfig(enum MODE eMode, void *pConfig);
143 int setColorFormat(enum MODE eMode, int iV4l2ColorFormat);
144 int setJpegFormat(enum MODE eMode, int iV4l2JpegFormat);
145 int setColorBufSize(enum MODE eMode, int *piBufSize, int iSize);
146 int setColorBufSize(int iFormat, int *piBufSize, int iSize, int width, int height);
147 int getBuf(bool bCreateBuf, struct BUFFER *pstBuf, int *piBuf, int *iBufSize, int iSize, int iPlaneNum);
148 int setBuf(struct BUFFER *pstBuf, int *piBuf, int *iSize, int iPlaneNum);
149 int updateConfig(enum MODE eMode, int iInBufs, int iOutBufs, int iInBufPlanes, int iOutBufPlanes);
150 int execute(int iInBufPlanes, int iOutBufPlanes);
151 };
152
153 //! ExynosJpegEncoder class
154 /*!
155 * \ingroup Exynos
156 */
157 class ExynosJpegEncoder : public ExynosJpegBase {
158 public:
159 ;
160 ExynosJpegEncoder();
161 virtual ~ExynosJpegEncoder();
162
163 enum QUALITY {
164 QUALITY_LEVEL_1 = 0, /* high */
165 QUALITY_LEVEL_2,
166 QUALITY_LEVEL_3,
167 QUALITY_LEVEL_4, /* low */
168 };
169
170 int create(void);
171 int destroy(void);
172
173 int setJpegConfig(void* pConfig);
174
175 int getInBuf(int *piBuf, int *piInputSize, int iSize);
176 int getOutBuf(int *piBuf, int *piOutputSize);
177
178 int setInBuf(int *piBuf, int *iSize);
179 int setOutBuf(int iBuf, int iSize);
180
181 int getSize(int *piWidth, int *piHeight);
182 int getColorFormat(void);
183 int setColorFormat(int iV4l2ColorFormat);
184 int setJpegFormat(int iV4l2JpegFormat);
185 int setColorBufSize(int *piBufSize, int iSize);
186 int updateConfig(void);
187
188 int setQuality(int iQuality);
189 int getJpegSize(void);
190
191 int encode(void);
192 };
193
194 //! ExynosJpegDecoder class
195 /*!
196 * \ingroup Exynos
197 */
198 class ExynosJpegDecoder : public ExynosJpegBase {
199 public:
200 ;
201 ExynosJpegDecoder();
202 virtual ~ExynosJpegDecoder();
203
204 int create(void);
205 int destroy(void);
206
207 int setJpegConfig(void* pConfig);
208
209 int getInBuf(int *piBuf, int *piInputSize);
210 int getOutBuf(int *picBuf, int *piOutputSize, int iSize);
211
212 int setInBuf(int iBuf, int iSize);
213 int setOutBuf(int *piBuf, int *iSize);
214
215 int getSize(int *piWidth, int *piHeight);
216 int setColorFormat(int iV4l2ColorFormat);
217 int setJpegFormat(int iV4l2JpegFormat);
218 int updateConfig(void);
219
220 int setScaledSize(int iW, int iH);
221 int setJpegSize(int iJpegSize);
222
223 int decode(void);
224 #ifdef WA_BLOCKING_ARTIFACT
225 private:
226 void reduceBlockingArtifact(unsigned char *addr, int iColor, int width, int height);
227 #endif
228 };
229
230 #endif /* __EXYNOS_JPEG_BASE_H__ */