8#ifndef META_OCEAN_SYSTEM_USB_VIDEO_VS_DESCRIPTOR_H
9#define META_OCEAN_SYSTEM_USB_VIDEO_VS_DESCRIPTOR_H
79 template <
typename TDescriptor>
114 inline uint8_t endpointAddress()
const;
131 uint8_t bLength_ = 0u;
134 uint8_t bDescriptorType_ = 0u;
137 uint8_t bDescriptorSubtype_ = 0u;
142 uint8_t bNumFormats_ = 0u;
145 uint16_t wTotalLength_ = 0u;
155 uint8_t bEndpointAddress_ = 0u;
162 uint8_t bmInfo_ = 0u;
165 uint8_t bTerminalLink_ = 0u;
174 uint8_t bStillCaptureMethod_ = 0u;
181 uint8_t bTriggerSupport_= 0u;
188 uint8_t bTriggerUsage_ = 0u;
193 uint8_t bControlSize_ = 0u;
278 uint8_t bLength_ = 0u;
281 uint8_t bDescriptorType_ = 0u;
284 uint8_t bDescriptorSubtype_ = 0u;
289 uint8_t bFormatIndex_ = 0u;
292 uint8_t bNumFrameDescriptors_ = 0u;
295 uint8_t guidFormat_[16] = {};
298 uint8_t bBitsPerPixel_ = 0u;
301 uint8_t bDefaultFrameIndex_ = 0u;
304 uint8_t bAspectRatioX_ = 0u;
307 uint8_t bAspectRatioY_ = 0u;
324 uint8_t bmInterlaceFlags_ = 0u;
327 uint8_t bCopyProtect_ = 0u;
393 uint8_t bLength_ = 0u;
396 uint8_t bDescriptorType_ = 0u;
399 uint8_t bDescriptorSubtype_ = 0u;
404 uint8_t bFrameIndex_ = 0u;
412 uint8_t bmCapabilities_ = 0u;
415 uint16_t wWidth_ = 0u;
418 uint16_t wHeight_ = 0u;
421 uint32_t dwMinBitRate_ = 0u;
424 uint32_t dwMaxBitRate_ = 0u;
433 uint32_t dwMaxVideoFrameBufferSize_ = 0u;
436 uint32_t dwDefaultFrameInterval_ = 0u;
439 uint8_t bFrameIntervalType_ = 0u;
445 uint32_t dwMinFrameInterval_ = 0u;
451 uint32_t dwMaxFrameInterval_ = 0u;
457 uint32_t dwFrameIntervalStep_ = 0u;
557 uint8_t bLength_ = 0u;
560 uint8_t bDescriptorType_ = 0u;
563 uint8_t bDescriptorSubtype_ = 0u;
568 uint8_t bFormatIndex_ = 0u;
571 uint8_t bNumFrameDescriptors_ = 0u;
574 uint8_t guidFormat_[16] = {};
577 uint8_t bBitsPerPixel_ = 0u;
580 uint8_t bDefaultFrameIndex_ = 0u;
583 uint8_t bAspectRatioX_ = 0u;
586 uint8_t bAspectRatioY_ = 0u;
603 uint8_t bmInterlaceFlags_ = 0u;
610 uint8_t bCopyProtect_ = 0u;
618 uint8_t bVariableSize_ = 0u;
684 uint8_t bLength_ = 0u;
687 uint8_t bDescriptorType_ = 0u;
690 uint8_t bDescriptorSubtype_ = 0u;
695 uint8_t bFrameIndex_ = 0u;
698 uint8_t bmCapabilities_ = 0u;
701 uint16_t wWidth_ = 0u;
704 uint16_t wHeight_ = 0u;
707 uint32_t dwMinBitRate_ = 0u;
710 uint32_t dwMaxBitRate_ = 0u;
713 uint32_t dwDefaultFrameInterval_ = 0u;
716 uint8_t bFrameIntervalType_ = 0u;
722 uint32_t dwBytesPerLine_ = 0u;
725 uint32_t dwMinFrameInterval_ = 0u;
728 uint32_t dwMaxFrameInterval_ = 0u;
731 uint32_t dwFrameIntervalStep_ = 0u;
791 uint8_t bLength_ = 0u;
794 uint8_t bDescriptorType_ = 0u;
797 uint8_t bDescriptorSubtype_ = 0u;
811 uint8_t bColorPrimaries_ = 0u;
825 uint8_t bTransferCharacteristics_ = 0u;
837 uint8_t bMatrixCoefficients_ = 0u;
894 uint8_t bLength_ = 0u;
897 uint8_t bDescriptorType_ = 0u;
900 uint8_t bDescriptorSubtype_ = 0u;
905 uint8_t bFormatIndex_ = 0u;
908 uint8_t bNumFrameDescriptors_ = 0u;
915 uint8_t bmFlags_ = 0u;
918 uint8_t bDefaultFrameIndex_ = 0u;
921 uint8_t bAspectRatioX_ = 0u;
924 uint8_t bAspectRatioY_ = 0u;
940 uint8_t bmInterlaceFlags_ = 0u;
947 uint8_t bCopyProtect_ = 0u;
1013 uint8_t bLength_ = 0u;
1016 uint8_t bDescriptorType_ = 0u;
1019 uint8_t bDescriptorSubtype_ = 0u;
1024 uint8_t bFrameIndex_ = 0u;
1034 uint8_t bmCapabilities_ = 0u;
1037 uint16_t wWidth_ = 0u;
1040 uint16_t wHeight_ = 0u;
1043 uint32_t dwMinBitRate_ = 0u;
1046 uint32_t dwMaxBitRate_ = 0u;
1056 uint32_t dwMaxVideoFrameBufferSize_ = 0u;
1059 uint32_t dwDefaultFrameInterval_ = 0u;
1066 uint8_t bFrameIntervalType_ = 0u;
1072 uint32_t dwMinFrameInterval_ = 0u;
1078 uint32_t dwMaxFrameInterval_ = 0u;
1084 uint32_t dwFrameIntervalStep_ = 0u;
1095template <
typename TDescriptor>
1098 if (frameRates !=
nullptr)
1100 frameRates->clear();
1103 if (!descriptor.isValid())
1110 if (descriptor.bFrameIntervalType_ == 0u)
1116 if (descriptor.dwFrameIntervalStep_ == 0u)
1120 result.emplace_back(descriptor.dwMinFrameInterval_);
1122 if (descriptor.dwMaxFrameInterval_ != descriptor.dwMinFrameInterval_)
1124 result.emplace_back(descriptor.dwMaxFrameInterval_);
1132 constexpr uint64_t maximalFrameIntervals = 1024ull;
1134 const uint64_t range = uint64_t(descriptor.dwMaxFrameInterval_) - uint64_t(descriptor.dwMinFrameInterval_);
1135 const uint64_t numberFrameIntervals = range / uint64_t(descriptor.dwFrameIntervalStep_) + 1ull;
1137 if (numberFrameIntervals > maximalFrameIntervals)
1139 Log::warning() <<
"VSDescriptor: The device announces " << numberFrameIntervals <<
" continuous frame intervals, only the boundaries are used";
1141 result.emplace_back(descriptor.dwMinFrameInterval_);
1143 if (descriptor.dwMaxFrameInterval_ != descriptor.dwMinFrameInterval_)
1145 result.emplace_back(descriptor.dwMaxFrameInterval_);
1152 for (uint64_t frameInterval = descriptor.dwMinFrameInterval_; frameInterval <= uint64_t(descriptor.dwMaxFrameInterval_); frameInterval += descriptor.dwFrameIntervalStep_)
1154 result.emplace_back(
Index32(frameInterval));
1163 result = descriptor.dwFrameInterval_;
1166 if (frameRates !=
nullptr)
1168 frameRates->reserve(result.size());
1170 for (
const uint32_t frameInterval : result)
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
@ FORMAT_UNDEFINED
Undefined pixel format.
Definition Frame.h:187
static MessageObject warning()
Returns the message for warning messages.
Definition Messenger.h:1090
This class implements the base class for all interface descriptors.
Definition system/usb/Descriptor.h:29
static double interval2frequency(const uint32_t timeInterval)
Converts a time interval (in 100ns) to frequency in Hz.
Color Matching Descriptor (VS_COLORFORMAT).
Definition VSDescriptor.h:761
VSColorMatchingDescriptor(const void *buffer, const size_t size)
Creates a new color matching descriptor from memory.
VSColorMatchingDescriptor()=default
Default constructor creating an invalid descriptor.
std::string toString() const
Returns the content of this descriptor as string.
bool isValid() const
Returns whether this object holds valid descriptor information.
This class implements the base class for all video streaming descriptors.
Definition VSDescriptor.h:37
VideoStreamingInterfaceTypes
Definition of individual video streaming interfaces types.
Definition VSDescriptor.h:45
@ VS_FRAME_MJPEG
Image descriptor for MJPEG stream.
Definition VSDescriptor.h:61
@ VS_STILL_FRAME
Descriptor for still images.
Definition VSDescriptor.h:53
@ VS_COLORFORMAT
Color format descriptor for any stream.
Definition VSDescriptor.h:63
@ VS_FORMAT_FRAME_BASED
Format descriptor for frame-based streams.
Definition VSDescriptor.h:65
@ VS_OUTPUT_HEADER
The Output Header descriptor for VS interfaces that contain an OUT endpoint for streaming video data.
Definition VSDescriptor.h:51
@ VS_INPUT_HEADER
The Input Header descriptor is used for VS interfaces that contain an IN endpoint for streaming video...
Definition VSDescriptor.h:49
@ VS_FORMAT_UNCOMPRESSED
Format descriptor for uncompressed streams.
Definition VSDescriptor.h:55
@ VS_UNDEFINED
Undefined descriptor.
Definition VSDescriptor.h:47
@ VS_FRAME_FRAME_BASED
Image descriptor for frame-based stream.
Definition VSDescriptor.h:67
@ VS_FRAME_UNCOMPRESSED
Image descriptor for uncompressed stream.
Definition VSDescriptor.h:57
@ VS_FORMAT_MJPEG
Format descriptor for MJPEG streams.
Definition VSDescriptor.h:59
static Indices32 frameIntervals(const TDescriptor &descriptor, std::vector< double > *frameRates=nullptr)
Returns the frame intervals of a given descriptor.
Definition VSDescriptor.h:1096
Frame Based Payload Frame Descriptor (VS_FRAME_FRAME_BASED).
Definition VSDescriptor.h:645
Indices32 frameIntervals(std::vector< double > *frameRates=nullptr) const
Returns the frame intervals of this descriptor.
VSFrameBasedFrameDescriptor(const void *buffer, const size_t size)
Creates a new frame descriptor from memory.
Indices32 dwFrameInterval_
For discrete Frame Intervals First entry: Shortest frame interval supported (at highest frame rate),...
Definition VSDescriptor.h:739
VSFrameBasedFrameDescriptor()=default
Default constructor creating an invalid descriptor.
std::string toString() const
Returns the content of this descriptor as string.
bool isValid() const
Returns whether this object holds valid descriptor information.
MJPEG Video Frame Descriptors (VS_FRAME_MJPEG).
Definition VSDescriptor.h:971
VSMJPEGVideoFrameDescriptor()=default
Default constructor creating an invalid descriptor.
std::string toString() const
Returns the content of this descriptor as string.
Indices32 frameIntervals(std::vector< double > *frameRates=nullptr) const
Returns the frame intervals of this descriptor.
bool isValid() const
Returns whether this object holds valid descriptor information.
VSMJPEGVideoFrameDescriptor(const void *buffer, const size_t size)
Creates a new frame descriptor from memory.
Indices32 dwFrameInterval_
For discrete Frame Intervals First entry: Shortest frame interval supported (at highest frame rate),...
Definition VSDescriptor.h:1092
Uncompressed Frame Descriptor (VS_FRAME_UNCOMPRESSED).
Definition VSDescriptor.h:351
std::string toString() const
Returns the content of this descriptor as string.
VSUncompressedVideoFrameDescriptor()=default
Default constructor creating an invalid descriptor.
Indices32 dwFrameInterval_
For discrete Frame Intervals First entry: Shortest frame interval supported (at highest frame rate),...
Definition VSDescriptor.h:465
bool isValid() const
Returns whether this object holds valid descriptor information.
Indices32 frameIntervals(std::vector< double > *frameRates=nullptr) const
Returns the frame intervals of this descriptor.
VSUncompressedVideoFrameDescriptor(const uint8_t *buffer, const size_t size)
Creates a new frame descriptor from memory.
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
uint32_t Index32
Definition of a 32 bit index value.
Definition Base.h:84
The namespace covering the entire Ocean framework.
Definition Accessor.h:15