xref: /utopia/UTPA2-700.0.x/modules/ojpd_vdec_v1/api/jpeg/apiJPEG_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
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