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; } }
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; }
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; }