CMU 1394 Digital Camera Driver

FAQ

0. I have a question, but I haven't read the help file yet, what should I do?

The help file that comes with the driver set should answer most of your questions, so try reading it first.

1. My DV or still image camera uses the 1394 link to transfer data, does that mean I can use your driver set?

Almost definitely not. In the case of most consumer camcorders and still cameras, the 1394 bus is just a faster version of USB. Unless the documentation for your camera explicitly states compliance with the IIDC 1394 Digital Camera Specification, it will notwork with our driver set, sorry.

2. Matlab worked with version 6.3 but now doesn't like version 6.4.X, what should I do?

The 6.4 release series made drastic changes to the class interface that Mathworks had to catch up to. They published support for the 6.4 release series at R2007a. For versions of Matlab before R2007a, you should stick with version 6.3.

3. How do I use the External Trigger?

Essentially, you set up Image Acquisition otherwise normally, turn on the trigger feature, then call AcquireImage(), which should block until you use the trigger or the call times out. An example code block, courtesy of Keven Brown kbrown@bytewise.com follows:

C1394Camera theCamera;
theCamera.RefreshCameraList();
theCamera.SelectCamera(0);
theCamera.InitCamera();
theCamera.InquireControlRegisters();
theCamera.StatusControlRegisters();
theCamera.SetVideoFormat(1);
theCamera.SetVideoMode(5);
theCamera.SetVideoFrameRate(2);
theCamera.GetCameraControlTrigger()->SetOnOff(true);
theCamera.StartImageAcquisition();
while(1) {
  theCamera.AcquireImage(); // will block until you trigger the camera
}

4. How do I use multiple cameras at the same time?

You must instantiate a different C1394Camera class for each camera you wish to use and select different cameras. Important: selecting the same camera with multiple classes is dangerous, so don't do it. Example (error codes ignored for now):

C1394Camera cam0,cam1;

cam0.RefreshCameraList();
cam0.SelectCamera(0);
cam0.InitCamera();

cam1.RefreshCameraList();
cam1.SelectCamera(1);
cam1.InitCamera();

// do stuff with the cameras

5. My 1394b card will only run at 100 mbps. How do I fix this?

This is a known "feature" that comes with Windows XP SP2. Microsoft is aware of it and has posted a fix as KB885222.

6. After upgrading to version 6.4.X, my application no longer compiles. In particular, where did the m_controlFoo members go?

The exposed public members of C1394Camera in version 6.3 and earlier made binary-compatible upgrades very tricky, so they were removed at 6.4.0 in favor of accessors. Where you would previously use:

theCamera.m_controlShutter.FooBar();

You now do something on the order of:

C1394CameraControl *controlShutter = NULL;
controlShutter = theCamera.GetCameraControl(FEATURE_SHUTTER);
if(controlShutter != NULL)
{
  controlShutter->FooBar();
}


It's a little more verbose, but also more general, and it is more easily extended to include support for new features. See the documentation file, 1394Camera.chm that is distributed with the driver set for more details.

After reading both the documentation and the FAQ, I still have a burning question. What should I do?

Send an email to Christopher Baker cbaker+iwan1394@cs.cmu.edu. The lead time on a reply is usualy a day, but he is often very busy and may take up to a week to reply. In the case of a bug report, it is a generally good idea to send at least one of:
  • An execution trace:
    1. Go get DebugView or something similar and run it.
    2. Use "Help->Debug Settings" in 1394CameraDemo or SetDllTraceLevel() to turn up the trace level to 10
    3. Repeat your problem.
    4. Save the output of DebugView and send it with your report
  • A minimal sample source file that repeats your problem.