/******************************************************************** ** Image Component Library (ICL) ** ** ** ** Copyright (C) 2006-2012 CITEC, University of Bielefeld ** ** Neuroinformatics Group ** ** Website: www.iclcv.org and ** ** http://opensource.cit-ec.de/projects/icl ** ** ** ** File : ICLIO/src/DefaultGrabEngine.cpp ** ** Module : ICLIO ** ** Authors: Christof Elbrechter ** ** ** ** ** ** Commercial License ** ** ICL can be used commercially, please refer to our website ** ** www.iclcv.org for more details. ** ** ** ** GNU General Public License Usage ** ** Alternatively, this file may be used under the terms of the ** ** GNU General Public License version 3.0 as published by the ** ** Free Software Foundation and appearing in the file LICENSE.GPL ** ** included in the packaging of this file. Please review the ** ** following information to ensure the GNU General Public License ** ** version 3.0 requirements will be met: ** ** http://www.gnu.org/copyleft/gpl.html. ** ** ** ** The development of this software was supported by the ** ** Excellence Cluster EXC 277 Cognitive Interaction Technology. ** ** The Excellence Cluster EXC 277 is a grant of the Deutsche ** ** Forschungsgemeinschaft (DFG) in the context of the German ** ** Excellence Initiative. ** ** ** *********************************************************************/ #include #include namespace icl{ DefaultGrabEngine::DefaultGrabEngine(UnicapDevice *device, bool useDMA, bool progressiveGrabMode): m_poDevice(device), m_iCurrBuf(0), 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; } } }