8#ifndef META_OCEAN_SYSTEM_USB_VIDEO_VIDEO_DEVICE_H
9#define META_OCEAN_SYSTEM_USB_VIDEO_VIDEO_DEVICE_H
73 class OCEAN_SYSTEM_USB_VIDEO_EXPORT
Sample
91 explicit Sample(
const size_t capacity,
const uint8_t descriptorFormatIndex,
const uint8_t descriptorFrameIndex,
const uint32_t dwClockFrequency);
97 inline uint8_t descriptorFormatIndex()
const;
103 inline uint8_t descriptorFrameIndex()
const;
123 inline const void* data()
const;
129 inline size_t size()
const;
135 inline bool mayContainError()
const;
167 void adoptStream(
const uint8_t descriptorFormatIndex,
const uint8_t descriptorFrameIndex,
const uint32_t dwClockFrequency,
const size_t capacity);
193 size_t position_ = 0;
196 bool mayContainError_ =
false;
199 uint64_t captureDeviceTime_ = uint64_t(-1);
202 uint64_t payloadDeviceTimes_[2] = {uint64_t(-1), uint64_t(-1)};
208 size_t nextDeviceTimeIndex_ = 0;
211 bool allowToResize_ =
false;
214 uint8_t descriptorFormatIndex_ = 0u;
217 uint8_t descriptorFrameIndex_ = 0u;
220 uint32_t dwClockFrequency_ = 0u;
239 static constexpr size_t maximalSampleQueueSize_ = 10;
254 inline bool isValid()
const;
268 VideoControlInterface(
const libusb_interface_descriptor& interfaceDescriptor, libusb_device_handle* usbDeviceHandle);
288 uint8_t bInterfaceIndex_ = 0u;
291 uint8_t bEndpointAddress_ = 0u;
294 bool isValid_ =
false;
422 inline bool isValid()
const;
447 template <
typename T>
448 static float determineResolutionFactor(
const T& frameDescriptor,
const unsigned int preferredWidth,
const unsigned int preferredHeight,
const unsigned int defaultPixels = 1280u * 720u);
459 template <
typename T>
460 static float determineFrameRateFactor(
const T& frameDescriptor,
const double preferredFrameRate, uint32_t& frameInterval,
const double defaultFrameRate);
477 uint8_t bInterfaceIndex_ = 0u;
480 uint8_t bEndpointAddress_ = 0u;
486 static constexpr size_t sampleMaxPayloadSize_ = 1024 * 1024 * 10;
494 SC_UNDEFINED = 0x00u,
496 SC_VIDEOCONTROL = 0x01u,
498 SC_VIDEOSTREAMING = 0x02u,
500 SC_VIDEO_INTERFACE_COLLECTION = 0x03u
505 VS_CONTROL_UNDEFINED = 0x00u,
507 VS_PROBE_CONTROL = 0x01u,
509 VS_COMMIT_CONTROL = 0x02u,
510 VS_STILL_PROBE_CONTROL = 0x03u,
511 VS_STILL_COMMIT_CONTROL = 0x04u,
512 VS_STILL_IMAGE_TRIGGER_CONTROL = 0x05u,
513 VS_STREAM_ERROR_CODE_CONTROL = 0x06u,
514 VS_GENERATE_KEY_FRAME_CONTROL = 0x07u,
515 VS_UPDATE_FRAME_SEGMENT_CONTROL = 0x08u,
516 VS_SYNCH_DELAY_CONTROL = 0x09u
568 static bool executeControl(libusb_device_handle* usbDeviceHandle,
const uint8_t bmRequestType,
const uint8_t bRequest,
const uint16_t wValue,
const uint16_t wIndex,
void* buffer,
const size_t size,
const unsigned int timeout = 5000u);
591 static constexpr unsigned int negotiationTimeout_ = 1000u;
608 static bool executeVideoControlCommit(libusb_device_handle* usbDeviceHandle,
const uint8_t interfaceIndex,
const VideoControl& videoControl,
const size_t videoControlSize,
const uint8_t bRequest = RC_SET_CUR);
619 static bool executeVideoControlProbe(libusb_device_handle* usbDeviceHandle,
const uint8_t interfaceIndex,
VideoControl& videoControl,
const size_t videoControlSize,
const uint8_t bRequest = RC_GET_CUR);
648 uint16_t bmHint_ = 0u;
658 uint8_t bFormatIndex_ = 0u;
671 uint8_t bFrameIndex_ = 0u;
686 uint32_t dwFrameInterval_ = 0u;
703 uint16_t wKeyFrameRate_ = 0u;
721 uint16_t wPFrameRate_ = 0u;
738 uint16_t wCompQuality_ = 0u;
758 uint16_t wCompWindowSize_ = 0u;
767 uint16_t wDelay_ = 0u;
782 uint32_t dwMaxVideoFrameSize_ = 0u;
790 uint32_t dwMaxPayloadTransferSize_ = 0u;
798 uint32_t dwClockFrequency_ = 0u;
818 uint8_t bmFramingInfo_ = 0u;
833 uint8_t bPreferedVersion_ = 0u;
841 uint8_t bMinVersion_ = 0u;
849 uint8_t bMaxVersion_ = 0u;
868 static bool getFocusAuto(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const RequestCode requestCode,
bool& value);
878 static bool setFocusAuto(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const bool value);
889 static bool getFocusAbsolute(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const RequestCode requestCode, uint16_t& value);
899 static bool setFocusAbsolute(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const uint16_t value);
918 static bool getAutoExposureMode(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const RequestCode requestCode, uint8_t& value);
936 static bool setAutoExposureMode(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const uint8_t value);
947 static bool getExposureAbsolute(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const RequestCode requestCode, uint32_t& value);
957 static bool setExposureAbsolute(libusb_device_handle* usbDeviceHandle,
const uint8_t terminalId,
const uint8_t interfaceIndex,
const uint32_t value);
962 static_assert(
sizeof(
VideoControl) == 34,
"Invalid struct size!");
987 inline uint8_t toggledFrameId()
const;
993 inline bool isEndOfFrame()
const;
999 inline bool hasPresentationTime()
const;
1005 inline bool hasSourceClockReference()
const;
1010 inline bool isStillImage()
const;
1016 inline bool hasError()
const;
1022 inline bool isEndOfHeader()
const;
1028 inline uint32_t sourceTimeClock()
const;
1034 inline uint16_t busFrameCounter()
const;
1041 uint8_t bHeaderLength_ = 0u;
1075 uint8_t bmHeaderInfo_ = 0u;
1084 uint32_t dwPresentationTime_ = 0u;
1110 uint8_t scrSourceClock_[6] = {};
1266 inline bool isStarted()
const;
1272 inline bool isValid()
const;
1371 bool initializeControlInterfaceInitialized_ =
false;
1374 libusb_config_descriptor* usbConfigDescriptor_ =
nullptr;
1377 uint8_t activeDescriptorFormatIndex_ = 0u;
1380 uint8_t activeDescriptorFrameIndex_ = 0u;
1383 uint32_t activeClockFrequency_ = 0u;
1386 size_t maximalSampleSize_ = 0;
1392 uint8_t interruptTransferBuffer_[64] = {};
1407 bool isStarted_ =
false;
1410 bool isStopping_ =
false;
1439 constexpr uint8_t checkBit = (1u << 0u);
1446 constexpr uint8_t checkBit = (1u << 1u);
1448 return (bmHeaderInfo_ & checkBit) != 0u;
1453 constexpr uint8_t checkBit = (1u << 2u);
1455 return (bmHeaderInfo_ & checkBit) != 0u;
1460 constexpr uint8_t checkBit = (1u << 3u);
1462 return (bmHeaderInfo_ & checkBit) != 0u;
1467 constexpr uint8_t checkBit = (1u << 5u);
1469 return (bmHeaderInfo_ & checkBit) != 0u;
1474 constexpr uint8_t checkBit = (1u << 6u);
1476 return (bmHeaderInfo_ & checkBit) != 0u;
1481 constexpr uint8_t checkBit = (1u << 7u);
1483 return (bmHeaderInfo_ & checkBit) != 0u;
1488 ocean_assert(hasSourceClockReference());
1491 memcpy(&result, scrSourceClock_,
sizeof(uint32_t));
1498 ocean_assert(hasSourceClockReference());
1501 memcpy(&result, scrSourceClock_ + 4,
sizeof(uint16_t));
1503 return result & uint16_t(0x07FFu);
1508 return descriptorFormatIndex_;
1513 return descriptorFrameIndex_;
1518 return buffer_.data();
1528 return mayContainError_;
1540 return uncompressedVideoStreams_;
1547 return frameBasedVideoStreams_;
1554 return mjpegVideoStreams_;
1559 return vsInputHeaderDescriptor_.isValid();
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
This class implements a recursive lock object.
Definition Lock.h:31
This class implements a scoped lock object for recursive lock objects.
Definition Lock.h:147
This class wraps an unmanaged object (or reference) which needs to be released after usage.
Definition ScopedObject.h:156
This class implements a subscription object which can be used unique subscriptions to e....
Definition ScopedSubscription.h:28
This class wraps a libusb device.
Definition system/usb/Device.h:49
bool isValid() const
Returns whether this device is valid.
Definition system/usb/Device.h:383
Lock lock_
The device's lock.
Definition system/usb/Device.h:356
std::vector< BufferPointer > BufferPointers
Definition of a vector holding buffer pointers.
Definition system/usb/Device.h:72
Color Matching Descriptor (VS_COLORFORMAT).
Definition VSDescriptor.h:761
This class implements functions for a Camera Control terminal.
Definition VideoDevice.h:856
static bool getFocusAbsolute(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const RequestCode requestCode, uint16_t &value)
Executes a probe request for an absolute focus interface.
static bool getFocusAuto(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const RequestCode requestCode, bool &value)
Executes a probe request for an auto focus interface.
static bool setFocusAbsolute(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const uint16_t value)
Executes a commit request for an auto focus interface.
static bool getAutoExposureMode(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const RequestCode requestCode, uint8_t &value)
Executes a probe request for an auto exposure interface.
static bool setAutoExposureMode(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const uint8_t value)
Executes a commit request for an auto exposure interface.
static bool getExposureAbsolute(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const RequestCode requestCode, uint32_t &value)
Executes a probe request for an absolute exposure interface.
static bool setFocusAuto(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const bool value)
Executes a commit request for an auto focus interface.
static bool setExposureAbsolute(libusb_device_handle *usbDeviceHandle, const uint8_t terminalId, const uint8_t interfaceIndex, const uint32_t value)
Executes a commit request for an absolute exposure interface.
Definition VideoDevice.h:523
static bool executeControl(libusb_device_handle *usbDeviceHandle, const uint8_t bmRequestType, const uint8_t bRequest, const uint16_t wValue, const uint16_t wIndex, void *buffer, const size_t size, const unsigned int timeout=5000u)
Executes a control commit or probe request.
RequestCode
Definition of the individual Video Class-Specific Request Codes.
Definition VideoDevice.h:530
This class holds the data of a media sample.
Definition VideoDevice.h:74
Sample()=default
Default constructor creating an invalid sample object.
std::string toString() const
Returns a string with the relevant information of this sample.
static uint64_t earlierTimestamp(const uint64_t timestampA, const uint64_t timestampB)
Returns the earlier timestamp of the two given timestamps while both timestamps are wrapped around 2^...
std::vector< uint8_t > buffer_
The payload buffer which can be appended with payload packets.
Definition VideoDevice.h:190
bool mayContainError() const
Returns whether this sample may contain errors (e.g., because there was a transmission error).
Definition VideoDevice.h:1526
void adoptStream(const uint8_t descriptorFormatIndex, const uint8_t descriptorFrameIndex, const uint32_t dwClockFrequency, const size_t capacity)
Adopts the stream a pooled sample is reused for.
void reset()
Resets the sample so that it can be reused.
Sample(const size_t capacity, const uint8_t descriptorFormatIndex, const uint8_t descriptorFrameIndex, const uint32_t dwClockFrequency)
Creates a new sample associated with a specific stream configuration.
bool append(const PayloadHeader &payloadHeader, const void *data, const size_t size)
Appends a payload packet to the sample.
static bool isPlausiblePayloadDelay(const double sPayloadDelay)
Returns whether a payload delay is plausible.
uint8_t descriptorFormatIndex() const
Returns the video format index specifying the format descriptor of the stream delivering this sample.
Definition VideoDevice.h:1506
size_t size() const
Returns the size of the sample.
Definition VideoDevice.h:1521
const void * data() const
Returns the buffer of this sample.
Definition VideoDevice.h:1516
Timestamp determineCaptureTimestamp() const
Determines the timestamp the sample was captured.
uint8_t descriptorFrameIndex() const
Returns the video frame index specifying the frame descriptor of the stream delivering this sample,...
Definition VideoDevice.h:1511
static int unwrapTimestamps(uint64_t ×tampA, uint64_t ×tampB)
Unwraps two timestamps while both are wrapped around 2^32.
Video Probe and Commit Controls.
Definition VideoDevice.h:586
static bool executeVideoControlProbe(libusb_device_handle *usbDeviceHandle, const uint8_t interfaceIndex, VideoControl &videoControl, const size_t videoControlSize, const uint8_t bRequest=RC_GET_CUR)
Executes a video probe control request.
std::string toString() const
Returns a string with the content of this object.
static bool proposeVideoControlProbe(libusb_device_handle *usbDeviceHandle, const uint8_t interfaceIndex, const VideoControl &videoControl, const size_t videoControlSize)
Proposes a video control to the device, the first step of the UVC stream negotiation.
static bool executeVideoControlCommit(libusb_device_handle *usbDeviceHandle, const uint8_t interfaceIndex, const VideoControl &videoControl, const size_t videoControlSize, const uint8_t bRequest=RC_SET_CUR)
Executes a video commit control request.
This class combines the video control interface functionality.
Definition VideoDevice.h:245
std::vector< VCSelectorUnitDescriptor > vcSelectorUnitDescriptors_
The selector unit descriptors.
Definition VideoDevice.h:279
VideoControlInterface(const libusb_interface_descriptor &interfaceDescriptor, libusb_device_handle *usbDeviceHandle)
Creates a new video control interface based on a given interface descriptor.
bool isValid() const
Returns whether this interface object is valid.
Definition VideoDevice.h:1531
std::vector< VCProcessingUnitDescriptor > vcProcessingUnitDescriptors_
The processing unit descriptors.
Definition VideoDevice.h:282
std::vector< VCExtensionUnitDescriptor > vcExtensionUnitDescriptors_
The extension unit descriptors.
Definition VideoDevice.h:285
VCHeaderDescriptor vcHeaderDescriptor_
The descriptor of the header interface.
Definition VideoDevice.h:273
std::vector< VCInputTerminalDescriptor > vcInputTerminalDescriptors_
The input terminal descriptors.
Definition VideoDevice.h:276
VideoControlInterface()=default
Default constructor creating an invalid interface.
This class implements a frame-based video stream.
Definition VideoDevice.h:347
VSFrameBasedVideoFormatDescriptor vsFrameBasedVideoFormatDescriptor_
The format descriptor of the frame-based stream.
Definition VideoDevice.h:351
std::vector< VSFrameBasedFrameDescriptor > vsFrameBasedFrameDescriptors_
The frame descriptors of the frame-based stream.
Definition VideoDevice.h:354
This class implements a Mjpeg video stream.
Definition VideoDevice.h:361
std::vector< VSMJPEGVideoFrameDescriptor > vsMJPEGVideoFrameDescriptors_
The frame descriptors of the Mjpeg stream.
Definition VideoDevice.h:368
VSMJPEGVideoFormatDescriptor vsMJPEGVideoFormatDescriptor_
The format descriptor of the Mjpeg stream.
Definition VideoDevice.h:365
This class implements an uncompressed video stream.
Definition VideoDevice.h:333
VSUncompressedVideoFormatDescriptor vsUncompressedVideoFormatDescriptor_
The format descriptor of the uncompressed stream.
Definition VideoDevice.h:337
std::vector< VSUncompressedVideoFrameDescriptor > vsUncompressedVideoFrameDescriptors_
The frame descriptors of the uncompressed stream.
Definition VideoDevice.h:340
This class implements the base class for all video streams.
Definition VideoDevice.h:322
VSColorMatchingDescriptor vsColorMatchingDescriptor_
The color matching descriptor of the stream.
Definition VideoDevice.h:326
This class combines the video streaming interface functionality.
Definition VideoDevice.h:301
static float determineResolutionFactor(const T &frameDescriptor, const unsigned int preferredWidth, const unsigned int preferredHeight, const unsigned int defaultPixels=1280u *720u)
Returns a factor describing how well the resolution of a descriptor matches a preferred image resolut...
std::vector< UncompressedVideoStream > UncompressedVideoStreams
Definition of a vector holding UncompressedVideoStream objects.
Definition VideoDevice.h:374
std::vector< MJPEGVideoStream > MJPEGVideoStreams
Definition of a vector holding MJPEGVideoStream objects.
Definition VideoDevice.h:384
VSInputHeaderDescriptor vsInputHeaderDescriptor_
The descriptor of the input header interface.
Definition VideoDevice.h:465
const UncompressedVideoStreams & uncompressedVideoStreams() const
Returns the available uncompressed video streams.
Definition VideoDevice.h:1536
const FrameBasedVideoStreams & frameBasedVideoStreams() const
Returns the available frame-based video streams.
Definition VideoDevice.h:1543
bool parseAdditionalInterface(const libusb_interface_descriptor &interfaceDescriptor, libusb_device_handle *usbDeviceHandle)
Parses an additional interface and adds it to this streaming interface object.
std::map< float, PriorityTriple > PriorityMap
Definition of an ordered map mapping priorities to triples combining formats, frames,...
Definition VideoDevice.h:314
MJPEGVideoStreams mjpegVideoStreams_
The Mjpeg-based video streams.
Definition VideoDevice.h:474
FrameBasedVideoStreams frameBasedVideoStreams_
The frame-based video streams.
Definition VideoDevice.h:471
VideoStreamingInterface()=default
Creates an invalid interface object.
PriorityMap findBestMatchingStream(const unsigned int preferredWidth, const unsigned int preferredHeight, const double preferredFrameRate, const DeviceStreamType deviceStreamType=DST_INVALID, const FrameType::PixelFormat pixelFormat=FrameType::FORMAT_UNDEFINED, VSFrameBasedVideoFormatDescriptor::EncodingFormat encodingFormat=VSFrameBasedVideoFormatDescriptor::EF_INVALID)
Returns a priority map with best matching stream configurations.
std::vector< FrameBasedVideoStream > FrameBasedVideoStreams
Definition of a vector holding FrameBasedVideoStream objects.
Definition VideoDevice.h:379
UncompressedVideoStreams uncompressedVideoStreams_
The uncompressed video streams.
Definition VideoDevice.h:468
bool isValid() const
Returns whether this interface object is valid.
Definition VideoDevice.h:1557
static float determineFrameRateFactor(const T &frameDescriptor, const double preferredFrameRate, uint32_t &frameInterval, const double defaultFrameRate)
Returns a factor describing how well one of the frame rates of a descriptor matches a preferred frame...
const MJPEGVideoStreams & mjpegVideoStreams() const
Returns the available Mjpeg video streams.
Definition VideoDevice.h:1550
This class implements a USB video device.
Definition VideoDevice.h:47
VideoStreamingInterface videoStreamingInterface_
The video streaming interface of this device.
Definition VideoDevice.h:1368
std::vector< Memory > streamingTransferMemories_
The memory for the individual streaming transfer objects.
Definition VideoDevice.h:1404
VideoControlInterface videoControlInterface_
The video control interface of this device.
Definition VideoDevice.h:1365
void releaseStartedStream()
Releases everything start() has created before it failed.
static std::string translateDeviceStreamType(const DeviceStreamType deviceStreamType)
Translates a device stream type to a string.
DeviceStreamType
Definition of individual USB UVC device stream types.
Definition VideoDevice.h:59
@ DST_UNCOMPRESSED
A stream composed of uncompressed video frames.
Definition VideoDevice.h:63
@ DST_MJPEG
A stream based on MJpeg.
Definition VideoDevice.h:65
VideoInterfaceSubclass
Definition of USB UVC Video Interface Subclass Codes.
Definition VideoDevice.h:492
Lock transferLock_
The lock for the stream and interrupt transfers, declared before everything it guards.
Definition VideoDevice.h:1395
ScopedSubscription claimedVideoStreamInterfaceSubscription_
The subscription for the claimed video stream interface.
Definition VideoDevice.h:1434
~VideoDevice() override
Destructs this video device and releases all associated resources.
VideoDevice & operator=(VideoDevice &&)=delete
Disabled move operator.
bool autoFocus(bool &value)
Returns whether auto focus is activated or deactivated.
void libusbStreamCallback(libusb_transfer &usbTransfer)
Libusb stream transfer callback function.
bool parseInterfaces()
Parses all interfaces of this device.
VideoDevice(Device &&device)
Creates a new video device based on a valid device.
VideoDevice(VideoDevice &&)=delete
Disabled move constructor.
bool setAutoExposureMode(const uint8_t value)
Sets the auto exposure mode.
bool isStarted_
True, if the video device has an active stream which has been started.
Definition VideoDevice.h:1407
ScopedSubscription claimedVideoControlInterfaceSubscription_
The subscription for the claimed video control interface.
Definition VideoDevice.h:1431
bool absoluteExposure(double *minValue, double *currentValue, double *maxValue)
Returns the absolute exposure duration of this device.
bool stop()
Stops the video device.
bool setAutoFocus(const bool value)
Activate or deactivate the auto focus of this device.
BufferPointers reusableBufferPointers_
Reusable buffer pointers to extract buffers from USB transfers.
Definition VideoDevice.h:1425
bool supportedAutoExposureModes(uint8_t &value) const
Returns the supported auto exposure modes.
Lock samplesLock_
The lock for the samples, declared before everything it guards.
Definition VideoDevice.h:1413
VideoDevice(const VideoDevice &)=delete
Disabled copy constructor.
DeviceStreamType extractStreamProperties(const uint8_t descriptorFormatIndex, const uint8_t descriptorFrameIndex, unsigned int &width, unsigned int &height, FrameType::PixelFormat &pixelFormat, VSFrameBasedVideoFormatDescriptor::EncodingFormat &encodingFormat) const
Extracts the relevant properties for a specific stream this device supports.
bool parseVideoInterface(const libusb_interface_descriptor &interfaceDescriptor)
Parses a video interface of this device.
static void LIBUSB_CALL libStatusCallback(libusb_transfer *usbTransfer)
Static libusb status transfer callback function.
void processPayload(const BufferPointers &bufferPointers)
Processes the payload which has been received from the device via a USB transfer.
bool setAbsoluteExposure(const double value)
Sets the absolute exposure duration of this device.
bool isStarted() const
Returns whether this video device has an active stream.
Definition VideoDevice.h:1567
static void LIBUSB_CALL libusbStreamCallback(libusb_transfer *usbTransfer)
Static libusb stream transfer callback function.
ScopedSubscription detachedKernelDriverSubscription_
The subscription for the detached kernel driver (if necessary/possible).
Definition VideoDevice.h:1428
SharedSample activeSample_
The currently active sample which is receiving sample data from the device (but not yet filled).
Definition VideoDevice.h:1416
bool libStatusCallback(libusb_transfer &usbTransfer)
Libusb status transfer callback function.
const VideoStreamingInterface & videoStreamingInterface() const
Returns the video streaming interface functionality of this device.
Definition VideoDevice.h:1562
bool setAbsoluteFocus(const float value)
Sets the absolute focus of this device.
bool absoluteFocus(float *minValue, float *currentValue, float *maxValue)
Returns the device's absolute focus.
bool isValid() const
Returns whether this video device is valid and ready to be used.
Definition VideoDevice.h:1574
bool start(const unsigned int preferredWidth=0u, const unsigned int preferredHeight=0u, const double preferredFrameRate=0.0, const DeviceStreamType preferredDeviceStreamType=DST_INVALID, const FrameType::PixelFormat preferredPixelFormat=FrameType::FORMAT_UNDEFINED, const VSFrameBasedVideoFormatDescriptor::EncodingFormat preferredEncodingFormat=VSFrameBasedVideoFormatDescriptor::EF_INVALID)
Starts the video device.
void giveSampleBack(SharedSample &&sample)
Gives a sample back to this device so that it can be reused by the device.
ControlSelectors
Definition VideoDevice.h:504
bool initializeControlInterfaceInitialized_
True, if the control interface has been initialized.
Definition VideoDevice.h:1371
std::queue< SharedSample > SampleQueue
Definition of a queue holding samples.
Definition VideoDevice.h:236
VideoDevice()=default
Default constructor creating an invalid video device.
bool autoExposureMode(uint8_t &value) const
Returns the current auto exposure mode.
SampleQueue sampleQueue_
The queue with all processed samples waiting to be grabbed by an external entity.
Definition VideoDevice.h:1419
Samples reusableSamples_
The reusable samples which waiting to be filled.
Definition VideoDevice.h:1422
TransferIndexMap transferIndexMap_
The map mapping transfer pointers to indices.
Definition VideoDevice.h:1401
ScopedTransfers streamingTransfers_
The streaming transfer objects.
Definition VideoDevice.h:1398
ScopedTransfer interruptTransfer_
The transfer object for interrupts.
Definition VideoDevice.h:1389
bool initializeControlInterface()
Initializes the control interface.
SharedSample nextSample(size_t *pendingSamples=nullptr)
Returns the next sample from this device.
std::vector< SharedSample > Samples
Definition of a vector holding samples.
Definition VideoDevice.h:231
std::shared_ptr< Sample > SharedSample
Definition of a shared pointer holding a Sample.
Definition VideoDevice.h:226
VideoDevice & operator=(const VideoDevice &)=delete
Disabled copy operator.
This class implements a timestamp.
Definition Timestamp.h:64
This class implements a triple object able to hold three individual elements.
Definition Triple.h:28
std::vector< ScopedTransfer > ScopedTransfers
Definition of a vector holding scoped libusb transfer objects.
Definition system/usb/USB.h:68
std::shared_ptr< VideoDevice > SharedVideoDevice
Definition of a shared pointer holding a VideoDevice.
Definition VideoDevice.h:39
std::unordered_map< libusb_transfer *, size_t > TransferIndexMap
Definition of an unordered map mapping libusb transfer points to indices.
Definition system/usb/USB.h:73
The namespace covering the entire Ocean framework.
Definition Accessor.h:15