OMX_ERRORTYPE FixedFocusHandler::setUpFocus(const char* const aFocus)
{
    DBGT_PROLOG("Focus: %s", aFocus);
    DBGT_ASSERT(NULL != aFocus, "Focus is NULL");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    //Setting Focus Control
    OmxUtils::StructContainer<OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE> focusControl;
    focusControl.ptr()->nPortIndex = OMX_ALL;

    err = OMX_GetConfig(mSTECamera->mCam, (OMX_INDEXTYPE)(OMX_IndexConfigFocusControl), focusControl.ptr());
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_GetConfig failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    focusControl.ptr()->eFocusControl = OMX_IMAGE_FocusControlOff;
    focusControl.ptr()->nFocusStepIndex = 0;
    focusControl.ptr()->nFocusSteps = 100;
    DBGT_PTRACE("Setting Control %u", focusControl.ptr()->eFocusControl);

    err = OMX_SetConfig(mSTECamera->mCam, (OMX_INDEXTYPE)(OMX_IndexConfigFocusControl), focusControl.ptr());
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_SetConfig failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    return err;
}
OMX_ERRORTYPE EnableDataFlow::freeHandles()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    DBGT_ASSERT(NULL != mArmIvProc, "mArmIvProc is NULL");
    DBGT_ASSERT(NULL != mSwJpegEnc, "mSwJpegEnc is NULL");

    DBGT_PTRACE("Sending ArmIv to unloaded State");
    err = mOmxUtils.interface()->GetpOMX_FreeHandle()(mArmIvProc);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("GetpOMX_FreeHandle ArmIVProc failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    mArmIvProc = NULL ;

    DBGT_PTRACE("Sending SwJpegEnc to unloaded State");
    err = mOmxUtils.interface()->GetpOMX_FreeHandle()(mSwJpegEnc);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("GetpOMX_FreeHandle SwJpegenc failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    mSwJpegEnc = NULL ;

    DBGT_EPILOG("");
    return err;
}
OMX_ERRORTYPE DeviceRotation::doConfiguration()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    if(mSTECamera->mPictureInfo.swapParams()) {
        err = mSTECamera->getThumbnailHandler()->configure(mSTECamera->mThumbnailInfo,
                                                           mSTECamera->mPreviewInfo);
        if(OMX_ErrorNone != err) {
            DBGT_CRITICAL("configure() failed err = %d", err);
            DBGT_EPILOG("");
            return err;
        }

        err = mSTECamera->ReconfigureStill(mSTECamera->mPictureInfo, false);
        if(OMX_ErrorNone != err) {
            DBGT_CRITICAL("ReconfigureStill() failed err = %d", err);
            DBGT_EPILOG("");
            return err;
        }
    }
    err = setupRotationProcessing();
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("setupRotationProcessing() err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    mSTECamera->mPictureInfo.resetSwapParams();
    mSTECamera->mThumbnailInfo.resetSwapParams();

    DBGT_EPILOG("");
    return err;
}
OMX_ERRORTYPE STEOMXCodecsPlugin::enumerateComponents(
    OMX_STRING name,
    size_t size,
    OMX_U32 index) {

    DBGT_PROLOG("index=%lu", index);
    OMX_ERRORTYPE err = (mInterface->GetpOMX_ComponentNameEnum())(name, size, index);

    if (err == OMX_ErrorNoMore) {
        goto nomore;
    }

    if (err != OMX_ErrorNone) {
        /*DBGT_ERROR("GetpOMX_ComponentNameEnum failed, err=%s",
                   OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/
        goto error;
    }

    DBGT_EPILOG("index=%lu: name=%s", index, name);
    return OMX_ErrorNone;

nomore:
    DBGT_EPILOG("no more");
    return OMX_ErrorNoMore;

error:
    /*DBGT_EPILOG("err=%s", OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/
    return err;
}
OMX_ERRORTYPE EnableDataFlow::setupTunneling()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    //make tunnel between output port1 of ARMIV Proc and input port of SW JPEG Enc
    DBGT_PTRACE("ARM IV  port: %lu SW JPEG ENcport: %lu", mParamArmIvOutput.nPortIndex, mParamSwJpegInput.nPortIndex);
    err = (mOmxUtils.interface()->GetpOMX_SetupTunnel())(mArmIvProc, mParamArmIvOutput.nPortIndex,
            mSwJpegEnc, mParamSwJpegInput.nPortIndex);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL(" OMX_SetupTunnel failed between ARMIV Proc and SW JPEGEnc err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    //make tunnel between Output port of  SWJPEGENC with input port 0 of EXIF MIxer
    DBGT_PTRACE("SW JPEG ENcport: %lu EXIF Mixer POrt: %lu", mParamSwJpegOutput.nPortIndex, mParamExifInput.nPortIndex);
    err = (mOmxUtils.interface()->GetpOMX_SetupTunnel())(mSwJpegEnc, mParamSwJpegOutput.nPortIndex,
            mExifMixer, mParamExifInput.nPortIndex);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL(" OMX_SetupTunnel failed between SWJPEGENC and EXIFMIXER err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    return err;
}
int STENativeWindow::dequeueBuffer(buffer_handle_t **ppBuffer, int *pStride)
{
    DBGT_PROLOG("");
    if (!mInitialized) {
        DBGT_CRITICAL("mInitialized = %d", mInitialized);
        DBGT_EPILOG("");
        return -1;
    }

    int stride;
    status_t error = mPreviewWindow->dequeue_buffer(
                        mPreviewWindow,
                        ppBuffer,
                        &stride);
    if (OK != error) {
        DBGT_CRITICAL("error = %d", error);
        DBGT_EPILOG("");
        return -1;
    }
    if (pStride) {
        *pStride = stride;
    }

    DBGT_EPILOG("");
    return 0;
}
OMX_ERRORTYPE EnableDataFlow::sendComponentToExecuting()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    DBGT_PTRACE("Sending Command StateIdle to ArmIv");
    err = OMX_SendCommand(mArmIvProc, OMX_CommandStateSet, OMX_StateIdle, NULL);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_CommandStateSet IDLE failed for mArmIvProc err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_PTRACE("Sending Command StateIdle to SWJpeg");
    err = OMX_SendCommand(mSwJpegEnc, OMX_CommandStateSet, OMX_StateIdle, NULL);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_CommandStateSet IDLE failed for mSwJpegEnc err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    mStateArmIvSem.wait();
    mStateSWJpegSem.wait();

    DBGT_PTRACE("Sending Command StateExecuting to ArmIv");
    err = OMX_SendCommand(mArmIvProc, OMX_CommandStateSet, OMX_StateExecuting, NULL);
     if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_CommandStateSet EXECUTING failed for mArmIvProc err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_PTRACE("Sending Command StateExecuting to SWJpeg");
    err = OMX_SendCommand(mSwJpegEnc, OMX_CommandStateSet, OMX_StateExecuting, NULL);
     if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("OMX_CommandStateSet EXECUTING failed for mSwJpegEnc err = %d", err);
        DBGT_EPILOG("");
        return err;
    }


    mStateArmIvSem.wait();
    mStateSWJpegSem.wait();

    DBGT_EPILOG("");
    return err;
}
OMX_SYMBIAN_LOCKTYPE FixedFocusHandler::getLockType()
{
    DBGT_PROLOG("");

    DBGT_EPILOG("");
    return (OMX_SYMBIAN_LOCKTYPE)NULL;
}
OMX_SYMBIAN_LOCKTYPE AutoFocusHandler::getLockType()
{
    DBGT_PROLOG("");

    DBGT_EPILOG("OMX_SYMBIAN_LockAtCapture");
    return OMX_SYMBIAN_LockAtCapture;
}
OMX_ERRORTYPE STEOMXCodecsPlugin::getRolesOfComponent(
    const char *name,
    Vector<String8> *roles) {

    DBGT_PROLOG("%s", name);

    roles->clear();

    OMX_U32 numRoles;
    OMX_ERRORTYPE err = (mInterface->GetpOMX_GetRolesOfComponent())(
            const_cast<char *>(name),
            &numRoles,
            NULL);

    if (err != OMX_ErrorNone) {
        /*DBGT_CRITICAL("GetpOMX_GetRolesOfComponent failed, err=%s",
                      OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/
        goto error;
    }

    if (numRoles > 0) {
        OMX_U8 **array = new OMX_U8 *[numRoles];
        for (OMX_U32 i = 0; i < numRoles; ++i) {
            array[i] = new OMX_U8[OMX_MAX_STRINGNAME_SIZE];
        }

        OMX_U32 numRoles2=numRoles;

        err = (mInterface->GetpOMX_GetRolesOfComponent())(
                const_cast<char *>(name), &numRoles2, array);

        DBGT_ASSERT(err == OMX_ErrorNone/*,
                    "GetpOMX_GetRolesOfComponent failed for %s, err=%s" , name,
                    OMX_TYPE_TO_STR(OMX_ERRORTYPE, err)*/);
        DBGT_ASSERT(numRoles == numRoles2/*,
                    "GetpOMX_GetRolesOfComponent failed for %s, err=%s" , name,
                    OMX_TYPE_TO_STR(OMX_ERRORTYPE, err)*/);

        for (OMX_U32 i = 0; i < numRoles; ++i) {
            String8 s((const char *)array[i]);
            roles->push(s);
            DBGT_PTRACE("%s: role=%s",
                        name, (const char *)array[i]);

            delete[] array[i];
            array[i] = NULL;
        }

        delete[] array;
        array = NULL;
    }

    DBGT_EPILOG();
    return OMX_ErrorNone;

error:
    /*DBGT_EPILOG("err=%s", OMX_TYPE_TO_STR(OMX_ERRORTYPE, err));*/
    return err;

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

}
OMX_ERRORTYPE EnableDataFlow::release()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    err = disablePorts();
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("disablePorts() failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    return err;
}
EnableDataFlow::EnableDataFlow (OMX_HANDLETYPE &aExifMixer,
                                OmxBuffInfo &aArmIvOmxBuffInfo,
                                OMX_OSI_CONFIG_SHARED_CHUNK_METADATA &aChunkData_ArmIvProc,
                                OmxUtils &aOmxUtils,
                                const OMX_COLOR_FORMATTYPE &aPreviewOmxColorFormat,
                                PerfManager &aPerfManager,
                                sem_t &aStateExifSem) :

                                mExifMixer(aExifMixer),
                                mArmIvOmxBuffInfo(aArmIvOmxBuffInfo),
                                mChunkData_ArmIvProc(aChunkData_ArmIvProc),
                                mOmxUtils(aOmxUtils),
                                mPreviewOmxColorFormat(aPreviewOmxColorFormat),
                                mPerfManager(aPerfManager),
                                mStateExifSem(aStateExifSem)
{
    DBGT_PROLOG("");

    mArmIvProc = NULL;
    mSwJpegEnc = NULL;
    mArmIvInBuffer = NULL;
    mPortsEnabled = true;

    DBGT_EPILOG("");
}
OMX_SYMBIAN_LOCKTYPE ContinuousAutoFocusHandler::getLockType()
{
    DBGT_PROLOG("");

    DBGT_EPILOG("OMX_STE_LockLensBestPosition");
    return (OMX_SYMBIAN_LOCKTYPE)OMX_STE_LockLensBestPosition;
}
OMX_ERRORTYPE  ContinuousAutoFocusHandler::moveLensToDefaultPos()
{
    DBGT_PROLOG("");

    DBGT_EPILOG("");
    return OMX_ErrorNone;
}
OMX_ERRORTYPE DeviceSwRotation::handleBuffer(const OMX_BUFFERHEADERTYPE* const aOmxBuffHdr)
{
    DBGT_PROLOG("aOmxBuffHdr: %p", aOmxBuffHdr);

    mSTECamera->doPictureSwRotProcessing(aOmxBuffHdr, mSTECamera->mISPImageOmxBuffInfo.m_pMMHwBuffer);

    OMX_ERRORTYPE err = updateExtraDataOrientation(aOmxBuffHdr);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("updateExtraDataOrientation failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    return err;
}
OMX_ERRORTYPE DisableDataFlow::updateSnapShot(const ImageInfo &aPreviewInfo)
{
    DBGT_PROLOG("");

    DBGT_EPILOG("");
    return OMX_ErrorNone;
}
OMX_ERRORTYPE ExifRotation::doConfiguration()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    err = setupRotationProcessing();
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("setupRotationProcessing() err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    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;

}
ImageRotHandler::~ImageRotHandler()
{
    DBGT_PROLOG("");

    mSTECamera = NULL;

    DBGT_EPILOG("");
};
OMX_ERRORTYPE DeviceRotation::configAutoRotate()
{
    DBGT_PROLOG("");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    // Configure ISPproc and ARMIV for auto-rotation:on
    err = doConfigAutoRotate(OMX_TRUE);
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("doConfigAutoRotate failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    DBGT_EPILOG("");
    return err;
}
void ImageRotHandler::updateImageInfo(int aRotation)
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
}
void ImageRotHandler::doUpdateExtraDataOrientation(OMX_SYMBIAN_CAPTUREPARAMETERSTYPE *aCaptureParameters, char *aExifParameters)
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
}
FocusHandler::~FocusHandler()
{
    DBGT_PROLOG("");

    mSTECamera = NULL;

    DBGT_EPILOG("");
};
void DisableDataFlow::handleEvent()
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
}
OMX_ERRORTYPE DeviceHwRotation::setupRotationProcessing()
{
    DBGT_PROLOG("");

    DBGT_ASSERT(NULL != mSTECamera->mCam, "Camera Handle is Null");

    int rotation = mSTECamera->mPictureInfo.getRotation();
    DBGT_ASSERT(180 != rotation, "Invalid rotation for Hw Processing");

    OMX_ERRORTYPE err = OMX_ErrorNone;

    /*Setup Hardware Processing*/
    OmxUtils::StructContainer<OMX_SYMBIAN_CONFIG_ORIENTATIONTYPE> stillOrientationConfig;

    stillOrientationConfig.ptr()->nPortIndex = paramPortVPB1.nPortIndex;

    err = OMX_GetConfig(mSTECamera->mCam, mSTECamera->mOmxILExtIndex->getIndex(OmxILExtIndex::EOrientationScene), stillOrientationConfig.ptr());
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("Orientation Scene OMX_GetConfig failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    if (0 == rotation) {
        stillOrientationConfig.ptr()->eOrientation = OMX_SYMBIAN_OrientationRowTopColumnLeft;
    } else if (90 == rotation) {   /*< Frame is 90 degrees CW rotated */
        stillOrientationConfig.ptr()->eOrientation = OMX_SYMBIAN_OrientationRowRightColumnTop;
    } else if (270 == rotation) {  /*< Frame is 270 degrees CW rotated */
        stillOrientationConfig.ptr()->eOrientation = OMX_SYMBIAN_OrientationRowLeftColumnBottom;
    } else
        DBGT_CRITICAL("Cant Happen");

    err = OMX_SetConfig(mSTECamera->mCam, mSTECamera->mOmxILExtIndex->getIndex(OmxILExtIndex::EOrientationScene), stillOrientationConfig.ptr());
    if(OMX_ErrorNone != err) {
        DBGT_CRITICAL("Orientation Scene OMX_SetConfig failed err = %d", err);
        DBGT_EPILOG("");
        return err;
    }

    /*Setup Software Processing*/
    mSTECamera->mISPImageOmxBuffInfo.mSwRotation = NULL;

    DBGT_EPILOG("");
    return err;
}
OMX_ERRORTYPE ImageRotHandler::handleBuffer(const OMX_BUFFERHEADERTYPE* const aOmxBuffHdr)
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
    return OMX_ErrorNone;
}
OMX_ERRORTYPE ImageRotHandler::doConfiguration()
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
    return OMX_ErrorNone;
}
OMX_ERRORTYPE ImageRotHandler::configAutoRotate()
{
    DBGT_PROLOG("");

    //do nothing

    DBGT_EPILOG("");
    return OMX_ErrorNone;
}
void ExifRotation::updateImageInfo(int aRotation)
{
    DBGT_PROLOG("aRotation %d", aRotation);

    mSTECamera->mPictureInfo.setRotation(aRotation);
    mSTECamera->mThumbnailInfo.setRotation(aRotation);

    DBGT_EPILOG("");
}