#include "string.h" #include "MsTypes.h" #include #include "utopia_dapi.h" #include "apiJPEG.h" #include "MsOS.h" #include "utopia.h" #include "apiJPEG_priv.h" #include "apiJPEG_v2.h" MS_U8 _u8JPEG_ApiV2DbgLevel = E_JPEG_DEBUG_NONE; enum { JPEG_POOL_ID_JPD=0, JPEG_POOL_ID_JPD_MAX } eJpegPoolID; #ifndef ANDROID #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) printf(format, ##args);}while(0) #else #define LOG_TAG "API_JPEG" #include #ifndef LOGD #define printf(format, args...) ALOGI(format, ##args); #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) ALOGE(format, ##args);}while(0) #else #define printf(format, args...) LOGI(format, ##args); #define UTOPIA_20_DBG(format, args...) do{if(_u8JPEG_ApiV2DbgLevel & E_JPEG_DEBUG_API) LOGE(format, ##args);}while(0) #endif #endif // this func will be call to init by utopia20 framework void JPEG_EXRegisterToUtopia(FUtopiaOpen ModuleType) { UTOPIA_20_DBG("%s(): start\n", __FUNCTION__); // 1. deal with module void* pModuleJPEG_EX_V2 = NULL; UtopiaModuleCreate(MODULE_JPEG_EX, 0, &pModuleJPEG_EX_V2); UtopiaModuleRegister(pModuleJPEG_EX_V2); // register func for module, after register here, then ap call UtopiaOpen/UtopiaIoctl/UtopiaClose can call to these registered standard func UtopiaModuleSetupFunctionPtr(pModuleJPEG_EX_V2, (FUtopiaOpen)JPEGOpen, (FUtopiaClose)JPEGClose, (FUtopiaIOctl)JPEGIoctl); // 2. deal with resource void* psResource = NULL; UtopiaModuleAddResourceStart(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD); UtopiaResourceCreate("JPD", sizeof(JPEG_RESOURCE_PRIVATE), &psResource); UtopiaResourceRegister(pModuleJPEG_EX_V2, psResource, JPEG_POOL_ID_JPD); UtopiaModuleAddResourceEnd(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD); UTOPIA_20_DBG("%s(): end\n", __FUNCTION__); } MS_U32 JPEGOpen(void** ppInstance, MS_U32 u32ModuleVersion, void* pAttribute) { void* pResource = NULL; JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL; JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL; MS_U8 i = 0; UTOPIA_20_DBG("%s(): start\n", __FUNCTION__); void* pModuleJPEG_EX_V2 = NULL; UtopiaModuleGetPtr(MODULE_JPEG_EX,&pModuleJPEG_EX_V2); // Check there is available decoder to be use if(UtopiaResourceObtain(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD, &pResource) != UTOPIA_STATUS_SUCCESS) { printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__); return UTOPIA_STATUS_ERR_RESOURCE; } UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate)); #if 0 for(i=0;iu8DecoderInUse[i] == 0) { pJPEG_ResourcePrivate->u8DecoderInUse[i] = 1; break; } } if(i == SUPPORT_JPD_NUM_MAX) { printf("No decoder can be used,%s,%d\n",__FUNCTION__,__LINE__); UtopiaResourceRelease(pResource); return UTOPIA_STATUS_ERR_RESOURCE; } #endif UtopiaResourceRelease(pResource); //Create instance UtopiaInstanceCreate(sizeof(JPEG_INSTANCE_PRIVATE), ppInstance); UtopiaInstanceGetPrivate(*ppInstance, (void**)&psJPEG_InstPri); //Recode decoder index psJPEG_InstPri->Index_of_decoder = i; psJPEG_InstPri->fpJPEGEnableOJPD = (IOCTL_JPEG_ENABLE_OJPD)_MApi_JPEG_EnableOJPD; psJPEG_InstPri->fpJPEGInit_UsingOJPD = (IOCTL_JPEG_INIT_USING_OJPD)_MApi_JPEG_Init_UsingOJPD; psJPEG_InstPri->fpJPEGget_APP0_info = (IOCTL_JPEG_GET_APP0_INFO)_msAPI_JPEG_get_APP0_info; psJPEG_InstPri->fpJPEGInit = (IOCTL_JPEG_INIT)_MApi_JPEG_Init; psJPEG_InstPri->fpJPEGDecodeHdr = (IOCTL_JPEG_DECODE_HDR)_MApi_JPEG_DecodeHdr; psJPEG_InstPri->fpJPEGDecode = (IOCTL_JPEG_DECODE)_MApi_JPEG_Decode; psJPEG_InstPri->fpJPEGExit = (IOCTL_JPEG_EXIT)_MApi_JPEG_Exit; psJPEG_InstPri->fpJPEGGetErrorCode = (IOCTL_JPEG_GET_ERROR_CODE)_MApi_JPEG_GetErrorCode; psJPEG_InstPri->fpJPEGGetJPDEventFlag = (IOCTL_JPEG_GET_JPEG_EVENT_FLAG)_MApi_JPEG_GetJPDEventFlag; psJPEG_InstPri->fpJPEGSetJPDEventFlag = (IOCTL_JPEG_SET_JPEG_EVENT_FLAG)_MApi_JPEG_SetJPDEventFlag; psJPEG_InstPri->fpJPEGRst = (IOCTL_JPEG_RST)_MApi_JPEG_Rst; psJPEG_InstPri->fpJPEGPowerOn = (IOCTL_JPEG_POWER_ON)_MApi_JPEG_PowerOn; psJPEG_InstPri->fpJPEGPowerOff = (IOCTL_JPEG_POWER_OFF)_MApi_JPEG_PowerOff; psJPEG_InstPri->fpJPEGGetCurVidx = (IOCTL_JPEG_GET_CUR_VIDX)_MApi_JPEG_GetCurVidx; psJPEG_InstPri->fpJPEGIsProgressive = (IOCTL_JPEG_IS_PROGRESSIVE)_MApi_JPEG_IsProgressive; psJPEG_InstPri->fpJPEGThumbnailFound = (IOCTL_JPEG_THUMBNAIL_FOUND)_MApi_JPEG_ThumbnailFound; psJPEG_InstPri->fpJPEGGetWidth = (IOCTL_JPEG_GET_WIDTH)_MApi_JPEG_GetWidth; psJPEG_InstPri->fpJPEGGetHeight = (IOCTL_JPEG_GET_HEIGHT)_MApi_JPEG_GetHeight; psJPEG_InstPri->fpJPEGGetOriginalWidth = (IOCTL_JPEG_GET_ORIGINAL_WIDTH)_MApi_JPEG_GetOriginalWidth; psJPEG_InstPri->fpJPEGGetOriginalHeight = (IOCTL_JPEG_GET_ORIGINAL_HEIGHT)_MApi_JPEG_GetOriginalHeight; psJPEG_InstPri->fpJPEGGetNonAlignmentWidth = (IOCTL_JPEG_GET_NONALIGNMENT_WIDTH)_MApi_JPEG_GetNonAlignmentWidth; psJPEG_InstPri->fpJPEGGetNonAlignmentHeight = (IOCTL_JPEG_GET_NONALIGNMENT_HEIGHT)_MApi_JPEG_GetNonAlignmentHeight; psJPEG_InstPri->fpJPEGGetAlignedPitch = (IOCTL_JPEG_GET_ALIGNED_PITCH)_MApi_JPEG_GetAlignedPitch; psJPEG_InstPri->fpJPEGGetAlignedPitch_H = (IOCTL_JPEG_GET_ALIGNED_PITCH_H)_MApi_JPEG_GetAlignedPitch_H; psJPEG_InstPri->fpJPEGGetAlignedWidth = (IOCTL_JPEG_GET_ALIGNED_WIDTH)_MApi_JPEG_GetAlignedWidth; psJPEG_InstPri->fpJPEGGetAlignedHeight = (IOCTL_JPEG_GET_ALIGNED_HEIGHT)_MApi_JPEG_GetAlignedHeight; psJPEG_InstPri->fpJPEGGetScaleDownFactor = (IOCTL_JPEG_GET_SCALE_DOWN_FACTOR)_MApi_JPEG_GetScaleDownFactor; psJPEG_InstPri->fpJPEGSetMaxDecodeResolution = (IOCTL_JPEG_SET_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMaxDecodeResolution; psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution = (IOCTL_JPEG_SET_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetProMaxDecodeResolution; psJPEG_InstPri->fpJPEGSetMRBufferValid = (IOCTL_JPEG_SET_MRBUFFER_VALID)_MApi_JPEG_SetMRBufferValid; psJPEG_InstPri->fpJPEGUpdateReadInfo = (IOCTL_JPEG_UPDATE_READ_INFO)_MApi_JPEG_UpdateReadInfo; psJPEG_InstPri->fpJPEGProcessEOF = (IOCTL_JPEG_PROCESS_EOF)_MApi_JPEG_ProcessEOF; psJPEG_InstPri->fpJPEGSetErrCode = (IOCTL_JPEG_SET_ERROR_CODE)_MApi_JPEG_SetErrCode; psJPEG_InstPri->fpJPEGSetDbgLevel = (IOCTL_JPEG_SET_DBG_LEVEL)_MApi_JPEG_SetDbgLevel; psJPEG_InstPri->fpJPEGGetDbgLevel = (IOCTL_JPEG_GET_DBG_LEVEL)_MApi_JPEG_GetDbgLevel; psJPEG_InstPri->fpJPEGGetInfo = (IOCTL_JPEG_GET_INFO)_MApi_JPEG_GetInfo; psJPEG_InstPri->fpJPEGGetStatus = (IOCTL_JPEG_GET_STATUS)_MApi_JPEG_GetStatus; psJPEG_InstPri->fpJPEGGetLibVer = (IOCTL_JPEG_GET_LIB_VER)_MApi_JPEG_GetLibVer; psJPEG_InstPri->fpJPEGHdlVidxChk = (IOCTL_JPEG_HDL_VIDX_CHK)_MApi_JPEG_HdlVidxChk; psJPEG_InstPri->fpJPEGGetBuffLoadType = (IOCTL_JPEG_GET_BUFF_LOAD_TYPE)_MApi_JPEG_GetBuffLoadType; psJPEG_InstPri->fpJPEGEnableISR = (IOCTL_JPEG_ENABLE_ISR)_MApi_JPEG_EnableISR; psJPEG_InstPri->fpJPEGDisableISR = (IOCTL_JPEG_DISABLE_ISR)_MApi_JPEG_DisableISR; psJPEG_InstPri->fpJPEGWaitDone = (IOCTL_JPEG_WAIT_DONE)_MApi_JPEG_WaitDone; psJPEG_InstPri->fpJPEGGetEXIFDateTime = (IOCTL_JPEG_GET_EXIF_DATETIME)_MApi_JPEG_GetEXIFDateTime; psJPEG_InstPri->fpJPEGGetEXIFOrientation = (IOCTL_JPEG_GET_EXIF_ORIENTATION)_MApi_JPEG_GetEXIFOrientation; psJPEG_InstPri->fpJPEGGetEXIFManufacturer = (IOCTL_JPEG_GET_EXIF_MANUFACTURER)_MApi_JPEG_GetEXIFManufacturer; psJPEG_InstPri->fpJPEGGetEXIFModel = (IOCTL_JPEG_GET_EXIF_MODEL)_MApi_JPEG_GetEXIFModel; psJPEG_InstPri->fpJPEGGetEXIFFlash = (IOCTL_JPEG_GET_EXIF_FLASH)_MApi_JPEG_GetEXIFFlash; psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings = (IOCTL_JPEG_GET_EXIF_ISO_SPEED_RATINGS)_MApi_JPEG_GetEXIFISOSpeedRatings; psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue = (IOCTL_JPEG_GET_EXIF_SHUTTER_SPEED_VALUE)_MApi_JPEG_GetEXIFShutterSpeedValue; psJPEG_InstPri->fpJPEGGetEXIFApertureValue = (IOCTL_JPEG_GET_EXIF_APERTURE_VALUE)_MApi_JPEG_GetEXIFApertureValue; psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue = (IOCTL_JPEG_GET_EXIF_EXPOSURE_BIAS_VALUE)_MApi_JPEG_GetEXIFExposureBiasValue; psJPEG_InstPri->fpJPEGGetEXIFFocalLength = (IOCTL_JPEG_GET_EXIF_FOCAL_LENGTH)_MApi_JPEG_GetEXIFFocalLength; psJPEG_InstPri->fpJPEGGetEXIFImageWidth = (IOCTL_JPEG_GET_EXIF_IMAGE_WIDTH)_MApi_JPEG_GetEXIFImageWidth; psJPEG_InstPri->fpJPEGGetEXIFImageHeight = (IOCTL_JPEG_GET_EXIF_IMAGE_HEIGHT)_MApi_JPEG_GetEXIFImageHeight; psJPEG_InstPri->fpJPEGGetEXIFExposureTime = (IOCTL_JPEG_GET_EXIF_EXPOSURE_TIME)_MApi_JPEG_GetEXIFExposureTime; psJPEG_InstPri->fpJPEGGetEXIFFNumber = (IOCTL_JPEG_GET_EXIF_FNUMBER)_MApi_JPEG_GetEXIFFNumber; psJPEG_InstPri->fpJPEGGetFreeMemory = (IOCTL_JPEG_GET_FREE_MEMORY)_MApi_JPEG_GetFreeMemory; psJPEG_InstPri->fpJPEGGetDataOffset = (IOCTL_JPEG_GET_DATA_OFFSET)_MApi_JPEG_GetDataOffset; psJPEG_InstPri->fpJPEGGetSOFOffset = (IOCTL_JPEG_GET_SOF_OFFSET)_MApi_JPEG_GetSOFOffset; psJPEG_InstPri->fpJPEGSupportCMYK = (IOCTL_JPEG_SUPPORT_CMYK)_MApi_JPEG_SupportCMYK; psJPEG_InstPri->fpJPEGSupportRGB = (IOCTL_JPEG_SUPPORT_RGB)_MApi_JPEG_SupportRGB; psJPEG_InstPri->fpJPEGSetMHEG5 = (IOCTL_JPEG_SET_MHEG5)_MApi_JPEG_SetMHEG5; psJPEG_InstPri->fpJPEGIsMPOFormat = (IOCTL_JPEG_IS_MPO_FORMAT)_MApi_JPEG_IsMPOFormat; psJPEG_InstPri->fpJPEGGetMPOIndex = (IOCTL_JPEG_GET_MPO_INDEX)_MApi_JPEG_GetMPOIndex; psJPEG_InstPri->fpJPEGGetMPOAttr = (IOCTL_JPEG_GET_MPO_ATTR)_MApi_JPEG_GetMPOAttr; psJPEG_InstPri->fpJPEGDumpMPO = (IOCTL_JPEG_DUMP_MPO)_MApi_JPEG_DumpMPO; psJPEG_InstPri->fpJPEGSetMPOBuffer = (IOCTL_JPEG_SET_MPO_BUFFER)_MApi_JPEG_SetMPOBuffer; psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOMaxDecodeResolution; psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution = (IOCTL_JPEG_SET_MPO_PRO_MAX_DECODE_RESOLUTION)_MApi_JPEG_SetMPOProMaxDecodeResolution; psJPEG_InstPri->fpJPEGGetControl = (IOCTL_JPEG_GET_CONTROL)_MApi_JPEG_GetControl; UTOPIA_20_DBG("%s(): end\n", __FUNCTION__); return UTOPIA_STATUS_SUCCESS; } MS_U32 JPEGIoctl(void* pInstance, MS_U32 u32Cmd, void* pArgs) { JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL; UtopiaInstanceGetPrivate(pInstance, (void*)&psJPEG_InstPri); E_JPEG_V2_IOCTL_CMD IOcmd = (E_JPEG_V2_IOCTL_CMD)u32Cmd; MS_U32 ret = UTOPIA_STATUS_SUCCESS; PJPEG_BOOL_PARAM pBoolPara = NULL; PJPEG_INIT_PARAM pInit = NULL; PJPEG_GETAPP0INFO_PARAM pGetApp0Info = NULL; PJPEG_RESULT_PARAM pResult = NULL; PJPEG_GETERRORCODE_PARAM pGetErrorCode = NULL; PJPEG_JPEGEVENT_PARAM pJpegEvent = NULL; PJPEG_U16_PARAM pU16Para = NULL; PJPEG_U8_PARAM pU8Para = NULL; PJPEG_RESOLUTION_PARAM pResolution = NULL; PJPEG_SETMBUFFERVALID_PARAM pSetMBufferValid = NULL; PJPEG_UPDATEREADINFO_PARAM pUpdateReadInfo = NULL; PJPEG_PROCESSEOF_PARAM pProcessEOF = NULL; PJPEG_SETERRORCODE_PARAM pSetErrorCode = NULL; PJPEG_GETINFO_PARAM pGetInfo = NULL; PJPEG_GETSTATUS_PARAM pGetStatus = NULL; PJPEG_GETLIBVER_PARAM pGetLibVer = NULL; PJPEG_GETBUFFLOADTYPE_PARAM pGetBuffLoadType = NULL; PJPEG_ENABLEISR_PARAM pEnableISR = NULL; PJPEG_WAITDONE_PARAM pWaitDone = NULL; PJPEG_GETEXIFDATETIME_PARAM pGetExifDateTime = NULL; PJPEG_GETEXIFORIENTATION_PARAM pGetExifOrientation = NULL; PJPEG_GETEXIFSTRING_PARAM pGetExifString = NULL; PJPEG_GETEXIFU16_PARAM pGetExifU16 = NULL; PJPEG_GETEXIFU32_PARAM pGetExifU32 = NULL; PJPEG_GETEXIFRATIONAL_PARAM pGetExifRational = NULL; PJPEG_GETFREEMEMORY_PARAM pGetFreeMemory = NULL; PJPEG_U32_PARAM pU32Para = NULL; PJPEG_SUPPORTCMYK_PARAM pSupportCMYK = NULL; PJPEG_GETMPOINDEX_PARAM pGetMPOIndex = NULL; PJPEG_GETMPOATTR_PARAM pGetMPOAttr = NULL; PJPEG_SETMPOBUFFER_PARAM pSetMPOBuffer = NULL; PJPEG_GET_CTRL_PARAM pGetCtrl = NULL; switch(IOcmd) { case MApi_CMD_JPEG_EnableOJPD: pBoolPara = (PJPEG_BOOL_PARAM)pArgs; psJPEG_InstPri->fpJPEGEnableOJPD(pBoolPara->bValue); break; case MApi_CMD_JPEG_Init_UsingOJPD: pInit = (PJPEG_INIT_PARAM)pArgs; pInit->retVal = psJPEG_InstPri->fpJPEGInit_UsingOJPD(pInit->pInitParam); break; case MApi_CMD_JPEG_get_APP0_info: pGetApp0Info = (PJPEG_GETAPP0INFO_PARAM)pArgs; psJPEG_InstPri->fpJPEGget_APP0_info(pGetApp0Info->unit, pGetApp0Info->x, pGetApp0Info->y); break; case MApi_CMD_JPEG_Init: pInit = (PJPEG_INIT_PARAM)pArgs; pInit->retVal = psJPEG_InstPri->fpJPEGInit(pInit->pInitParam); break; case MApi_CMD_JPEG_DecodeHdr: pResult = (PJPEG_RESULT_PARAM)pArgs; pResult->retVal = psJPEG_InstPri->fpJPEGDecodeHdr(); break; case MApi_CMD_JPEG_Decode: pResult = (PJPEG_RESULT_PARAM)pArgs; pResult->retVal = psJPEG_InstPri->fpJPEGDecode(); break; case MApi_CMD_JPEG_Exit: psJPEG_InstPri->fpJPEGExit(); break; case MApi_CMD_JPEG_GetErrorCode: pGetErrorCode= (PJPEG_GETERRORCODE_PARAM)pArgs; pGetErrorCode->ErrCode = psJPEG_InstPri->fpJPEGGetErrorCode(); break; case MApi_CMD_JPEG_GetJPDEventFlag: pJpegEvent= (PJPEG_JPEGEVENT_PARAM)pArgs; pJpegEvent->eEvtVal = psJPEG_InstPri->fpJPEGGetJPDEventFlag(); break; case MApi_CMD_JPEG_SetJPDEventFlag: pJpegEvent = (PJPEG_JPEGEVENT_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetJPDEventFlag(pJpegEvent->eEvtVal); break; case MApi_CMD_JPEG_Rst: psJPEG_InstPri->fpJPEGRst(); break; case MApi_CMD_JPEG_PowerOn: psJPEG_InstPri->fpJPEGPowerOn(); break; case MApi_CMD_JPEG_PowerOff: psJPEG_InstPri->fpJPEGPowerOff(); break; case MApi_CMD_JPEG_GetCurVidx: pU16Para= (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetCurVidx(); break; case MApi_CMD_JPEG_IsProgressive: pBoolPara = (PJPEG_BOOL_PARAM)pArgs; pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsProgressive(); break; case MApi_CMD_JPEG_ThumbnailFound: pBoolPara = (PJPEG_BOOL_PARAM)pArgs; pBoolPara->bValue = psJPEG_InstPri->fpJPEGThumbnailFound(); break; case MApi_CMD_JPEG_GetWidth: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetWidth(); break; case MApi_CMD_JPEG_GetHeight: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetHeight(); break; case MApi_CMD_JPEG_GetOriginalWidth: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalWidth(); break; case MApi_CMD_JPEG_GetOriginalHeight: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetOriginalHeight(); break; case MApi_CMD_JPEG_GetNonAlignmentWidth: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentWidth(); break; case MApi_CMD_JPEG_GetNonAlignmentHeight: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetNonAlignmentHeight(); break; case MApi_CMD_JPEG_GetAlignedPitch: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch(); break; case MApi_CMD_JPEG_GetAlignedPitch_H: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedPitch_H(); break; case MApi_CMD_JPEG_GetAlignedWidth: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedWidth(); break; case MApi_CMD_JPEG_GetAlignedHeight: pU16Para = (PJPEG_U16_PARAM)pArgs; pU16Para->u16Value = psJPEG_InstPri->fpJPEGGetAlignedHeight(); break; case MApi_CMD_JPEG_GetScaleDownFactor: pU8Para = (PJPEG_U8_PARAM)pArgs; pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetScaleDownFactor(); break; case MApi_CMD_JPEG_SetMaxDecodeResolution: pResolution = (PJPEG_RESOLUTION_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height); break; case MApi_CMD_JPEG_SetProMaxDecodeResolution: pResolution = (PJPEG_RESOLUTION_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height); break; case MApi_CMD_JPEG_SetMRBufferValid: pSetMBufferValid = (PJPEG_SETMBUFFERVALID_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetMRBufferValid(pSetMBufferValid->u8MRBuffType); break; case MApi_CMD_JPEG_UpdateReadInfo: pUpdateReadInfo = (PJPEG_UPDATEREADINFO_PARAM)pArgs; psJPEG_InstPri->fpJPEGUpdateReadInfo(pUpdateReadInfo->u32DataRead, pUpdateReadInfo->bEOFflag); break; case MApi_CMD_JPEG_ProcessEOF: pProcessEOF = (PJPEG_PROCESSEOF_PARAM)pArgs; psJPEG_InstPri->fpJPEGProcessEOF(pProcessEOF->u8MRBuffType); break; case MApi_CMD_JPEG_SetErrCode: pSetErrorCode = (PJPEG_SETERRORCODE_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetErrCode(pSetErrorCode->ErrStatus); break; case MApi_CMD_JPEG_SetDbgLevel: pU8Para = (PJPEG_U8_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetDbgLevel(pU8Para->u8Value); break; case MApi_CMD_JPEG_GetDbgLevel: pU8Para = (PJPEG_U8_PARAM)pArgs; pU8Para->u8Value = psJPEG_InstPri->fpJPEGGetDbgLevel(); break; case MApi_CMD_JPEG_GetInfo: pGetInfo = (PJPEG_GETINFO_PARAM)pArgs; psJPEG_InstPri->fpJPEGGetInfo(pGetInfo->pJPEG_Info); break; case MApi_CMD_JPEG_GetStatus: pGetStatus = (PJPEG_GETSTATUS_PARAM)pArgs; psJPEG_InstPri->fpJPEGGetStatus(pGetStatus->pJPEG_Status); break; case MApi_CMD_JPEG_GetLibVer: pGetLibVer = (PJPEG_GETLIBVER_PARAM)pArgs; pGetLibVer->retVal = psJPEG_InstPri->fpJPEGGetLibVer(pGetLibVer->ppVersion); break; case MApi_CMD_JPEG_HdlVidxChk: pResult = (PJPEG_RESULT_PARAM)pArgs; pResult->retVal = psJPEG_InstPri->fpJPEGHdlVidxChk(); break; case MApi_CMD_JPEG_GetBuffLoadType: pGetBuffLoadType = (PJPEG_GETBUFFLOADTYPE_PARAM)pArgs; pGetBuffLoadType->retVal = psJPEG_InstPri->fpJPEGGetBuffLoadType(pGetBuffLoadType->pBuffLoadType); break; case MApi_CMD_JPEG_EnableISR: pEnableISR = (PJPEG_ENABLEISR_PARAM)pArgs; pEnableISR->retVal = psJPEG_InstPri->fpJPEGEnableISR(pEnableISR->IsrCb); break; case MApi_CMD_JPEG_DisableISR: pResult = (PJPEG_RESULT_PARAM)pArgs; pResult->retVal = psJPEG_InstPri->fpJPEGDisableISR(); break; case MApi_CMD_JPEG_WaitDone: pWaitDone = (PJPEG_WAITDONE_PARAM)pArgs; pWaitDone->retVal = psJPEG_InstPri->fpJPEGWaitDone(); break; case MApi_CMD_JPEG_GetEXIFDateTime: pGetExifDateTime = (PJPEG_GETEXIFDATETIME_PARAM)pArgs; pGetExifDateTime->retVal = psJPEG_InstPri->fpJPEGGetEXIFDateTime(pGetExifDateTime->DateTime); break; case MApi_CMD_JPEG_GetEXIFOrientation: pGetExifOrientation = (PJPEG_GETEXIFORIENTATION_PARAM)pArgs; pGetExifOrientation->retVal = psJPEG_InstPri->fpJPEGGetEXIFOrientation(pGetExifOrientation->eOrientation); break; case MApi_CMD_JPEG_GetEXIFManufacturer: pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs; pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFManufacturer(pGetExifString->pu8String, pGetExifString->u8size); break; case MApi_CMD_JPEG_GetEXIFModel: pGetExifString = (PJPEG_GETEXIFSTRING_PARAM)pArgs; pGetExifString->retVal = psJPEG_InstPri->fpJPEGGetEXIFModel(pGetExifString->pu8String, pGetExifString->u8size); break; case MApi_CMD_JPEG_GetEXIFFlash: pGetExifU16 = (PJPEG_GETEXIFU16_PARAM)pArgs; pGetExifU16->retVal = psJPEG_InstPri->fpJPEGGetEXIFFlash(pGetExifU16->pu16Value); break; case MApi_CMD_JPEG_GetEXIFISOSpeedRatings: pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs; pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFISOSpeedRatings(pGetExifU32->pu32Value); break; case MApi_CMD_JPEG_GetEXIFShutterSpeedValue: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFShutterSpeedValue(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetEXIFApertureValue: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFApertureValue(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetEXIFExposureBiasValue: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureBiasValue(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetEXIFFocalLength: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFocalLength(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetEXIFImageWidth: pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs; pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageWidth(pGetExifU32->pu32Value); break; case MApi_CMD_JPEG_GetEXIFImageHeight: pGetExifU32 = (PJPEG_GETEXIFU32_PARAM)pArgs; pGetExifU32->retVal = psJPEG_InstPri->fpJPEGGetEXIFImageHeight(pGetExifU32->pu32Value); break; case MApi_CMD_JPEG_GetEXIFExposureTime: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFExposureTime(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetEXIFFNumber: pGetExifRational = (PJPEG_GETEXIFRATIONAL_PARAM)pArgs; pGetExifRational->retVal = psJPEG_InstPri->fpJPEGGetEXIFFNumber(pGetExifRational->pRational); break; case MApi_CMD_JPEG_GetFreeMemory: pGetFreeMemory = (PJPEG_GETFREEMEMORY_PARAM)pArgs; pGetFreeMemory->addr = psJPEG_InstPri->fpJPEGGetFreeMemory(pGetFreeMemory->size); break; case MApi_CMD_JPEG_GetDataOffset: pU32Para = (PJPEG_U32_PARAM)pArgs; pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetDataOffset(); break; case MApi_CMD_JPEG_GetSOFOffset: pU32Para = (PJPEG_U32_PARAM)pArgs; pU32Para->u32Value = psJPEG_InstPri->fpJPEGGetSOFOffset(); break; case MApi_CMD_JPEG_SupportCMYK: pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs; pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportCMYK(pSupportCMYK->bEnable); break; case MApi_CMD_JPEG_SupportRGB: pSupportCMYK = (PJPEG_SUPPORTCMYK_PARAM)pArgs; pSupportCMYK->retVal = psJPEG_InstPri->fpJPEGSupportRGB(pSupportCMYK->bEnable); break; case MApi_CMD_JPEG_SetMHEG5: pBoolPara = (PJPEG_BOOL_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetMHEG5(pBoolPara->bValue); break; case MApi_CMD_JPEG_IsMPOFormat: pBoolPara = (PJPEG_BOOL_PARAM)pArgs; pBoolPara->bValue = psJPEG_InstPri->fpJPEGIsMPOFormat(); break; case MApi_CMD_JPEG_GetMPOIndex: pGetMPOIndex = (PJPEG_GETMPOINDEX_PARAM)pArgs; pGetMPOIndex->bretVal = psJPEG_InstPri->fpJPEGGetMPOIndex(pGetMPOIndex->ppMPOIndex); break; case MApi_CMD_JPEG_GetMPOAttr: pGetMPOAttr = (PJPEG_GETMPOATTR_PARAM)pArgs; pGetMPOAttr->bretVal = psJPEG_InstPri->fpJPEGGetMPOAttr(pGetMPOAttr->image_no, pGetMPOAttr->ppMPOAttr); break; case MApi_CMD_JPEG_DumpMPO: psJPEG_InstPri->fpJPEGDumpMPO(); break; case MApi_CMD_JPEG_SetMPOBuffer: pSetMPOBuffer = (PJPEG_SETMPOBUFFER_PARAM)pArgs; pSetMPOBuffer->bretVal = psJPEG_InstPri->fpJPEGSetMPOBuffer(pSetMPOBuffer->read_offset, pSetMPOBuffer->output_start); break; case MApi_CMD_JPEG_SetMPOMaxDecodeResolution: pResolution = (PJPEG_RESOLUTION_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetMPOMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height); break; case MApi_CMD_JPEG_SetMPOProMaxDecodeResolution: pResolution = (PJPEG_RESOLUTION_PARAM)pArgs; psJPEG_InstPri->fpJPEGSetMPOProMaxDecodeResolution(pResolution->u16Width, pResolution->u16Height); break; case MApi_CMD_JPEG_GetControl: pGetCtrl = (PJPEG_GET_CTRL_PARAM)pArgs; psJPEG_InstPri->fpJPEGGetControl(pGetCtrl->eGetID, pGetCtrl->param, pGetCtrl->u32size); break; default: ret = UTOPIA_STATUS_NOT_SUPPORTED; printf("Error Command = %ld\n",u32Cmd); break; } return ret; } MS_U32 JPEGClose(void* pInstance) { void* pResource = NULL; JPEG_RESOURCE_PRIVATE* pJPEG_ResourcePrivate = NULL; JPEG_INSTANCE_PRIVATE* psJPEG_InstPri = NULL; UTOPIA_20_DBG("%s(): start\n", __FUNCTION__); void* pModuleJPEG_EX_V2 = NULL; UtopiaModuleGetPtr(MODULE_JPEG_EX,&pModuleJPEG_EX_V2); // Get instance private UtopiaInstanceGetPrivate(pInstance, (void**)&psJPEG_InstPri); // Get resource private if(UtopiaResourceObtain(pModuleJPEG_EX_V2, JPEG_POOL_ID_JPD, &pResource) != UTOPIA_STATUS_SUCCESS) { printf("UtopiaResourceObtain fail,%s,%d\n",__FUNCTION__,__LINE__); return UTOPIA_STATUS_ERR_RESOURCE; } UtopiaResourceGetPrivate(pResource,(void*)(&pJPEG_ResourcePrivate)); // Set using decoder index to 0 pJPEG_ResourcePrivate->u8DecoderInUse[psJPEG_InstPri->Index_of_decoder] = 0; UtopiaResourceRelease(pResource); UtopiaInstanceDelete(pInstance); UTOPIA_20_DBG("%s(): end\n", __FUNCTION__); return UTOPIA_STATUS_SUCCESS; } void JPEG_SetDbgLevel_V2(MS_U8 u8DbgLevel) { _u8JPEG_ApiV2DbgLevel = u8DbgLevel; }