8#ifndef META_OCEAN_BASE_FRAME_H
9#define META_OCEAN_BASE_FRAME_H
74 static constexpr uint32_t pixelFormatBitOffsetChannels = 16u;
77 static constexpr uint32_t pixelFormatBitOffsetDatatype = pixelFormatBitOffsetChannels + 8u;
80 static constexpr uint32_t pixelFormatBitOffsetPlanes = pixelFormatBitOffsetDatatype + 8u;
83 static constexpr uint32_t pixelFormatBitOffsetWidthMultiple = pixelFormatBitOffsetPlanes + 8u;
86 static constexpr uint32_t pixelFormatBitOffsetHeightMultiple = pixelFormatBitOffsetWidthMultiple + 8u;
96 template <DataType tDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
102 static constexpr uint64_t value = (uint64_t(tHeightMultiple) << pixelFormatBitOffsetHeightMultiple) | (uint64_t(tWidthMultiple) << pixelFormatBitOffsetWidthMultiple) | (uint64_t(tPlanes) << pixelFormatBitOffsetPlanes) |(uint64_t(tDataType) << pixelFormatBitOffsetDatatype) | (uint64_t(tChannels) << pixelFormatBitOffsetChannels);
111 CV_CHANNELS_UNDEFINED = 0u,
187 FORMAT_UNDEFINED = 0ull,
244 FORMAT_BGR4444 = 5ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
249 FORMAT_BGR5551 = 6ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
264 FORMAT_BGR565 = 7ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
282 FORMAT_BGRA4444 = 9ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
302 FORMAT_BGGR10_PACKED = 10ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_4, MV_MULTIPLE_2>::value,
341 FORMAT_RGB4444 = 13ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
354 FORMAT_RGB5551 = 14ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
367 FORMAT_RGB565 = 15ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
395 FORMAT_RGBA4444 = 17ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_16, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
428 FORMAT_RGGB10_PACKED = 19ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_4, MV_MULTIPLE_2>::value,
446 FORMAT_Y_U_V12 = 20ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
495 FORMAT_Y_V_U12 = 24ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
527 FORMAT_Y_UV12 = 26ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_2, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
545 FORMAT_Y_VU12 = 27ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_2, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
563 FORMAT_YUYV16 = 28ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_2, MV_MULTIPLE_1>::value,
581 FORMAT_UYVY16 = 29ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_2, MV_MULTIPLE_1>::value,
621 FORMAT_Y10_PACKED = 32ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_1, MV_MULTIPLE_4, MV_MULTIPLE_1>::value,
693 FORMAT_Y_U_V24 = 39ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
718 FORMAT_Y_U_V24_LIMITED_RANGE = FORMAT_Y_U_V24,
743 FORMAT_Y_U_V24_FULL_RANGE = 40ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
783 FORMAT_Y8_FULL_RANGE = FORMAT_Y8,
808 FORMAT_Y_UV12_LIMITED_RANGE = FORMAT_Y_UV12,
834 FORMAT_Y_UV12_FULL_RANGE = 42ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_2, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
859 FORMAT_Y_VU12_LIMITED_RANGE = FORMAT_Y_VU12,
885 FORMAT_Y_VU12_FULL_RANGE = 43ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_2, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
910 FORMAT_Y_U_V12_LIMITED_RANGE = FORMAT_Y_U_V12,
936 FORMAT_Y_U_V12_FULL_RANGE = 44ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
961 FORMAT_Y_V_U12_LIMITED_RANGE = FORMAT_Y_V_U12,
987 FORMAT_Y_V_U12_FULL_RANGE = 45ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_2, MV_MULTIPLE_2>::value,
1013 FORMAT_R_G_B24 = 48ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
1029 FORMAT_B_G_R24 = 49ull |
GenericPixelFormat<DT_UNSIGNED_INTEGER_8, CV_CHANNELS_UNDEFINED , PV_PLANES_3, MV_MULTIPLE_1, MV_MULTIPLE_1>::value,
1048 ORIGIN_INVALID = 0u,
1084 static_assert(
sizeof(
PixelFormatProperties) ==
sizeof(std::underlying_type<PixelFormat>::type),
"Invalid helper struct!");
1137 inline FrameType(
const FrameType& type,
const unsigned int width,
const unsigned int height);
1165 inline unsigned int width()
const;
1171 inline unsigned int height()
const;
1184 inline void setPixelFormat(
const PixelFormat pixelFormat);
1196 inline unsigned int bytesPerDataType()
const;
1203 inline unsigned int channels()
const;
1209 inline uint32_t numberPlanes()
const;
1221 inline unsigned int pixels()
const;
1242 inline bool isPixelFormatCompatible(
const PixelFormat pixelFormat)
const;
1254 inline bool isFrameTypeCompatible(
const FrameType& frameType,
const bool allowDifferentPixelOrigins)
const;
1268 inline bool operator!=(
const FrameType& right)
const;
1282 inline bool isValid()
const;
1296 static inline uint32_t numberPlanes(
const PixelFormat pixelFormat);
1303 template <
typename T>
1304 static constexpr DataType dataType();
1329 static constexpr inline PixelFormat genericPixelFormat(
const DataType dataType,
const uint32_t channels,
const uint32_t planes = 1u,
const uint32_t widthMultiple = 1u,
const uint32_t heightMultiple = 1u);
1341 static PixelFormat genericPixelFormat(
const unsigned int bitsPerPixelChannel,
const uint32_t channels,
const uint32_t planes = 1u,
const uint32_t widthMultiple = 1u,
const uint32_t heightMultiple = 1u);
1361 template <DataType tDataType, u
int32_t tChannels, u
int32_t tPlanes = 1u, u
int32_t tW
idthMultiple = 1u, u
int32_t tHeightMultiple = 1u>
1362 constexpr static PixelFormat genericPixelFormat();
1381 template <DataType tDataType>
1382 constexpr static PixelFormat genericPixelFormat(
const uint32_t channels,
const uint32_t planes = 1u,
const uint32_t widthMultiple = 1u,
const uint32_t heightMultiple = 1u);
1403 template <
typename TDataType, u
int32_t tChannels, u
int32_t tPlanes = 1u, u
int32_t tW
idthMultiple = 1u, u
int32_t tHeightMultiple = 1u>
1424 template <
typename TDataType>
1425 constexpr static PixelFormat genericPixelFormat(uint32_t channels,
const uint32_t planes = 1u,
const uint32_t widthMultiple = 1u,
const uint32_t heightMultiple = 1u);
1445 static inline bool formatIsGeneric(
const PixelFormat pixelFormat,
const DataType dataType,
const uint32_t channels,
const uint32_t planes = 1u,
const uint32_t widthMultiple = 1u,
const uint32_t heightMultiple = 1u);
1452 static inline bool formatIsGeneric(
const PixelFormat pixelFormat);
1459 static inline bool formatIsPureGeneric(
const PixelFormat pixelFormat);
1466 static unsigned int formatGenericNumberChannels(
const PixelFormat pixelFormat);
1473 static inline unsigned int formatGenericBitsPerPixel(
const PixelFormat pixelFormat);
1557 static inline unsigned int widthMultiple(
const PixelFormat pixelFormat);
1564 static inline unsigned int heightMultiple(
const PixelFormat pixelFormat);
1581 static inline unsigned int planeBytesPerPixel(
const PixelFormat& imagePixelFormat,
const unsigned int planeIndex);
1596 static bool planeLayout(
const PixelFormat imagePixelFormat,
const unsigned int imageWidth,
const unsigned int imageHeight,
const unsigned int planeIndex,
unsigned int& planeWidth,
unsigned int& planeHeight,
unsigned int& planeChannels,
unsigned int* planeWidthElementsMultiple =
nullptr,
unsigned int* planeHeightElementsMultiple =
nullptr);
1609 static inline bool planeLayout(
const FrameType& frameType,
const unsigned int planeIndex,
unsigned int& planeWidth,
unsigned int& planeHeight,
unsigned int& planeChannels,
unsigned int* planeWidthElementsMultiple =
nullptr,
unsigned int* planeHeightElementsMultiple =
nullptr);
1717 template <
typename T>
1718 static inline bool dataIsAligned(
const void* data);
1738 static constexpr bool isSumInsideValueRange(
const unsigned int valueA,
const unsigned int valueB);
1746 static constexpr bool isProductInsideValueRange(
const unsigned int valueA,
const unsigned int valueB);
1751 unsigned int width_ = 0u;
1754 unsigned int height_ = 0u;
1817 CM_USE_KEEP_LAYOUT = 1u << 0u,
1819 CM_COPY_REMOVE_PADDING_LAYOUT = 1u << 1u,
1821 CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = 1u << 2u,
1823 CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = 1u << 3u,
1832 ACM_USE_KEEP_LAYOUT = CM_USE_KEEP_LAYOUT,
1834 ACM_COPY_REMOVE_PADDING_LAYOUT = CM_COPY_REMOVE_PADDING_LAYOUT,
1836 ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1838 ACM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA,
1841 ACM_USE_OR_COPY = ACM_USE_KEEP_LAYOUT | ACM_COPY_REMOVE_PADDING_LAYOUT,
1843 ACM_USE_OR_COPY_KEEP_LAYOUT = ACM_USE_KEEP_LAYOUT | ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1904 Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int elementTypeSize,
const unsigned int paddingElements)
noexcept;
1915 template <
typename T>
1916 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements)
noexcept;
1927 template <
typename T>
1928 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements)
noexcept;
1941 template <
typename T>
1942 inline Plane(
const T* sourceDataToCopy,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int targetPaddingElements,
const unsigned int sourcePaddingElements,
const bool makeCopyOfPaddingData =
false) noexcept;
1954 template <typename T>
1955 inline
Plane(const T* sourceDataToCopy, const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int sourcePaddingElements, const
CopyMode copyMode) noexcept;
1966 inline
unsigned int width() const;
1972 inline
unsigned int height() const;
1978 inline
unsigned int channels() const;
1985 template <typename T>
1986 inline const T* constdata() const;
1993 template <typename T>
2001 inline
unsigned int paddingElements() const;
2009 inline
unsigned int paddingBytes() const;
2015 inline
unsigned int elementTypeSize() const;
2025 inline
unsigned int widthElements() const;
2035 inline
unsigned int widthBytes() const;
2042 inline
unsigned int strideElements() const;
2048 inline
unsigned int strideBytes() const;
2054 inline
unsigned int bytesPerPixel() const;
2066 template <typename T>
2067 inline
bool isCompatibleWithDataType() const;
2074 inline
unsigned int size() const;
2080 inline
bool isContinuous() const;
2086 inline
bool isOwner() const;
2092 inline
bool isReadOnly() const;
2098 inline
bool isValid() const;
2108 bool copy(const
Plane& sourcePlane, const
AdvancedCopyMode advancedCopyMode = ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA, const
bool reallocateIfNecessary = true);
2134 static
void* alignedMemory(const
size_t size, const
size_t alignment,
void*& alignedData);
2145 static constexpr
bool validateMemoryLayout(const
unsigned int planeWidth, const
unsigned int planeHeight, const
unsigned int planeChannels, const
unsigned int bytesPerElement, const
unsigned int paddingElements);
2159 inline
Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize, const
void* constData,
void* data, const
unsigned int paddingElements) noexcept;
2170 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize, const
void* dataToUse, const
unsigned int paddingElements) noexcept;
2181 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize,
void* dataToUse, const
unsigned int paddingElements) noexcept;
2194 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize, const
void* sourceDataToCopy, const
unsigned int targetPaddingElements, const
unsigned int sourcePaddingElements, const
bool makeCopyOfPaddingData = false) noexcept;
2206 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize, const
void* sourceDataToCopy, const
unsigned int sourcePaddingElements, const
CopyMode copyMode) noexcept;
2215 void copy(const
void* sourceData, const
unsigned int sourceStrideBytes, const
unsigned int sourcePaddingElements, const
bool makeCopyOfPaddingData = false);
2221 inline
unsigned int calculateStrideBytes() const;
2227 unsigned int calculateBytesPerPixel() const;
2232 void* allocatedData_ =
nullptr;
2235 const
void* constData_ =
nullptr;
2238 void* data_ =
nullptr;
2241 unsigned int width_ = 0u;
2244 unsigned int height_ = 0u;
2247 unsigned int channels_ = 0u;
2250 unsigned int elementTypeSize_ = 0u;
2253 unsigned int paddingElements_ = 0u;
2256 unsigned int strideBytes_ = 0u;
2259 unsigned int bytesPerPixel_ = 0u;
2272 template <typename T>
2299 explicit inline PlaneInitializer(
const unsigned int planePaddingElements = 0u);
2308 static std::vector<PlaneInitializer<T>> createPlaneInitializersWithPaddingElements(
const Indices32& paddingElementsPerPlane);
2313 const T* constdata_ =
nullptr;
2322 unsigned int paddingElements_ = 0u;
2329 template <
typename T>
2337 template <
typename T,
unsigned int tChannels>
2407 template <
typename T>
2420 template <
typename T>
2430 template <
typename T>
2443 inline const FrameType& frameType()
const;
2449 inline const Planes& planes()
const;
2462 bool copy(
const Frame& source,
const bool copyTimestamp =
true);
2487 bool copy(
const int targetLeft,
const int targetTop,
const Frame& source,
const bool copyTimestamp =
true);
2510 template <
typename T>
2511 bool updateMemory(
const T* data,
const unsigned int planeIndex = 0u);
2522 template <
typename T>
2523 bool updateMemory(T* data,
const unsigned int planeIndex = 0u);
2532 template <
typename T>
2533 bool updateMemory(
const std::initializer_list<T*>& planeDatas);
2559 Frame subFrame(
const unsigned int subFrameLeft,
const unsigned int subFrameTop,
const unsigned int subFrameWidth,
const unsigned int subFrameHeight,
const CopyMode copyMode = CM_USE_KEEP_LAYOUT)
const;
2576 bool setValue(
const uint8_t value,
const unsigned int planeIndex = 0u,
const bool skipPaddingData =
true);
2598 template <
typename T, const
unsigned int tPlaneChannels>
2616 template <
typename T>
2617 bool setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex = 0u);
2636 template <
typename T>
2637 bool setValue(
const std::initializer_list<
typename Identity<T>::Type>& planePixelValues,
const unsigned int planeIndex = 0u);
2647 template <
typename T, const
unsigned int tPlaneChannels>
2655 inline unsigned int size(
const unsigned int planeIndex = 0u)
const;
2662 inline unsigned int paddingElements(
const unsigned int planeIndex = 0u)
const;
2669 inline unsigned int paddingBytes(
const unsigned int planeIndex = 0u)
const;
2677 inline unsigned int strideElements(
const unsigned int planeIndex = 0u)
const;
2684 inline unsigned int strideBytes(
const unsigned int planeIndex = 0u)
const;
2691 inline unsigned int planeWidth(
const unsigned int planeIndex)
const;
2698 inline unsigned int planeHeight(
const unsigned int planeIndex)
const;
2705 inline unsigned int planeChannels(
const unsigned int planeIndex)
const;
2712 inline unsigned int planeWidthElements(
const unsigned int planeIndex)
const;
2719 inline unsigned int planeWidthBytes(
const unsigned int planeIndex)
const;
2727 inline unsigned int planeBytesPerPixel(
const unsigned int planeIndex)
const;
2734 inline bool isPlaneContinuous(
const unsigned int planeIndex = 0u)
const;
2741 inline bool isPlaneOwner(
const unsigned int planeIndex = 0u)
const;
2747 inline const Timestamp& timestamp()
const;
2753 inline const Timestamp& relativeTimestamp()
const;
2760 inline void setTimestamp(
const Timestamp& timestamp);
2768 inline void setRelativeTimestamp(
const Timestamp& relative);
2783 template <
typename T>
2784 inline T* data(
const unsigned int planeIndex = 0u);
2793 template <
typename T>
2794 inline const T* constdata(
const unsigned int planeIndex = 0u)
const;
2811 template <
typename T>
2812 inline T* row(
const unsigned int y,
const unsigned int planeIndex = 0u);
2829 template <
typename T>
2830 inline const T* constrow(
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2884 template <
typename T>
2885 inline T* pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u);
2909 template <
typename T>
2910 inline const T* constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2916 inline bool isContinuous()
const;
2925 inline bool isOwner()
const;
2934 inline bool isReadOnly()
const;
2940 inline bool hasAlphaChannel()
const;
2948 template <
typename T>
2949 bool hasTransparentPixel(
const T opaque)
const;
2956 inline bool isValid()
const;
2972 explicit inline operator bool()
const;
3002 static bool strideBytes2paddingElements(
const PixelFormat& pixelFormat,
const unsigned int imageWidth,
const unsigned int planeStrideBytes,
unsigned int& planePaddingElements,
const unsigned int planeIndex = 0u);
3066 template <
typename T>
3078 template <
typename T>
3093inline FrameType::PixelFormatUnion::PixelFormatUnion(
const PixelFormat& pixelFormat) :
3094 pixelFormat_(pixelFormat)
3109 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3124 pixelFormat_(type.pixelFormat_),
3125 pixelOrigin_(type.pixelOrigin_)
3131 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3144 width_(type.width_),
3145 height_(type.height_),
3146 pixelFormat_(pixelFormat),
3147 pixelOrigin_(type.pixelOrigin_)
3153 width_(type.width_),
3154 height_(type.height_),
3155 pixelFormat_(type.pixelFormat_),
3156 pixelOrigin_(pixelOrigin)
3162 width_(type.width_),
3163 height_(type.height_),
3164 pixelFormat_(pixelFormat),
3165 pixelOrigin_(pixelOrigin)
3239 return !(*
this == right);
3260 static_assert(
sizeof(char) == 1,
"Invalid data type!");
3268 static_assert(
sizeof(
signed char) == 1,
"Invalid data type!");
3275 static_assert(
sizeof(
unsigned char) == 1,
"Invalid data type!");
3282 static_assert(
sizeof(
unsigned short) == 2,
"Invalid data type!");
3289 static_assert(
sizeof(short) == 2,
"Invalid data type!");
3296 static_assert(
sizeof(
unsigned int) == 4,
"Invalid data type!");
3303 static_assert(
sizeof(int) == 4,
"Invalid data type!");
3310 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3318 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3326 static_assert(
sizeof(
unsigned long long) == 8,
"Invalid data type!");
3333 static_assert(
sizeof(
long long) == 8,
"Invalid data type!");
3340 static_assert(
sizeof(float) == 4,
"Invalid data type!");
3347 static_assert(
sizeof(double) == 8,
"Invalid data type!");
3351template <
typename T>
3373 ocean_assert(planes >= 1u && planes <= 255u);
3380template <FrameType::DataType tDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3383 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3384 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3385 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3386 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3387 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3389 return genericPixelFormat(tDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3392template <FrameType::DataType tDataType>
3395 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3400template <
typename TDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3403 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3404 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3405 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3406 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3408 constexpr DataType pixelFormatDataType = dataType<TDataType>();
3409 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3411 return genericPixelFormat(pixelFormatDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3414template <
typename TDataType>
3417 constexpr DataType pixelFormatDataType = dataType<TDataType>();
3418 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3421 ocean_assert(planes >= 1u && planes <= 255u);
3430 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3447 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3464 unsigned int planeWidthDummy;
3465 unsigned int planeHeightDummy;
3469 unsigned int planeWidthElementsMultiple;
3470 unsigned int planeHeightElementsMultiple;
3474 ocean_assert(
planeChannels >= 1u && planeWidthElementsMultiple >= 1u && planeHeightElementsMultiple >= 1u);
3476 if (planeWidthElementsMultiple != 1u || planeHeightElementsMultiple != 1u)
3486 ocean_assert(
false &&
"Invalid input!");
3491inline bool FrameType::planeLayout(
const FrameType& frameType,
const unsigned int planeIndex,
unsigned int& planeWidth,
unsigned int& planeHeight,
unsigned int& planeChannels,
unsigned int* planeWidthElementsMultiple,
unsigned int* planeHeightElementsMultiple)
3493 ocean_assert(frameType.
isValid());
3498template <
typename T>
3501 ocean_assert(data !=
nullptr);
3502 return size_t(data) %
sizeof(T) ==
size_t(0);
3507 return valueA <= (
unsigned int)(-1) - valueB;
3512 return valueB == 0u || valueA <= (
unsigned int)(-1) / valueB;
3517 *
this = std::move(plane);
3520template <
typename T>
3521inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements) noexcept :
3522 Plane(width, height, channels,
sizeof(T), (
const void*)(dataToUse), paddingElements)
3527template <
typename T>
3528inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements) noexcept :
3529 Plane(width, height, channels,
sizeof(T), (
void*)(dataToUse), paddingElements)
3534template <
typename T>
3535inline Frame::Plane::Plane(
const T* sourceDataToCopy,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int targetPaddingElements,
const unsigned int sourcePaddingElements,
const bool makeCopyOfPaddingData) noexcept :
3536 Plane(width, height, channels,
sizeof(T), (
const void*)(sourceDataToCopy), targetPaddingElements, sourcePaddingElements, makeCopyOfPaddingData)
3541template <
typename T>
3542inline Frame::Plane::Plane(
const T* sourceDataToCopy,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int sourcePaddingElements,
const CopyMode copyMode) noexcept :
3543 Plane(width, height, channels,
sizeof(T), (
const void*)(sourceDataToCopy), sourcePaddingElements, copyMode)
3548inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int elementTypeSize,
const void* constData,
void* data,
const unsigned int paddingElements) noexcept :
3549 allocatedData_(
nullptr),
3550 constData_(constData),
3554 channels_(channels),
3555 elementTypeSize_(elementTypeSize),
3556 paddingElements_(paddingElements)
3558 strideBytes_ = calculateStrideBytes();
3559 bytesPerPixel_ = calculateBytesPerPixel();
3582template <
typename T>
3585 return reinterpret_cast<const T*
>(constData_);
3588template <
typename T>
3591 return reinterpret_cast<T*
>(data_);
3596 return paddingElements_;
3601 return paddingElements_ * elementTypeSize_;
3606 return elementTypeSize_;
3613 return width_ * channels_;
3620 return widthElements() * elementTypeSize_;
3627 return widthElements() + paddingElements_;
3632 ocean_assert(
width_ == 0u || strideBytes_ != 0u);
3633 ocean_assert(strideBytes_ == calculateStrideBytes());
3635 return strideBytes_;
3640 ocean_assert(bytesPerPixel_ == calculateBytesPerPixel());
3642 return bytesPerPixel_;
3645template <
typename T>
3648 return elementTypeSize_ ==
sizeof(T);
3660 return paddingElements_ == 0u;
3665 return allocatedData_ !=
nullptr;
3670 return data_ ==
nullptr;
3699 const unsigned int planeStrideBytes = planeStideElements * bytesPerElement;
3716template <
typename T>
3720 copyMode_(copyMode),
3721 paddingElements_(dataPaddingElements)
3726template <
typename T>
3728 constdata_(nullptr),
3730 copyMode_(copyMode),
3731 paddingElements_(dataPaddingElements)
3736template <
typename T>
3738 constdata_(nullptr),
3741 paddingElements_(planePaddingElements)
3746template <
typename T>
3750 planeInitializers.reserve(paddingElementsPerPlane.size());
3757 return planeInitializers;
3770 *
this = std::move(frame);
3772 ocean_assert(planes_.size() >= 1);
3773 ocean_assert(frame.planes_.size() == 1);
3777 Frame(frameType,
PlaneInitializer<void>::createPlaneInitializersWithPaddingElements(planePaddingElements), timestamp)
3779 ocean_assert(
frameType.
numberPlanes() == planePaddingElements.size() || planePaddingElements.empty());
3800template <
typename T>
3802 Frame(frameType, (const void*)(data), copyMode, paddingElements, timestamp)
3809 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3825template <
typename T>
3827 Frame(frameType, (void*)(data), copyMode, paddingElements, timestamp)
3834 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3840template <
typename T>
3842 Frame(frameType, (const
PlaneInitializer<void>*)planeInitializers.data(), planeInitializers.size(), timestamp)
3849 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3865template <
typename T>
3868 ocean_assert(
data !=
nullptr);
3869 if (
data !=
nullptr)
3876 if constexpr (!std::is_void_v<T>)
3885 plane.
data_ =
nullptr;
3895template <
typename T>
3898 ocean_assert(
data !=
nullptr);
3899 if (
data !=
nullptr)
3906 if constexpr (!std::is_void_v<T>)
3925template <
typename T>
3928 ocean_assert(planeDatas.size() != 0);
3929 ocean_assert(planeDatas.size() <=
planes_.
size());
3931 if (planeDatas.size() == 0 || planeDatas.size() >
planes_.
size())
3936 for (
unsigned int planeIndex = 0u; planeIndex < planeDatas.size(); ++planeIndex)
3938 if (!
updateMemory(planeDatas.begin()[planeIndex], planeIndex))
3947template <
typename T, const
unsigned int tPlaneChannels>
3950 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
3957 ocean_assert(plane.
isValid());
3961 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
3965 if (plane.
channels() != tPlaneChannels)
3967 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
3980 for (
unsigned int n = 0u; n < plane.
width() * plane.
height(); ++n)
3982 data[n] = planePixelValue;
3987 const unsigned int planeStrideBytes = plane.
strideBytes();
3989 for (
unsigned int y = 0u; y < plane.
height(); ++y)
3993 for (
unsigned int x = 0u; x < plane.
width(); ++x)
3995 data[x] = planePixelValue;
4003template <
typename T, const
unsigned int tPlaneChannels>
4006 static_assert(!std::is_void_v<T>,
"Value access/comparison cannot be performed with void types.");
4013 ocean_assert(plane.
isValid());
4017 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
4021 if (plane.
channels() != tPlaneChannels)
4023 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
4027 const unsigned int planeStrideBytes = plane.
strideBytes();
4029 for (
unsigned int y = 0u; y < plane.
height(); ++y)
4033 for (
unsigned int x = 0u; x < plane.
width(); ++x)
4035 if (
data[x] == planePixelValue)
4045template <
typename T>
4046bool Frame::setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex)
4048 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
4050 ocean_assert(planePixelValue !=
nullptr);
4052 ocean_assert(
planes_[planeIndex].elementTypeSize() ==
sizeof(T));
4055 switch (planePixelValueSize)
4064 return setValue<T, 1u>(value, planeIndex);
4075 return setValue<T, 2u>(value, planeIndex);
4087 return setValue<T, 3u>(value, planeIndex);
4100 return setValue<T, 4u>(value, planeIndex);
4104 ocean_assert(
false &&
"The number of channels is not supported");
4108template <
typename T>
4111 return setValue<T>(planePixelValues.begin(), planePixelValues.size(), planeIndex);
4127 return planes_[planeIndex].paddingElements();
4135 return planes_[planeIndex].paddingBytes();
4143 return planes_[planeIndex].strideElements();
4151 return planes_[planeIndex].strideBytes();
4159 return planes_[planeIndex].width();
4167 return planes_[planeIndex].height();
4175 return planes_[planeIndex].channels();
4183 return planes_[planeIndex].widthElements();
4191 return planes_[planeIndex].widthBytes();
4207 return planes_[planeIndex].isContinuous();
4215 return planes_[planeIndex].isOwner();
4238template <
typename T>
4244 return planes_[planeIndex].data<T>();
4247template <
typename T>
4253 return planes_[planeIndex].constdata<T>();
4256template <
typename T>
4257inline T*
Frame::row(
const unsigned int y,
const unsigned int planeIndex)
4260 ocean_assert(y <
height());
4266 ocean_assert(plane.
isValid());
4268 ocean_assert(y < plane.
height());
4269 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes());
4272template <
typename T>
4276 ocean_assert(y <
height());
4282 ocean_assert(plane.
isValid());
4284 ocean_assert(y < plane.
height());
4288template <
typename T>
4289inline T*
Frame::pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
4299 ocean_assert(plane.
isValid());
4301 if constexpr (!std::is_void_v<T>)
4325 ocean_assert(y < plane.
height());
4326 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes() + xBytes);
4329template <
typename T>
4330inline const T*
Frame::constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
const
4340 ocean_assert(plane.
isValid());
4342 if constexpr (!std::is_void_v<T>)
4352 ocean_assert(y < plane.
height());
4353 return reinterpret_cast<const T*
>(plane.
constdata<uint8_t>() + y * plane.
strideBytes() + xBytes);
4362 if (!plane.isContinuous())
4377 if (!plane.isOwner())
4392 if (plane.isReadOnly())
4418 if (
dataType() != dataType<uint8_t>())
4420 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4426 for (
unsigned int y = 0u; y <
height(); ++y)
4428 const uint8_t*
row = constrow<uint8_t>(y) + 1;
4430 for (
unsigned int x = 0u; x <
width(); ++x)
4447 for (
unsigned int y = 0u; y <
height(); ++y)
4449 const uint8_t*
row = constrow<uint8_t>(y) + offset;
4451 for (
unsigned int x = 0u; x <
width(); ++x)
4476 if (
dataType() != dataType<uint16_t>())
4478 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4484 for (
unsigned int y = 0u; y <
height(); ++y)
4486 const uint16_t*
row = constrow<uint16_t>(y) + 3;
4488 for (
unsigned int x = 0u; x <
width(); ++x)
4503 for (
unsigned int y = 0u; y <
height(); ++y)
4505 const uint16_t*
row = constrow<uint16_t>(y);
4507 for (
unsigned int x = 0u; x <
width(); ++x)
4509 if ((*
row & opaque) != opaque)
4522template <
typename T>
4538 size_t debugValidPlanes = 0;
4542 if (plane.isValid())
4550 ocean_assert(debugIsValid == frameTypeIsValid);
4554 return frameTypeIsValid;
4557inline Frame::operator bool()
const
Template class allowing to define an array of data types.
Definition DataType.h:27
Definition of an image plane, a block of memory storing pixel data with interleaved channels (or just...
Definition Frame.h:1873
unsigned int width() const
Returns the width of the plane in pixel.
Definition Frame.h:3567
bool isCompatibleWithDataType() const
Returns whether this plane is compatible with a given element data type.
Definition Frame.h:3646
unsigned int paddingElements() const
Returns the number of padding elements at the end of each plane row, in elements.
Definition Frame.h:3594
void * allocatedData_
The pointer to the memory which this plane has allocated, this pointer is pointing to the memory whic...
Definition Frame.h:2232
unsigned int paddingBytes() const
Returns the number of padding bytes at the end of each plane row, in bytes.
Definition Frame.h:3599
unsigned int elementTypeSize() const
Returns the size of each element of this plane.
Definition Frame.h:3604
bool isOwner() const
Returns whether this plane is the owner of the memory.
Definition Frame.h:3663
unsigned int calculateStrideBytes() const
Calculates the number of bytes between the start positions of two consecutive rows,...
Definition Frame.h:3709
void * data_
The pointer to the writable memory of the plane (not the pointer to the allocated memory),...
Definition Frame.h:2238
unsigned int strideBytes() const
Returns the number of bytes between the start positions of two consecutive rows, in bytes.
Definition Frame.h:3630
bool isContinuous() const
Returns whether this plane is based on continuous memory and thus does not have any padding at the en...
Definition Frame.h:3658
Plane(const unsigned int width, const unsigned int height, const unsigned int channels, const unsigned int elementTypeSize, const unsigned int paddingElements) noexcept
Creates a new plane object with own allocated memory.
const T * constdata() const
Returns the read-only memory pointer to this plane with a specific data type compatible with elementT...
Definition Frame.h:3583
bool isValid() const
Returns whether this plane holds valid data.
Definition Frame.h:3673
T * data()
Returns the writable memory pointer to this plane with a specific data type compatible with elementTy...
Definition Frame.h:3589
bool isReadOnly() const
Returns whether this plane holds read-only memory.
Definition Frame.h:3668
unsigned int size() const
Returns the number of bytes necessary for the entire plane data including optional padding elements a...
Definition Frame.h:3651
static constexpr bool validateMemoryLayout(const unsigned int planeWidth, const unsigned int planeHeight, const unsigned int planeChannels, const unsigned int bytesPerElement, const unsigned int paddingElements)
Returns whether the memory layout of a plane is valid (and fits into the memory).
Definition Frame.h:3678
unsigned int widthBytes() const
Returns the width of the plane in bytes, the width does not contain optional padding elements.
Definition Frame.h:3616
~Plane()
Destructs a Plane object.
Definition Frame.h:3562
Plane()=default
Creates a new invalid plane.
unsigned int channels() const
Returns the channels of the plane.
Definition Frame.h:3577
const void * constData_
The pointer to the read-only memory of the plane (not the pointer to the allocated memory),...
Definition Frame.h:2235
unsigned int bytesPerPixel() const
Returns the number of bytes which is used for each pixel.
Definition Frame.h:3638
void release()
Releases this plane and all resources of this plane.
unsigned int strideElements() const
Returns the number of elements between the start positions of two consecutive rows,...
Definition Frame.h:3623
Plane(const Plane &plane, const AdvancedCopyMode advancedCopyMode=ACM_USE_OR_COPY_KEEP_LAYOUT) noexcept
Copy constructor.
unsigned int height() const
Returns the height of the plane in pixel.
Definition Frame.h:3572
unsigned int paddingElements_
The number of padding elements at the end of each plane row, in elements, with range [0,...
Definition Frame.h:2253
unsigned int widthElements() const
Returns the width of the plane in elements, the width does not contain optional padding elements.
Definition Frame.h:3609
This class implements a helper class which can be used to initialize a multi-plane frame in the const...
Definition Frame.h:2274
PlaneInitializer(const T *constdata, const CopyMode copyMode, const unsigned int dataPaddingElements=0u)
Creates a new initializer object for a read-only memory pointer.
Definition Frame.h:3717
static std::vector< PlaneInitializer< T > > createPlaneInitializersWithPaddingElements(const Indices32 &paddingElementsPerPlane)
Creates plane initializer objects with padding elements only.
Definition Frame.h:3747
This class implements Ocean's image class.
Definition Frame.h:1808
bool copy(const int targetLeft, const int targetTop, const Frame &source, const bool copyTimestamp=true)
Copies the entire image content of a source frame into this frame.
static bool strideBytes2paddingElements(const PixelFormat &pixelFormat, const unsigned int imageWidth, const unsigned int planeStrideBytes, unsigned int &planePaddingElements, const unsigned int planeIndex=0u)
Determines the number of padding elements at the end of a row of a plane for which the pixel format,...
Frame(const FrameType &frameType, const CopyMode copyMode)=delete
Deleted constructor to prevent misuse.
typename Ocean::DataType< T, tChannels >::Type PixelType
Definition of a data type storing all channel values of one pixel in an array.
Definition Frame.h:2338
Timestamp relativeTimestamp_
Relative timestamp of this frame.
Definition Frame.h:3090
bool isContinuous() const
Returns whether all planes of this frame have continuous memory and thus do not contain any padding a...
Definition Frame.h:4356
bool hasAlphaChannel() const
Returns whether the frame's pixel format contains an alpha channel.
Definition Frame.h:4401
Frame(const FrameType &frameType, const PlaneInitializer< void > *planeInitializers, size_t sizePlaneInitializers, const Timestamp ×tamp=Timestamp(false))
Creates a new multi-plane frame with known frame type and given source memory for each individual pla...
unsigned int strideBytes(const unsigned int planeIndex=0u) const
Returns the number of bytes within one row, including optional padding at the end of a row for a spec...
Definition Frame.h:4146
bool haveIntersectingMemory(const Frame &frame) const
Returns whether two frame objects have any amount of intersecting memory.
Timestamp timestamp_
Timestamp of the frame.
Definition Frame.h:3087
unsigned int strideElements(const unsigned int planeIndex=0u) const
Returns the number of elements within one row, including optional padding at the end of a row for a s...
Definition Frame.h:4138
T * row(const unsigned int y, const unsigned int planeIndex=0u)
Returns the pointer to the pixel data of a specific row.
Definition Frame.h:4257
bool updateMemory(const T *data, const unsigned int planeIndex=0u)
Updates the memory pointer for a specific plane of the frame to a new read-only memory location.
Definition Frame.h:3866
Frame subFrame(const unsigned int subFrameLeft, const unsigned int subFrameTop, const unsigned int subFrameWidth, const unsigned int subFrameHeight, const CopyMode copyMode=CM_USE_KEEP_LAYOUT) const
Returns a sub-frame of this frame.
const T * constdata(const unsigned int planeIndex=0u) const
Returns a pointer to the read-only pixel data of a specific plane.
Definition Frame.h:4248
void setRelativeTimestamp(const Timestamp &relative)
Sets the relative timestamp of this frame.
Definition Frame.h:4233
const FrameType & frameType() const
Returns the frame type of this frame.
Definition Frame.h:3855
Frame(const Frame &frame)
Creates a second version of a given frame.
T * data(const unsigned int planeIndex=0u)
Returns a pointer to the pixel data of a specific plane.
Definition Frame.h:4239
bool isValid() const
Returns whether this frame is valid.
Definition Frame.h:4528
Frame(const FrameType &frameType, const T *data, const bool copyData, const unsigned int paddingElements=0u, const Timestamp ×tamp=Timestamp(false))=delete
Deleted constructor to prevent misuse, use Frame(const FrameType& frameType, const T* data,...
T * pixel(const unsigned int x, const unsigned int y, const unsigned int planeIndex=0u)
Returns the pointer to the data of a specific pixel.
Definition Frame.h:4289
void setTimestamp(const Timestamp ×tamp)
Sets the timestamp of this frame.
Definition Frame.h:4228
bool isReadOnly() const
Returns true, if the frame allows only read access (using constdata()).
Definition Frame.h:4386
Frame(const Frame &frame, const Timestamp ×tamp)=delete
Deleted constructor to prevent misuse.
bool copy(const Frame &source, const bool copyTimestamp=true)
Deprecated.
Frame(const Frame &frame, const bool copyData)=delete
Deleted constructor to prevent misuse.
Frame(const FrameType &frameType, const AdvancedCopyMode avancedCopyMode)=delete
Deleted constructor to prevent misuse.
bool set(const FrameType &frameType, const bool forceOwner, const bool forceWritable=false, const Indices32 &planePaddingElements=Indices32(), const Timestamp ×tamp=Timestamp(false), bool *reallocated=nullptr)
Sets a new frame type for this frame.
Frame & operator=(Frame &&right) noexcept
Move operator.
const Timestamp & timestamp() const
Returns the timestamp of this frame.
Definition Frame.h:4218
unsigned int planeBytesPerPixel(const unsigned int planeIndex) const
Returns the number of bytes of one pixel of a plane for a pixel format.
Definition Frame.h:4194
unsigned int planeWidthElements(const unsigned int planeIndex) const
Returns the width of a plane of this frame, not in pixel, but in elements, not including padding at t...
Definition Frame.h:4178
std::vector< PlaneInitializer< T > > PlaneInitializers
Definition of a vector holding plane initializer objects.
Definition Frame.h:2330
const Timestamp & relativeTimestamp() const
Returns the relative timestamp of this frame.
Definition Frame.h:4223
const Planes & planes() const
Returns the individual planes of this frame.
Definition Frame.h:3860
bool isOwner() const
Returns whether the frame is the owner of the internal frame data.
Definition Frame.h:4371
CopyMode
Definition of individual copy modes.
Definition Frame.h:1815
@ CM_USE_KEEP_LAYOUT
The source memory is used only, no copy is created, the padding layout is preserved.
Definition Frame.h:1817
unsigned int planeChannels(const unsigned int planeIndex) const
Returns the channels of a plane of this frame.
Definition Frame.h:4170
unsigned int planeWidth(const unsigned int planeIndex) const
Returns the width of a plane of this frame.
Definition Frame.h:4154
void release()
Releases this frame and the frame data if this frame is the owner.
Frame(const Frame &frame, const AdvancedCopyMode advancedCopyMode) noexcept
Creates a second version of a given frame.
Frame()
Creates an empty frame.
Definition Frame.h:3760
const T * constpixel(const unsigned int x, const unsigned int y, const unsigned int planeIndex=0u) const
Returns the pointer to the constant data of a specific pixel.
Definition Frame.h:4330
Frame(const FrameType &frameType, T *data, const bool copyData, const unsigned int paddingElements=0u, const Timestamp ×tamp=Timestamp(false))=delete
Deleted constructor to prevent misuse, use Frame(const FrameType& frameType, T* data,...
~Frame()
Destructs a frame.
void makeOwner()
Makes this frame the owner of the memory.
Frame(const FrameType &frameType, const Timestamp ×tamp)=delete
Deleted constructor to prevent misuse.
AdvancedCopyMode
Definition of advanced copy modes containing all copy modes from CopyMode but also some additional.
Definition Frame.h:1830
Frame(const Frame &frame, const CopyMode copyMode)=delete
Deleted constructor to prevent misuse, use AdvancedCopyMode instead.
bool isPlaneContinuous(const unsigned int planeIndex=0u) const
Returns whether a specific plane of this frame is based on continuous memory and thus does not have a...
Definition Frame.h:4202
bool containsValue(const PixelType< T, tPlaneChannels > &planePixelValue, const unsigned int planeIndex=0u) const
Returns whether the frame (one plane) contains a specified pixel value.
Definition Frame.h:4004
bool setValue(const uint8_t value, const unsigned int planeIndex=0u, const bool skipPaddingData=true)
Sets the memory of the frame to a specified byte value (the memory of one plane).
bool isPlaneOwner(const unsigned int planeIndex=0u) const
Returns whether a specific plane of this frame is the owner of the memory.
Definition Frame.h:4210
unsigned int paddingBytes(const unsigned int planeIndex=0u) const
Returns the optional number of padding bytes at the end of each row for a specific plane.
Definition Frame.h:4130
const T * constrow(const unsigned int y, const unsigned int planeIndex=0u) const
Returns the pointer to the constant data of a specific row.
Definition Frame.h:4273
void makeContinuous()
Makes the memory of this frame continuous.
unsigned int planeWidthBytes(const unsigned int planeIndex) const
Returns the width of a plane of this frame, not in pixel, but in bytes, not including padding at the ...
Definition Frame.h:4186
bool hasTransparentPixel(const T opaque) const
Returns whether the frame holds at least one pixel with an non opaque alpha value.
Definition Frame.h:4523
Frame & operator=(const Frame &right) noexcept
Assign operator.
unsigned int planeHeight(const unsigned int planeIndex) const
Returns the height of a plane of this frame.
Definition Frame.h:4162
unsigned int size(const unsigned int planeIndex=0u) const
Returns the number of bytes necessary for a specific plane including optional padding at the end of p...
Definition Frame.h:4114
Planes planes_
The individual memory planes of this frame.
Definition Frame.h:3084
unsigned int paddingElements(const unsigned int planeIndex=0u) const
Returns the optional number of padding elements at the end of each row for a specific plane.
Definition Frame.h:4122
Definition of a frame type composed by the frame dimension, pixel format and pixel origin.
Definition Frame.h:30
static unsigned int widthMultiple(const PixelFormat pixelFormat)
Returns the number of pixels the width of a frame must be a multiple of.
Definition Frame.h:3452
static PixelFormat translatePixelFormat(const std::string &pixelFormat)
Translates a string containing a pixel format into the pixel format.
static PixelFormat genericPixelFormat(const unsigned int bitsPerPixelChannel, const uint32_t channels, const uint32_t planes=1u, const uint32_t widthMultiple=1u, const uint32_t heightMultiple=1u)
Returns a specific generic pixel format with specified bit per pixel per channel, channel number,...
static unsigned int bytesPerDataType(const DataType dataType)
Returns the number of bytes which are necessary to store a specified data type.
bool operator==(const FrameType &right) const
Returns whether two frame types are equal.
unsigned int pixels() const
Returns the number of pixels for the frame.
Definition Frame.h:3220
FrameType()=default
Creates a new frame type with invalid parameters.
static unsigned int formatBitsPerPixelGreenChannel(const PixelFormat pixelFormat)
Returns the number of bits of one pixel for the green channel.
static constexpr uint32_t pixelFormatBitOffsetChannels
The number of bits the channel value is shifted within the PixelFormat value.
Definition Frame.h:74
static PixelFormat findPixelFormat(const DataType dataType, const unsigned int channels)
Returns a best fitting pixel format having the given number of bits per pixels.
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition Frame.h:183
@ FORMAT_YA16
Pixel format with byte order YA and 16 bits per pixel.
Definition Frame.h:649
@ FORMAT_BGRA4444
Pixel format with entirely 16 bits per pixel, 4 bits for each channel.
Definition Frame.h:282
@ FORMAT_UNDEFINED
Undefined pixel format.
Definition Frame.h:187
@ FORMAT_RGBA64
Pixel format with byte order RGBA and 64 bits per pixel, with 16 bit per component.
Definition Frame.h:675
@ FORMAT_RGBA4444
Pixel format with entirely 16 bits per pixel, 4 bits for each channel.
Definition Frame.h:395
@ FORMAT_ARGB32
Pixel format with byte order ARGB and 32 bits per pixel.
Definition Frame.h:213
@ FORMAT_ABGR32
Pixel format with byte order ABGR and 32 bits per pixel.
Definition Frame.h:200
@ FORMAT_RGBA32
Pixel format with byte order RGBA and 32 bits per pixel.
Definition Frame.h:382
@ FORMAT_YUVA32
Pixel format with byte order YUVA and 32 bits per pixel.
Definition Frame.h:472
@ FORMAT_BGRA32
Pixel format with byte order BGRA and 32 bits per pixel.
Definition Frame.h:277
unsigned int width() const
Returns the width of the frame format in pixel.
Definition Frame.h:3170
static PixelFormat genericSinglePlanePixelFormat(const PixelFormat pixelFormat)
Returns the most suitable 1-plane pixel format for a given pixel format which may be composed of seve...
PlanesValue
Definition of a protected helper enum that simplifies to read the definition of a predefined pixel fo...
Definition Frame.h:126
PixelOrigin pixelOrigin() const
Returns the pixel origin of the frame.
Definition Frame.h:3215
std::vector< PixelFormat > PixelFormats
Definition of a vector holding pixel formats.
Definition Frame.h:1040
static DataType translateDataType(const std::string &dataType)
Translates a string containing a data type into the data type.
unsigned int frameTypeSize() const
Returns the number of bytes necessary for the frame type, without padding at the end of frame rows.
static unsigned int formatGenericBitsPerPixel(const PixelFormat pixelFormat)
Returns the number of bits of one pixel for a given generic pixel format.
Definition Frame.h:3364
static constexpr bool isProductInsideValueRange(const unsigned int valueA, const unsigned int valueB)
Returns whether two values can be multiplied with each other without producing an overflow.
Definition Frame.h:3510
unsigned int height_
Frame height in pixel, with range [0, infinity)
Definition Frame.h:1754
static bool dataIsAligned(const void *data)
Returns whether a given pointer has the same byte alignment as the size of the data type the pointer ...
Definition Frame.h:3499
static PixelOrigin translatePixelOrigin(const std::string &pixelOrigin)
Translates a string containing the pixel origin into the pixel origin value.
bool operator!=(const FrameType &right) const
Returns whether two frame types are not equal.
Definition Frame.h:3237
static constexpr bool isSumInsideValueRange(const unsigned int valueA, const unsigned int valueB)
Returns whether two values can be added with each other without producing an overflow.
Definition Frame.h:3505
static bool planeLayout(const PixelFormat imagePixelFormat, const unsigned int imageWidth, const unsigned int imageHeight, const unsigned int planeIndex, unsigned int &planeWidth, unsigned int &planeHeight, unsigned int &planeChannels, unsigned int *planeWidthElementsMultiple=nullptr, unsigned int *planeHeightElementsMultiple=nullptr)
Returns the plane layout of a given pixel format.
static constexpr PixelFormat genericPixelFormat()
Returns a specific generic pixel format with a specified data type and channel number.
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition Frame.h:3210
PixelOrigin pixelOrigin_
The origin of the pixel data, either the upper left corner or the bottom left corner (if valid).
Definition Frame.h:1760
static std::string translatePixelFormat(const PixelFormat pixelFormat)
Translates a pixel format value into a string containing the pixel format.
static PixelFormat formatRemoveAlphaChannel(const PixelFormat pixelFormat)
Removes an alpha channel from a given pixel format.
static bool arePixelFormatsCompatible(const PixelFormat pixelFormatA, const PixelFormat pixelFormatB)
Returns whether two given pixel formats are compatible.
static unsigned int formatBitsPerPixelAlphaChannel(const PixelFormat pixelFormat)
Returns the number of bits of one pixel for the alpha channel.
MultipleValue
Definition of a protected helper enum that simplifies to read the definition of a predefined pixel fo...
Definition Frame.h:141
static bool areFrameTypesCompatible(const FrameType &frameTypeA, const FrameType &frameTypeB, const bool allowDifferentPixelOrigins)
Returns whether two given frame types are compatible.
static bool formatHasAlphaChannel(const PixelFormat pixelFormat, bool *isLastChannel=nullptr)
Returns whether a given pixel format holds an alpha channel.
static unsigned int heightMultiple(const PixelFormat pixelFormat)
Returns the number of pixels the height of a frame must be a multiple of.
Definition Frame.h:3457
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition Frame.h:3180
unsigned int bytesPerDataType() const
Returns the number of bytes which are necessary to store the data type of this frame.
Definition Frame.h:3195
static constexpr PixelFormat genericPixelFormat(uint32_t channels, const uint32_t planes=1u, const uint32_t widthMultiple=1u, const uint32_t heightMultiple=1u)
Returns a specific generic pixel format with a specified data type and channel number.
PixelOrigin
Defines different types of frame origin positions.
Definition Frame.h:1046
@ ORIGIN_INVALID
Invalid origin type.
Definition Frame.h:1048
@ ORIGIN_UPPER_LEFT
The first pixel lies in the upper left corner, the last pixel in the lower right corner.
Definition Frame.h:1050
static const FrameType::DataTypes & definedDataTypes()
Returns all defined data types.
ChannelsValue
Definition of a protected helper enum that simplifies to read the definition of a predefined pixel fo...
Definition Frame.h:109
DataType
Definition of individual channel data type.
Definition Frame.h:37
@ DT_UNSIGNED_INTEGER_64
Unsigned 64 bit integer data type (uint64_t).
Definition Frame.h:53
@ DT_UNSIGNED_INTEGER_16
Unsigned 16 bit integer data type (uint16_t).
Definition Frame.h:45
@ DT_SIGNED_INTEGER_16
Signed 16 bit integer data type (int16_t).
Definition Frame.h:47
@ DT_SIGNED_INTEGER_32
Signed 232 bit integer data type (int32_t).
Definition Frame.h:51
@ DT_END
The helper data type which can be used to identify the last defined data type, DT_END is exclusive.
Definition Frame.h:63
@ DT_SIGNED_INTEGER_64
Signed 64 bit integer data type (int64_t).
Definition Frame.h:55
@ DT_UNDEFINED
Undefined data type.
Definition Frame.h:39
@ DT_SIGNED_FLOAT_64
Signed 64 bit float data type (double).
Definition Frame.h:61
@ DT_UNSIGNED_INTEGER_8
Unsigned 8 bit integer data type (uint8_t).
Definition Frame.h:41
@ DT_UNSIGNED_INTEGER_32
Unsigned 32 bit integer data type (uint32_t).
Definition Frame.h:49
@ DT_SIGNED_FLOAT_16
Signed 16 bit float data type.
Definition Frame.h:57
@ DT_SIGNED_FLOAT_32
Signed 32 bit float data type (float).
Definition Frame.h:59
@ DT_SIGNED_INTEGER_8
Signed 8 bit integer data type (int8_t).
Definition Frame.h:43
static unsigned int planeBytesPerPixel(const PixelFormat &imagePixelFormat, const unsigned int planeIndex)
Returns the number of bytes of one pixel of a plane for a pixel format.
Definition Frame.h:3462
unsigned int height() const
Returns the height of the frame in pixel.
Definition Frame.h:3175
static unsigned int formatBitsPerPixelRedChannel(const PixelFormat pixelFormat)
Returns the number of bits of one pixel for the red channel.
static constexpr uint32_t pixelFormatBitOffsetDatatype
The number of bits the data type value is shifted within the PixelFormat value.
Definition Frame.h:77
static bool formatIsPacked(const PixelFormat pixelFormat)
Returns whether a given pixel format is a packed pixel format.
unsigned int width_
Frame width in pixel, with range [0, infinity)
Definition Frame.h:1751
static constexpr uint32_t pixelFormatBitOffsetWidthMultiple
The number of bits the width-multiple value is shifted within the PixelFormat value.
Definition Frame.h:83
bool operator<(const FrameType &right) const
Returns whether the left frame type is 'smaller' than the right one.
static bool formatIsPureGeneric(const PixelFormat pixelFormat)
Checks whether a given pixel format is a pure generic pixel format.
Definition Frame.h:3445
bool isValid() const
Returns whether this frame type is valid.
Definition Frame.h:3242
static const FrameType::PixelFormats & definedPixelFormats()
Returns all defined pixel formats.
bool isPixelFormatCompatible(const PixelFormat pixelFormat) const
Returns whether the pixel format of this frame type is compatible with a given pixel format.
Definition Frame.h:3227
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition Frame.h:3200
static unsigned int channels(const PixelFormat pixelFormat)
Returns the number of individual channels of a given pixel format.
PixelFormatUnion pixelFormat_
The pixel format of the frame encapsulated in a union (mainly holding PixelFormat).
Definition Frame.h:1757
static std::string translateDataType(const DataType dataType)
Translates a data type value into a string containing the data type.
std::vector< DataType > DataTypes
Definition of a vector holding data types.
Definition Frame.h:69
static unsigned int formatBitsPerPixelBlueChannel(const PixelFormat pixelFormat)
Returns the number of bits of one pixel for the blue channel.
static PixelFormat findPixelFormat(const unsigned int bitsPerPixel)
Returns a best fitting pixel format having the given number of bits per pixels.
DataType dataType() const
Returns the data type of the pixel format of this frame.
Definition Frame.h:3190
static PixelFormat makeGenericPixelFormat(const PixelFormat pixelFormat)
Converts a any pixel format into a generic one This function has no effect for input pixel formats wh...
Definition Frame.h:3428
static unsigned int planeChannels(const PixelFormat &imagePixelFormat, const unsigned int planeIndex)
Returns the channels of a plane for a pixel format.
static constexpr PixelFormat genericPixelFormat()
Returns a specific generic pixel format with a specified data type and channel number.
Definition Frame.h:3381
bool isFrameTypeCompatible(const FrameType &frameType, const bool allowDifferentPixelOrigins) const
Returns whether this frame type is compatible with a given frame type.
Definition Frame.h:3232
static constexpr uint32_t pixelFormatBitOffsetHeightMultiple
The number of bits the height-multiple value is shifted within the PixelFormat value.
Definition Frame.h:86
static unsigned int formatGenericNumberChannels(const PixelFormat pixelFormat)
Returns the number of individual channels of a given generic pixel format.
Definition Frame.h:3252
static std::string translatePixelOrigin(const PixelOrigin pixelOrigin)
Translates a pixel origin value into a string containing the pixel origin.
static bool formatIsGeneric(const PixelFormat pixelFormat, const DataType dataType, const uint32_t channels, const uint32_t planes=1u, const uint32_t widthMultiple=1u, const uint32_t heightMultiple=1u)
Checks whether a given pixel format is a specific layout regarding data channels and data type.
Definition Frame.h:3435
static constexpr uint32_t pixelFormatBitOffsetPlanes
The number of bits the planes value is shifted within the PixelFormat value.
Definition Frame.h:80
void setPixelFormat(const PixelFormat pixelFormat)
Explicitly changes the pixel format of this frame.
Definition Frame.h:3185
static PixelFormat formatAddAlphaChannel(const PixelFormat pixelFormat, const bool lastChannel=true)
Adds an alpha channel to a given pixel format.
T Type
The data type of 'T'.
Definition DataType.h:90
This template class implements a object reference with an internal reference counter.
Definition base/ObjectRef.h:58
bool isEmpty() const
Returns whether this vector is empty.
Definition StackHeapVector.h:570
size_t size() const
Returns the number of elements of this vector.
Definition StackHeapVector.h:556
This class implements a timestamp.
Definition Timestamp.h:36
std::vector< Frame > Frames
Definition of a vector holding padding frames.
Definition Frame.h:1771
std::vector< FrameRef > FrameRefs
Definition of a vector holding frame references.
Definition Frame.h:1783
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
Default definition of a type with tBytes bytes.
Definition DataType.h:32