CMU 1394 Digital Camera Driver

Main

Current Version

The current official release of the driver is 6.4.6, released on September 26, 2011 by Christopher R. Baker cbaker+iwan1394@cs.cmu.edu.

After more than a year of wrestling with the nuances of Microsoft's 64-bit operating systems, and with no small quantity of assistance from a few brave testers (you know who you are!), I am proud to officially release this next version of the CMU 1394 Digital Camera Driver, which includes:
  • Support for all present 64-bit versions of Microsoft Windows XP, Vista and 7, allowing both native (64-bit) and emulated (32-bit) applications to access camera data via a single driver interface.
  • A completely new demo application, written from the ground up to support both 32-bit and 64-bit Windows.
  • A litany of bugfixes, many of which were contributed by individual users (for which I am grateful!), including:
    • Squashment of the nefarious BSOD on resume-from-suspend bug
    • A closer-to-correct implementation of the Serial I/O functionality described in the IIDC 1.31 standard (closer = still a little quirky, but the quirks may be in the camera I am testing with)
    • Verified Strobe and Parallel I/O functionality (Strobe controls are also now integrated into the same dialog as Gain, Zoom, Focus, etc.)
    • .. and many others
  • New since the public beta:
    • Fully automated driver installation on 64-bit systems
    • Several minor bugfixes and documentation updates, but nothing that alters the API/ABI

Update: digital signatures for all kernel-mode software

All 64-bit versions of windows require a digital signature via an AuthentiCode certificate in order to run kernel-mode software. I would like to thank MathWorks for providing the funding for this certificate and allowing this driver set to continue to be published freely to the general public. MathWorks provides an adapter to the CMU 1394 Digital Camera driver as part of their Image Acquisition Toolkit to allow developers quick and easy access to images from firewire cameras within the MATLAB environment.

Known issues and limitations

  • Large-block asynchronous transfers. I have received several requests and offerance of patches that restore the ability to issue large asychronous I/O (i.e., larger than a single quadlet/register) requests to cameras. I am evaluating these and trying to fold them into the driver in a manner that supports 64-bit platforms.
  • Mysterious BSOD when using multiple 1394b cameras on the same bus under Windows 7. In experimenting with various configurations of cameras, 1394b host controllers, and driver settings, I have occasionally triggered inexplicable kernel panics while performing comparatively simple operations. Whether this is a quirk of the new Microsoft 1394 bus driver, of some particular host controller, of the 1394 camera driver's innards, or, most likely, of some combination thereof, remains to be seen. Using a single 1394b camera on a single bus is quite stable, however, and the circumstances where multiple cameras trigger this problem seem rare.
  • The usual assortment of bugs and quirks. Much of the frame-handling logic had to be altered to accommodate the curious limitations of DMA transfers on 64-bit systems. Although I have been unit-testing this code to the greatest extent possible, my experience is that no new code is completely bug-free. My thanks go out to the many beta testers who have helped me to this point, and further comments/questions/bug reports/etc. are especially welcome on this front.

Features

  • Distribution
    • using the Nullsoft Scriptable Install System
    • Includes the option to automatically install the CMU driver for all presently-connected cameras
    • Includes the option to install debug versions of the DLL and Demo App
  • API overhaul for the 6.4 release series includes:
    • Complete rework of the C1394Camera and associated class interfaces against better Object-Oriented Design Principles (encapsulation and data-hiding).
    • Migrated toward strong Model-Controller-View separation of concerns: (1394cmdr.sys-1394camera.dll-1394CameraDemo.exe).
    • Complete (if partially untested) implementation of IIDC DCAM version 1.31, including:
      • 1394b support
      • Optional Functions (PIO,SIO,Strobe)
      • Note: Format 6 (Stored Image) is still being ignored (does a camera even exist that supports this?).
  • Behavioral Changes
    • No more kernel-side frame timeouts. Previously, a frame buffer would simply detach itself after ten seconds, causing trouble for low frame rates and/or infrequent triggering.
    • OneShot and MultiShot functionality are now meaningfully exposed (see the documentation for CAM_ACQ_START_VIDEO_STREAM for details)
    • You may now stream the camera data to multiple PC's on the same 1394 bus (see the documentation for CAM_ACQ_SUBSCRIBE_ONLY for details).
  • Documentation
    • Uses Doxygen to generate 1394camera.chm, which is installed with the rest of the driver set.

Summary

We provide a free driver as well as a C++ software library for cameras that comply with the 1394 Digital Camera Specification as published by the 1394 Trade Association www.1394ta.org. It is a fast, easy way to gain direct access to camera imagery and direct control of camera features.

Introduction

The advent of IEEE-1394 based digital cameras seemed to be the ideal solution for acquiring high quality images with a regular laptop or PC. These cameras allow for both high quality images and fast image acquisition at up to 400 mbps.  When this project started in 1999, 1394 digital cameras were just becoming commercially available.  The problem at the time was a near complete lack of software support. We chose to fill this void by writing a software driver ourselves and making it available to the general public at no charge. The result of our efforts is a C/C++ software library (DLL) that works with any compliant camera running on Windows 98 SE or later.
In its current incarnation, the software provides a simple interface acquiring images, the ability to manipulate any available camera feature, and a tight, clean API.  The software has been thoroughly tested on only a few cameras (Sony DFW-V500,VL500, Pyro Webcam), but there is nothing coded specifically for these cameras and the driver should work with any other compliant camera. The distribution also includes complete source for a demo application (MFC) that demonstrates the functionality of the library.

Acknowledgements

We would like to thank the following people
  • Iwan Ulrich: Who originally developed and freely published this driver set for the benefit of the computer vision community. Iwan is unfortunately no longer with us. He and his wife Catherine were killed in a severe car accident during a vacation on the West Coast on July 4, 2000. As a tribute to Iwan, we at The Robotics Institute will continue to maintain this very popular software package.
  • David Walk for lending us a camera for several months and for his support in general.
  • Jerry Fife for lending us Sony cameras and for providing us with technical information
  • Ben Wegbreit for funding a large part of this project.
  • Mark Whitehorn for helping with the multiple camera support.
  • Ruigang Yang and Greg Welch for Windows 2000 support.
  • Chikayoshi Okamura for his technical support.
  • Larry Klementowsky for his technical advice.
  • Darlene Theriault for providing documentation.
[count]
Since 12/1/99