Esempio n. 1
0
MBOOL
SyncNodeImpl::
pushBuf(MUINT32 const data, IImageBuffer* const buf, MUINT32 const ext)
{
    Mutex::Autolock lock(mLock);
    MY_LOGD("data(%d), buf(0x%x)", data, buf);
    MBOOL ret = MTRUE;
    PostBufInfo postBufData = {data, buf, ext};
    switch (data)
    {
    case SYNC_SRC_0:
        mlPostBuf_0.push_back(postBufData);
        break;
    case SYNC_SRC_1:
        mlPostBuf_1.push_back(postBufData);
        break;
    default:
        MY_LOGE("Unsupported data(%d)", data);
        handleReturnBuffer(data, (MUINTPTR)buf);
        ret = MFALSE;
        break;
    }
    //
    if( isReadyToPostBuf() )
    {
        muFrameCnt++;
        //
        PostBufInfo postBuf_0   = mlPostBuf_0.front();
        PostBufInfo postBuf_1   = mlPostBuf_1.front();
        mlPostBuf_0.pop_front();
        mlPostBuf_1.pop_front();
        //
        MY_LOGD("muFrameCnt(%d), buf(ID:%d/0x%x; ID:%d/0x%x)", muFrameCnt,
                postBuf_0.buf->getFD(), postBuf_0.buf,
                postBuf_1.buf->getFD(), postBuf_1.buf);
        handlePostBuffer(SYNC_DST_0, (MUINTPTR)postBuf_0.buf);
        handlePostBuffer(SYNC_DST_1, (MUINTPTR)postBuf_1.buf);
    }
    else
    {
        PostBufInfo retBufData;
        while( mlPostBuf_0.size() > 1 ) {
            retBufData = mlPostBuf_0.front();
            mlPostBuf_0.pop_front();
            handleReturnBuffer(retBufData.data, (MUINTPTR)retBufData.buf);
        }
        while( mlPostBuf_1.size() > 1 ) {
            retBufData = mlPostBuf_1.front();
            mlPostBuf_1.pop_front();
            handleReturnBuffer(retBufData.data, (MUINTPTR)retBufData.buf);
        }
    }
    //
    return ret;
}
Esempio n. 2
0
MBOOL
ExtImgProcNodeImpl::
doExtImgProc(MUINT32 const data, IImageBuffer* const buf, MUINT32 const ext)
{
    FUNC_START;
    if(mpExtImgProcHw != NULL)
    {
        if(mpExtImgProcHw->getImgMask() & ExtImgProcHw::BufType_ISP_P2_TwoRun_In)
        {
            IImageBuffer* tempBuffer = const_cast<IImageBuffer*>(buf);
            mpExtImgProcHw->doImgProc(
                                ExtImgProcHw::BufType_ISP_P2_TwoRun_In,
                                tempBuffer);
        }
    }
    //
    muDeqFrameCnt++;
    handlePostBuffer(EXTIMGPROC_DST_0, (MUINT32)buf);
    //
    FUNC_END;
    return MTRUE;
}
Esempio n. 3
0
//-----------------------------------------------------------------------------
MBOOL 
CapBufNodeImp::
threadLoopUpdate()
{
    FUNC_START;
    handleNotify( PASS1_SOF, 0, 0 );
    //
    MUINT32 imgoAddr = 0;
    //
    if(isDataConnected(PASS1_FULLRAW))
    {
        if(mpCapBufMgr != NULL)
        {
            IImageBuffer* pImageBuffer = NULL;
            if(mpCapBufMgr->dequeBuf(pImageBuffer))
            {
                if(pImageBuffer != NULL)
                {
                    imgoAddr = (MUINT32)pImageBuffer;
                    //
                    {
                        Mutex::Autolock _l(mLock);
                        mlpDequeFullBuf.push_back(pImageBuffer);
                    }
                }
                else
                {
                    MY_LOGE("Deque NULL buffer");
                }
            }
            else
            {
                MY_LOGE("Deque fail");
            }
        }
        else
        if(mpImageBuffer != NULL)
        {
            imgoAddr = (MUINT32)mpImageBuffer;
            //
            {
                Mutex::Autolock _l(mLock);
                mlpDequeFullBuf.push_back(mpImageBuffer);
            }
        }
        else
        {
            MY_LOGE("mpCapBufMgr is NULL");
        }
    }
    else
    {
        MY_LOGE("Please connect PASS1_FULLRAW");
        usleep(10*1000);
    }
    //
    if(imgoAddr)
    {
        MUINT32 magicNum;
        MBOOL isRrzo;
        MVOID* pPrivateData;
        MUINT32 privateDataSize;
        //
        mpIspSyncCtrl->queryImgBufInfo(
                            (IImageBuffer*)imgoAddr,
                            magicNum,
                            isRrzo,
                            pPrivateData,
                            privateDataSize);
        //
        MY_LOGD("imgoAddr(0x%08X),MN(0x%08X)",
                imgoAddr,
                magicNum);
        //
        handleNotify(PASS1_EOF, -1, magicNum);
        handlePostBuffer(PASS1_FULLRAW, imgoAddr, 0);
    }
    else
    {
        MY_LOGE("imgoAddr is 0");
    }
    FUNC_END;
    return MTRUE;
}
Esempio n. 4
0
MBOOL
Pass2NodeImpl::
handleP2Done(QParams& rParams)
{
    NG_TRACE_FMT_BEGIN("deqP2:%d", muDeqFrameCnt);
    MBOOL ret = MFALSE;
    Vector<Input>::const_iterator iterIn;
    Vector<Output>::const_iterator iterOut;
    vector<IImageBuffer*> vpDstBufAddr;
    //
    if(rParams.mDequeSuccess == MFALSE)
    {
        MY_LOGE("type %d pass2 cnt %d: deque fail",
                mPass2Type,
                muDeqFrameCnt);
        AEE_ASSERT("ISP pass2 deque fail");
    }
    //
    MY_LOGD("type %d: cnt %d in %d out %d",
            mPass2Type,
            muDeqFrameCnt,
            rParams.mvIn.size(),
            rParams.mvOut.size());
    //
    if( !mpIspSyncCtrlHw->unlockHw(IspSyncControlHw::HW_PASS2) )
    {
        MY_LOGE("isp sync unlock pass2 failed");
        goto lbExit;
    }
    //
    for( iterIn = rParams.mvIn.begin() ; iterIn != rParams.mvIn.end() ; iterIn++ )
    {
        //MY_LOGD("In PortID(0x%08X)",portId);
        MUINT32 nodeDataType = mapToNodeDataType( iterIn->mPortID );
        handleReturnBuffer( nodeDataType, (MUINT32)iterIn->mBuffer, 0 );
        //
    }
    //
    vpDstBufAddr.clear();
    for( iterOut = rParams.mvOut.begin() ; iterOut != rParams.mvOut.end() ; iterOut++ )
    {
        MBOOL bFind = MFALSE;
        for(MUINT32 i=0; i<vpDstBufAddr.size(); i++)
        {
            if(vpDstBufAddr[i] == iterOut->mBuffer)
            {
                MY_LOGD("Buf(0x%08X) has been posted",(MUINT32)iterOut->mBuffer);
                bFind = MTRUE;
                break;
            }
        }
        if(!bFind)
        {
            //MY_LOGD("Out PortID(0x%08X)",portId);
            MUINT32 nodeDataType = mapToNodeDataType( iterOut->mPortID );
            handlePostBuffer( nodeDataType, (MUINT32)iterOut->mBuffer, 0 );
            vpDstBufAddr.push_back(iterOut->mBuffer);
        }
    }

    {
        Mutex::Autolock lock(mLock);
        muDeqFrameCnt += rParams.mvIn.size();
        mCondDeque.broadcast();
    }

    ret = MTRUE;
lbExit:
    NG_TRACE_FMT_END();
    return ret;

}
Esempio n. 5
0
MBOOL
StereoNodeImpl::
handleP2Done(QParams& rParams)
{
    CAM_TRACE_CALL();
    CAM_TRACE_FMT_BEGIN("deqP2:%d", muDeqFrameCnt);
    MBOOL ret = MFALSE;
    MBOOL isZoom = (rParams.mvCropRsInfo[0].mCropRect.p_integral.x != 0) ? MTRUE : MFALSE;
    Vector<Input>::const_iterator iterIn;
    Vector<Output>::const_iterator iterOut;
    Vector<ModuleInfo>::const_iterator iterMInfo;
    //
    MY_LOGD("cnt %d in(%d) out(%d) moduleData(%d) isZoom(%d)",
            muDeqFrameCnt,
            rParams.mvIn.size(),
            rParams.mvOut.size(),
            rParams.mvModuleData.size(),
            isZoom);
    //
    if( !mpIspSyncCtrlHw->unlockHw(IspSyncControlHw::HW_PASS2) )
    {
        MY_LOGE("isp sync unlock pass2 failed");
        goto lbExit;
    }
    //
    for( iterIn = rParams.mvIn.begin(); iterIn != rParams.mvIn.end(); iterIn++ )
    {
        PortID portId = iterIn->mPortID;
        portId.group = 0;
        MUINT32 nodeDataType = mapToNodeDataType( portId );
        MY_LOGD("In PortID(0x%08X), nodeData(%d)",portId, nodeDataType);
        handleReturnBuffer( nodeDataType, (MUINTPTR)iterIn->mBuffer);
    }
    //
    for( iterOut = rParams.mvOut.begin(); iterOut != rParams.mvOut.end(); iterOut++ )
    {
        PortID portId = iterOut->mPortID;
        portId.group = 0;
        MUINT32 nodeDataType = mapToNodeDataType( portId );
        MY_LOGD("Out PortID(0x%08X), nodeData(%d), bufInfo(0x%x), va/pa(0x%x/0x%x), ID(%d)",
                portId, nodeDataType, iterOut->mBuffer, iterOut->mBuffer->getBufVA(0), iterOut->mBuffer->getBufPA(0), iterOut->mBuffer->getFD());
        handlePostBuffer( nodeDataType, (MUINTPTR)iterOut->mBuffer, (MUINT32)isZoom );
    }
    for( iterMInfo = rParams.mvModuleData.begin(); iterMInfo != rParams.mvModuleData.end(); iterMInfo++ )
    {
        if ( iterMInfo->moduleTag == EFeatureModule_STA_FEO )
        {
            StaData* pModuleData = reinterpret_cast<StaData*>(iterMInfo->moduleStruct);
            PortID portId = PortID((EPortType)pModuleData->port_type, pModuleData->port_idx, pModuleData->port_inout);
            portId.group = 0;
            MUINT32 nodeDataType = mapToNodeDataType( portId );
            MY_LOGD("ModuleInfo PortID(0x%08X), nodeData(%d), bufInfo(0x%x), va/pa(0x%x/0x%x), ID(%d)",
                    portId, nodeDataType, &(pModuleData->bufInfo), pModuleData->bufInfo.virtAddr, pModuleData->bufInfo.phyAddr, pModuleData->bufInfo.memID);
            handlePostBuffer( nodeDataType, (MUINTPTR)&pModuleData->bufInfo, (MUINT32)isZoom );
        }
    }
    //
    {
        Mutex::Autolock lock(mLock);
        muDeqFrameCnt++;
        mCondDeque.broadcast();
    }
    //
    ret = MTRUE;
lbExit:
    CAM_TRACE_FMT_END();
    return ret;

}