120c516838913956e6f86347b305fe29506e2b491Jiho Chang/*
220c516838913956e6f86347b305fe29506e2b491Jiho Chang * Copyright Samsung Electronics Co.,LTD.
320c516838913956e6f86347b305fe29506e2b491Jiho Chang * Copyright (C) 2011 The Android Open Source Project
420c516838913956e6f86347b305fe29506e2b491Jiho Chang *
520c516838913956e6f86347b305fe29506e2b491Jiho Chang * Licensed under the Apache License, Version 2.0 (the "License");
620c516838913956e6f86347b305fe29506e2b491Jiho Chang * you may not use this file except in compliance with the License.
720c516838913956e6f86347b305fe29506e2b491Jiho Chang * You may obtain a copy of the License at
820c516838913956e6f86347b305fe29506e2b491Jiho Chang *
920c516838913956e6f86347b305fe29506e2b491Jiho Chang *     http://www.apache.org/licenses/LICENSE-2.0
1020c516838913956e6f86347b305fe29506e2b491Jiho Chang *
1120c516838913956e6f86347b305fe29506e2b491Jiho Chang * Unless required by applicable law or agreed to in writing, software
1220c516838913956e6f86347b305fe29506e2b491Jiho Chang * distributed under the License is distributed on an "AS IS" BASIS,
1320c516838913956e6f86347b305fe29506e2b491Jiho Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1420c516838913956e6f86347b305fe29506e2b491Jiho Chang * See the License for the specific language governing permissions and
1520c516838913956e6f86347b305fe29506e2b491Jiho Chang * limitations under the License.
1620c516838913956e6f86347b305fe29506e2b491Jiho Chang */
1720c516838913956e6f86347b305fe29506e2b491Jiho Chang
1820c516838913956e6f86347b305fe29506e2b491Jiho Chang#ifndef __EXYNOS_JPEG_BASE_H__
1920c516838913956e6f86347b305fe29506e2b491Jiho Chang#define __EXYNOS_JPEG_BASE_H__
2020c516838913956e6f86347b305fe29506e2b491Jiho Chang
2120c516838913956e6f86347b305fe29506e2b491Jiho Chang#include "videodev2.h"
22234f72f741d0c0cafd10effafbae4c48275d4f90Jiho Chang#include "videodev2_exynos_media.h"
2320c516838913956e6f86347b305fe29506e2b491Jiho Chang
2420c516838913956e6f86347b305fe29506e2b491Jiho Chang#define JPEG_CACHE_OFF (0)
2520c516838913956e6f86347b305fe29506e2b491Jiho Chang#define JPEG_CACHE_ON (1)
263802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin#define KERNEL_33_JPEG_API (1)
2720c516838913956e6f86347b305fe29506e2b491Jiho Chang
2820c516838913956e6f86347b305fe29506e2b491Jiho Changclass ExynosJpegBase {
2920c516838913956e6f86347b305fe29506e2b491Jiho Changpublic:
3020c516838913956e6f86347b305fe29506e2b491Jiho Chang    ;
3120c516838913956e6f86347b305fe29506e2b491Jiho Chang    #define JPEG_MAX_PLANE_CNT          (3)
3220c516838913956e6f86347b305fe29506e2b491Jiho Chang    ExynosJpegBase();
3320c516838913956e6f86347b305fe29506e2b491Jiho Chang    virtual ~ExynosJpegBase();
3420c516838913956e6f86347b305fe29506e2b491Jiho Chang
3520c516838913956e6f86347b305fe29506e2b491Jiho Chang    enum ERROR_JPEG_HAL {
3620c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_DEVICE_ALREADY_CREATE = -0x100,
3720c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_JPEG_MODE,
3820c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_CANNOT_OPEN_JPEG_DEVICE,
3920c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_DEVICE_ALREADY_CLOSED,
4020c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_DEVICE_ALREADY_DESTROY,
4120c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_DEVICE_NOT_CREATE_YET,
4220c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_COLOR_FORMAT,
4320c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_JPEG_FORMAT,
4420c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_IMAGE_SIZE,
4520c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_CONFIG_POINTER_NULL,
4620c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_JPEG_CONFIG,
4720c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_IN_BUFFER_CREATE_FAIL,
4820c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_OUT_BUFFER_CREATE_FAIL,
4920c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_EXCUTE_FAIL,
5020c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_JPEG_SIZE_TOO_SMALL,
5120c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_CANNOT_CHANGE_CACHE_SETTING,
5220c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_SIZE_NOT_SET_YET,
5320c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_BUFFR_IS_NULL,
5420c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_BUFFER_TOO_SMALL,
5520c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_GET_SIZE_FAIL,
563802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin        ERROR_BUF_NOT_SET_YET,
5720c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_REQBUF_FAIL,
5820c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_INVALID_V4l2_BUF_TYPE = -0x80,
5920c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_MMAP_FAILED,
6020c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_FAIL,
6120c516838913956e6f86347b305fe29506e2b491Jiho Chang        ERROR_NONE = 0
6220c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
6320c516838913956e6f86347b305fe29506e2b491Jiho Chang
6420c516838913956e6f86347b305fe29506e2b491Jiho Chang    enum MODE {
6520c516838913956e6f86347b305fe29506e2b491Jiho Chang        MODE_ENCODE = 0,
6620c516838913956e6f86347b305fe29506e2b491Jiho Chang        MODE_DECODE
6720c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
6820c516838913956e6f86347b305fe29506e2b491Jiho Chang
6920c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct BUFFER{
7020c516838913956e6f86347b305fe29506e2b491Jiho Chang        int     numOfPlanes;
716effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang        int     addr[JPEG_MAX_PLANE_CNT];
7220c516838913956e6f86347b305fe29506e2b491Jiho Chang        int     size[JPEG_MAX_PLANE_CNT];
7320c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
7420c516838913956e6f86347b305fe29506e2b491Jiho Chang
7520c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct BUF_INFO{
7620c516838913956e6f86347b305fe29506e2b491Jiho Chang        int                 numOfPlanes;
7720c516838913956e6f86347b305fe29506e2b491Jiho Chang        enum v4l2_memory    memory;
7820c516838913956e6f86347b305fe29506e2b491Jiho Chang        enum v4l2_buf_type  buf_type;
7920c516838913956e6f86347b305fe29506e2b491Jiho Chang        int                 reserved[4];
8020c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
8120c516838913956e6f86347b305fe29506e2b491Jiho Chang
8220c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct PIX_FMT{
8320c516838913956e6f86347b305fe29506e2b491Jiho Chang        int in_fmt;
8420c516838913956e6f86347b305fe29506e2b491Jiho Chang        int out_fmt;
8520c516838913956e6f86347b305fe29506e2b491Jiho Chang        int reserved[4];
8620c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
8720c516838913956e6f86347b305fe29506e2b491Jiho Chang
8820c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct CONFIG{
8920c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               mode;
9020c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               enc_qual;
9120c516838913956e6f86347b305fe29506e2b491Jiho Chang
9220c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               width;
9320c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               height;
9420c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               scaled_width;
9520c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               scaled_height;
9620c516838913956e6f86347b305fe29506e2b491Jiho Chang
9720c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               numOfPlanes;
9820c516838913956e6f86347b305fe29506e2b491Jiho Chang
9920c516838913956e6f86347b305fe29506e2b491Jiho Chang        int               sizeJpeg;
10020c516838913956e6f86347b305fe29506e2b491Jiho Chang
10120c516838913956e6f86347b305fe29506e2b491Jiho Chang        union {
10220c516838913956e6f86347b305fe29506e2b491Jiho Chang            PIX_FMT enc_fmt;
10320c516838913956e6f86347b305fe29506e2b491Jiho Chang            PIX_FMT dec_fmt;
10420c516838913956e6f86347b305fe29506e2b491Jiho Chang        } pix;
10520c516838913956e6f86347b305fe29506e2b491Jiho Chang
10620c516838913956e6f86347b305fe29506e2b491Jiho Chang        int              reserved[8];
10720c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
10820c516838913956e6f86347b305fe29506e2b491Jiho Chang
10920c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setSize(int iW, int iH);
11020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setCache(int iValue);
11120c516838913956e6f86347b305fe29506e2b491Jiho Chang    void *getJpegConfig(void);
11220c516838913956e6f86347b305fe29506e2b491Jiho Chang
11320c516838913956e6f86347b305fe29506e2b491Jiho Changprotected:
11420c516838913956e6f86347b305fe29506e2b491Jiho Chang    // variables
11520c516838913956e6f86347b305fe29506e2b491Jiho Chang    bool t_bFlagCreate;
11620c516838913956e6f86347b305fe29506e2b491Jiho Chang    bool t_bFlagCreateInBuf;
11720c516838913956e6f86347b305fe29506e2b491Jiho Chang    bool t_bFlagCreateOutBuf;
11820c516838913956e6f86347b305fe29506e2b491Jiho Chang    bool t_bFlagExcute;
11920c516838913956e6f86347b305fe29506e2b491Jiho Chang
12020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_iPlaneNum;
12120c516838913956e6f86347b305fe29506e2b491Jiho Chang
12220c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_iJpegFd;
12320c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct CONFIG t_stJpegConfig;
12420c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct BUFFER t_stJpegInbuf;
12520c516838913956e6f86347b305fe29506e2b491Jiho Chang    struct BUFFER t_stJpegOutbuf;
12620c516838913956e6f86347b305fe29506e2b491Jiho Chang
12720c516838913956e6f86347b305fe29506e2b491Jiho Chang    //functions
12820c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2Querycap(int iFd);
12920c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2SetJpegcomp(int iFd, int iQuality);
13020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2SetFmt(int iFd, enum v4l2_buf_type eType, struct CONFIG *pstConfig);
13120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2GetFmt(int iFd, enum v4l2_buf_type eType, struct CONFIG *pstConfig);
13220c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2Reqbufs(int iFd, int iBufCount, struct BUF_INFO *pstBufInfo);
13320c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2Qbuf(int iFd, struct BUF_INFO *pstBufInfo, struct BUFFER *pstBuf);
13420c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2Dqbuf(int iFd, enum v4l2_buf_type eType, enum v4l2_memory eMemory, int iNumPlanes);
13520c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2StreamOn(int iFd, enum v4l2_buf_type eType);
13620c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2StreamOff(int iFd, enum v4l2_buf_type eType);
13720c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2SetCtrl(int iFd, int iCid, int iValue);
13820c516838913956e6f86347b305fe29506e2b491Jiho Chang    int t_v4l2GetCtrl(int iFd, int iCid);
13920c516838913956e6f86347b305fe29506e2b491Jiho Chang
14020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int create(enum MODE eMode);
14120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int destroy(int iInBufs, int iOutBufs);
14220c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setJpegConfig(enum MODE eMode, void *pConfig);
14320c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setColorFormat(enum MODE eMode, int iV4l2ColorFormat);
14420c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setJpegFormat(enum MODE eMode, int iV4l2JpegFormat);
145365ad0f439a61681e1bb164febeb7b5ca31a1833Jiyoung Shin    int setColorBufSize(enum MODE eMode, int *piBufSize, int iSize);
146365ad0f439a61681e1bb164febeb7b5ca31a1833Jiyoung Shin    int setColorBufSize(int iFormat, int *piBufSize, int iSize, int width, int height);
1476effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int getBuf(bool bCreateBuf, struct BUFFER *pstBuf, int *piBuf, int *iBufSize, int iSize, int iPlaneNum);
1486effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int setBuf(struct BUFFER *pstBuf, int *piBuf, int *iSize, int iPlaneNum);
14920c516838913956e6f86347b305fe29506e2b491Jiho Chang    int updateConfig(enum MODE eMode, int iInBufs, int iOutBufs, int iInBufPlanes, int iOutBufPlanes);
1503802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin    int execute(int iInBufPlanes, int iOutBufPlanes);
15120c516838913956e6f86347b305fe29506e2b491Jiho Chang};
15220c516838913956e6f86347b305fe29506e2b491Jiho Chang
15320c516838913956e6f86347b305fe29506e2b491Jiho Chang//! ExynosJpegEncoder class
15420c516838913956e6f86347b305fe29506e2b491Jiho Chang/*!
15520c516838913956e6f86347b305fe29506e2b491Jiho Chang * \ingroup Exynos
15620c516838913956e6f86347b305fe29506e2b491Jiho Chang */
15720c516838913956e6f86347b305fe29506e2b491Jiho Changclass ExynosJpegEncoder : public ExynosJpegBase {
15820c516838913956e6f86347b305fe29506e2b491Jiho Changpublic:
15920c516838913956e6f86347b305fe29506e2b491Jiho Chang    ;
16020c516838913956e6f86347b305fe29506e2b491Jiho Chang    ExynosJpegEncoder();
16120c516838913956e6f86347b305fe29506e2b491Jiho Chang    virtual ~ExynosJpegEncoder();
16220c516838913956e6f86347b305fe29506e2b491Jiho Chang
16320c516838913956e6f86347b305fe29506e2b491Jiho Chang    enum QUALITY {
16420c516838913956e6f86347b305fe29506e2b491Jiho Chang        QUALITY_LEVEL_1 = 0,    /* high */
16520c516838913956e6f86347b305fe29506e2b491Jiho Chang        QUALITY_LEVEL_2,
16620c516838913956e6f86347b305fe29506e2b491Jiho Chang        QUALITY_LEVEL_3,
16720c516838913956e6f86347b305fe29506e2b491Jiho Chang        QUALITY_LEVEL_4,        /* low */
16820c516838913956e6f86347b305fe29506e2b491Jiho Chang    };
16920c516838913956e6f86347b305fe29506e2b491Jiho Chang
17020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     create(void);
17120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     destroy(void);
17220c516838913956e6f86347b305fe29506e2b491Jiho Chang
17320c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setJpegConfig(void* pConfig);
17420c516838913956e6f86347b305fe29506e2b491Jiho Chang
1756effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     getInBuf(int *piBuf, int *piInputSize, int iSize);
1766effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     getOutBuf(int *piBuf, int *piOutputSize);
17720c516838913956e6f86347b305fe29506e2b491Jiho Chang
1786effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     setInBuf(int *piBuf, int *iSize);
1796effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     setOutBuf(int iBuf, int iSize);
18020c516838913956e6f86347b305fe29506e2b491Jiho Chang
18120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     getSize(int *piWidth, int *piHeight);
1823802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin    int     getColorFormat(void);
18320c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setColorFormat(int iV4l2ColorFormat);
18420c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setJpegFormat(int iV4l2JpegFormat);
185365ad0f439a61681e1bb164febeb7b5ca31a1833Jiyoung Shin    int     setColorBufSize(int *piBufSize, int iSize);
18620c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     updateConfig(void);
18720c516838913956e6f86347b305fe29506e2b491Jiho Chang
18820c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setQuality(int iQuality);
18920c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     getJpegSize(void);
19020c516838913956e6f86347b305fe29506e2b491Jiho Chang
19120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     encode(void);
19220c516838913956e6f86347b305fe29506e2b491Jiho Chang};
19320c516838913956e6f86347b305fe29506e2b491Jiho Chang
19420c516838913956e6f86347b305fe29506e2b491Jiho Chang//! ExynosJpegDecoder class
19520c516838913956e6f86347b305fe29506e2b491Jiho Chang/*!
19620c516838913956e6f86347b305fe29506e2b491Jiho Chang * \ingroup Exynos
19720c516838913956e6f86347b305fe29506e2b491Jiho Chang */
19820c516838913956e6f86347b305fe29506e2b491Jiho Changclass ExynosJpegDecoder : public ExynosJpegBase {
19920c516838913956e6f86347b305fe29506e2b491Jiho Changpublic:
20020c516838913956e6f86347b305fe29506e2b491Jiho Chang    ;
20120c516838913956e6f86347b305fe29506e2b491Jiho Chang    ExynosJpegDecoder();
20220c516838913956e6f86347b305fe29506e2b491Jiho Chang    virtual ~ExynosJpegDecoder();
20320c516838913956e6f86347b305fe29506e2b491Jiho Chang
20420c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     create(void);
20520c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     destroy(void);
20620c516838913956e6f86347b305fe29506e2b491Jiho Chang
20720c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setJpegConfig(void* pConfig);
20820c516838913956e6f86347b305fe29506e2b491Jiho Chang
2096effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     getInBuf(int *piBuf, int *piInputSize);
2106effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     getOutBuf(int *picBuf, int *piOutputSize, int iSize);
21120c516838913956e6f86347b305fe29506e2b491Jiho Chang
2126effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     setInBuf(int iBuf, int iSize);
2136effbc40b1dedbfbdc8cc5e0226b0b36cd899794Sungjoong Kang    int     setOutBuf(int *piBuf, int *iSize);
21420c516838913956e6f86347b305fe29506e2b491Jiho Chang
21520c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     getSize(int *piWidth, int *piHeight);
21620c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setColorFormat(int iV4l2ColorFormat);
21720c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     setJpegFormat(int iV4l2JpegFormat);
21820c516838913956e6f86347b305fe29506e2b491Jiho Chang    int     updateConfig(void);
21920c516838913956e6f86347b305fe29506e2b491Jiho Chang
22020c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setScaledSize(int iW, int iH);
22120c516838913956e6f86347b305fe29506e2b491Jiho Chang    int setJpegSize(int iJpegSize);
22220c516838913956e6f86347b305fe29506e2b491Jiho Chang
22320c516838913956e6f86347b305fe29506e2b491Jiho Chang    int  decode(void);
2243802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin#ifdef WA_BLOCKING_ARTIFACT
2253802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shinprivate:
2263802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin    void reduceBlockingArtifact(unsigned char *addr, int iColor, int width, int height);
2273802e44ea4993eec4d0daa3d1fcfe31146859898Jiyoung Shin#endif
22820c516838913956e6f86347b305fe29506e2b491Jiho Chang};
22920c516838913956e6f86347b305fe29506e2b491Jiho Chang
23020c516838913956e6f86347b305fe29506e2b491Jiho Chang#endif /* __EXYNOS_JPEG_BASE_H__ */
231