xref: /utopia/UTPA2-700.0.x/modules/njpd/api/njpeg_ex/apiJPEG_v2.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi 
2*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
3*53ee8cc1Swenshuai.xi #include <linux/string.h>
4*53ee8cc1Swenshuai.xi #else
5*53ee8cc1Swenshuai.xi #include <string.h>
6*53ee8cc1Swenshuai.xi #include <stdio.h>
7*53ee8cc1Swenshuai.xi #endif
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi #include "MsTypes.h"
10*53ee8cc1Swenshuai.xi 
11*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
12*53ee8cc1Swenshuai.xi #include "apiJPEG.h"
13*53ee8cc1Swenshuai.xi #include "MsOS.h"
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi #include "utopia.h"
16*53ee8cc1Swenshuai.xi #include "apiJPEG_priv.h"
17*53ee8cc1Swenshuai.xi #include "apiJPEG_v2.h"
18*53ee8cc1Swenshuai.xi 
19*53ee8cc1Swenshuai.xi #if (defined CONFIG_MLOG)
20*53ee8cc1Swenshuai.xi #include "ULog.h"
21*53ee8cc1Swenshuai.xi #endif
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi MS_U8 _u8JPEG_ApiV2DbgLevel = E_JPEG_DEBUG_NONE;
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi 
26*53ee8cc1Swenshuai.xi enum
27*53ee8cc1Swenshuai.xi {
28*53ee8cc1Swenshuai.xi     JPEG_POOL_ID_NJPD=0,
29*53ee8cc1Swenshuai.xi     JPEG_POOL_ID_NJPD_MAX
30*53ee8cc1Swenshuai.xi } eJpegPoolID;
31*53ee8cc1Swenshuai.xi 
32*53ee8cc1Swenshuai.xi #if (defined CONFIG_MLOG)
33*53ee8cc1Swenshuai.xi #define JPEG_DEBUG_API_MSG(format, args...)  do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) ULOGI("NJPD", format, ##args);}while(0)
34*53ee8cc1Swenshuai.xi #define JPEG_DEBUG_API_ERR(format, args...)  do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_ERR) ULOGE("NJPD", format, ##args);}while(0)
35*53ee8cc1Swenshuai.xi #define UTOPIA_20_DBG(format, args...)      do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) ULOGI("NJPD", format, ##args);}while(0)
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi #else
38*53ee8cc1Swenshuai.xi 
39*53ee8cc1Swenshuai.xi #ifndef ANDROID
40*53ee8cc1Swenshuai.xi #define UTOPIA_20_DBG(format, args...)        do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) printf(format, ##args);}while(0)
41*53ee8cc1Swenshuai.xi #else
42*53ee8cc1Swenshuai.xi #define LOG_TAG "API_JPEG"
43*53ee8cc1Swenshuai.xi #include <cutils/log.h>
44*53ee8cc1Swenshuai.xi #ifndef LOGD
45*53ee8cc1Swenshuai.xi #define printf(format, args...)          ALOGI(format, ##args);
46*53ee8cc1Swenshuai.xi #define UTOPIA_20_DBG(format, args...)  do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) ALOGE(format, ##args);}while(0)
47*53ee8cc1Swenshuai.xi #else
48*53ee8cc1Swenshuai.xi #define printf(format, args...)          LOGI(format, ##args);
49*53ee8cc1Swenshuai.xi #define UTOPIA_20_DBG(format, args...)  do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) LOGE(format, ##args);}while(0)
50*53ee8cc1Swenshuai.xi #endif
51*53ee8cc1Swenshuai.xi #endif
52*53ee8cc1Swenshuai.xi #define JPEG_DEBUG_API_ERR(format, args...)  UTOPIA_20_DBG(format, ##args)
53*53ee8cc1Swenshuai.xi 
54*53ee8cc1Swenshuai.xi #endif
55*53ee8cc1Swenshuai.xi #define JPEG_SUSPEND_TIMEOUT        1000
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi 
59*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
60*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
61*53ee8cc1Swenshuai.xi 
NJPEG_EXMdbIoctl(MS_U32 u32Cmd,const void * const pArgs)62*53ee8cc1Swenshuai.xi MS_U32 NJPEG_EXMdbIoctl(MS_U32 u32Cmd, const void* const pArgs)
63*53ee8cc1Swenshuai.xi {
64*53ee8cc1Swenshuai.xi     MDBCMD_CMDLINE_PARAMETER *paraCmdLine;
65*53ee8cc1Swenshuai.xi     MDBCMD_GETINFO_PARAMETER *paraGetInfo;
66*53ee8cc1Swenshuai.xi 
67*53ee8cc1Swenshuai.xi     switch(u32Cmd)
68*53ee8cc1Swenshuai.xi     {
69*53ee8cc1Swenshuai.xi         case MDBCMD_CMDLINE:
70*53ee8cc1Swenshuai.xi             paraCmdLine = (MDBCMD_CMDLINE_PARAMETER *)pArgs;
71*53ee8cc1Swenshuai.xi             break;
72*53ee8cc1Swenshuai.xi         case MDBCMD_GETINFO:
73*53ee8cc1Swenshuai.xi             paraGetInfo = (MDBCMD_GETINFO_PARAMETER *)pArgs;
74*53ee8cc1Swenshuai.xi             _MApi_JPEG_GetMdbInfo(paraGetInfo->u64ReqHdl);
75*53ee8cc1Swenshuai.xi             break;
76*53ee8cc1Swenshuai.xi         default:
77*53ee8cc1Swenshuai.xi             break;
78*53ee8cc1Swenshuai.xi     }
79*53ee8cc1Swenshuai.xi     return 0;
80*53ee8cc1Swenshuai.xi }
81*53ee8cc1Swenshuai.xi #endif
82*53ee8cc1Swenshuai.xi 
83*53ee8cc1Swenshuai.xi 
84*53ee8cc1Swenshuai.xi // this func will be call to init by utopia20 framework
NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType)85*53ee8cc1Swenshuai.xi void NJPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType)
86*53ee8cc1Swenshuai.xi {
87*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
88*53ee8cc1Swenshuai.xi     // 1. deal with module
89*53ee8cc1Swenshuai.xi     void* pModuleNJPEG_EX_V2 = NULL;
90*53ee8cc1Swenshuai.xi     UtopiaModuleCreate(MODULE_NJPEG_EX, 0, &pModuleNJPEG_EX_V2);
91*53ee8cc1Swenshuai.xi     UtopiaModuleRegister(pModuleNJPEG_EX_V2);
92*53ee8cc1Swenshuai.xi     // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func
93*53ee8cc1Swenshuai.xi     UtopiaModuleSetupFunctionPtr(pModuleNJPEG_EX_V2,
94*53ee8cc1Swenshuai.xi                                     (FUtopiaOpen)JPEGOpen,
95*53ee8cc1Swenshuai.xi                                     (FUtopiaClose)JPEGClose,
96*53ee8cc1Swenshuai.xi                                     (FUtopiaIOctl)JPEGIoctl);
97*53ee8cc1Swenshuai.xi 
98*53ee8cc1Swenshuai.xi #ifdef CONFIG_UTOPIA_PROC_DBG_SUPPORT
99*53ee8cc1Swenshuai.xi     UtopiaModuleRegisterMdbNode("njpd", (FUtopiaMdbIoctl)NJPEG_EXMdbIoctl);
100*53ee8cc1Swenshuai.xi #endif
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
103*53ee8cc1Swenshuai.xi     UtopiaModuleSetupSTRFunctionPtr(pModuleNJPEG_EX_V2,(FUtopiaSTR)JPEGStr);
104*53ee8cc1Swenshuai.xi     UtopiaModuleSetSTRPrivate(pModuleNJPEG_EX_V2, sizeof(JPEG_INSTANCE_PRIVATE));
105*53ee8cc1Swenshuai.xi #endif
106*53ee8cc1Swenshuai.xi     // 2. deal with resource
107*53ee8cc1Swenshuai.xi     void* psResource = NULL;
108*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceStart(pModuleNJPEG_EX_V2, JPEG_POOL_ID_NJPD);
109*53ee8cc1Swenshuai.xi     UtopiaResourceCreate("NJPD", sizeof(JPEG_RESOURCE_PRIVATE), &psResource);
110*53ee8cc1Swenshuai.xi     UtopiaResourceRegister(pModuleNJPEG_EX_V2, psResource, JPEG_POOL_ID_NJPD);
111*53ee8cc1Swenshuai.xi     UtopiaModuleAddResourceEnd(pModuleNJPEG_EX_V2, JPEG_POOL_ID_NJPD);
112*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi }
115*53ee8cc1Swenshuai.xi 
JPEGOpen(void ** ppInstance,MS_U32 u32ModuleVersion,void * pAttribute)116*53ee8cc1Swenshuai.xi MS_U32 JPEGOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute)
117*53ee8cc1Swenshuai.xi {
118*53ee8cc1Swenshuai.xi     void* pResource = NULL;
119*53ee8cc1Swenshuai.xi     JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL;
120*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
121*53ee8cc1Swenshuai.xi     MS_U8 i = 0;
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
124*53ee8cc1Swenshuai.xi     void* pModuleNJPEG_EX_V2 = NULL;
125*53ee8cc1Swenshuai.xi     UtopiaModuleGetPtr(MODULE_NJPEG_EX,&pModuleNJPEG_EX_V2);
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi     // Check there is available decoder to be use
128*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModuleNJPEG_EX_V2, JPEG_POOL_ID_NJPD, &pResource) != UTOPIA_STATUS_SUCCESS)
129*53ee8cc1Swenshuai.xi     {
130*53ee8cc1Swenshuai.xi         JPEG_DEBUG_API_ERR("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
131*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_ERR_RESOURCE;
132*53ee8cc1Swenshuai.xi     }
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate));
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi #if 0
137*53ee8cc1Swenshuai.xi     for(i=0;i<SUPPORT_NJPD_NUM_MAX;i++)
138*53ee8cc1Swenshuai.xi     {
139*53ee8cc1Swenshuai.xi         if(pJPEG_ResourcePrivate->u8DecoderInUse[i] == 0)
140*53ee8cc1Swenshuai.xi         {
141*53ee8cc1Swenshuai.xi             pJPEG_ResourcePrivate->u8DecoderInUse[i] = 1;
142*53ee8cc1Swenshuai.xi             break;
143*53ee8cc1Swenshuai.xi         }
144*53ee8cc1Swenshuai.xi     }
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi     if(i == SUPPORT_NJPD_NUM_MAX)
147*53ee8cc1Swenshuai.xi     {
148*53ee8cc1Swenshuai.xi         JPEG_DEBUG_API_ERR("No decoder can be used,%s,%d\n",__FUNCTION__,__LINE__);
149*53ee8cc1Swenshuai.xi         UtopiaResourceRelease(pResource);
150*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_ERR_RESOURCE;
151*53ee8cc1Swenshuai.xi     }
152*53ee8cc1Swenshuai.xi #endif
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pResource);
155*53ee8cc1Swenshuai.xi 
156*53ee8cc1Swenshuai.xi     //Create instance
157*53ee8cc1Swenshuai.xi     UtopiaInstanceCreate(sizeof(JPEG_INSTANCE_PRIVATE), ppInstance);
158*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(*ppInstance, (void**)&psJPEG_InstPri);
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi     //Recode decoder index
161*53ee8cc1Swenshuai.xi     psJPEG_InstPri->Index_of_decoder = i;
162*53ee8cc1Swenshuai.xi 
163*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGEnableOJPD = (IOCTL_JPEG_ENABLE_OJPD)_MApi_JPEG_EnableOJPD;
164*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGInit_UsingOJPD = (IOCTL_JPEG_INIT_USING_OJPD)_MApi_JPEG_Init_UsingOJPD;
165*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGget_APP0_info = (IOCTL_JPEG_GET_APP0_INFO)_msAPI_JPEG_get_APP0_info;
166*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGInit = (IOCTL_JPEG_INIT)_MApi_JPEG_Init;
167*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGDecodeHdr = (IOCTL_JPEG_DECODE_HDR)_MApi_JPEG_DecodeHdr;
168*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGDecode = (IOCTL_JPEG_DECODE)_MApi_JPEG_Decode;
169*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGExit = (IOCTL_JPEG_EXIT)_MApi_JPEG_Exit;
170*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetErrorCode = (IOCTL_JPEG_GET_ERROR_CODE)_MApi_JPEG_GetErrorCode;
171*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetJPDEventFlag = (IOCTL_JPEG_GET_JPEG_EVENT_FLAG)_MApi_JPEG_GetJPDEventFlag;
172*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetJPDEventFlag = (IOCTL_JPEG_SET_JPEG_EVENT_FLAG)_MApi_JPEG_SetJPDEventFlag;
173*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGRst = (IOCTL_JPEG_RST)_MApi_JPEG_Rst;
174*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGPowerOn = (IOCTL_JPEG_POWER_ON)_MApi_JPEG_PowerOn;
175*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGPowerOff = (IOCTL_JPEG_POWER_OFF)_MApi_JPEG_PowerOff;
176*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetCurVidx = (IOCTL_JPEG_GET_CUR_VIDX)_MApi_JPEG_GetCurVidx;
177*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGIsProgressive = (IOCTL_JPEG_IS_PROGRESSIVE)_MApi_JPEG_IsProgressive;
178*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGThumbnailFound = (IOCTL_JPEG_THUMBNAIL_FOUND)_MApi_JPEG_ThumbnailFound;
179*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetWidth = (IOCTL_JPEG_GET_WIDTH)_MApi_JPEG_GetWidth;
180*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetHeight = (IOCTL_JPEG_GET_HEIGHT)_MApi_JPEG_GetHeight;
181*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetOriginalWidth = (IOCTL_JPEG_GET_ORIGINAL_WIDTH)_MApi_JPEG_GetOriginalWidth;
182*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetOriginalHeight = (IOCTL_JPEG_GET_ORIGINAL_HEIGHT)_MApi_JPEG_GetOriginalHeight;
183*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetNonAlignmentWidth = (IOCTL_JPEG_GET_NONALIGNMENT_WIDTH)_MApi_JPEG_GetNonAlignmentWidth;
184*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetNonAlignmentHeight = (IOCTL_JPEG_GET_NONALIGNMENT_HEIGHT)_MApi_JPEG_GetNonAlignmentHeight;
185*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetAlignedPitch = (IOCTL_JPEG_GET_ALIGNED_PITCH)_MApi_JPEG_GetAlignedPitch;
186*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetAlignedPitch_H = (IOCTL_JPEG_GET_ALIGNED_PITCH_H)_MApi_JPEG_GetAlignedPitch_H;
187*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetAlignedWidth = (IOCTL_JPEG_GET_ALIGNED_WIDTH)_MApi_JPEG_GetAlignedWidth;
188*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetAlignedHeight = (IOCTL_JPEG_GET_ALIGNED_HEIGHT)_MApi_JPEG_GetAlignedHeight;
189*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetScaleDownFactor = (IOCTL_JPEG_GET_SCALE_DOWN_FACTOR)_MApi_JPEG_GetScaleDownFactor;
190*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMaxDecodeResolution = (IOCTL_JPEG_SET_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMaxDecodeResolution;
191*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution = (IOCTL_JPEG_SET_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetProMaxDecodeResolution;
192*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMRBufferValid = (IOCTL_JPEG_SET_MRBUFFER_VALID)_MApi_JPEG_SetMRBufferValid;
193*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGUpdateReadInfo = (IOCTL_JPEG_UPDATE_READ_INFO)_MApi_JPEG_UpdateReadInfo;
194*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGProcessEOF = (IOCTL_JPEG_PROCESS_EOF)_MApi_JPEG_ProcessEOF;
195*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetErrCode = (IOCTL_JPEG_SET_ERROR_CODE)_MApi_JPEG_SetErrCode;
196*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetDbgLevel = (IOCTL_JPEG_SET_DBG_LEVEL)_MApi_JPEG_SetDbgLevel;
197*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetDbgLevel = (IOCTL_JPEG_GET_DBG_LEVEL)_MApi_JPEG_GetDbgLevel;
198*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetInfo = (IOCTL_JPEG_GET_INFO)_MApi_JPEG_GetInfo;
199*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetStatus = (IOCTL_JPEG_GET_STATUS)_MApi_JPEG_GetStatus;
200*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetLibVer = (IOCTL_JPEG_GET_LIB_VER)_MApi_JPEG_GetLibVer;
201*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGHdlVidxChk = (IOCTL_JPEG_HDL_VIDX_CHK)_MApi_JPEG_HdlVidxChk;
202*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetBuffLoadType = (IOCTL_JPEG_GET_BUFF_LOAD_TYPE)_MApi_JPEG_GetBuffLoadType;
203*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGEnableISR = (IOCTL_JPEG_ENABLE_ISR)_MApi_JPEG_EnableISR;
204*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGDisableISR = (IOCTL_JPEG_DISABLE_ISR)_MApi_JPEG_DisableISR;
205*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGWaitDone = (IOCTL_JPEG_WAIT_DONE)_MApi_JPEG_WaitDone;
206*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFDateTime = (IOCTL_JPEG_GET_EXIF_DATETIME)_MApi_JPEG_GetEXIFDateTime;
207*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFOrientation = (IOCTL_JPEG_GET_EXIF_ORIENTATION)_MApi_JPEG_GetEXIFOrientation;
208*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFManufacturer = (IOCTL_JPEG_GET_EXIF_MANUFACTURER)_MApi_JPEG_GetEXIFManufacturer;
209*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFModel = (IOCTL_JPEG_GET_EXIF_MODEL)_MApi_JPEG_GetEXIFModel;
210*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFFlash = (IOCTL_JPEG_GET_EXIF_FLASH)_MApi_JPEG_GetEXIFFlash;
211*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings = (IOCTL_JPEG_GET_EXIF_ISO_SPEED_RATINGS)_MApi_JPEG_GetEXIFISOSpeedRatings;
212*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue = (IOCTL_JPEG_GET_EXIF_SHUTTER_SPEED_VALUE)_MApi_JPEG_GetEXIFShutterSpeedValue;
213*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFApertureValue = (IOCTL_JPEG_GET_EXIF_APERTURE_VALUE)_MApi_JPEG_GetEXIFApertureValue;
214*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue = (IOCTL_JPEG_GET_EXIF_EXPOSURE_BIAS_VALUE)_MApi_JPEG_GetEXIFExposureBiasValue;
215*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFFocalLength = (IOCTL_JPEG_GET_EXIF_FOCAL_LENGTH)_MApi_JPEG_GetEXIFFocalLength;
216*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFImageWidth = (IOCTL_JPEG_GET_EXIF_IMAGE_WIDTH)_MApi_JPEG_GetEXIFImageWidth;
217*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFImageHeight = (IOCTL_JPEG_GET_EXIF_IMAGE_HEIGHT)_MApi_JPEG_GetEXIFImageHeight;
218*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFExposureTime = (IOCTL_JPEG_GET_EXIF_EXPOSURE_TIME)_MApi_JPEG_GetEXIFExposureTime;
219*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEXIFFNumber = (IOCTL_JPEG_GET_EXIF_FNUMBER)_MApi_JPEG_GetEXIFFNumber;
220*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetFreeMemory = (IOCTL_JPEG_GET_FREE_MEMORY)_MApi_JPEG_GetFreeMemory;
221*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetDataOffset = (IOCTL_JPEG_GET_DATA_OFFSET)_MApi_JPEG_GetDataOffset;
222*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetSOFOffset = (IOCTL_JPEG_GET_SOF_OFFSET)_MApi_JPEG_GetSOFOffset;
223*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetNJPDInstance = (IOCTL_JPEG_SET_NJPD_INSTANCE)_MApi_JPEG_SetNJPDInstance;
224*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSupportCMYK = (IOCTL_JPEG_SUPPORT_CMYK)_MApi_JPEG_SupportCMYK;
225*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSupportRGB = (IOCTL_JPEG_SUPPORT_RGB)_MApi_JPEG_SupportRGB;
226*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMHEG5 = (IOCTL_JPEG_SET_MHEG5)_MApi_JPEG_SetMHEG5;
227*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGIsMPOFormat = (IOCTL_JPEG_IS_MPO_FORMAT)_MApi_JPEG_IsMPOFormat;
228*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetMPOIndex = (IOCTL_JPEG_GET_MPO_INDEX)_MApi_JPEG_GetMPOIndex;
229*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetMPOAttr = (IOCTL_JPEG_GET_MPO_ATTR)_MApi_JPEG_GetMPOAttr;
230*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGDumpMPO = (IOCTL_JPEG_DUMP_MPO)_MApi_JPEG_DumpMPO;
231*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMPOBuffer = (IOCTL_JPEG_SET_MPO_BUFFER)_MApi_JPEG_SetMPOBuffer;
232*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOMaxDecodeResolution;
233*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOProMaxDecodeResolution;
234*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetVerificationMode = (IOCTL_JPEG_SET_VERIFICATION_MODE)_MApi_JPEG_SetVerificationMode;
235*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetVerificationMode = (IOCTL_JPEG_GET_VERIFICATION_MODE)_MApi_JPEG_GetVerificationMode;
236*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGDebug = (IOCTL_JPEG_DEBUG)_MApi_NJPD_Debug;
237*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetControl = (IOCTL_JPEG_GET_CONTROL)_MApi_JPEG_GetControl;
238*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGGetEvent = (IOCTL_JPEG_CTRL_CB_EVENT)_MApi_JPEG_GetEvent;
239*53ee8cc1Swenshuai.xi     psJPEG_InstPri->fpJPEGSetEvent = (IOCTL_JPEG_CTRL_CB_EVENT)_MApi_JPEG_SetEvent;
240*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
241*53ee8cc1Swenshuai.xi 
242*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
243*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_STR_InstPri = NULL;
244*53ee8cc1Swenshuai.xi     UtopiaModuleGetSTRPrivate(pModuleNJPEG_EX_V2, (void**)&psJPEG_STR_InstPri);
245*53ee8cc1Swenshuai.xi     psJPEG_STR_InstPri->bJPEGInUse = TRUE;
246*53ee8cc1Swenshuai.xi     psJPEG_STR_InstPri->bJPEGSuspend = FALSE;
247*53ee8cc1Swenshuai.xi #endif
248*53ee8cc1Swenshuai.xi 
249*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
250*53ee8cc1Swenshuai.xi }
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi 
JPEGIoctl(void * pInstance,MS_U32 u32Cmd,void * pArgs)253*53ee8cc1Swenshuai.xi MS_U32 JPEGIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs)
254*53ee8cc1Swenshuai.xi {
255*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
256*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void*)&psJPEG_InstPri);
257*53ee8cc1Swenshuai.xi     E_JPEG_V2_IOCTL_CMD IOcmd = (E_JPEG_V2_IOCTL_CMD)u32Cmd;
258*53ee8cc1Swenshuai.xi     MS_U32 ret = UTOPIA_STATUS_SUCCESS;
259*53ee8cc1Swenshuai.xi 
260*53ee8cc1Swenshuai.xi     PJPEG_BOOL_PARAM pBoolPara = NULL;
261*53ee8cc1Swenshuai.xi     PJPEG_INIT_PARAM pInit = NULL;
262*53ee8cc1Swenshuai.xi     PJPEG_GETAPP0INFO_PARAM pGetApp0Info = NULL;
263*53ee8cc1Swenshuai.xi     PJPEG_RESULT_PARAM pResult = NULL;
264*53ee8cc1Swenshuai.xi     PJPEG_GETERRORCODE_PARAM pGetErrorCode = NULL;
265*53ee8cc1Swenshuai.xi     PJPEG_JPEGEVENT_PARAM pJpegEvent = NULL;
266*53ee8cc1Swenshuai.xi     PJPEG_U16_PARAM pU16Para = NULL;
267*53ee8cc1Swenshuai.xi     PJPEG_U8_PARAM pU8Para = NULL;
268*53ee8cc1Swenshuai.xi     PJPEG_RESOLUTION_PARAM pResolution = NULL;
269*53ee8cc1Swenshuai.xi     PJPEG_SETMBUFFERVALID_PARAM pSetMBufferValid = NULL;
270*53ee8cc1Swenshuai.xi     PJPEG_UPDATEREADINFO_PARAM pUpdateReadInfo = NULL;
271*53ee8cc1Swenshuai.xi     PJPEG_PROCESSEOF_PARAM pProcessEOF = NULL;
272*53ee8cc1Swenshuai.xi     PJPEG_SETERRORCODE_PARAM pSetErrorCode = NULL;
273*53ee8cc1Swenshuai.xi     PJPEG_GETINFO_PARAM pGetInfo = NULL;
274*53ee8cc1Swenshuai.xi     PJPEG_GETSTATUS_PARAM pGetStatus = NULL;
275*53ee8cc1Swenshuai.xi     PJPEG_GETLIBVER_PARAM pGetLibVer = NULL;
276*53ee8cc1Swenshuai.xi     PJPEG_GETBUFFLOADTYPE_PARAM pGetBuffLoadType = NULL;
277*53ee8cc1Swenshuai.xi     PJPEG_ENABLEISR_PARAM pEnableISR = NULL;
278*53ee8cc1Swenshuai.xi     PJPEG_WAITDONE_PARAM pWaitDone = NULL;
279*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFDATETIME_PARAM pGetExifDateTime = NULL;
280*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFORIENTATION_PARAM pGetExifOrientation = NULL;
281*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFSTRING_PARAM pGetExifString = NULL;
282*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFU16_PARAM pGetExifU16 = NULL;
283*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFU32_PARAM pGetExifU32 = NULL;
284*53ee8cc1Swenshuai.xi     PJPEG_GETEXIFRATIONAL_PARAM pGetExifRational = NULL;
285*53ee8cc1Swenshuai.xi     PJPEG_GETFREEMEMORY_PARAM pGetFreeMemory = NULL;
286*53ee8cc1Swenshuai.xi     PJPEG_U32_PARAM pU32Para = NULL;
287*53ee8cc1Swenshuai.xi     PJPEG_SUPPORTCMYK_PARAM pSupportCMYK = NULL;
288*53ee8cc1Swenshuai.xi     PJPEG_GETMPOINDEX_PARAM pGetMPOIndex = NULL;
289*53ee8cc1Swenshuai.xi     PJPEG_GETMPOATTR_PARAM pGetMPOAttr = NULL;
290*53ee8cc1Swenshuai.xi     PJPEG_SETMPOBUFFER_PARAM pSetMPOBuffer = NULL;
291*53ee8cc1Swenshuai.xi     PJPEG_VERIFICATION_PARAM pVerification = NULL;
292*53ee8cc1Swenshuai.xi     PJPEG_GET_CTRL_PARAM pGetCtrl = NULL;
293*53ee8cc1Swenshuai.xi     PJPEG_CB_EVENT_PARAM pGetCbParam = NULL;
294*53ee8cc1Swenshuai.xi 
295*53ee8cc1Swenshuai.xi     switch(IOcmd)
296*53ee8cc1Swenshuai.xi     {
297*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_EnableOJPD:
298*53ee8cc1Swenshuai.xi             pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
299*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGEnableOJPD(pBoolPara->bValue);
300*53ee8cc1Swenshuai.xi             break;
301*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Init_UsingOJPD:
302*53ee8cc1Swenshuai.xi             pInit = (PJPEG_INIT_PARAM)pArgs;
303*53ee8cc1Swenshuai.xi             pInit->retVal = psJPEG_InstPri->fpJPEGInit_UsingOJPD(pInit->pInitParam);
304*53ee8cc1Swenshuai.xi             break;
305*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_get_APP0_info:
306*53ee8cc1Swenshuai.xi             pGetApp0Info = (PJPEG_GETAPP0INFO_PARAM)pArgs;
307*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGget_APP0_info(pGetApp0Info->unit, pGetApp0Info->x, pGetApp0Info->y);
308*53ee8cc1Swenshuai.xi             break;
309*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Init:
310*53ee8cc1Swenshuai.xi             pInit = (PJPEG_INIT_PARAM)pArgs;
311*53ee8cc1Swenshuai.xi             pInit->retVal = psJPEG_InstPri->fpJPEGInit(pInit->pInitParam);
312*53ee8cc1Swenshuai.xi             break;
313*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_DecodeHdr:
314*53ee8cc1Swenshuai.xi             pResult = (PJPEG_RESULT_PARAM)pArgs;
315*53ee8cc1Swenshuai.xi             pResult->retVal = psJPEG_InstPri->fpJPEGDecodeHdr();
316*53ee8cc1Swenshuai.xi             break;
317*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Decode:
318*53ee8cc1Swenshuai.xi             pResult = (PJPEG_RESULT_PARAM)pArgs;
319*53ee8cc1Swenshuai.xi             pResult->retVal = psJPEG_InstPri->fpJPEGDecode();
320*53ee8cc1Swenshuai.xi             break;
321*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Exit:
322*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGExit();
323*53ee8cc1Swenshuai.xi             break;
324*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetErrorCode:
325*53ee8cc1Swenshuai.xi             pGetErrorCode= (PJPEG_GETERRORCODE_PARAM)pArgs;
326*53ee8cc1Swenshuai.xi             pGetErrorCode->ErrCode = psJPEG_InstPri->fpJPEGGetErrorCode();
327*53ee8cc1Swenshuai.xi             break;
328*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetJPDEventFlag:
329*53ee8cc1Swenshuai.xi             pJpegEvent= (PJPEG_JPEGEVENT_PARAM)pArgs;
330*53ee8cc1Swenshuai.xi             pJpegEvent->eEvtVal = psJPEG_InstPri->fpJPEGGetJPDEventFlag();
331*53ee8cc1Swenshuai.xi             break;
332*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetJPDEventFlag:
333*53ee8cc1Swenshuai.xi             pJpegEvent = (PJPEG_JPEGEVENT_PARAM)pArgs;
334*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetJPDEventFlag(pJpegEvent->eEvtVal);
335*53ee8cc1Swenshuai.xi             break;
336*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Rst:
337*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGRst();
338*53ee8cc1Swenshuai.xi             break;
339*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_PowerOn:
340*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGPowerOn();
341*53ee8cc1Swenshuai.xi             break;
342*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_PowerOff:
343*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGPowerOff();
344*53ee8cc1Swenshuai.xi             break;
345*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetCurVidx:
346*53ee8cc1Swenshuai.xi             pU16Para= (PJPEG_U16_PARAM)pArgs;
347*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetCurVidx();
348*53ee8cc1Swenshuai.xi             break;
349*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_IsProgressive:
350*53ee8cc1Swenshuai.xi             pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
351*53ee8cc1Swenshuai.xi             pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsProgressive();
352*53ee8cc1Swenshuai.xi             break;
353*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_ThumbnailFound:
354*53ee8cc1Swenshuai.xi             pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
355*53ee8cc1Swenshuai.xi             pBoolPara->bValue = psJPEG_InstPri->fpJPEGThumbnailFound();
356*53ee8cc1Swenshuai.xi             break;
357*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetWidth:
358*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
359*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetWidth();
360*53ee8cc1Swenshuai.xi             break;
361*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetHeight:
362*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
363*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetHeight();
364*53ee8cc1Swenshuai.xi             break;
365*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetOriginalWidth:
366*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
367*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalWidth();
368*53ee8cc1Swenshuai.xi             break;
369*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetOriginalHeight:
370*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
371*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalHeight();
372*53ee8cc1Swenshuai.xi             break;
373*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetNonAlignmentWidth:
374*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
375*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentWidth();
376*53ee8cc1Swenshuai.xi             break;
377*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetNonAlignmentHeight:
378*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
379*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentHeight();
380*53ee8cc1Swenshuai.xi             break;
381*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetAlignedPitch:
382*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
383*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch();
384*53ee8cc1Swenshuai.xi             break;
385*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetAlignedPitch_H:
386*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
387*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch_H();
388*53ee8cc1Swenshuai.xi             break;
389*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetAlignedWidth:
390*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
391*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedWidth();
392*53ee8cc1Swenshuai.xi             break;
393*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetAlignedHeight:
394*53ee8cc1Swenshuai.xi             pU16Para = (PJPEG_U16_PARAM)pArgs;
395*53ee8cc1Swenshuai.xi             pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedHeight();
396*53ee8cc1Swenshuai.xi             break;
397*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetScaleDownFactor:
398*53ee8cc1Swenshuai.xi             pU8Para = (PJPEG_U8_PARAM)pArgs;
399*53ee8cc1Swenshuai.xi             pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetScaleDownFactor();
400*53ee8cc1Swenshuai.xi             break;
401*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMaxDecodeResolution:
402*53ee8cc1Swenshuai.xi             pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
403*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
404*53ee8cc1Swenshuai.xi             break;
405*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetProMaxDecodeResolution:
406*53ee8cc1Swenshuai.xi             pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
407*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
408*53ee8cc1Swenshuai.xi             break;
409*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMRBufferValid:
410*53ee8cc1Swenshuai.xi             pSetMBufferValid = (PJPEG_SETMBUFFERVALID_PARAM)pArgs;
411*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetMRBufferValid(pSetMBufferValid->u8MRBuffType);
412*53ee8cc1Swenshuai.xi             break;
413*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_UpdateReadInfo:
414*53ee8cc1Swenshuai.xi             pUpdateReadInfo = (PJPEG_UPDATEREADINFO_PARAM)pArgs;
415*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGUpdateReadInfo(pUpdateReadInfo->u32DataRead, pUpdateReadInfo->bEOFflag);
416*53ee8cc1Swenshuai.xi             break;
417*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_ProcessEOF:
418*53ee8cc1Swenshuai.xi             pProcessEOF = (PJPEG_PROCESSEOF_PARAM)pArgs;
419*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGProcessEOF(pProcessEOF->u8MRBuffType);
420*53ee8cc1Swenshuai.xi             break;
421*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetErrCode:
422*53ee8cc1Swenshuai.xi             pSetErrorCode = (PJPEG_SETERRORCODE_PARAM)pArgs;
423*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetErrCode(pSetErrorCode->ErrStatus);
424*53ee8cc1Swenshuai.xi             break;
425*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetDbgLevel:
426*53ee8cc1Swenshuai.xi             pU8Para = (PJPEG_U8_PARAM)pArgs;
427*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetDbgLevel(pU8Para->u8Value);
428*53ee8cc1Swenshuai.xi             break;
429*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetDbgLevel:
430*53ee8cc1Swenshuai.xi             pU8Para = (PJPEG_U8_PARAM)pArgs;
431*53ee8cc1Swenshuai.xi             pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetDbgLevel();
432*53ee8cc1Swenshuai.xi             break;
433*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetInfo:
434*53ee8cc1Swenshuai.xi             pGetInfo = (PJPEG_GETINFO_PARAM)pArgs;
435*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGGetInfo(pGetInfo->pJPEG_Info);
436*53ee8cc1Swenshuai.xi             break;
437*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetStatus:
438*53ee8cc1Swenshuai.xi             pGetStatus = (PJPEG_GETSTATUS_PARAM)pArgs;
439*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGGetStatus(pGetStatus->pJPEG_Status);
440*53ee8cc1Swenshuai.xi             break;
441*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetLibVer:
442*53ee8cc1Swenshuai.xi             pGetLibVer = (PJPEG_GETLIBVER_PARAM)pArgs;
443*53ee8cc1Swenshuai.xi             pGetLibVer->retVal = psJPEG_InstPri->fpJPEGGetLibVer(pGetLibVer->ppVersion);
444*53ee8cc1Swenshuai.xi             break;
445*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_HdlVidxChk:
446*53ee8cc1Swenshuai.xi             pResult = (PJPEG_RESULT_PARAM)pArgs;
447*53ee8cc1Swenshuai.xi             pResult->retVal = psJPEG_InstPri->fpJPEGHdlVidxChk();
448*53ee8cc1Swenshuai.xi             break;
449*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetBuffLoadType:
450*53ee8cc1Swenshuai.xi             pGetBuffLoadType = (PJPEG_GETBUFFLOADTYPE_PARAM)pArgs;
451*53ee8cc1Swenshuai.xi             pGetBuffLoadType->retVal = psJPEG_InstPri->fpJPEGGetBuffLoadType(pGetBuffLoadType->pBuffLoadType);
452*53ee8cc1Swenshuai.xi             break;
453*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_EnableISR:
454*53ee8cc1Swenshuai.xi             pEnableISR = (PJPEG_ENABLEISR_PARAM)pArgs;
455*53ee8cc1Swenshuai.xi             pEnableISR->retVal = psJPEG_InstPri->fpJPEGEnableISR(pEnableISR->IsrCb);
456*53ee8cc1Swenshuai.xi             break;
457*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_DisableISR:
458*53ee8cc1Swenshuai.xi             pResult = (PJPEG_RESULT_PARAM)pArgs;
459*53ee8cc1Swenshuai.xi             pResult->retVal = psJPEG_InstPri->fpJPEGDisableISR();
460*53ee8cc1Swenshuai.xi             break;
461*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_WaitDone:
462*53ee8cc1Swenshuai.xi             pWaitDone = (PJPEG_WAITDONE_PARAM)pArgs;
463*53ee8cc1Swenshuai.xi             pWaitDone->retVal = psJPEG_InstPri->fpJPEGWaitDone();
464*53ee8cc1Swenshuai.xi             break;
465*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFDateTime:
466*53ee8cc1Swenshuai.xi             pGetExifDateTime = (PJPEG_GETEXIFDATETIME_PARAM)pArgs;
467*53ee8cc1Swenshuai.xi             pGetExifDateTime->retVal = psJPEG_InstPri->fpJPEGGetEXIFDateTime(pGetExifDateTime->DateTime);
468*53ee8cc1Swenshuai.xi             break;
469*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFOrientation:
470*53ee8cc1Swenshuai.xi             pGetExifOrientation = (PJPEG_GETEXIFORIENTATION_PARAM)pArgs;
471*53ee8cc1Swenshuai.xi             pGetExifOrientation->retVal = psJPEG_InstPri->fpJPEGGetEXIFOrientation(pGetExifOrientation->eOrientation);
472*53ee8cc1Swenshuai.xi             break;
473*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFManufacturer:
474*53ee8cc1Swenshuai.xi             pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs;
475*53ee8cc1Swenshuai.xi             pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFManufacturer(pGetExifString->pu8String, pGetExifString->u8size);
476*53ee8cc1Swenshuai.xi             break;
477*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFModel:
478*53ee8cc1Swenshuai.xi             pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs;
479*53ee8cc1Swenshuai.xi             pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFModel(pGetExifString->pu8String, pGetExifString->u8size);
480*53ee8cc1Swenshuai.xi             break;
481*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFFlash:
482*53ee8cc1Swenshuai.xi             pGetExifU16 = (PJPEG_GETEXIFU16_PARAM)pArgs;
483*53ee8cc1Swenshuai.xi             pGetExifU16->retVal = psJPEG_InstPri->fpJPEGGetEXIFFlash(pGetExifU16->pu16Value);
484*53ee8cc1Swenshuai.xi             break;
485*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFISOSpeedRatings:
486*53ee8cc1Swenshuai.xi             pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
487*53ee8cc1Swenshuai.xi             pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings(pGetExifU32->pu32Value);
488*53ee8cc1Swenshuai.xi             break;
489*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFShutterSpeedValue:
490*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
491*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue(pGetExifRational->pRational);
492*53ee8cc1Swenshuai.xi             break;
493*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFApertureValue:
494*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
495*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFApertureValue(pGetExifRational->pRational);
496*53ee8cc1Swenshuai.xi             break;
497*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFExposureBiasValue:
498*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
499*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue(pGetExifRational->pRational);
500*53ee8cc1Swenshuai.xi             break;
501*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFFocalLength:
502*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
503*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFocalLength(pGetExifRational->pRational);
504*53ee8cc1Swenshuai.xi             break;
505*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFImageWidth:
506*53ee8cc1Swenshuai.xi             pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
507*53ee8cc1Swenshuai.xi             pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageWidth(pGetExifU32->pu32Value);
508*53ee8cc1Swenshuai.xi             break;
509*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFImageHeight:
510*53ee8cc1Swenshuai.xi             pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs;
511*53ee8cc1Swenshuai.xi             pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageHeight(pGetExifU32->pu32Value);
512*53ee8cc1Swenshuai.xi             break;
513*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFExposureTime:
514*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
515*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureTime(pGetExifRational->pRational);
516*53ee8cc1Swenshuai.xi             break;
517*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetEXIFFNumber:
518*53ee8cc1Swenshuai.xi             pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs;
519*53ee8cc1Swenshuai.xi             pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFNumber(pGetExifRational->pRational);
520*53ee8cc1Swenshuai.xi             break;
521*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetFreeMemory:
522*53ee8cc1Swenshuai.xi             pGetFreeMemory = (PJPEG_GETFREEMEMORY_PARAM)pArgs;
523*53ee8cc1Swenshuai.xi             pGetFreeMemory->addr = psJPEG_InstPri->fpJPEGGetFreeMemory(pGetFreeMemory->size);
524*53ee8cc1Swenshuai.xi             break;
525*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetDataOffset:
526*53ee8cc1Swenshuai.xi             pU32Para = (PJPEG_U32_PARAM)pArgs;
527*53ee8cc1Swenshuai.xi             pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetDataOffset();
528*53ee8cc1Swenshuai.xi             break;
529*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetSOFOffset:
530*53ee8cc1Swenshuai.xi             pU32Para = (PJPEG_U32_PARAM)pArgs;
531*53ee8cc1Swenshuai.xi             pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetSOFOffset();
532*53ee8cc1Swenshuai.xi             break;
533*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetNJPDInstance:
534*53ee8cc1Swenshuai.xi             pU8Para = (PJPEG_U8_PARAM)pArgs;
535*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetNJPDInstance(pU8Para->u8Value);
536*53ee8cc1Swenshuai.xi             break;
537*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SupportCMYK:
538*53ee8cc1Swenshuai.xi             pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs;
539*53ee8cc1Swenshuai.xi             pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportCMYK(pSupportCMYK->bEnable);
540*53ee8cc1Swenshuai.xi             break;
541*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SupportRGB:
542*53ee8cc1Swenshuai.xi             pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs;
543*53ee8cc1Swenshuai.xi             pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportRGB(pSupportCMYK->bEnable);
544*53ee8cc1Swenshuai.xi             break;
545*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMHEG5:
546*53ee8cc1Swenshuai.xi             pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
547*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetMHEG5(pBoolPara->bValue);
548*53ee8cc1Swenshuai.xi             break;
549*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_IsMPOFormat:
550*53ee8cc1Swenshuai.xi             pBoolPara = (PJPEG_BOOL_PARAM)pArgs;
551*53ee8cc1Swenshuai.xi             pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsMPOFormat();
552*53ee8cc1Swenshuai.xi             break;
553*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetMPOIndex:
554*53ee8cc1Swenshuai.xi             pGetMPOIndex = (PJPEG_GETMPOINDEX_PARAM)pArgs;
555*53ee8cc1Swenshuai.xi             //pGetMPOIndex->bretVal = psJPEG_InstPri->fpJPEGGetMPOIndex(pGetMPOIndex->ppMPOIndex);
556*53ee8cc1Swenshuai.xi             pGetMPOIndex->bretVal = psJPEG_InstPri->fpJPEGGetMPOIndex(pGetMPOIndex->pMPOIndex);
557*53ee8cc1Swenshuai.xi             break;
558*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetMPOAttr:
559*53ee8cc1Swenshuai.xi             pGetMPOAttr = (PJPEG_GETMPOATTR_PARAM)pArgs;
560*53ee8cc1Swenshuai.xi              // pGetMPOAttr->bretVal = psJPEG_InstPri->fpJPEGGetMPOAttr(pGetMPOAttr->image_no, pGetMPOAttr->ppMPOAttr);
561*53ee8cc1Swenshuai.xi             pGetMPOAttr->bretVal = psJPEG_InstPri->fpJPEGGetMPOAttr(pGetMPOAttr->image_no, pGetMPOAttr->pMPOAttr);
562*53ee8cc1Swenshuai.xi             break;
563*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_DumpMPO:
564*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGDumpMPO();
565*53ee8cc1Swenshuai.xi             break;
566*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMPOBuffer:
567*53ee8cc1Swenshuai.xi             pSetMPOBuffer = (PJPEG_SETMPOBUFFER_PARAM)pArgs;
568*53ee8cc1Swenshuai.xi             pSetMPOBuffer->bretVal = psJPEG_InstPri->fpJPEGSetMPOBuffer(pSetMPOBuffer->read_offset, pSetMPOBuffer->output_start);
569*53ee8cc1Swenshuai.xi             break;
570*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMPOMaxDecodeResolution:
571*53ee8cc1Swenshuai.xi             pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
572*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
573*53ee8cc1Swenshuai.xi             break;
574*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetMPOProMaxDecodeResolution:
575*53ee8cc1Swenshuai.xi             pResolution = (PJPEG_RESOLUTION_PARAM)pArgs;
576*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height);
577*53ee8cc1Swenshuai.xi             break;
578*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetVerificationMode:
579*53ee8cc1Swenshuai.xi             pVerification = (PJPEG_VERIFICATION_PARAM)pArgs;
580*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetVerificationMode(pVerification->VerificationMode);
581*53ee8cc1Swenshuai.xi             break;
582*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetVerificationMode:
583*53ee8cc1Swenshuai.xi             pVerification = (PJPEG_VERIFICATION_PARAM)pArgs;
584*53ee8cc1Swenshuai.xi             pVerification->VerificationMode = psJPEG_InstPri->fpJPEGGetVerificationMode();
585*53ee8cc1Swenshuai.xi             break;
586*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_Debug:
587*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGDebug();
588*53ee8cc1Swenshuai.xi             break;
589*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetControl:
590*53ee8cc1Swenshuai.xi             pGetCtrl = (PJPEG_GET_CTRL_PARAM)pArgs;
591*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGGetControl(pGetCtrl->eGetID, pGetCtrl->param, pGetCtrl->u32size);
592*53ee8cc1Swenshuai.xi             break;
593*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_GetCbEvent:
594*53ee8cc1Swenshuai.xi             pGetCbParam = (PJPEG_CB_EVENT_PARAM)pArgs;
595*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGGetEvent(pGetCbParam);
596*53ee8cc1Swenshuai.xi             break;
597*53ee8cc1Swenshuai.xi         case MApi_CMD_JPEG_SetCbEvent:
598*53ee8cc1Swenshuai.xi             pGetCbParam = (PJPEG_CB_EVENT_PARAM)pArgs;
599*53ee8cc1Swenshuai.xi             psJPEG_InstPri->fpJPEGSetEvent(pGetCbParam);
600*53ee8cc1Swenshuai.xi             break;
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi         default:
603*53ee8cc1Swenshuai.xi             ret = UTOPIA_STATUS_NOT_SUPPORTED;
604*53ee8cc1Swenshuai.xi             JPEG_DEBUG_API_ERR("Error Command = %td\n",(ptrdiff_t)u32Cmd);
605*53ee8cc1Swenshuai.xi             break;
606*53ee8cc1Swenshuai.xi 
607*53ee8cc1Swenshuai.xi     }
608*53ee8cc1Swenshuai.xi     return ret;
609*53ee8cc1Swenshuai.xi }
JPEGClose(void * pInstance)610*53ee8cc1Swenshuai.xi MS_U32 JPEGClose(void* pInstance)
611*53ee8cc1Swenshuai.xi {
612*53ee8cc1Swenshuai.xi     void* pResource = NULL;
613*53ee8cc1Swenshuai.xi     JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL;
614*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL;
615*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): start\n", __FUNCTION__);
616*53ee8cc1Swenshuai.xi     void* pModuleNJPEG_EX_V2 = NULL;
617*53ee8cc1Swenshuai.xi     UtopiaModuleGetPtr(MODULE_NJPEG_EX,&pModuleNJPEG_EX_V2);
618*53ee8cc1Swenshuai.xi 
619*53ee8cc1Swenshuai.xi     // Get instance private
620*53ee8cc1Swenshuai.xi     UtopiaInstanceGetPrivate(pInstance, (void**)&psJPEG_InstPri);
621*53ee8cc1Swenshuai.xi 
622*53ee8cc1Swenshuai.xi     // Get resource private
623*53ee8cc1Swenshuai.xi     if(UtopiaResourceObtain(pModuleNJPEG_EX_V2, JPEG_POOL_ID_NJPD, &pResource) != UTOPIA_STATUS_SUCCESS)
624*53ee8cc1Swenshuai.xi     {
625*53ee8cc1Swenshuai.xi         JPEG_DEBUG_API_ERR("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__);
626*53ee8cc1Swenshuai.xi         return UTOPIA_STATUS_ERR_RESOURCE;
627*53ee8cc1Swenshuai.xi     }
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi     UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate));
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi     // Set using decoder index to 0
632*53ee8cc1Swenshuai.xi     pJPEG_ResourcePrivate->u8DecoderInUse[psJPEG_InstPri->Index_of_decoder] = 0;
633*53ee8cc1Swenshuai.xi 
634*53ee8cc1Swenshuai.xi     UtopiaResourceRelease(pResource);
635*53ee8cc1Swenshuai.xi 
636*53ee8cc1Swenshuai.xi     UtopiaInstanceDelete(pInstance);
637*53ee8cc1Swenshuai.xi     UTOPIA_20_DBG("%s(): end\n", __FUNCTION__);
638*53ee8cc1Swenshuai.xi 
639*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
640*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_STR_InstPri = NULL;
641*53ee8cc1Swenshuai.xi     UtopiaModuleGetSTRPrivate(pModuleNJPEG_EX_V2, (void**)&psJPEG_STR_InstPri);
642*53ee8cc1Swenshuai.xi     psJPEG_STR_InstPri->bJPEGInUse = FALSE;
643*53ee8cc1Swenshuai.xi     psJPEG_STR_InstPri->bJPEGSuspend = FALSE;
644*53ee8cc1Swenshuai.xi #endif
645*53ee8cc1Swenshuai.xi 
646*53ee8cc1Swenshuai.xi     return UTOPIA_STATUS_SUCCESS;
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi 
JPEGStr(MS_U32 u32PowerState,void * pModule)649*53ee8cc1Swenshuai.xi MS_U32 JPEGStr(MS_U32 u32PowerState, void* pModule)
650*53ee8cc1Swenshuai.xi {
651*53ee8cc1Swenshuai.xi     MS_U32 u32Return = UTOPIA_STATUS_FAIL;
652*53ee8cc1Swenshuai.xi 
653*53ee8cc1Swenshuai.xi #if defined(MSOS_TYPE_LINUX_KERNEL)
654*53ee8cc1Swenshuai.xi     JPEG_INSTANCE_PRIVATE* psJPEG_STR_InstPri = NULL;
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi     UtopiaModuleGetSTRPrivate(pModule, (void**)&psJPEG_STR_InstPri);
657*53ee8cc1Swenshuai.xi 
658*53ee8cc1Swenshuai.xi     //UtopiaModuleGetSTRPrivate(pModule, (void**));
659*53ee8cc1Swenshuai.xi 
660*53ee8cc1Swenshuai.xi     if (u32PowerState == E_POWER_SUSPEND)
661*53ee8cc1Swenshuai.xi     {
662*53ee8cc1Swenshuai.xi         MS_U32 u32Time=MsOS_GetSystemTime();
663*53ee8cc1Swenshuai.xi         while(1)
664*53ee8cc1Swenshuai.xi         {
665*53ee8cc1Swenshuai.xi             if(psJPEG_STR_InstPri->bJPEGInUse==FALSE)
666*53ee8cc1Swenshuai.xi             {
667*53ee8cc1Swenshuai.xi                 psJPEG_STR_InstPri->bJPEGSuspend = TRUE;
668*53ee8cc1Swenshuai.xi                 return UTOPIA_STATUS_SUCCESS;
669*53ee8cc1Swenshuai.xi             }
670*53ee8cc1Swenshuai.xi             if((MsOS_GetSystemTime() - u32Time) >= JPEG_SUSPEND_TIMEOUT)
671*53ee8cc1Swenshuai.xi             {
672*53ee8cc1Swenshuai.xi                 JPEG_DEBUG_API_ERR("Suspend request Timeout!!!, force MApi_JPEG_Exit()\n");
673*53ee8cc1Swenshuai.xi 
674*53ee8cc1Swenshuai.xi                 MApi_JPEG_Exit();
675*53ee8cc1Swenshuai.xi                 psJPEG_STR_InstPri->bJPEGSuspend = TRUE;
676*53ee8cc1Swenshuai.xi                 return UTOPIA_STATUS_SUCCESS;
677*53ee8cc1Swenshuai.xi             }
678*53ee8cc1Swenshuai.xi             else if(u32Time > MsOS_GetSystemTime())  // For the overflow case
679*53ee8cc1Swenshuai.xi             {
680*53ee8cc1Swenshuai.xi                 u32Time = 0;
681*53ee8cc1Swenshuai.xi             }
682*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
683*53ee8cc1Swenshuai.xi         }
684*53ee8cc1Swenshuai.xi         /* Please Implement Module Suspend Flow Here. */
685*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
686*53ee8cc1Swenshuai.xi     }
687*53ee8cc1Swenshuai.xi     else if (u32PowerState == E_POWER_RESUME)
688*53ee8cc1Swenshuai.xi     {
689*53ee8cc1Swenshuai.xi         if(psJPEG_STR_InstPri->bJPEGSuspend == FALSE)
690*53ee8cc1Swenshuai.xi         {
691*53ee8cc1Swenshuai.xi             JPEG_DEBUG_API_ERR("Resume fail!!! Not in suspend state!!!\n");
692*53ee8cc1Swenshuai.xi             u32Return = UTOPIA_STATUS_FAIL;
693*53ee8cc1Swenshuai.xi         }
694*53ee8cc1Swenshuai.xi         psJPEG_STR_InstPri->bJPEGSuspend = FALSE;
695*53ee8cc1Swenshuai.xi         /* Please Implement Module Resume Flow Here. */
696*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
697*53ee8cc1Swenshuai.xi     }
698*53ee8cc1Swenshuai.xi     else
699*53ee8cc1Swenshuai.xi     {
700*53ee8cc1Swenshuai.xi         u32Return = UTOPIA_STATUS_FAIL;
701*53ee8cc1Swenshuai.xi     }
702*53ee8cc1Swenshuai.xi #endif
703*53ee8cc1Swenshuai.xi     return u32Return;// for success
704*53ee8cc1Swenshuai.xi }
705*53ee8cc1Swenshuai.xi 
706*53ee8cc1Swenshuai.xi 
JPEG_SetDbgLevel_V2(MS_U8 u8DbgLevel)707*53ee8cc1Swenshuai.xi void JPEG_SetDbgLevel_V2(MS_U8 u8DbgLevel)
708*53ee8cc1Swenshuai.xi {
709*53ee8cc1Swenshuai.xi     _u8JPEG_ApiV2DbgLevel = u8DbgLevel;
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi }
712