#include #include namespace icl{ DefaultGrabEngine::DefaultGrabEngine(UnicapDevice *device, bool useDMA, bool progressiveGrabMode): m_poDevice(device), m_iCurrBuf(0), m_bUseDMA(useDMA), m_bStarted(false), m_bProgressiveGrabMode(progressiveGrabMode){ UnicapFormat fmt = m_poDevice->getCurrentUnicapFormat(); int bufferSize = fmt.getBufferSize() ? fmt.getBufferSize() : fmt.getSize().getDim()*4; // just something large here for(int i=0;ibuffer_type = useDMA ? UNICAP_BUFFER_TYPE_SYSTEM : UNICAP_BUFFER_TYPE_USER; } device->setFormat(fmt); } DefaultGrabEngine::~DefaultGrabEngine(){ unicap_stop_capture (m_poDevice->getUnicapHandle()); for(int i=0;igetUnicapHandle()); m_bStarted = true; unicap_queue_buffer(m_poDevice->getUnicapHandle(),&m_oBuf[NEXT_IDX()]); } unicap_data_buffer_t *returned_buffer; static const int MAX_TRYS = 10; static const long WAIT_TIME = 100000; int i=0; int success = 0; while(!success){ if( !SUCCESS (unicap_poll_buffer(m_poDevice->getUnicapHandle(),&success))){ ERROR_LOG("Failed to wait for the buffer to be filled! ( POLL Section)<<"); } usleep(1000); } for(;igetUnicapHandle(), &returned_buffer))){ break; }else{ usleep(WAIT_TIME); } }if(i==MAX_TRYS){ ERROR_LOG("Failed to wait for the buffer to be filled! ( tried "<getUnicapHandle(),&m_oBuf[NEXT_IDX()]); return returned_buffer->data; }else{ if(!m_bStarted){ unicap_start_capture(m_poDevice->getUnicapHandle()); m_bStarted = true; } unicap_data_buffer_t *returned_buffer; static const int MAX_TRYS = 10; static const long WAIT_TIME = 100000; int i=0; for(;igetUnicapHandle(),&m_oBuf[NEXT_IDX()]); usleep(1000); if( SUCCESS (unicap_wait_buffer (m_poDevice->getUnicapHandle(), &returned_buffer))){ break; }else{ usleep(WAIT_TIME); } }if(i==MAX_TRYS){ ERROR_LOG("Failed to wait for the buffer to be filled! ( tried "<data; } } }