bool SemiglobalLabMatcher::update() { WriteGuard<ReadWritePipe<FloatImage, FloatImage> > wguard(m_wpipe); FloatImage leftImg, rightImg; if ( m_lrpipe->read(&leftImg) && m_rrpipe->read(&rightImg) ) { Dim dsiDim(leftImg.dim().width(), leftImg.dim().height(), m_maxDisparity); float *leftImg_d = leftImg.devMem(); float *rightImg_d = rightImg.devMem(); FloatImage dispImage = FloatImage::CreateDev( Dim(dsiDim.width(), dsiDim.height())); cudaPitchedPtr aggregDSI = m_aggregDSI.mem(dsiDim); SGPath *paths = m_sgPaths.getDescDev(dispImage.dim()); SemiGlobalLabDevRun(dsiDim, paths, m_sgPaths.pathCount(), leftImg_d, rightImg_d, aggregDSI, dispImage.devMem(), m_zeroAggregDSI); m_zeroAggregDSI = false; dispImage.cpuMem(); wguard.write(dispImage); } return wguard.wasWrite(); }
bool FastWTAMatcher::update() { WriteGuard<ReadWritePipe<FloatImage, FloatImage> > wguard(m_wpipe); FloatImage leftImg, rightImg; if ( m_lrpipe->read(&leftImg) && m_rrpipe->read(&rightImg) ) { float *leftImg_d = leftImg.devMem(); float *rightImg_d = rightImg.devMem(); Dim dsiDim(leftImg.dim().width(), leftImg.dim().height(), m_maxDisparity); FloatImage image = FloatImage::CreateDev( Dim(dsiDim.width(), dsiDim.height())); FastWTADevRun(dsiDim, leftImg_d, rightImg_d, image.devMem()); image.cpuMem(); wguard.write(image); } return wguard.wasWrite(); }