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