OMX_ERRORTYPE STEOMXCodecsPlugin::makeComponentInstance( const char *name, const OMX_CALLBACKTYPE *callbacks, OMX_PTR appData, OMX_COMPONENTTYPE **component) { DBGT_PROLOG(); OMX_ERRORTYPE err = (mInterface->GetpOMX_GetHandle())( reinterpret_cast<OMX_HANDLETYPE *>(component), const_cast<char *>(name), appData, const_cast<OMX_CALLBACKTYPE *>(callbacks)); if (err) { /*DBGT_ERROR("failed for %s, err=%s" , name, OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/ goto error; } DBGT_PINFO("%s: handle=%p", name, *component); DBGT_EPILOG("%s: handle=%p", name, *component); return OMX_ErrorNone; error: /*DBGT_EPILOG("err=%s", OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/ return err; }
STEOMXCodecsPlugin::STEOMXCodecsPlugin() { DBGT_PROLOG(); OMX_ERRORTYPE err = OMX_ErrorNone; mHandle = dlopen(STEOMXINT_SO_FILE, RTLD_NOW); if ( NULL == mHandle ) { DBGT_CRITICAL("dlopen() failed %s", dlerror()); goto dl_close; } DBGT_PINFO("dlopen passed"); typedef OMXCoreInterface* (*pGetCoreInterface)(); pGetCoreInterface temp; temp = (pGetCoreInterface)dlsym(mHandle, "GetOMXCoreInterface"); mInterface = (*temp)(); if (mInterface == NULL) { DBGT_CRITICAL("dlsym(GetOMXCoreInterface) failed, err=%s", dlerror()); goto dl_close; } err = (mInterface->GetpOMX_Init())(); if (err != OMX_ErrorNone) { DBGT_CRITICAL("GetpOMX_Init failed, err=%s", OMX_TYPE_TO_STR(OMX_ERRORTYPE, err)); goto clean_interface; } DBGT_PINFO("GetpOMX_Init passed for interface=%p", mInterface); DBGT_EPILOG(); return; clean_interface: mInterface = NULL; dl_close: dlclose(mHandle); mHandle = NULL ; DBGT_EPILOG("error, %s %s", mHandle?"":"mHandle=NULL", mInterface?"":"mInterface=NULL"); return; }
OMX_ERRORTYPE FocusHandler::getFocusStatus() { DBGT_PROLOG(""); OMX_ERRORTYPE err = OMX_ErrorNone; if(OMX_IMAGE_FocusControlOff != g_STECamFocusProp[mFocusModeIndex].eFocusType) err = OMX_GetConfig(mSTECamera->mCam, mSTECamera->mOmxILExtIndex->getIndex(OmxILExtIndex::EFocusStatus), &mExtFocusStatus.mFocusStatus); else DBGT_PINFO("Autofocus not done in this mode: OMX_IMAGE_FocusControlOff"); if(OMX_ErrorNone != err) { DBGT_CRITICAL("OMX_GetConfig failed err = %d", err); DBGT_EPILOG(""); return err; } DBGT_EPILOG(""); return err; }
STEOMXCodecsPlugin::~STEOMXCodecsPlugin() { DBGT_PROLOG(); OMX_ERRORTYPE err = OMX_ErrorNone; err = (mInterface->GetpOMX_Deinit())(); if (err != OMX_ErrorNone) { /*DBGT_ERROR("GetpOMX_Deinit failed, err=%s", OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/ goto error; } DBGT_PINFO("GetpOMX_Deinit passed for interface=%p", mInterface); if (NULL != mHandle) { dlclose(mHandle); mHandle = NULL; } DBGT_EPILOG(); return; error: DBGT_EPILOG("error"); return; }
OMX_ERRORTYPE FocusHandler::handleAFEvent() { DBGT_PROLOG(""); OMX_ERRORTYPE err = OMX_ErrorNone; bool focusReached = false; //get status #ifdef ENABLE_AUTOFOCUS err = getFocusStatus(); if(OMX_ErrorNone != err) { DBGT_CRITICAL("getFocusStatus failed err = %d", err); DBGT_EPILOG(""); return err; } if(OMX_TRUE == mExtFocusStatus.mFocusStatus.bFocused) { mSTECamera->mPerfManager.logAndDump(PerfManager::EAutoFocusReached); focusReached = true; } DBGT_PTRACE("Focus reached: %d", focusReached); #endif #ifdef ENABLE_CONTINUOUS_AUTOFOCUS if (mSTECamera->mMsgEnabled & CAMERA_MSG_FOCUS_MOVE) { int lensState; int focusStatus = (OMX_FOCUSSTATUSTYPE)mExtFocusStatus.mFocusStatus.sAFROIs[0].eFocusStatus; switch (focusStatus) { case OMX_FocusStatusRequest: lensState = ETrackingState; break; case OMX_FocusStatusUnableToReach: lensState = EFocusUnableToReach; break; case OMX_FocusStatusReached: lensState = EFocusReached; break; default: DBGT_PTRACE("Invalid focus status"); break; } //If autofocus msg is enable, that means capture is in progress //no need to send callback //If lensState is same as previous then no need to send callback if (!(mSTECamera->mAutoFocusThreadData->mEnabled) && !(lensState == mSTECamera->mAutoFocusThreadData->mContinuousFocusState)) { mSTECamera->mLock.unlock(); mSTECamera->mNotifyCb(CAMERA_MSG_FOCUS_MOVE, !(focusReached), 0, mSTECamera->mCallbackCookie); mSTECamera->mLock.lock(); //Assign new state mSTECamera->mAutoFocusThreadData->mContinuousFocusState = lensState; } } #endif #ifdef ENABLE_AUTOFOCUS if (mSTECamera->mMsgEnabled & CAMERA_MSG_FOCUS) { mSTECamera->mLock.unlock(); if (mSTECamera->mAutoFocusThreadData->mEnabled) { mSTECamera->mNotifyCb(CAMERA_MSG_FOCUS, focusReached, 0, mSTECamera->mCallbackCookie); mSTECamera->mAutoFocusThreadData->mEnabled = OMX_FALSE; mSTECamera->mMsgEnabled &= ~CAMERA_MSG_FOCUS; } mSTECamera->mLock.lock(); } #else //!ENABLE_AUTOFOCUS mSTECamera->mPerfManager.logAndDump(PerfManager::EAutoFocusReached); #endif //ENABLE_AUTOFOCUS #ifdef PRINT_ALL_ROI if(focusReached == true) { for (int i=0; i< (int)mExtFocusStatus.mFocusStatus.nAFAreas; i++){ DBGT_PINFO("For RoI %d: Status is",i); DBGT_PINFO("Focus Status for ROI %s",OmxUtils::name((OMX_FOCUSSTATUSTYPE)mExtFocusStatus.mFocusStatus.sAFROIs[i].eFocusStatus ) ); DBGT_PINFO("Ref-W%d Ref-H%d",(int)(mExtFocusStatus.mFocusStatus.sAFROIs[i].nReferenceWindow.nWidth), (int) (mExtFocusStatus.mFocusStatus.sAFROIs[i].nReferenceWindow.nHeight) ); DBGT_PINFO("Rectangle X%d,Y%d,W%d,H%d ", (int)(mExtFocusStatus.mFocusStatus.sAFROIs[i].nRect.sTopLeft.nX), (int)(mExtFocusStatus.mFocusStatus.sAFROIs[i].nRect.sTopLeft.nY) , (int)(mExtFocusStatus.mFocusStatus.sAFROIs[i].nRect.sSize.nWidth), (int)(mExtFocusStatus.mFocusStatus.sAFROIs[i].nRect.sSize.nHeight) ); } } #endif //PRINT_ALL_ROI DBGT_EPILOG(""); return err; }