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;
}