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