How does image data get from my IEEE-1394 digital camera to the user?

Last Revision Date: 8/27/2015

This article describes the "behind-the-scenes" processes that take place when an image is streamed from your IEEE-1394 digital camera to the PC.

The process in which the our driver on the PC obtains images from the IEEE-1394 digital camera is called buffer fill mode. The flow of data involves DMA, timing and CPU resources as follows:

    1. A pointer to a buffer allocated in main memory at the user level is passed to the our driver, which then tells the Windows 1394 low-level driver where it can find this buffer. In the case of the FlyCapture and Digiclops SDKs, these buffers are automatically allocated by the API at the user level once the camera is started.
    2. When the image comes into the PC from the camera, the Windows 1394 low-level driver manages setting up the DMA process, in which the image data is routed directly from the 1394 OHCI Host Controller interface card to the user level buffers allocated in Step 1.
    3. The image is DMAed directly into the user buffer without CPU intervention until the entire image is transferred.
    4. The CPU is interrupted and a high priority driver callback routine is executed.
    5. The driver callback routine signals the user-level application that the buffer is full.
    6. The process then repeats itself from step 3 until all user buffers are filled.
      Since the transfer is handled in hardware by the OHCI PCI adapter, it takes very little CPU resources. It should be noted that once the image buffer is available to the user, the image may be color processed, which can take up significant CPU resources. Whether the color processing is performed depends on the application and camera (see "How is color processing performed on my camera's images?").

When the camera is in isochronous (free-running) mode, it is continuously transmitting data; integration (shutter) and data transfer are overlapped.  The time between consecutive images reaching the host system is 1/frame_rate.  For example, the time between each image arriving from a Dragonfly running at 30Hz is 1000ms/30fps = 33.33ms/frame.

Related Articles