Пример #1
0
void Libdc1394SequenceGrabber::processCameraImageData( unsigned char* cameraImageData )
{
	unsigned char* dest = getImage()->data();
	unsigned int w = getImage()->s();
	unsigned int h = getImage()->t();
	unsigned int bpp = getImage()->getPixelSizeInBits() / 8;
	unsigned int size = w * h * bpp;
	
	if( _sourceFormat == DC1394_COLOR_CODING_RAW8 || _sourceFormat == DC1394_COLOR_CODING_MONO8 ) 
	{
		if (_grey)
			memcpy(dest, cameraImageData, size);
		else 
			dc1394_bayer_decoding_8bit( cameraImageData, dest, w, h,  _bayerPattern, _bayerMethod );
	}
	else if(_sourceFormat == DC1394_COLOR_CODING_MONO16 || _sourceFormat == DC1394_COLOR_CODING_RAW16 )
	{
	    // These are not implemented yet....
		if(!_grey)
		{
		    dc1394_convert_to_RGB8(cameraImageData, dest, w, h, 0, _sourceFormat, 16);
		}
		else {
			dc1394_convert_to_MONO8(cameraImageData, dest, w, h, 0, _sourceFormat, 16);
		}
	}
	else if(_sourceFormat == DC1394_COLOR_CODING_YUV411 || 
		_sourceFormat == DC1394_COLOR_CODING_YUV422 ||
		_sourceFormat == DC1394_COLOR_CODING_YUV444 )
	{
		if(!_grey )
		{
		    dc1394_convert_to_RGB8( cameraImageData, dest, w, h, DC1394_BYTE_ORDER_UYVY, _sourceFormat, 16);
		}
		else
		{
			msg(osg::WARN) << "could not handle sourceformat " << _sourceFormat << std::endl; 
		}

	}
	else if(  _sourceFormat == DC1394_COLOR_CODING_RGB8 )
	{
		if( !_grey )
		{
            memcpy(dest, cameraImageData, size);
		}
		else
		{
            msg(osg::WARN) << "could not handle sourceformat " << _sourceFormat << std::endl;
		}
	}
	else
	{
		msg(osg::WARN) << "could not handle sourceformat " << _sourceFormat << std::endl;
	}
}
Пример #2
0
bool CaptureFromFile::copyAndConvertFrame(const RawImage & src, RawImage & target)
{
#ifndef VDATA_NO_QT
  mutex.lock();
#endif
  ColorFormat output_fmt = Colors::stringToColorFormat(v_colorout->getSelection().c_str());
  ColorFormat src_fmt=src.getColorFormat();
    
  if (target.getData()==0)
    target.allocate(output_fmt, src.getWidth(), src.getHeight());
  else
    target.ensure_allocation(output_fmt, src.getWidth(), src.getHeight());
     
  target.setTime(src.getTime());
     
  if (output_fmt == src_fmt)
  {
    if (src.getData() != 0)
      memcpy(target.getData(),src.getData(),src.getNumBytes());
  }
  else if (src_fmt == COLOR_RGB8 && output_fmt == COLOR_YUV422_UYVY)
  {
    if (src.getData() != 0)
      dc1394_convert_to_YUV422(src.getData(), target.getData(), src.getWidth(), src.getHeight(), 
                               DC1394_BYTE_ORDER_UYVY, DC1394_COLOR_CODING_RGB8, 8);
  }
  else if (src_fmt == COLOR_YUV422_UYVY && output_fmt == COLOR_RGB8)
  {
    if (src.getData() != 0)
      dc1394_convert_to_RGB8(src.getData(),target.getData(), src.getWidth(), src.getHeight(), 
                             DC1394_BYTE_ORDER_UYVY, DC1394_COLOR_CODING_YUV422, 8);
  } 
  else 
  {
    fprintf(stderr,"Cannot copy and convert frame...unknown conversion selected from: %s to %s\n",
            Colors::colorFormatToString(src_fmt).c_str(),
            Colors::colorFormatToString(output_fmt).c_str());
#ifndef VDATA_NO_QT
    mutex.unlock();
#endif
    return false;
  } 
#ifndef VDATA_NO_QT
  mutex.unlock();
#endif
  return true;
}
Пример #3
0
static void s_copy_frame(dc1394video_frame_t *vframe, capture_frame_t *frame)
{
  dc1394error_t err;

  switch (frame->format) {
  case CAPTURE_FRAME_FORMAT_GRAY:
    err = dc1394_convert_to_MONO8(vframe->image, (uint8_t *)frame->raw_data, vframe->size[0], vframe->size[1], vframe->yuv_byte_order, vframe->color_coding, vframe->data_depth);
    DC1394_ERR(err, "conversion failed");
    break;

  case CAPTURE_FRAME_FORMAT_RGB:
    err = dc1394_convert_to_RGB8(vframe->image, (uint8_t *)frame->raw_data, vframe->size[0], vframe->size[1], vframe->yuv_byte_order, vframe->color_coding, vframe->data_depth);
    DC1394_ERR(err, "conversion failed");

  default:
    ;
  }

  frame->timestamp = vframe->timestamp;
}