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);
1578 static inline unsigned int widthMultiple(
const PixelFormat pixelFormat);
1585 static inline unsigned int heightMultiple(
const PixelFormat pixelFormat);
1602 static inline unsigned int planeBytesPerPixel(
const PixelFormat& imagePixelFormat,
const unsigned int planeIndex);
1617 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);
1630 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);
1741 template <
typename T>
1742 static inline bool dataIsAligned(
const void* data);
1762 static constexpr bool isSumInsideValueRange(
const unsigned int valueA,
const unsigned int valueB);
1770 static constexpr bool isProductInsideValueRange(
const unsigned int valueA,
const unsigned int valueB);
1775 unsigned int width_ = 0u;
1778 unsigned int height_ = 0u;
1841 CM_USE_KEEP_LAYOUT = 1u << 0u,
1843 CM_COPY_REMOVE_PADDING_LAYOUT = 1u << 1u,
1845 CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = 1u << 2u,
1847 CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = 1u << 3u,
1856 ACM_USE_KEEP_LAYOUT = CM_USE_KEEP_LAYOUT,
1858 ACM_COPY_REMOVE_PADDING_LAYOUT = CM_COPY_REMOVE_PADDING_LAYOUT,
1860 ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1862 ACM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA,
1865 ACM_USE_OR_COPY = ACM_USE_KEEP_LAYOUT | ACM_COPY_REMOVE_PADDING_LAYOUT,
1867 ACM_USE_OR_COPY_KEEP_LAYOUT = ACM_USE_KEEP_LAYOUT | ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1928 Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int elementTypeSize,
const unsigned int paddingElements)
noexcept;
1939 template <
typename T>
1940 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements)
noexcept;
1951 template <
typename T>
1952 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements)
noexcept;
1965 template <
typename T>
1966 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;
1978 template <typename T>
1979 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;
1990 inline
unsigned int width() const;
1996 inline
unsigned int height() const;
2002 inline
unsigned int channels() const;
2009 template <typename T>
2010 inline const T* constdata() const;
2017 template <typename T>
2025 inline
unsigned int paddingElements() const;
2033 inline
unsigned int paddingBytes() const;
2039 inline
unsigned int elementTypeSize() const;
2049 inline
unsigned int widthElements() const;
2059 inline
unsigned int widthBytes() const;
2066 inline
unsigned int strideElements() const;
2072 inline
unsigned int strideBytes() const;
2078 inline
unsigned int bytesPerPixel() const;
2090 template <typename T>
2091 inline
bool isCompatibleWithDataType() const;
2098 inline
unsigned int size() const;
2104 inline
bool isContinuous() const;
2110 inline
bool isOwner() const;
2116 inline
bool isReadOnly() const;
2122 inline
bool isValid() const;
2132 bool copy(const
Plane& sourcePlane, const
AdvancedCopyMode advancedCopyMode = ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA, const
bool reallocateIfNecessary = true);
2158 static
void* alignedMemory(const
size_t size, const
size_t alignment,
void*& alignedData);
2169 static constexpr
bool validateMemoryLayout(const
unsigned int planeWidth, const
unsigned int planeHeight, const
unsigned int planeChannels, const
unsigned int bytesPerElement, const
unsigned int paddingElements);
2183 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;
2194 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;
2205 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize,
void* dataToUse, const
unsigned int paddingElements) noexcept;
2218 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;
2230 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;
2239 void copy(const
void* sourceData, const
unsigned int sourceStrideBytes, const
unsigned int sourcePaddingElements, const
bool makeCopyOfPaddingData = false);
2245 inline
unsigned int calculateStrideBytes() const;
2251 unsigned int calculateBytesPerPixel() const;
2256 void* allocatedData_ =
nullptr;
2259 const
void* constData_ =
nullptr;
2262 void* data_ =
nullptr;
2265 unsigned int width_ = 0u;
2268 unsigned int height_ = 0u;
2271 unsigned int channels_ = 0u;
2274 unsigned int elementTypeSize_ = 0u;
2277 unsigned int paddingElements_ = 0u;
2280 unsigned int strideBytes_ = 0u;
2283 unsigned int bytesPerPixel_ = 0u;
2296 template <typename T>
2323 explicit inline PlaneInitializer(
const unsigned int planePaddingElements = 0u);
2332 static std::vector<PlaneInitializer<T>> createPlaneInitializersWithPaddingElements(
const Indices32& paddingElementsPerPlane);
2337 const T* constdata_ =
nullptr;
2346 unsigned int paddingElements_ = 0u;
2353 template <
typename T>
2361 template <
typename T,
unsigned int tChannels>
2431 template <
typename T>
2444 template <
typename T>
2454 template <
typename T>
2467 inline const FrameType& frameType()
const;
2473 inline const Planes& planes()
const;
2486 bool copy(
const Frame& source,
const bool copyTimestamp =
true);
2511 bool copy(
const int targetLeft,
const int targetTop,
const Frame& source,
const bool copyTimestamp =
true);
2534 template <
typename T>
2535 bool updateMemory(
const T* data,
const unsigned int planeIndex = 0u);
2546 template <
typename T>
2547 bool updateMemory(T* data,
const unsigned int planeIndex = 0u);
2556 template <
typename T>
2557 bool updateMemory(
const std::initializer_list<T*>& planeDatas);
2583 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;
2600 bool setValue(
const uint8_t value,
const unsigned int planeIndex = 0u,
const bool skipPaddingData =
true);
2622 template <
typename T, const
unsigned int tPlaneChannels>
2640 template <
typename T>
2641 bool setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex = 0u);
2660 template <
typename T>
2661 bool setValue(
const std::initializer_list<
typename Identity<T>::Type>& planePixelValues,
const unsigned int planeIndex = 0u);
2671 template <
typename T, const
unsigned int tPlaneChannels>
2679 inline unsigned int size(
const unsigned int planeIndex = 0u)
const;
2686 inline unsigned int paddingElements(
const unsigned int planeIndex = 0u)
const;
2693 inline unsigned int paddingBytes(
const unsigned int planeIndex = 0u)
const;
2701 inline unsigned int strideElements(
const unsigned int planeIndex = 0u)
const;
2708 inline unsigned int strideBytes(
const unsigned int planeIndex = 0u)
const;
2715 inline unsigned int planeWidth(
const unsigned int planeIndex)
const;
2722 inline unsigned int planeHeight(
const unsigned int planeIndex)
const;
2729 inline unsigned int planeChannels(
const unsigned int planeIndex)
const;
2736 inline unsigned int planeWidthElements(
const unsigned int planeIndex)
const;
2743 inline unsigned int planeWidthBytes(
const unsigned int planeIndex)
const;
2751 inline unsigned int planeBytesPerPixel(
const unsigned int planeIndex)
const;
2758 inline bool isPlaneContinuous(
const unsigned int planeIndex = 0u)
const;
2765 inline bool isPlaneOwner(
const unsigned int planeIndex = 0u)
const;
2771 inline const Timestamp& timestamp()
const;
2777 inline const Timestamp& relativeTimestamp()
const;
2784 inline void setTimestamp(
const Timestamp& timestamp);
2792 inline void setRelativeTimestamp(
const Timestamp& relative);
2807 template <
typename T>
2808 inline T* data(
const unsigned int planeIndex = 0u);
2817 template <
typename T>
2818 inline const T* constdata(
const unsigned int planeIndex = 0u)
const;
2835 template <
typename T>
2836 inline T* row(
const unsigned int y,
const unsigned int planeIndex = 0u);
2853 template <
typename T>
2854 inline const T* constrow(
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2908 template <
typename T>
2909 inline T* pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u);
2933 template <
typename T>
2934 inline const T* constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2940 inline bool isContinuous()
const;
2949 inline bool isOwner()
const;
2958 inline bool isReadOnly()
const;
2964 inline bool hasAlphaChannel()
const;
2972 template <
typename T>
2973 bool hasTransparentPixel(
const T opaque)
const;
2980 inline bool isValid()
const;
2996 explicit inline operator bool()
const;
3026 static bool strideBytes2paddingElements(
const PixelFormat& pixelFormat,
const unsigned int imageWidth,
const unsigned int planeStrideBytes,
unsigned int& planePaddingElements,
const unsigned int planeIndex = 0u);
3090 template <
typename T>
3102 template <
typename T>
3117inline FrameType::PixelFormatUnion::PixelFormatUnion(
const PixelFormat& pixelFormat) :
3118 pixelFormat_(pixelFormat)
3133 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3148 pixelFormat_(type.pixelFormat_),
3149 pixelOrigin_(type.pixelOrigin_)
3155 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3168 width_(type.width_),
3169 height_(type.height_),
3170 pixelFormat_(pixelFormat),
3171 pixelOrigin_(type.pixelOrigin_)
3177 width_(type.width_),
3178 height_(type.height_),
3179 pixelFormat_(type.pixelFormat_),
3180 pixelOrigin_(pixelOrigin)
3186 width_(type.width_),
3187 height_(type.height_),
3188 pixelFormat_(pixelFormat),
3189 pixelOrigin_(pixelOrigin)
3263 return !(*
this == right);
3284 static_assert(
sizeof(char) == 1,
"Invalid data type!");
3292 static_assert(
sizeof(
signed char) == 1,
"Invalid data type!");
3299 static_assert(
sizeof(
unsigned char) == 1,
"Invalid data type!");
3306 static_assert(
sizeof(
unsigned short) == 2,
"Invalid data type!");
3313 static_assert(
sizeof(short) == 2,
"Invalid data type!");
3320 static_assert(
sizeof(
unsigned int) == 4,
"Invalid data type!");
3327 static_assert(
sizeof(int) == 4,
"Invalid data type!");
3334 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3342 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3350 static_assert(
sizeof(
unsigned long long) == 8,
"Invalid data type!");
3357 static_assert(
sizeof(
long long) == 8,
"Invalid data type!");
3364 static_assert(
sizeof(float) == 4,
"Invalid data type!");
3371 static_assert(
sizeof(double) == 8,
"Invalid data type!");
3375template <
typename T>
3397 ocean_assert(planes >= 1u && planes <= 255u);
3404template <FrameType::DataType tDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3407 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3408 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3409 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3410 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3411 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3413 return genericPixelFormat(tDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3416template <FrameType::DataType tDataType>
3419 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3424template <
typename TDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3427 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3428 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3429 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3430 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3432 constexpr DataType pixelFormatDataType = dataType<TDataType>();
3433 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3435 return genericPixelFormat(pixelFormatDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3438template <
typename TDataType>
3441 constexpr DataType pixelFormatDataType = dataType<TDataType>();
3442 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3445 ocean_assert(planes >= 1u && planes <= 255u);
3454 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3471 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3488 unsigned int planeWidthDummy;
3489 unsigned int planeHeightDummy;
3493 unsigned int planeWidthElementsMultiple;
3494 unsigned int planeHeightElementsMultiple;
3498 ocean_assert(
planeChannels >= 1u && planeWidthElementsMultiple >= 1u && planeHeightElementsMultiple >= 1u);
3500 if (planeWidthElementsMultiple != 1u || planeHeightElementsMultiple != 1u)
3510 ocean_assert(
false &&
"Invalid input!");
3515inline 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)
3517 ocean_assert(frameType.
isValid());
3522template <
typename T>
3525 ocean_assert(data !=
nullptr);
3526 return size_t(data) %
sizeof(T) ==
size_t(0);
3531 return valueA <= (
unsigned int)(-1) - valueB;
3536 return valueB == 0u || valueA <= (
unsigned int)(-1) / valueB;
3541 *
this = std::move(plane);
3544template <
typename T>
3545inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements) noexcept :
3546 Plane(width, height, channels,
sizeof(T), (
const void*)(dataToUse), paddingElements)
3551template <
typename T>
3552inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements) noexcept :
3553 Plane(width, height, channels,
sizeof(T), (
void*)(dataToUse), paddingElements)
3558template <
typename T>
3559inline 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 :
3560 Plane(width, height, channels,
sizeof(T), (
const void*)(sourceDataToCopy), targetPaddingElements, sourcePaddingElements, makeCopyOfPaddingData)
3565template <
typename T>
3566inline 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 :
3567 Plane(width, height, channels,
sizeof(T), (
const void*)(sourceDataToCopy), sourcePaddingElements, copyMode)
3572inline 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 :
3573 allocatedData_(
nullptr),
3574 constData_(constData),
3578 channels_(channels),
3579 elementTypeSize_(elementTypeSize),
3580 paddingElements_(paddingElements)
3582 strideBytes_ = calculateStrideBytes();
3583 bytesPerPixel_ = calculateBytesPerPixel();
3606template <
typename T>
3609 return reinterpret_cast<const T*
>(constData_);
3612template <
typename T>
3615 return reinterpret_cast<T*
>(data_);
3620 return paddingElements_;
3625 return paddingElements_ * elementTypeSize_;
3630 return elementTypeSize_;
3637 return width_ * channels_;
3644 return widthElements() * elementTypeSize_;
3651 return widthElements() + paddingElements_;
3656 ocean_assert(
width_ == 0u || strideBytes_ != 0u);
3657 ocean_assert(strideBytes_ == calculateStrideBytes());
3659 return strideBytes_;
3664 ocean_assert(bytesPerPixel_ == calculateBytesPerPixel());
3666 return bytesPerPixel_;
3669template <
typename T>
3672 return elementTypeSize_ ==
sizeof(T);
3684 return paddingElements_ == 0u;
3689 return allocatedData_ !=
nullptr;
3694 return data_ ==
nullptr;
3723 const unsigned int planeStrideBytes = planeStrideElements * bytesPerElement;
3740template <
typename T>
3744 copyMode_(copyMode),
3745 paddingElements_(dataPaddingElements)
3750template <
typename T>
3752 constdata_(nullptr),
3754 copyMode_(copyMode),
3755 paddingElements_(dataPaddingElements)
3760template <
typename T>
3762 constdata_(nullptr),
3765 paddingElements_(planePaddingElements)
3770template <
typename T>
3774 planeInitializers.reserve(paddingElementsPerPlane.size());
3781 return planeInitializers;
3794 *
this = std::move(frame);
3796 ocean_assert(planes_.size() >= 1);
3797 ocean_assert(frame.planes_.size() == 1);
3801 Frame(frameType,
PlaneInitializer<void>::createPlaneInitializersWithPaddingElements(planePaddingElements), timestamp)
3803 ocean_assert(
frameType.
numberPlanes() == planePaddingElements.size() || planePaddingElements.empty());
3824template <
typename T>
3826 Frame(frameType, (const void*)(data), copyMode, paddingElements, timestamp)
3833 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3849template <
typename T>
3851 Frame(frameType, (void*)(data), copyMode, paddingElements, timestamp)
3858 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3864template <
typename T>
3866 Frame(frameType, (const
PlaneInitializer<void>*)planeInitializers.data(), planeInitializers.size(), timestamp)
3873 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3889template <
typename T>
3892 ocean_assert(
data !=
nullptr);
3893 if (
data !=
nullptr)
3900 if constexpr (!std::is_void_v<T>)
3909 plane.
data_ =
nullptr;
3919template <
typename T>
3922 ocean_assert(
data !=
nullptr);
3923 if (
data !=
nullptr)
3930 if constexpr (!std::is_void_v<T>)
3949template <
typename T>
3952 ocean_assert(planeDatas.size() != 0);
3953 ocean_assert(planeDatas.size() <=
planes_.
size());
3955 if (planeDatas.size() == 0 || planeDatas.size() >
planes_.
size())
3960 for (
unsigned int planeIndex = 0u; planeIndex < planeDatas.size(); ++planeIndex)
3962 if (!
updateMemory(planeDatas.begin()[planeIndex], planeIndex))
3971template <
typename T, const
unsigned int tPlaneChannels>
3974 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
3981 ocean_assert(plane.
isValid());
3985 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
3989 if (plane.
channels() != tPlaneChannels)
3991 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
4004 for (
unsigned int n = 0u; n < plane.
width() * plane.
height(); ++n)
4006 data[n] = planePixelValue;
4011 const unsigned int planeStrideBytes = plane.
strideBytes();
4013 for (
unsigned int y = 0u; y < plane.
height(); ++y)
4017 for (
unsigned int x = 0u; x < plane.
width(); ++x)
4019 data[x] = planePixelValue;
4027template <
typename T, const
unsigned int tPlaneChannels>
4030 static_assert(!std::is_void_v<T>,
"Value access/comparison cannot be performed with void types.");
4037 ocean_assert(plane.
isValid());
4041 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
4045 if (plane.
channels() != tPlaneChannels)
4047 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
4051 const unsigned int planeStrideBytes = plane.
strideBytes();
4053 for (
unsigned int y = 0u; y < plane.
height(); ++y)
4057 for (
unsigned int x = 0u; x < plane.
width(); ++x)
4059 if (
data[x] == planePixelValue)
4069template <
typename T>
4070bool Frame::setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex)
4072 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
4074 ocean_assert(planePixelValue !=
nullptr);
4076 ocean_assert(
planes_[planeIndex].elementTypeSize() ==
sizeof(T));
4079 switch (planePixelValueSize)
4088 return setValue<T, 1u>(value, planeIndex);
4099 return setValue<T, 2u>(value, planeIndex);
4111 return setValue<T, 3u>(value, planeIndex);
4124 return setValue<T, 4u>(value, planeIndex);
4131 ocean_assert(
false &&
"The number of channels is not supported");
4135template <
typename T>
4138 return setValue<T>(planePixelValues.begin(), planePixelValues.size(), planeIndex);
4154 return planes_[planeIndex].paddingElements();
4162 return planes_[planeIndex].paddingBytes();
4170 return planes_[planeIndex].strideElements();
4178 return planes_[planeIndex].strideBytes();
4186 return planes_[planeIndex].width();
4194 return planes_[planeIndex].height();
4202 return planes_[planeIndex].channels();
4210 return planes_[planeIndex].widthElements();
4218 return planes_[planeIndex].widthBytes();
4234 return planes_[planeIndex].isContinuous();
4242 return planes_[planeIndex].isOwner();
4265template <
typename T>
4271 return planes_[planeIndex].data<T>();
4274template <
typename T>
4280 return planes_[planeIndex].constdata<T>();
4283template <
typename T>
4284inline T*
Frame::row(
const unsigned int y,
const unsigned int planeIndex)
4287 ocean_assert(y <
height());
4293 ocean_assert(plane.
isValid());
4295 ocean_assert(y < plane.
height());
4296 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes());
4299template <
typename T>
4303 ocean_assert(y <
height());
4309 ocean_assert(plane.
isValid());
4311 ocean_assert(y < plane.
height());
4315template <
typename T>
4316inline T*
Frame::pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
4326 ocean_assert(plane.
isValid());
4328 if constexpr (!std::is_void_v<T>)
4352 ocean_assert(y < plane.
height());
4353 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes() + xBytes);
4356template <
typename T>
4357inline const T*
Frame::constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
const
4367 ocean_assert(plane.
isValid());
4369 if constexpr (!std::is_void_v<T>)
4379 ocean_assert(y < plane.
height());
4380 return reinterpret_cast<const T*
>(plane.
constdata<uint8_t>() + y * plane.
strideBytes() + xBytes);
4389 if (!plane.isContinuous())
4404 if (!plane.isOwner())
4419 if (plane.isReadOnly())
4445 if (
dataType() != dataType<uint8_t>())
4447 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4453 for (
unsigned int y = 0u; y <
height(); ++y)
4455 const uint8_t*
row = constrow<uint8_t>(y) + 1;
4457 for (
unsigned int x = 0u; x <
width(); ++x)
4474 for (
unsigned int y = 0u; y <
height(); ++y)
4476 const uint8_t*
row = constrow<uint8_t>(y) + offset;
4478 for (
unsigned int x = 0u; x <
width(); ++x)
4503 if (
dataType() != dataType<uint16_t>())
4505 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4511 for (
unsigned int y = 0u; y <
height(); ++y)
4513 const uint16_t*
row = constrow<uint16_t>(y) + 3;
4515 for (
unsigned int x = 0u; x <
width(); ++x)
4530 for (
unsigned int y = 0u; y <
height(); ++y)
4532 const uint16_t*
row = constrow<uint16_t>(y);
4534 for (
unsigned int x = 0u; x <
width(); ++x)
4536 if ((*
row & opaque) != opaque)
4549template <
typename T>
4565 size_t debugValidPlanes = 0;
4569 if (plane.isValid())
4577 ocean_assert(debugIsValid == frameTypeIsValid);
4581 return frameTypeIsValid;
4584inline 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:1897
unsigned int width() const
Returns the width of the plane in pixel.
Definition Frame.h:3591
bool isCompatibleWithDataType() const
Returns whether this plane is compatible with a given element data type.
Definition Frame.h:3670
unsigned int paddingElements() const
Returns the number of padding elements at the end of each plane row, in elements.
Definition Frame.h:3618
void * allocatedData_
The pointer to the memory which this plane has allocated, this pointer is pointing to the memory whic...
Definition Frame.h:2256
unsigned int paddingBytes() const
Returns the number of padding bytes at the end of each plane row, in bytes.
Definition Frame.h:3623
unsigned int elementTypeSize() const
Returns the size of each element of this plane.
Definition Frame.h:3628
bool isOwner() const
Returns whether this plane is the owner of the memory.
Definition Frame.h:3687
unsigned int calculateStrideBytes() const
Calculates the number of bytes between the start positions of two consecutive rows,...
Definition Frame.h:3733
void * data_
The pointer to the writable memory of the plane (not the pointer to the allocated memory),...
Definition Frame.h:2262
unsigned int strideBytes() const
Returns the number of bytes between the start positions of two consecutive rows, in bytes.
Definition Frame.h:3654
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:3682
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:3607
bool isValid() const
Returns whether this plane holds valid data.
Definition Frame.h:3697
T * data()
Returns the writable memory pointer to this plane with a specific data type compatible with elementTy...
Definition Frame.h:3613
bool isReadOnly() const
Returns whether this plane holds read-only memory.
Definition Frame.h:3692
unsigned int size() const
Returns the number of bytes necessary for the entire plane data including optional padding elements a...
Definition Frame.h:3675
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:3702
unsigned int widthBytes() const
Returns the width of the plane in bytes, the width does not contain optional padding elements.
Definition Frame.h:3640
~Plane()
Destructs a Plane object.
Definition Frame.h:3586
Plane()=default
Creates a new invalid plane.
unsigned int channels() const
Returns the channels of the plane.
Definition Frame.h:3601
const void * constData_
The pointer to the read-only memory of the plane (not the pointer to the allocated memory),...
Definition Frame.h:2259
unsigned int bytesPerPixel() const
Returns the number of bytes which is used for each pixel.
Definition Frame.h:3662
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:3647
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:3596
unsigned int paddingElements_
The number of padding elements at the end of each plane row, in elements, with range [0,...
Definition Frame.h:2277
unsigned int widthElements() const
Returns the width of the plane in elements, the width does not contain optional padding elements.
Definition Frame.h:3633
This class implements a helper class which can be used to initialize a multi-plane frame in the const...
Definition Frame.h:2298
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:3741
static std::vector< PlaneInitializer< T > > createPlaneInitializersWithPaddingElements(const Indices32 &paddingElementsPerPlane)
Creates plane initializer objects with padding elements only.
Definition Frame.h:3771
This class implements Ocean's image class.
Definition Frame.h:1832
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:2362
Timestamp relativeTimestamp_
Relative timestamp of this frame.
Definition Frame.h:3114
bool isContinuous() const
Returns whether all planes of this frame have continuous memory and thus do not contain any padding a...
Definition Frame.h:4383
bool hasAlphaChannel() const
Returns whether the frame's pixel format contains an alpha channel.
Definition Frame.h:4428
Frame(const FrameType &frameType, const AdvancedCopyMode advancedCopyMode)=delete
Deleted constructor to prevent misuse.
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:4173
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:3111
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:4165
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:4284
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:3890
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:4275
void setRelativeTimestamp(const Timestamp &relative)
Sets the relative timestamp of this frame.
Definition Frame.h:4260
const FrameType & frameType() const
Returns the frame type of this frame.
Definition Frame.h:3879
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:4266
bool isValid() const
Returns whether this frame is valid.
Definition Frame.h:4555
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:4316
void setTimestamp(const Timestamp ×tamp)
Sets the timestamp of this frame.
Definition Frame.h:4255
bool isReadOnly() const
Returns true, if the frame allows only read access (using constdata()).
Definition Frame.h:4413
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.
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:4245
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:4221
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:4205
std::vector< PlaneInitializer< T > > PlaneInitializers
Definition of a vector holding plane initializer objects.
Definition Frame.h:2354
const Timestamp & relativeTimestamp() const
Returns the relative timestamp of this frame.
Definition Frame.h:4250
const Planes & planes() const
Returns the individual planes of this frame.
Definition Frame.h:3884
bool isOwner() const
Returns whether the frame is the owner of the internal frame data.
Definition Frame.h:4398
CopyMode
Definition of individual copy modes.
Definition Frame.h:1839
@ CM_USE_KEEP_LAYOUT
The source memory is used only, no copy is created, the padding layout is preserved.
Definition Frame.h:1841
unsigned int planeChannels(const unsigned int planeIndex) const
Returns the channels of a plane of this frame.
Definition Frame.h:4197
unsigned int planeWidth(const unsigned int planeIndex) const
Returns the width of a plane of this frame.
Definition Frame.h:4181
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:3784
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:4357
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:1854
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:4229
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:4028
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:4237
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:4157
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:4300
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:4213
bool hasTransparentPixel(const T opaque) const
Returns whether the frame holds at least one pixel with an non opaque alpha value.
Definition Frame.h:4550
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:4189
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:4141
Planes planes_
The individual memory planes of this frame.
Definition Frame.h:3108
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:4149
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:3476
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:3244
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:3194
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:3239
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:3388
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:3534
unsigned int height_
Frame height in pixel, with range [0, infinity)
Definition Frame.h:1778
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:3523
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:3261
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:3529
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 PixelFormat formatGrayscalePixelFormat(const PixelFormat pixelFormat)
Returns the best matching grayscale pixel format for 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:3234
PixelOrigin pixelOrigin_
The origin of the pixel data, either the upper left corner or the bottom left corner (if valid).
Definition Frame.h:1784
static std::string translatePixelFormat(const PixelFormat pixelFormat)
Translates a pixel format value into a string containing the pixel format.
static bool formatIsLimitedRange(const PixelFormat pixelFormat)
Returns whether a given pixel format is using a limited value range (e.g., like Y_UV12_LIMITED_RANGE)...
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:3481
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition Frame.h:3204
unsigned int bytesPerDataType() const
Returns the number of bytes which are necessary to store the data type of this frame.
Definition Frame.h:3219
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:3486
unsigned int height() const
Returns the height of the frame in pixel.
Definition Frame.h:3199
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:1775
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:3469
bool isValid() const
Returns whether this frame type is valid.
Definition Frame.h:3266
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:3251
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition Frame.h:3224
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:1781
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:3214
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:3452
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:3405
bool isFrameTypeCompatible(const FrameType &frameType, const bool allowDifferentPixelOrigins) const
Returns whether this frame type is compatible with a given frame type.
Definition Frame.h:3256
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:3276
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:3459
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:3209
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:621
size_t size() const
Returns the number of elements of this vector.
Definition StackHeapVector.h:607
This class implements a timestamp.
Definition Timestamp.h:51
std::vector< Index32 > Indices32
Definition of a vector holding 32 bit index values.
Definition Base.h:96
std::vector< Frame > Frames
Definition of a vector holding padding frames.
Definition Frame.h:1795
std::vector< FrameRef > FrameRefs
Definition of a vector holding frame references.
Definition Frame.h:1807
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