#include "colourspace.h"
#include "image_dc1394input.h"
#include "rgba.h"
namespace mimas {
template<>
void image_dc1394input< rgba< unsigned char > >::
read( image< rgba< unsigned char > > &img ) throw (mimasexception)
{
MMERROR( m_handle != NULL, mimasexception, ,
"Camera device was closed already." );
if ( m_bufferUsed ) {
dc1394_dma_done_with_buffer( &m_camera );
m_bufferUsed = false;
};
// Perform image capture.
MMERROR( dc1394_dma_single_capture( &m_camera ) == DC1394_SUCCESS,
mimasexception, ,
"Failed capturing frame from firewire digital camera." );
m_bufferUsed = true;
img.init( m_camera.frame_width, m_camera.frame_height );
switch ( m_colourSpace ) {
case UYVY:
uyvy_to_rgba( (const char *)m_camera.capture_buffer,
m_camera.frame_width, m_camera.frame_height,
(char *)img.rawData() );
break;
case RGB24:
rgb_to_rgba( (const char *)m_camera.capture_buffer,
m_camera.frame_width, m_camera.frame_height,
(char *)img.rawData() ); break;
default:
assert( false );
MMERROR( false, mimasexception, ,
"Colour-grabbing with colourspace number " << m_colourSpace
<< " not supported." );
};
}
};