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