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