⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unicapdevice.cpp

📁 unicap provides an uniform access to video capture devices. Currently you can access v4l, v4l2, IIDC
💻 CPP
字号:
#include "UnicapDevice.h"#include "unicap.h"#include "unicap_status.h"#include "UnicapException.h"#include <algorithm>#include <list>#include <string>CUnicapDevice::CUnicapDevice( string id ){	unicap_device_t spec;	unicap_void_device( &spec );	strcpy( spec.identifier, id.c_str() );		unicap_enumerate_devices( &spec, &m_device, 0 );	m_handle = NULL;}// CUnicapDevice::~CUnicapDevice( )// {// 	cout << "Destructor " << m_device.id;// }list<CUnicapDevice* > CUnicapDevice::EnumerateDevices(){	int i = 0;	unicap_device_t device;	list<CUnicapDevice* > listObjs;	while( SUCCESS( unicap_enumerate_devices( NULL, &device, i++ ) ) )	{		CUnicapDevice *newDev = new CUnicapDevice( device.identifier );				listObjs.push_back( newDev );	}		return listObjs;}unicap_status_t CUnicapDevice::Open(){	if( m_handle )	{		throw CUnicapException( "Device already open" );	}		return unicap_open( &m_handle, &m_device );}unicap_status_t CUnicapDevice::Close(){	unicap_status_t status;	if( m_handle )	{		status = unicap_close( m_handle );	}	else	{		status = STATUS_SUCCESS;	}}unicap_status_t CUnicapDevice::StartCapture(){	if( !m_handle )	{		throw CUnicapException( "Device not open" );	}	return unicap_start_capture( m_handle );}unicap_status_t CUnicapDevice::StopCapture(){	if( !m_handle )	{		throw CUnicapException( "Device not open" );	}	return unicap_stop_capture( m_handle );}unicap_status_t CUnicapDevice::QueueBuffer( CUnicapDataBuffer &buffer ){	if( !m_handle )	{		throw CUnicapException( "Device not open" );	}	unicap_data_buffer_t *unicap_buffer;	unicap_buffer = buffer.GetUnicapBuffer();	m_queued_buffers.push_back( buffer );		return unicap_queue_buffer( m_handle, unicap_buffer );}unicap_status_t CUnicapDevice::WaitBuffer( CUnicapDataBuffer **buffer ){	if( !m_handle )	{		throw CUnicapException( "Device not open" );	}	unicap_data_buffer_t *unicap_buffer;	unicap_status_t status;		status = unicap_wait_buffer( m_handle, &unicap_buffer );	vector<CUnicapDataBuffer>::iterator it;		for( it = m_queued_buffers.begin(); it != m_queued_buffers.end(); ++it )	{		if( *it == unicap_buffer )		{			*buffer = &(*it);		}	}	return STATUS_SUCCESS;	}int main( void ){	list<CUnicapDevice* > devList = CUnicapDevice::EnumerateDevices();	list<CUnicapDevice* >::iterator it;		for( it = devList.begin(); it != devList.end(); ++it )	{		printf( "%s\n", *it );		try		{			(*it)->Open();			(*it)->Open();		}		catch( CUnicapException e )		{			printf( "Exception: %s\n", e.c_str() );		}	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -