class mrpt::hwdrivers::CImageGrabber_dc1394

Overview

Captures images from IEEE 1394 (FireWire) cameras using libdc1394-2.

Supports any IEEE 1394 camera (DCAM/IIDC standard), including stereo pairs such as the Point Grey Bumblebee. Use enumerateCameras() to discover connected devices and their GUIDs before opening.

Produced observations are:

Requires libdc1394-2 and OpenCV. Currently Linux-only.

You may need to set permissions: chmod 666 /dev/video1394/ * and chmod 666 /dev/raw1394 to allow non-root access to FireWire devices.

Ring buffer length is configurable via TCaptureOptions_dc1394::ring_buffer_size (new in MRPT 1.3.0).

See also:

mrpt::hwdrivers::CCameraSensor

#include <mrpt/hwdrivers/CImageGrabber_dc1394.h>

class CImageGrabber_dc1394
{
public:
    // typedefs

    typedef std::list<TCameraInfo> TCameraInfoList;

    // structs

    struct TCameraInfo;

    // construction

    CImageGrabber_dc1394(
        uint64_t cameraGUID = 0,
        uint16_t cameraUnit = 0,
        const TCaptureOptions_dc1394& options = TCaptureOptions_dc1394(),
        bool verbose = false
        );

    // methods

    bool isOpen() const;
    bool changeCaptureOptions(const TCaptureOptions_dc1394& options);
    std::optional<mrpt::obs::CObservationImage> grabFrame();
    bool getObservation(mrpt::obs::CObservationImage& out_observation);
    std::optional<mrpt::obs::CObservationStereoImages> grabStereoFrame();
    mrpt::img::BayerPattern bayerPattern() const;
    bool getObservation(mrpt::obs::CObservationStereoImages& out_observation);
    bool setSoftwareTriggerLevel(bool level);

    static void decodeStereoFrame(
        const uint8_t* interleaved,
        uint32_t width,
        uint32_t height,
        bool bayerDecoding,
        mrpt::img::BayerPattern pattern,
        mrpt::obs::CObservationStereoImages& out
        );

    static void enumerateCameras(TCameraInfoList& out_list);
};

Construction

CImageGrabber_dc1394(
    uint64_t cameraGUID = 0,
    uint16_t cameraUnit = 0,
    const TCaptureOptions_dc1394& options = TCaptureOptions_dc1394(),
    bool verbose = false
    )

Constructor: open an ieee1394 camera.

Parameters:

cameraGUID

Set the camera GUID to open, or 0 to open the first found camera.

cameraUnit

(Ignored if cameraGUID=0). The number of camera to open within the device with the given GUID: In a stereo camera this may be 0 or 1. Normally this is 0.

options

Capture options, defined in mrpt::hwdrivers::TCaptureOptions_dc1394.

verbose

Displays a lot of information about the camera to be open and its valid video modes.

Methods

bool isOpen() const

Check whether the camera has been open successfully.

bool changeCaptureOptions(const TCaptureOptions_dc1394& options)

Changes live capture properties (brightness, gain, shutter, etc.).

Frame size, frame rate, and color coding cannot be changed after opening the camera; those fields in options are silently ignored.

Parameters:

options

The new capture property values to apply.

Returns:

false on any error.

std::optional<mrpt::obs::CObservationImage> grabFrame()

Grabs one frame from a monocular FireWire camera.

May block when using software trigger if no frame is pending.

Deprecated Use grabFrame() instead.

Grabs one frame from a monocular FireWire camera, returning by value.

Parameters:

out_observation

Filled with the captured image.

Returns:

false on any error, true on success.

std::nullopt on any error, or the captured observation on success.

bool getObservation(mrpt::obs::CObservationImage& out_observation)

Deprecated Use grabFrame() instead.

std::optional<mrpt::obs::CObservationStereoImages> grabStereoFrame()

Grabs a stereo frame from a FireWire stereo camera.

The timestamp is the time the frame reached the capture ring buffer, so it does not depend on how late this method is called.

Returns:

std::nullopt on any error, or the captured stereo observation on success.

mrpt::img::BayerPattern bayerPattern() const

The Bayer color filter of the raw images: the one reported by the camera (Point Grey register BAYER_TILE_MAPPING), or GBRG (Bumblebee) if it reports none.

bool getObservation(mrpt::obs::CObservationStereoImages& out_observation)

Deprecated Use grabStereoFrame() instead.

bool setSoftwareTriggerLevel(bool level)

Sets the software trigger signal level (ON/OFF).

Allows controlling camera triggering via software rather than hardware.

Parameters:

level

true to assert (ON), false to de-assert (OFF).

Returns:

false on any error.

static void decodeStereoFrame(
    const uint8_t* interleaved,
    uint32_t width,
    uint32_t height,
    bool bayerDecoding,
    mrpt::img::BayerPattern pattern,
    mrpt::obs::CObservationStereoImages& out
    )

Splits a stereo frame into its left and right images.

Parameters:

interleaved

A frame of 16-bit pixels: the left camera pixel in the first byte and the right one in the second (e.g. Bumblebee MODE7_3).

width

height

Size of each image, in pixels.

bayerDecoding

If false, the images are the raw 8-bit Bayer mosaics; otherwise, RGB images demosaiced with pattern.

std::exception

If built without libdc1394.

static void enumerateCameras(TCameraInfoList& out_list)

Enumerates all FireWire cameras currently visible on the bus.

Generates a list with the information on all the existing (Firewire) cameras in the system.

Parameters:

out_list

Populated with one entry per discovered camera.

std::runtime_error

On any error from libdc1394.

std::runtime_error

On any error calling libdc1394.