34#include <visp3/core/vpConfig.h>
36#ifdef VISP_HAVE_CMU1394
40#include <visp3/core/vpDebug.h>
41#include <visp3/core/vpImageConvert.h>
42#include <visp3/sensor/vp1394CMUGrabber.h>
60 camera =
new C1394Camera;
86 camerror = camera->SelectCamera(index);
87 if (camerror != CAM_SUCCESS) {
89 case CAM_ERROR_PARAM_OUT_OF_RANGE:
90 vpERROR_TRACE(
"vp1394CMUGrabber error: Found no camera number %i", index);
95 vpERROR_TRACE(
"vp1394CMUGrabber error: The camera %i is busy", index);
97 "The required camera is in use by other application"));
100 vpERROR_TRACE(
"vp1394CMUGrabber error: General I/O error when "
101 "selecting camera number %i",
113void vp1394CMUGrabber::initCamera()
118 if (camera->CheckLink() != CAM_SUCCESS) {
119 vpERROR_TRACE(
"C1394Camera error: Found no cameras on the 1394 bus");
123 camerror = camera->InitCamera();
124 if (camerror != CAM_SUCCESS) {
126 case CAM_ERROR_NOT_INITIALIZED:
127 vpERROR_TRACE(
"vp1394CMUGrabber error: No camera selected", index);
131 vpERROR_TRACE(
"vp1394CMUGrabber error: The camera %i is busy", index);
133 "The required camera is in use by other application"));
136 vpERROR_TRACE(
"vp1394CMUGrabber error: General I/O error when "
137 "selecting camera number %i",
145 if (camera->Has1394b())
146 camera->Set1394b(TRUE);
149 _format = camera->GetVideoFormat();
150 _mode = camera->GetVideoMode();
157 camera->GetCameraControlTrigger()->SetOnOff(
false);
160 camera->GetVideoFrameDimensions(&w, &h);
165 if (camera->StartImageAcquisition() != CAM_SUCCESS) {
167 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't start image acquisition "
168 "from IEEE 1394 camera number %i",
208 unsigned long length;
209 unsigned char *rawdata =
nullptr;
215 camera->AcquireImageEx(TRUE, &dropped);
216 rawdata = camera->GetRawData(&length);
221 memcpy(I.bitmap, (
unsigned char *)rawdata, size);
245 vpERROR_TRACE(
"Format conversion not implemented. Acquisition failed.");
247 "Acquisition failed."));
263 unsigned long length;
264 unsigned char *rawdata =
nullptr;
270 camera->AcquireImageEx(TRUE, &dropped);
271 rawdata = camera->GetRawData(&length);
272 size = I.getWidth() * I.getHeight();
302 vpERROR_TRACE(
"Format conversion not implemented. Acquisition failed.");
304 "Acquisition failed."));
315 if (camera->IsAcquiring()) {
317 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
319 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
320 "from IEEE 1394 camera number %i",
344 int n_cam = camera->RefreshCameraList();
358 C1394CameraControl *Control;
359 Control = camera->GetCameraControl(FEATURE_GAIN);
361 Control->GetRange(&min, &max);
371 camera->GetCameraControl(FEATURE_GAIN)->SetAutoMode(
true);
383 unsigned short min, max;
384 C1394CameraControl *Control;
386 Control = camera->GetCameraControl(FEATURE_GAIN);
388 Control->GetRange(&min, &max);
392 std::cout <<
"vp1394CMUGrabber warning: Desired gain register value of "
393 "IEEE 1394 camera number "
394 << index <<
" can't be less than " << _gain << std::endl;
396 else if (_gain > max) {
398 std::cout <<
"vp1394CMUGrabber warning: Desired gain register value of "
399 "IEEE 1394 camera number "
400 << index <<
" can't be greater than " << _gain << std::endl;
403 Control->SetAutoMode(
false);
404 if (Control->SetValue(_gain) != CAM_SUCCESS) {
405 std::cout <<
"vp1394CMUGrabber warning: Can't set gain register value of "
406 "IEEE 1394 camera number "
407 << index << std::endl;
420 C1394CameraControl *Control;
421 Control = camera->GetCameraControl(FEATURE_SHUTTER);
423 Control->GetRange(&min, &max);
434 camera->GetCameraControl(FEATURE_SHUTTER)->SetAutoMode(
true);
447 unsigned short min, max;
448 C1394CameraControl *Control;
450 Control = camera->GetCameraControl(FEATURE_SHUTTER);
452 Control->GetRange(&min, &max);
454 if (_shutter < min) {
456 std::cout <<
"vp1394CMUGrabber warning: Desired exposure time register "
457 "value of IEEE 1394 camera number "
458 << index <<
" can't be less than " << _shutter << std::endl;
460 else if (_shutter > max) {
462 std::cout <<
"vp1394CMUGrabber warning: Desired exposure time register "
463 "value of IEEE 1394 camera number "
464 << index <<
" can't be greater than " << _shutter << std::endl;
466 Control->SetAutoMode(
false);
467 if (Control->SetValue(_shutter) != CAM_SUCCESS) {
468 std::cout <<
"vp1394CMUGrabber warning: Can't set exposure time register "
469 "value of IEEE 1394 camera number "
470 << index << std::endl;
479 if (camera->GetNumberCameras() > cam_id) {
481 camera->GetNodeDescription(cam_id, buf, 512);
482 std::cout <<
"Camera " << cam_id <<
": " << buf << std::endl;
486 std::cout <<
"Camera " << cam_id <<
": camera not found" << std::endl;
495 char vendor[256], model[256], buf[256];
498 camera->GetCameraName(model,
sizeof(model));
499 camera->GetCameraVendor(vendor,
sizeof(vendor));
500 camera->GetCameraUniqueID(&ID);
502 std::cout <<
"Vendor: " << vendor << std::endl;
503 std::cout <<
"Model: " << model << std::endl;
505 snprintf(buf, 256,
"%08X%08X", ID.HighPart, ID.LowPart);
506 std::cout <<
"UniqueID: " << buf << std::endl;
556 if ((_format != -1) && (_mode != -1)) {
557 if (!camera->HasVideoMode(_format, _mode)) {
559 vpERROR_TRACE(
"vp1394CMUGrabber error: The image format is not "
560 "supported by the IEEE 1394 camera number %i",
565 if (camera->IsAcquiring()) {
567 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
569 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
570 "from IEEE 1394 camera number %i",
576 if (camera->SetVideoFormat(_format) != CAM_SUCCESS) {
578 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video format of IEEE "
579 "1394 camera number %i",
584 if (camera->SetVideoMode(_mode) != CAM_SUCCESS) {
586 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video mode of IEEE "
587 "1394 camera number %i",
593 if (camera->StartImageAcquisition() != CAM_SUCCESS) {
595 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't start image acquisition "
596 "from IEEE 1394 camera number %i",
603 camera->GetVideoFrameDimensions(&w, &h);
641 if (!camera->HasVideoFrameRate(_format, _mode, _fps)) {
643 vpERROR_TRACE(
"vp1394CMUGrabber error: The frame rate is not supported "
644 "by the IEEE 1394 camera number %i for the selected "
650 if (camera->IsAcquiring()) {
652 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
654 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
655 "from IEEE 1394 camera number %i",
660 if (camera->SetVideoFrameRate(_fps) != CAM_SUCCESS) {
662 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video frame rate of "
663 "IEEE 1394 camera number %i",
668 if (camera->StartImageAcquisition() != CAM_SUCCESS) {
670 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't start image acquisition "
671 "from IEEE 1394 camera number %i",
701 int fps = camera->GetVideoFrameRate();
757#elif !defined(VISP_BUILD_SHARED_LIBS)
760void dummy_vp1394CMUGrabber() { }
void displayCameraModel()
void setControl(unsigned short gain, unsigned short shutter)
virtual ~vp1394CMUGrabber()
void displayCameraDescription(int cam_id)
vpColorCodingType getVideoColorCoding() const
Get the video color coding format.
void getGainMinMax(unsigned short &min, unsigned short &max)
void setVideoMode(unsigned long format, unsigned long mode)
vp1394CMUGrabber & operator>>(vpImage< unsigned char > &I)
void acquire(vpImage< unsigned char > &I)
void setFramerate(unsigned long fps)
void getShutterMinMax(unsigned short &min, unsigned short &max)
int getNumberOfConnectedCameras() const
void setGain(unsigned short gain)
void open(vpImage< unsigned char > &I)
void selectCamera(int cam_id)
void setShutter(unsigned short shutter)
Error that can be emitted by the vpFrameGrabber class and its derivates.
@ settingError
Grabber settings error.
@ initializationError
Grabber initialization error.
@ otherError
Grabber returned an other error.
unsigned int height
Number of rows in the image.
bool init
Set to true if the frame grabber has been initialized.
unsigned int width
Number of columns in the image.
static void YUV411ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void MONO16ToGrey(unsigned char *grey16, unsigned char *grey, unsigned int size)
static void YUV422ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
static void YUV411ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void GreyToRGBa(unsigned char *grey, unsigned char *rgba, unsigned int width, unsigned int height)
static void MONO16ToRGBa(unsigned char *grey16, unsigned char *rgba, unsigned int size)
static void RGBToGrey(unsigned char *rgb, unsigned char *grey, unsigned int width, unsigned int height, bool flip=false)
static void RGBToRGBa(unsigned char *rgb, unsigned char *rgba, unsigned int size)
static void YUV422ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void YUV444ToRGBa(unsigned char *yuv, unsigned char *rgba, unsigned int size)
static void YUV444ToGrey(unsigned char *yuv, unsigned char *grey, unsigned int size)
Definition of the vpImage class member functions.