36 #include <visp3/core/vpConfig.h>
38 #ifdef VISP_HAVE_CMU1394
42 #include <visp3/core/vpImageConvert.h>
43 #include <visp3/sensor/vp1394CMUGrabber.h>
51 _format(-1), _mode(-1), _fps(-1), _modeauto(true), _gain(0), _shutter(0), _color(
vp1394CMUGrabber::UNKNOWN)
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",
113 void 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 = NULL;
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."));
270 unsigned long length;
271 unsigned char *rawdata = NULL;
277 camera->AcquireImageEx(TRUE, &dropped);
278 rawdata = camera->GetRawData(&length);
309 vpERROR_TRACE(
"Format conversion not implemented. Acquisition failed.");
311 "Acquisition failed."));
322 if (camera->IsAcquiring()) {
324 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
326 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
327 "from IEEE 1394 camera number %i",
351 int n_cam = camera->RefreshCameraList();
365 C1394CameraControl *Control;
366 Control = camera->GetCameraControl(FEATURE_GAIN);
368 Control->GetRange(&min, &max);
378 camera->GetCameraControl(FEATURE_GAIN)->SetAutoMode(
true);
390 unsigned short min, max;
391 C1394CameraControl *Control;
393 Control = camera->GetCameraControl(FEATURE_GAIN);
395 Control->GetRange(&min, &max);
399 std::cout <<
"vp1394CMUGrabber warning: Desired gain register value of "
400 "IEEE 1394 camera number "
401 << index <<
" can't be less than " << _gain << std::endl;
402 }
else if (_gain > max) {
404 std::cout <<
"vp1394CMUGrabber warning: Desired gain register value of "
405 "IEEE 1394 camera number "
406 << index <<
" can't be greater than " << _gain << std::endl;
409 Control->SetAutoMode(
false);
410 if (Control->SetValue(_gain) != CAM_SUCCESS) {
411 std::cout <<
"vp1394CMUGrabber warning: Can't set gain register value of "
412 "IEEE 1394 camera number "
413 << index << std::endl;
426 C1394CameraControl *Control;
427 Control = camera->GetCameraControl(FEATURE_SHUTTER);
429 Control->GetRange(&min, &max);
440 camera->GetCameraControl(FEATURE_SHUTTER)->SetAutoMode(
true);
453 unsigned short min, max;
454 C1394CameraControl *Control;
456 Control = camera->GetCameraControl(FEATURE_SHUTTER);
458 Control->GetRange(&min, &max);
460 if (_shutter < min) {
462 std::cout <<
"vp1394CMUGrabber warning: Desired exposure time register "
463 "value of IEEE 1394 camera number "
464 << index <<
" can't be less than " << _shutter << std::endl;
465 }
else if (_shutter > max) {
467 std::cout <<
"vp1394CMUGrabber warning: Desired exposure time register "
468 "value of IEEE 1394 camera number "
469 << index <<
" can't be greater than " << _shutter << std::endl;
471 Control->SetAutoMode(
false);
472 if (Control->SetValue(_shutter) != CAM_SUCCESS) {
473 std::cout <<
"vp1394CMUGrabber warning: Can't set exposure time register "
474 "value of IEEE 1394 camera number "
475 << index << std::endl;
484 if (camera->GetNumberCameras() > cam_id) {
486 camera->GetNodeDescription(cam_id, buf, 512);
487 std::cout <<
"Camera " << cam_id <<
": " << buf << std::endl;
490 std::cout <<
"Camera " << cam_id <<
": camera not found" << std::endl;
499 char vendor[256], model[256], buf[256];
502 camera->GetCameraName(model,
sizeof(model));
503 camera->GetCameraVendor(vendor,
sizeof(vendor));
504 camera->GetCameraUniqueID(&ID);
506 std::cout <<
"Vendor: " << vendor << std::endl;
507 std::cout <<
"Model: " << model << std::endl;
509 snprintf(buf, 256,
"%08X%08X", ID.HighPart, ID.LowPart);
510 std::cout <<
"UniqueID: " << buf << std::endl;
560 if ((_format != -1) && (_mode != -1)) {
561 if (!camera->HasVideoMode(_format, _mode)) {
563 vpERROR_TRACE(
"vp1394CMUGrabber error: The image format is not "
564 "supported by the IEEE 1394 camera number %i",
569 if (camera->IsAcquiring()) {
571 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
573 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
574 "from IEEE 1394 camera number %i",
580 if (camera->SetVideoFormat(_format) != CAM_SUCCESS) {
582 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video format of IEEE "
583 "1394 camera number %i",
588 if (camera->SetVideoMode(_mode) != CAM_SUCCESS) {
590 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video mode of IEEE "
591 "1394 camera number %i",
597 if (camera->StartImageAcquisition() != CAM_SUCCESS) {
599 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't start image acquisition "
600 "from IEEE 1394 camera number %i",
607 camera->GetVideoFrameDimensions(&w, &h);
645 if (!camera->HasVideoFrameRate(_format, _mode, _fps)) {
647 vpERROR_TRACE(
"vp1394CMUGrabber error: The frame rate is not supported "
648 "by the IEEE 1394 camera number %i for the selected "
654 if (camera->IsAcquiring()) {
656 if (camera->StopImageAcquisition() != CAM_SUCCESS) {
658 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't stop image acquisition "
659 "from IEEE 1394 camera number %i",
664 if (camera->SetVideoFrameRate(_fps) != CAM_SUCCESS) {
666 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't set video frame rate of "
667 "IEEE 1394 camera number %i",
672 if (camera->StartImageAcquisition() != CAM_SUCCESS) {
674 vpERROR_TRACE(
"vp1394CMUGrabber error: Can't start image acquisition "
675 "from IEEE 1394 camera number %i",
705 int fps = camera->GetVideoFrameRate();
753 #elif !defined(VISP_BUILD_SHARED_LIBS)
756 void dummy_vp1394CMUGrabber(){};
Firewire cameras video capture based on CMU 1394 Digital Camera SDK.
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 emited by the vpFrameGrabber class and its derivates.
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)
unsigned int getWidth() const
void resize(unsigned int h, unsigned int w)
resize the image : Image initialization
unsigned int getSize() const
Type * bitmap
points toward the bitmap
unsigned int getHeight() const