1
2 #include "string.h"
3 #include "MsTypes.h"
4 #include <stdio.h>
5 #include "utopia_dapi.h"
6 #include "apiJPEG.h"
7 #include "MsOS.h"
8
9 #include "utopia.h"
10 #include "apiJPEG_priv.h"
11 #include "apiJPEG_v2.h"
12
13
14 MS_U8 _u8JPEG_ApiV2DbgLevel = E_JPEG_DEBUG_NONE;
15
16
17 enum
18 {
19 JPEG_POOL_ID_JPD=0,
20 JPEG_POOL_ID_JPD_MAX
21 } eJpegPoolID;
22
23 #ifndef ANDROID
24 #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) printf(format, ##args);}while(0)
25 #else
26 #define LOG_TAG "API_JPEG"
27 #include <cutils/log.h>
28 #ifndef LOGD
29 #define printf(format, args...) ALOGI(format, ##args);
30 #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) ALOGE(format, ##args);}while(0)
31 #else
32 #define printf(format, args...) LOGI(format, ##args);
33 #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) LOGE(format, ##args);}while(0)
34 #endif
35 #endif
36
37
38 // this func will be call to init by utopia20 framework
JPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType)39 void JPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType)
40 {
41 UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
42 // 1. deal with module
43 void* pModuleJPEG_EX_V2 = NULL;
44 UtopiaModuleCreate(MODULE_JPEG_EX, 0, &pModuleJPEG_EX_V2);
45 UtopiaModuleRegister(pModuleJPEG_EX_V2);
46 // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
47 UtopiaModuleSetupFunctionPtr(pModuleJPEG_EX_V2,
48 (FUtopiaOpen)JPEGOpen,
49 (FUtopiaClose)JPEGClose,
50 (FUtopiaIOctl)JPEGIoctl);
51
52 // 2. deal with resource
53 void* psResource = NULL;
54 UtopiaModuleAddResourceStart(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD);
55 UtopiaResourceCreate("JPD", sizeof(JPEG_RESOURCE_PRIVATE), &psResource);
56 UtopiaResourceRegister(pModuleJPEG_EX_V2, psResource, JPEG_POOL_ID_JPD);
57 UtopiaModuleAddResourceEnd(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD);
58 UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
59
60 }
61
JPEGOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)62 MS_U32 JPEGOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
63 {
64 void* pResource = NULL;
65 JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL;
66 JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
67 MS_U8 i = 0;
68
69 UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
70 void* pModuleJPEG_EX_V2 = NULL;
71 UtopiaModuleGetPtr(MODULE_JPEG_EX,&pModuleJPEG_EX_V2);
72 // Check there is available decoder to be use
73 if(UtopiaResourceObtain(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD, &pResource) != UTOPIA_STATUS_SUCCESS)
74 {
75 printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
76 return UTOPIA_STATUS_ERR_RESOURCE;
77 }
78
79 UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate));
80
81 #if 0
82 for(i=0;i<SUPPORT_JPD_NUM_MAX;i++)
83 {
84 if(pJPEG_ResourcePrivate->u8DecoderInUse[i] == 0)
85 {
86 pJPEG_ResourcePrivate->u8DecoderInUse[i] = 1;
87 break;
88 }
89 }
90
91 if(i == SUPPORT_JPD_NUM_MAX)
92 {
93 printf("No decoder can be used,%s,%d\n",__FUNCTION__,__LINE__);
94 UtopiaResourceRelease(pResource);
95 return UTOPIA_STATUS_ERR_RESOURCE;
96 }
97 #endif
98
99 UtopiaResourceRelease(pResource);
100
101 //Create instance
102 UtopiaInstanceCreate(sizeof(JPEG_INSTANCE_PRIVATE), ppInstance);
103 UtopiaInstanceGetPrivate(*ppInstance, (void**)&psJPEG_InstPri);
104
105 //Recode decoder index
106 psJPEG_InstPri->Index_of_decoder = i;
107
108 psJPEG_InstPri->fpJPEGEnableOJPD = (IOCTL_JPEG_ENABLE_OJPD)_MApi_JPEG_EnableOJPD;
109 psJPEG_InstPri->fpJPEGInit_UsingOJPD = (IOCTL_JPEG_INIT_USING_OJPD)_MApi_JPEG_Init_UsingOJPD;
110 psJPEG_InstPri->fpJPEGget_APP0_info = (IOCTL_JPEG_GET_APP0_INFO)_msAPI_JPEG_get_APP0_info;
111 psJPEG_InstPri->fpJPEGInit = (IOCTL_JPEG_INIT)_MApi_JPEG_Init;
112 psJPEG_InstPri->fpJPEGDecodeHdr = (IOCTL_JPEG_DECODE_HDR)_MApi_JPEG_DecodeHdr;
113 psJPEG_InstPri->fpJPEGDecode = (IOCTL_JPEG_DECODE)_MApi_JPEG_Decode;
114 psJPEG_InstPri->fpJPEGExit = (IOCTL_JPEG_EXIT)_MApi_JPEG_Exit;
115 psJPEG_InstPri->fpJPEGGetErrorCode = (IOCTL_JPEG_GET_ERROR_CODE)_MApi_JPEG_GetErrorCode;
116 psJPEG_InstPri->fpJPEGGetJPDEventFlag = (IOCTL_JPEG_GET_JPEG_EVENT_FLAG)_MApi_JPEG_GetJPDEventFlag;
117 psJPEG_InstPri->fpJPEGSetJPDEventFlag = (IOCTL_JPEG_SET_JPEG_EVENT_FLAG)_MApi_JPEG_SetJPDEventFlag;
118 psJPEG_InstPri->fpJPEGRst = (IOCTL_JPEG_RST)_MApi_JPEG_Rst;
119 psJPEG_InstPri->fpJPEGPowerOn = (IOCTL_JPEG_POWER_ON)_MApi_JPEG_PowerOn;
120 psJPEG_InstPri->fpJPEGPowerOff = (IOCTL_JPEG_POWER_OFF)_MApi_JPEG_PowerOff;
121 psJPEG_InstPri->fpJPEGGetCurVidx = (IOCTL_JPEG_GET_CUR_VIDX)_MApi_JPEG_GetCurVidx;
122 psJPEG_InstPri->fpJPEGIsProgressive = (IOCTL_JPEG_IS_PROGRESSIVE)_MApi_JPEG_IsProgressive;
123 psJPEG_InstPri->fpJPEGThumbnailFound = (IOCTL_JPEG_THUMBNAIL_FOUND)_MApi_JPEG_ThumbnailFound;
124 psJPEG_InstPri->fpJPEGGetWidth = (IOCTL_JPEG_GET_WIDTH)_MApi_JPEG_GetWidth;
125 psJPEG_InstPri->fpJPEGGetHeight = (IOCTL_JPEG_GET_HEIGHT)_MApi_JPEG_GetHeight;
126 psJPEG_InstPri->fpJPEGGetOriginalWidth = (IOCTL_JPEG_GET_ORIGINAL_WIDTH)_MApi_JPEG_GetOriginalWidth;
127 psJPEG_InstPri->fpJPEGGetOriginalHeight = (IOCTL_JPEG_GET_ORIGINAL_HEIGHT)_MApi_JPEG_GetOriginalHeight;
128 psJPEG_InstPri->fpJPEGGetNonAlignmentWidth = (IOCTL_JPEG_GET_NONALIGNMENT_WIDTH)_MApi_JPEG_GetNonAlignmentWidth;
129 psJPEG_InstPri->fpJPEGGetNonAlignmentHeight = (IOCTL_JPEG_GET_NONALIGNMENT_HEIGHT)_MApi_JPEG_GetNonAlignmentHeight;
130 psJPEG_InstPri->fpJPEGGetAlignedPitch = (IOCTL_JPEG_GET_ALIGNED_PITCH)_MApi_JPEG_GetAlignedPitch;
131 psJPEG_InstPri->fpJPEGGetAlignedPitch_H = (IOCTL_JPEG_GET_ALIGNED_PITCH_H)_MApi_JPEG_GetAlignedPitch_H;
132 psJPEG_InstPri->fpJPEGGetAlignedWidth = (IOCTL_JPEG_GET_ALIGNED_WIDTH)_MApi_JPEG_GetAlignedWidth;
133 psJPEG_InstPri->fpJPEGGetAlignedHeight = (IOCTL_JPEG_GET_ALIGNED_HEIGHT)_MApi_JPEG_GetAlignedHeight;
134 psJPEG_InstPri->fpJPEGGetScaleDownFactor = (IOCTL_JPEG_GET_SCALE_DOWN_FACTOR)_MApi_JPEG_GetScaleDownFactor;
135 psJPEG_InstPri->fpJPEGSetMaxDecodeResolution = (IOCTL_JPEG_SET_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMaxDecodeResolution;
136 psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution = (IOCTL_JPEG_SET_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetProMaxDecodeResolution;
137 psJPEG_InstPri->fpJPEGSetMRBufferValid = (IOCTL_JPEG_SET_MRBUFFER_VALID)_MApi_JPEG_SetMRBufferValid;
138 psJPEG_InstPri->fpJPEGUpdateReadInfo = (IOCTL_JPEG_UPDATE_READ_INFO)_MApi_JPEG_UpdateReadInfo;
139 psJPEG_InstPri->fpJPEGProcessEOF = (IOCTL_JPEG_PROCESS_EOF)_MApi_JPEG_ProcessEOF;
140 psJPEG_InstPri->fpJPEGSetErrCode = (IOCTL_JPEG_SET_ERROR_CODE)_MApi_JPEG_SetErrCode;
141 psJPEG_InstPri->fpJPEGSetDbgLevel = (IOCTL_JPEG_SET_DBG_LEVEL)_MApi_JPEG_SetDbgLevel;
142 psJPEG_InstPri->fpJPEGGetDbgLevel = (IOCTL_JPEG_GET_DBG_LEVEL)_MApi_JPEG_GetDbgLevel;
143 psJPEG_InstPri->fpJPEGGetInfo = (IOCTL_JPEG_GET_INFO)_MApi_JPEG_GetInfo;
144 psJPEG_InstPri->fpJPEGGetStatus = (IOCTL_JPEG_GET_STATUS)_MApi_JPEG_GetStatus;
145 psJPEG_InstPri->fpJPEGGetLibVer = (IOCTL_JPEG_GET_LIB_VER)_MApi_JPEG_GetLibVer;
146 psJPEG_InstPri->fpJPEGHdlVidxChk = (IOCTL_JPEG_HDL_VIDX_CHK)_MApi_JPEG_HdlVidxChk;
147 psJPEG_InstPri->fpJPEGGetBuffLoadType = (IOCTL_JPEG_GET_BUFF_LOAD_TYPE)_MApi_JPEG_GetBuffLoadType;
148 psJPEG_InstPri->fpJPEGEnableISR = (IOCTL_JPEG_ENABLE_ISR)_MApi_JPEG_EnableISR;
149 psJPEG_InstPri->fpJPEGDisableISR = (IOCTL_JPEG_DISABLE_ISR)_MApi_JPEG_DisableISR;
150 psJPEG_InstPri->fpJPEGWaitDone = (IOCTL_JPEG_WAIT_DONE)_MApi_JPEG_WaitDone;
151 psJPEG_InstPri->fpJPEGGetEXIFDateTime = (IOCTL_JPEG_GET_EXIF_DATETIME)_MApi_JPEG_GetEXIFDateTime;
152 psJPEG_InstPri->fpJPEGGetEXIFOrientation = (IOCTL_JPEG_GET_EXIF_ORIENTATION)_MApi_JPEG_GetEXIFOrientation;
153 psJPEG_InstPri->fpJPEGGetEXIFManufacturer = (IOCTL_JPEG_GET_EXIF_MANUFACTURER)_MApi_JPEG_GetEXIFManufacturer;
154 psJPEG_InstPri->fpJPEGGetEXIFModel = (IOCTL_JPEG_GET_EXIF_MODEL)_MApi_JPEG_GetEXIFModel;
155 psJPEG_InstPri->fpJPEGGetEXIFFlash = (IOCTL_JPEG_GET_EXIF_FLASH)_MApi_JPEG_GetEXIFFlash;
156 psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings = (IOCTL_JPEG_GET_EXIF_ISO_SPEED_RATINGS)_MApi_JPEG_GetEXIFISOSpeedRatings;
157 psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue = (IOCTL_JPEG_GET_EXIF_SHUTTER_SPEED_VALUE)_MApi_JPEG_GetEXIFShutterSpeedValue;
158 psJPEG_InstPri->fpJPEGGetEXIFApertureValue = (IOCTL_JPEG_GET_EXIF_APERTURE_VALUE)_MApi_JPEG_GetEXIFApertureValue;
159 psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue = (IOCTL_JPEG_GET_EXIF_EXPOSURE_BIAS_VALUE)_MApi_JPEG_GetEXIFExposureBiasValue;
160 psJPEG_InstPri->fpJPEGGetEXIFFocalLength = (IOCTL_JPEG_GET_EXIF_FOCAL_LENGTH)_MApi_JPEG_GetEXIFFocalLength;
161 psJPEG_InstPri->fpJPEGGetEXIFImageWidth = (IOCTL_JPEG_GET_EXIF_IMAGE_WIDTH)_MApi_JPEG_GetEXIFImageWidth;
162 psJPEG_InstPri->fpJPEGGetEXIFImageHeight = (IOCTL_JPEG_GET_EXIF_IMAGE_HEIGHT)_MApi_JPEG_GetEXIFImageHeight;
163 psJPEG_InstPri->fpJPEGGetEXIFExposureTime = (IOCTL_JPEG_GET_EXIF_EXPOSURE_TIME)_MApi_JPEG_GetEXIFExposureTime;
164 psJPEG_InstPri->fpJPEGGetEXIFFNumber = (IOCTL_JPEG_GET_EXIF_FNUMBER)_MApi_JPEG_GetEXIFFNumber;
165 psJPEG_InstPri->fpJPEGGetFreeMemory = (IOCTL_JPEG_GET_FREE_MEMORY)_MApi_JPEG_GetFreeMemory;
166 psJPEG_InstPri->fpJPEGGetDataOffset = (IOCTL_JPEG_GET_DATA_OFFSET)_MApi_JPEG_GetDataOffset;
167 psJPEG_InstPri->fpJPEGGetSOFOffset = (IOCTL_JPEG_GET_SOF_OFFSET)_MApi_JPEG_GetSOFOffset;
168 psJPEG_InstPri->fpJPEGSupportCMYK = (IOCTL_JPEG_SUPPORT_CMYK)_MApi_JPEG_SupportCMYK;
169 psJPEG_InstPri->fpJPEGSupportRGB = (IOCTL_JPEG_SUPPORT_RGB)_MApi_JPEG_SupportRGB;
170 psJPEG_InstPri->fpJPEGSetMHEG5 = (IOCTL_JPEG_SET_MHEG5)_MApi_JPEG_SetMHEG5;
171 psJPEG_InstPri->fpJPEGIsMPOFormat = (IOCTL_JPEG_IS_MPO_FORMAT)_MApi_JPEG_IsMPOFormat;
172 psJPEG_InstPri->fpJPEGGetMPOIndex = (IOCTL_JPEG_GET_MPO_INDEX)_MApi_JPEG_GetMPOIndex;
173 psJPEG_InstPri->fpJPEGGetMPOAttr = (IOCTL_JPEG_GET_MPO_ATTR)_MApi_JPEG_GetMPOAttr;
174 psJPEG_InstPri->fpJPEGDumpMPO = (IOCTL_JPEG_DUMP_MPO)_MApi_JPEG_DumpMPO;
175 psJPEG_InstPri->fpJPEGSetMPOBuffer = (IOCTL_JPEG_SET_MPO_BUFFER)_MApi_JPEG_SetMPOBuffer;
176 psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOMaxDecodeResolution;
177 psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOProMaxDecodeResolution;
178 psJPEG_InstPri->fpJPEGGetControl = (IOCTL_JPEG_GET_CONTROL)_MApi_JPEG_GetControl;
179
180 UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
181
182 return UTOPIA_STATUS_SUCCESS;
183 }
184
185
JPEGIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)186 MS_U32 JPEGIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
187 {
188 JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
189 UtopiaInstanceGetPrivate(pInstance, (void*)&psJPEG_InstPri);
190 E_JPEG_V2_IOCTL_CMD IOcmd = (E_JPEG_V2_IOCTL_CMD)u32Cmd;
191 MS_U32 ret = UTOPIA_STATUS_SUCCESS;
192
193 PJPEG_BOOL_PARAM pBoolPara = NULL;
194 PJPEG_INIT_PARAM pInit = NULL;
195 PJPEG_GETAPP0INFO_PARAM pGetApp0Info = NULL;
196 PJPEG_RESULT_PARAM pResult = NULL;
197 PJPEG_GETERRORCODE_PARAM pGetErrorCode = NULL;
198 PJPEG_JPEGEVENT_PARAM pJpegEvent = NULL;
199 PJPEG_U16_PARAM pU16Para = NULL;
200 PJPEG_U8_PARAM pU8Para = NULL;
201 PJPEG_RESOLUTION_PARAM pResolution = NULL;
202 PJPEG_SETMBUFFERVALID_PARAM pSetMBufferValid = NULL;
203 PJPEG_UPDATEREADINFO_PARAM pUpdateReadInfo = NULL;
204 PJPEG_PROCESSEOF_PARAM pProcessEOF = NULL;
205 PJPEG_SETERRORCODE_PARAM pSetErrorCode = NULL;
206 PJPEG_GETINFO_PARAM pGetInfo = NULL;
207 PJPEG_GETSTATUS_PARAM pGetStatus = NULL;
208 PJPEG_GETLIBVER_PARAM pGetLibVer = NULL;
209 PJPEG_GETBUFFLOADTYPE_PARAM pGetBuffLoadType = NULL;
210 PJPEG_ENABLEISR_PARAM pEnableISR = NULL;
211 PJPEG_WAITDONE_PARAM pWaitDone = NULL;
212 PJPEG_GETEXIFDATETIME_PARAM pGetExifDateTime = NULL;
213 PJPEG_GETEXIFORIENTATION_PARAM pGetExifOrientation = NULL;
214 PJPEG_GETEXIFSTRING_PARAM pGetExifString = NULL;
215 PJPEG_GETEXIFU16_PARAM pGetExifU16 = NULL;
216 PJPEG_GETEXIFU32_PARAM pGetExifU32 = NULL;
217 PJPEG_GETEXIFRATIONAL_PARAM pGetExifRational = NULL;
218 PJPEG_GETFREEMEMORY_PARAM pGetFreeMemory = NULL;
219 PJPEG_U32_PARAM pU32Para = NULL;
220 PJPEG_SUPPORTCMYK_PARAM pSupportCMYK = NULL;
221 PJPEG_GETMPOINDEX_PARAM pGetMPOIndex = NULL;
222 PJPEG_GETMPOATTR_PARAM pGetMPOAttr = NULL;
223 PJPEG_SETMPOBUFFER_PARAM pSetMPOBuffer = NULL;
224 PJPEG_GET_CTRL_PARAM pGetCtrl = NULL;
225
226
227 switch(IOcmd)
228 {
229 case MApi_CMD_JPEG_EnableOJPD:
230 pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
231 psJPEG_InstPri->fpJPEGEnableOJPD(pBoolPara->bValue);
232 break;
233 case MApi_CMD_JPEG_Init_UsingOJPD:
234 pInit = (PJPEG_INIT_PARAM)pArgs;
235 pInit->retVal = psJPEG_InstPri->fpJPEGInit_UsingOJPD(pInit->pInitParam);
236 break;
237 case MApi_CMD_JPEG_get_APP0_info:
238 pGetApp0Info = (PJPEG_GETAPP0INFO_PARAM)pArgs;
239 psJPEG_InstPri->fpJPEGget_APP0_info(pGetApp0Info->unit, pGetApp0Info->x, pGetApp0Info->y);
240 break;
241 case MApi_CMD_JPEG_Init:
242 pInit = (PJPEG_INIT_PARAM)pArgs;
243 pInit->retVal = psJPEG_InstPri->fpJPEGInit(pInit->pInitParam);
244 break;
245 case MApi_CMD_JPEG_DecodeHdr:
246 pResult = (PJPEG_RESULT_PARAM)pArgs;
247 pResult->retVal = psJPEG_InstPri->fpJPEGDecodeHdr();
248 break;
249 case MApi_CMD_JPEG_Decode:
250 pResult = (PJPEG_RESULT_PARAM)pArgs;
251 pResult->retVal = psJPEG_InstPri->fpJPEGDecode();
252 break;
253 case MApi_CMD_JPEG_Exit:
254 psJPEG_InstPri->fpJPEGExit();
255 break;
256 case MApi_CMD_JPEG_GetErrorCode:
257 pGetErrorCode= (PJPEG_GETERRORCODE_PARAM)pArgs;
258 pGetErrorCode->ErrCode = psJPEG_InstPri->fpJPEGGetErrorCode();
259 break;
260 case MApi_CMD_JPEG_GetJPDEventFlag:
261 pJpegEvent= (PJPEG_JPEGEVENT_PARAM)pArgs;
262 pJpegEvent->eEvtVal = psJPEG_InstPri->fpJPEGGetJPDEventFlag();
263 break;
264 case MApi_CMD_JPEG_SetJPDEventFlag:
265 pJpegEvent = (PJPEG_JPEGEVENT_PARAM)pArgs;
266 psJPEG_InstPri->fpJPEGSetJPDEventFlag(pJpegEvent->eEvtVal);
267 break;
268 case MApi_CMD_JPEG_Rst:
269 psJPEG_InstPri->fpJPEGRst();
270 break;
271 case MApi_CMD_JPEG_PowerOn:
272 psJPEG_InstPri->fpJPEGPowerOn();
273 break;
274 case MApi_CMD_JPEG_PowerOff:
275 psJPEG_InstPri->fpJPEGPowerOff();
276 break;
277 case MApi_CMD_JPEG_GetCurVidx:
278 pU16Para= (PJPEG_U16_PARAM)pArgs;
279 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetCurVidx();
280 break;
281 case MApi_CMD_JPEG_IsProgressive:
282 pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
283 pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsProgressive();
284 break;
285 case MApi_CMD_JPEG_ThumbnailFound:
286 pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
287 pBoolPara->bValue = psJPEG_InstPri->fpJPEGThumbnailFound();
288 break;
289 case MApi_CMD_JPEG_GetWidth:
290 pU16Para = (PJPEG_U16_PARAM)pArgs;
291 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetWidth();
292 break;
293 case MApi_CMD_JPEG_GetHeight:
294 pU16Para = (PJPEG_U16_PARAM)pArgs;
295 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetHeight();
296 break;
297 case MApi_CMD_JPEG_GetOriginalWidth:
298 pU16Para = (PJPEG_U16_PARAM)pArgs;
299 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalWidth();
300 break;
301 case MApi_CMD_JPEG_GetOriginalHeight:
302 pU16Para = (PJPEG_U16_PARAM)pArgs;
303 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalHeight();
304 break;
305 case MApi_CMD_JPEG_GetNonAlignmentWidth:
306 pU16Para = (PJPEG_U16_PARAM)pArgs;
307 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentWidth();
308 break;
309 case MApi_CMD_JPEG_GetNonAlignmentHeight:
310 pU16Para = (PJPEG_U16_PARAM)pArgs;
311 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentHeight();
312 break;
313 case MApi_CMD_JPEG_GetAlignedPitch:
314 pU16Para = (PJPEG_U16_PARAM)pArgs;
315 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch();
316 break;
317 case MApi_CMD_JPEG_GetAlignedPitch_H:
318 pU16Para = (PJPEG_U16_PARAM)pArgs;
319 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch_H();
320 break;
321 case MApi_CMD_JPEG_GetAlignedWidth:
322 pU16Para = (PJPEG_U16_PARAM)pArgs;
323 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedWidth();
324 break;
325 case MApi_CMD_JPEG_GetAlignedHeight:
326 pU16Para = (PJPEG_U16_PARAM)pArgs;
327 pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedHeight();
328 break;
329 case MApi_CMD_JPEG_GetScaleDownFactor:
330 pU8Para = (PJPEG_U8_PARAM)pArgs;
331 pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetScaleDownFactor();
332 break;
333 case MApi_CMD_JPEG_SetMaxDecodeResolution:
334 pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
335 psJPEG_InstPri->fpJPEGSetMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
336 break;
337 case MApi_CMD_JPEG_SetProMaxDecodeResolution:
338 pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
339 psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
340 break;
341 case MApi_CMD_JPEG_SetMRBufferValid:
342 pSetMBufferValid = (PJPEG_SETMBUFFERVALID_PARAM)pArgs;
343 psJPEG_InstPri->fpJPEGSetMRBufferValid(pSetMBufferValid->u8MRBuffType);
344 break;
345 case MApi_CMD_JPEG_UpdateReadInfo:
346 pUpdateReadInfo = (PJPEG_UPDATEREADINFO_PARAM)pArgs;
347 psJPEG_InstPri->fpJPEGUpdateReadInfo(pUpdateReadInfo->u32DataRead, pUpdateReadInfo->bEOFflag);
348 break;
349 case MApi_CMD_JPEG_ProcessEOF:
350 pProcessEOF = (PJPEG_PROCESSEOF_PARAM)pArgs;
351 psJPEG_InstPri->fpJPEGProcessEOF(pProcessEOF->u8MRBuffType);
352 break;
353 case MApi_CMD_JPEG_SetErrCode:
354 pSetErrorCode = (PJPEG_SETERRORCODE_PARAM)pArgs;
355 psJPEG_InstPri->fpJPEGSetErrCode(pSetErrorCode->ErrStatus);
356 break;
357 case MApi_CMD_JPEG_SetDbgLevel:
358 pU8Para = (PJPEG_U8_PARAM)pArgs;
359 psJPEG_InstPri->fpJPEGSetDbgLevel(pU8Para->u8Value);
360 break;
361 case MApi_CMD_JPEG_GetDbgLevel:
362 pU8Para = (PJPEG_U8_PARAM)pArgs;
363 pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetDbgLevel();
364 break;
365 case MApi_CMD_JPEG_GetInfo:
366 pGetInfo = (PJPEG_GETINFO_PARAM)pArgs;
367 psJPEG_InstPri->fpJPEGGetInfo(pGetInfo->pJPEG_Info);
368 break;
369 case MApi_CMD_JPEG_GetStatus:
370 pGetStatus = (PJPEG_GETSTATUS_PARAM)pArgs;
371 psJPEG_InstPri->fpJPEGGetStatus(pGetStatus->pJPEG_Status);
372 break;
373 case MApi_CMD_JPEG_GetLibVer:
374 pGetLibVer = (PJPEG_GETLIBVER_PARAM)pArgs;
375 pGetLibVer->retVal = psJPEG_InstPri->fpJPEGGetLibVer(pGetLibVer->ppVersion);
376 break;
377 case MApi_CMD_JPEG_HdlVidxChk:
378 pResult = (PJPEG_RESULT_PARAM)pArgs;
379 pResult->retVal = psJPEG_InstPri->fpJPEGHdlVidxChk();
380 break;
381 case MApi_CMD_JPEG_GetBuffLoadType:
382 pGetBuffLoadType = (PJPEG_GETBUFFLOADTYPE_PARAM)pArgs;
383 pGetBuffLoadType->retVal = psJPEG_InstPri->fpJPEGGetBuffLoadType(pGetBuffLoadType->pBuffLoadType);
384 break;
385 case MApi_CMD_JPEG_EnableISR:
386 pEnableISR = (PJPEG_ENABLEISR_PARAM)pArgs;
387 pEnableISR->retVal = psJPEG_InstPri->fpJPEGEnableISR(pEnableISR->IsrCb);
388 break;
389 case MApi_CMD_JPEG_DisableISR:
390 pResult = (PJPEG_RESULT_PARAM)pArgs;
391 pResult->retVal = psJPEG_InstPri->fpJPEGDisableISR();
392 break;
393 case MApi_CMD_JPEG_WaitDone:
394 pWaitDone = (PJPEG_WAITDONE_PARAM)pArgs;
395 pWaitDone->retVal = psJPEG_InstPri->fpJPEGWaitDone();
396 break;
397 case MApi_CMD_JPEG_GetEXIFDateTime:
398 pGetExifDateTime = (PJPEG_GETEXIFDATETIME_PARAM)pArgs;
399 pGetExifDateTime->retVal = psJPEG_InstPri->fpJPEGGetEXIFDateTime(pGetExifDateTime->DateTime);
400 break;
401 case MApi_CMD_JPEG_GetEXIFOrientation:
402 pGetExifOrientation = (PJPEG_GETEXIFORIENTATION_PARAM)pArgs;
403 pGetExifOrientation->retVal = psJPEG_InstPri->fpJPEGGetEXIFOrientation(pGetExifOrientation->eOrientation);
404 break;
405 case MApi_CMD_JPEG_GetEXIFManufacturer:
406 pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs;
407 pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFManufacturer(pGetExifString->pu8String, pGetExifString->u8size);
408 break;
409 case MApi_CMD_JPEG_GetEXIFModel:
410 pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs;
411 pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFModel(pGetExifString->pu8String, pGetExifString->u8size);
412 break;
413 case MApi_CMD_JPEG_GetEXIFFlash:
414 pGetExifU16 = (PJPEG_GETEXIFU16_PARAM)pArgs;
415 pGetExifU16->retVal = psJPEG_InstPri->fpJPEGGetEXIFFlash(pGetExifU16->pu16Value);
416 break;
417 case MApi_CMD_JPEG_GetEXIFISOSpeedRatings:
418 pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
419 pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings(pGetExifU32->pu32Value);
420 break;
421 case MApi_CMD_JPEG_GetEXIFShutterSpeedValue:
422 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
423 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue(pGetExifRational->pRational);
424 break;
425 case MApi_CMD_JPEG_GetEXIFApertureValue:
426 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
427 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFApertureValue(pGetExifRational->pRational);
428 break;
429 case MApi_CMD_JPEG_GetEXIFExposureBiasValue:
430 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
431 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue(pGetExifRational->pRational);
432 break;
433 case MApi_CMD_JPEG_GetEXIFFocalLength:
434 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
435 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFocalLength(pGetExifRational->pRational);
436 break;
437 case MApi_CMD_JPEG_GetEXIFImageWidth:
438 pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
439 pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageWidth(pGetExifU32->pu32Value);
440 break;
441 case MApi_CMD_JPEG_GetEXIFImageHeight:
442 pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
443 pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageHeight(pGetExifU32->pu32Value);
444 break;
445 case MApi_CMD_JPEG_GetEXIFExposureTime:
446 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
447 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureTime(pGetExifRational->pRational);
448 break;
449 case MApi_CMD_JPEG_GetEXIFFNumber:
450 pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
451 pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFNumber(pGetExifRational->pRational);
452 break;
453 case MApi_CMD_JPEG_GetFreeMemory:
454 pGetFreeMemory = (PJPEG_GETFREEMEMORY_PARAM)pArgs;
455 pGetFreeMemory->addr = psJPEG_InstPri->fpJPEGGetFreeMemory(pGetFreeMemory->size);
456 break;
457 case MApi_CMD_JPEG_GetDataOffset:
458 pU32Para = (PJPEG_U32_PARAM)pArgs;
459 pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetDataOffset();
460 break;
461 case MApi_CMD_JPEG_GetSOFOffset:
462 pU32Para = (PJPEG_U32_PARAM)pArgs;
463 pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetSOFOffset();
464 break;
465 case MApi_CMD_JPEG_SupportCMYK:
466 pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs;
467 pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportCMYK(pSupportCMYK->bEnable);
468 break;
469 case MApi_CMD_JPEG_SupportRGB:
470 pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs;
471 pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportRGB(pSupportCMYK->bEnable);
472 break;
473 case MApi_CMD_JPEG_SetMHEG5:
474 pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
475 psJPEG_InstPri->fpJPEGSetMHEG5(pBoolPara->bValue);
476 break;
477 case MApi_CMD_JPEG_IsMPOFormat:
478 pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
479 pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsMPOFormat();
480 break;
481 case MApi_CMD_JPEG_GetMPOIndex:
482 pGetMPOIndex = (PJPEG_GETMPOINDEX_PARAM)pArgs;
483 pGetMPOIndex->bretVal = psJPEG_InstPri->fpJPEGGetMPOIndex(pGetMPOIndex->ppMPOIndex);
484 break;
485 case MApi_CMD_JPEG_GetMPOAttr:
486 pGetMPOAttr = (PJPEG_GETMPOATTR_PARAM)pArgs;
487 pGetMPOAttr->bretVal = psJPEG_InstPri->fpJPEGGetMPOAttr(pGetMPOAttr->image_no, pGetMPOAttr->ppMPOAttr);
488 break;
489 case MApi_CMD_JPEG_DumpMPO:
490 psJPEG_InstPri->fpJPEGDumpMPO();
491 break;
492 case MApi_CMD_JPEG_SetMPOBuffer:
493 pSetMPOBuffer = (PJPEG_SETMPOBUFFER_PARAM)pArgs;
494 pSetMPOBuffer->bretVal = psJPEG_InstPri->fpJPEGSetMPOBuffer(pSetMPOBuffer->read_offset, pSetMPOBuffer->output_start);
495 break;
496 case MApi_CMD_JPEG_SetMPOMaxDecodeResolution:
497 pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
498 psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
499 break;
500 case MApi_CMD_JPEG_SetMPOProMaxDecodeResolution:
501 pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
502 psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
503 break;
504 case MApi_CMD_JPEG_GetControl:
505 pGetCtrl = (PJPEG_GET_CTRL_PARAM)pArgs;
506 psJPEG_InstPri->fpJPEGGetControl(pGetCtrl->eGetID, pGetCtrl->param, pGetCtrl->u32size);
507 break;
508
509
510 default:
511 ret = UTOPIA_STATUS_NOT_SUPPORTED;
512 printf("Error Command = %ld\n",u32Cmd);
513 break;
514
515 }
516 return ret;
517 }
JPEGClose(void * pInstance)518 MS_U32 JPEGClose(void* pInstance)
519 {
520 void* pResource = NULL;
521 JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL;
522 JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
523 UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
524 void* pModuleJPEG_EX_V2 = NULL;
525 UtopiaModuleGetPtr(MODULE_JPEG_EX,&pModuleJPEG_EX_V2);
526
527 // Get instance private
528 UtopiaInstanceGetPrivate(pInstance, (void**)&psJPEG_InstPri);
529
530 // Get resource private
531 if(UtopiaResourceObtain(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD, &pResource) != UTOPIA_STATUS_SUCCESS)
532 {
533 printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
534 return UTOPIA_STATUS_ERR_RESOURCE;
535 }
536
537 UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate));
538
539 // Set using decoder index to 0
540 pJPEG_ResourcePrivate->u8DecoderInUse[psJPEG_InstPri->Index_of_decoder] = 0;
541
542 UtopiaResourceRelease(pResource);
543
544 UtopiaInstanceDelete(pInstance);
545 UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
546
547 return UTOPIA_STATUS_SUCCESS;
548 }
549
JPEG_SetDbgLevel_V2(MS_U8 u8DbgLevel)550 void JPEG_SetDbgLevel_V2(MS_U8 u8DbgLevel)
551 {
552 _u8JPEG_ApiV2DbgLevel = u8DbgLevel;
553
554 }
555