MBOOL 
CamIOPipe::
dequeHWBuf(MUINT32 const u4TimeoutMs /*= 0xFFFFFFFF*/)
{
    FUNCTION_LOG_START;
    MY_LOGD("+ tid(%d) timeout)=(%d)", gettid(), u4TimeoutMs);
    //
    NSImageio::NSIspio::QTimeStampBufInfo rQTimeOutBufInfo; 
    NSImageio::NSIspio::PortID rPortID(NSImageio::NSIspio::EPortType_Memory, 
                                       NSImageio::NSIspio::EPortIndex_IMGO, 
                                       1); 

    //Jackie, wait deque directly
    // (1). wait interrupt done 
    //mpCamIOPipe->irq(NSImageio::NSIspio::EPipePass_PASS1_TG1,NSImageio::NSIspio::EPIPEIRQ_PATH_DONE);

    // (2.1). dequeue buffer , Raw 
    
    mpCamIOPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo);         
      
    // (2.2). put buffer Raw in queue 
    mrRawQTBufInfo.u4User = rQTimeOutBufInfo.u4User; 
    mrRawQTBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved;
    mrRawQTBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec;
    mrRawQTBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; 
    
    for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) 
    {
        BufInfo rBufInfo; 
        mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i)); 

        mrRawQTBufInfo.vBufInfo.push_back(rBufInfo); 
    }

    if (mfgIsYUVPortON) 
    {
        // (3.1). dequeue buffer , Raw 
        rPortID.index =  NSImageio::NSIspio::EPortIndex_IMG2O; 
        mpCamIOPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo);   
        // (3.2). put buffer yuv in queue 
        mrYuvQTBufInfo.u4User = rQTimeOutBufInfo.u4User; 
        mrYuvQTBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved;
        mrYuvQTBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec;
        mrYuvQTBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; 
        for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) 
        {
            BufInfo rBufInfo; 
            mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i));    
            mrYuvQTBufInfo.vBufInfo.push_back(rBufInfo);
        }
    }

    FUNCTION_LOG_END;
    return MTRUE; 
}
Exemplo n.º 2
0
MBOOL
CdpPipe::
dequeBuf(PortID const ePortID, QTimeStampBufInfo& rQBufInfo, MUINT32 const u4TimeoutMs /*= 0xFFFFFFFF*/)
{
    FUNCTION_LOG_START;
    MY_LOGD("+ tid(%d) PortID:(type, index, inout, timeout)=(%d, %d, %d, %d)", gettid(), ePortID.type, ePortID.index, ePortID.inout, u4TimeoutMs);
    MBOOL ret = MTRUE; 
    //
    NSImageio::NSIspio::QTimeStampBufInfo rQTimeOutBufInfo; 
    NSImageio::NSIspio::PortID rPortID(NSImageio::NSIspio::EPortType_Memory, 
                                       NSImageio::NSIspio::EPortIndex_IMGI, 
                                       0); 
    //  dequeue buffer 
    if (EPortType_MemoryOut == ePortID.type)
    {
        rPortID.inout = 1; 
        if (0 == ePortID.index && (mu4OutPortEnableFlag & 0x1))   //disp port 
        {
            rPortID.type = NSImageio::NSIspio::EPortType_DISP_RDMA; 
            rPortID.index = NSImageio::NSIspio::EPortIndex_DISPO;           
        }
        else if(1 == ePortID.index && (mu4OutPortEnableFlag & 0x2)) //vdo port
        {
            rPortID.type = NSImageio::NSIspio::EPortType_VID_RDMA; 
            rPortID.index = NSImageio::NSIspio::EPortIndex_VIDO; 
        }    
        else 
        {
            MY_LOGE("The deque out port is not config");    
            return MFALSE; 
        }
    }    
    //
    if (EPortType_MemoryOut == ePortID.type) 
    {  
        ret = mpCdpPipe->dequeOutBuf(rPortID, rQTimeOutBufInfo);         
    }
    else 
    {
        ret = mpCdpPipe->dequeInBuf(rPortID, rQTimeOutBufInfo);         
    }
      
    // (2.2). put buffer in queue 
    rQBufInfo.u4User = rQTimeOutBufInfo.u4User; 
    rQBufInfo.u4Reserved = rQTimeOutBufInfo.u4Reserved;
    rQBufInfo.i4TimeStamp_sec = rQTimeOutBufInfo.i4TimeStamp_sec;
    rQBufInfo.i4TimeStamp_us = rQTimeOutBufInfo.i4TimeStamp_us; 
    
    for (MUINT32 i = 0; i < rQTimeOutBufInfo.vBufInfo.size(); i++) 
    {
        BufInfo rBufInfo; 
        mapBufInfo(rBufInfo, rQTimeOutBufInfo.vBufInfo.at(i)); 

        rQBufInfo.vBufInfo.push_back(rBufInfo); 
    }

    FUNCTION_LOG_END;
    return  ret;
}