8 #ifndef META_OCEAN_BASE_FRAME_H
9 #define META_OCEAN_BASE_FRAME_H
17 #include <type_traits>
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>
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);
1735 unsigned int width_ = 0u;
1738 unsigned int height_ = 0u;
1801 CM_USE_KEEP_LAYOUT = 1u << 0u,
1803 CM_COPY_REMOVE_PADDING_LAYOUT = 1u << 1u,
1805 CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = 1u << 2u,
1807 CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = 1u << 3u,
1816 ACM_USE_KEEP_LAYOUT = CM_USE_KEEP_LAYOUT,
1818 ACM_COPY_REMOVE_PADDING_LAYOUT = CM_COPY_REMOVE_PADDING_LAYOUT,
1820 ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1822 ACM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA = CM_COPY_KEEP_LAYOUT_COPY_PADDING_DATA,
1825 ACM_USE_OR_COPY = ACM_USE_KEEP_LAYOUT | ACM_COPY_REMOVE_PADDING_LAYOUT,
1827 ACM_USE_OR_COPY_KEEP_LAYOUT = ACM_USE_KEEP_LAYOUT | ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA,
1888 Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int elementTypeSize,
const unsigned int paddingElements) noexcept;
1899 template <
typename T>
1900 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements) noexcept;
1911 template <
typename T>
1912 inline Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements) noexcept;
1925 template <
typename T>
1926 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;
1938 template <typename T>
1939 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;
1950 inline
unsigned int width() const;
1956 inline
unsigned int height() const;
1962 inline
unsigned int channels() const;
1969 template <typename T>
1970 inline const T* constdata() const;
1977 template <typename T>
1985 inline
unsigned int paddingElements() const;
1993 inline
unsigned int paddingBytes() const;
1999 inline
unsigned int elementTypeSize() const;
2009 inline
unsigned int widthElements() const;
2019 inline
unsigned int widthBytes() const;
2026 inline
unsigned int strideElements() const;
2032 inline
unsigned int strideBytes() const;
2038 inline
unsigned int bytesPerPixel() const;
2050 template <typename T>
2051 inline
bool isCompatibleWithDataType() const;
2058 inline
unsigned int size() const;
2064 inline
bool isContinuous() const;
2070 inline
bool isOwner() const;
2076 inline
bool isReadOnly() const;
2082 inline
bool isValid() const;
2092 bool copy(const
Plane& sourcePlane, const
AdvancedCopyMode advancedCopyMode = ACM_COPY_KEEP_LAYOUT_DO_NOT_COPY_PADDING_DATA, const
bool reallocateIfNecessary = true);
2118 static
void* alignedMemory(const
size_t size, const
size_t alignment,
void*& alignedData);
2132 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;
2143 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;
2154 Plane(const
unsigned int width, const
unsigned int height, const
unsigned int channels, const
unsigned int elementTypeSize,
void* dataToUse, const
unsigned int paddingElements) noexcept;
2167 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;
2179 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;
2188 void copy(const
void* sourceData, const
unsigned int sourceStrideBytes, const
unsigned int sourcePaddingElements, const
bool makeCopyOfPaddingData = false);
2194 inline
unsigned int calculateStrideBytes() const;
2200 unsigned int calculateBytesPerPixel() const;
2205 void* allocatedData_ =
nullptr;
2208 const
void* constData_ =
nullptr;
2211 void* data_ =
nullptr;
2214 unsigned int width_ = 0u;
2217 unsigned int height_ = 0u;
2220 unsigned int channels_ = 0u;
2223 unsigned int elementTypeSize_ = 0u;
2226 unsigned int paddingElements_ = 0u;
2229 unsigned int strideBytes_ = 0u;
2232 unsigned int bytesPerPixel_ = 0u;
2245 template <typename T>
2272 explicit inline PlaneInitializer(
const unsigned int planePaddingElements = 0u);
2281 static std::vector<PlaneInitializer<T>> createPlaneInitializersWithPaddingElements(
const Indices32& paddingElementsPerPlane);
2286 const T* constdata_ =
nullptr;
2295 unsigned int paddingElements_ = 0u;
2302 template <
typename T>
2310 template <
typename T,
unsigned int tChannels>
2380 template <
typename T>
2393 template <
typename T>
2403 template <
typename T>
2416 inline const FrameType& frameType()
const;
2422 inline const Planes& planes()
const;
2435 bool copy(
const Frame& source,
const bool copyTimestamp =
true);
2460 bool copy(
const int targetLeft,
const int targetTop,
const Frame& source,
const bool copyTimestamp =
true);
2483 template <
typename T>
2484 bool updateMemory(
const T* data,
const unsigned int planeIndex = 0u);
2495 template <
typename T>
2496 bool updateMemory(T* data,
const unsigned int planeIndex = 0u);
2505 template <
typename T>
2506 bool updateMemory(
const std::initializer_list<T*>& planeDatas);
2532 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;
2549 bool setValue(
const uint8_t value,
const unsigned int planeIndex = 0u,
const bool skipPaddingData =
true);
2571 template <
typename T, const
unsigned int tPlaneChannels>
2589 template <
typename T>
2590 bool setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex = 0u);
2609 template <
typename T>
2610 bool setValue(
const std::initializer_list<
typename Identity<T>::Type>& planePixelValues,
const unsigned int planeIndex = 0u);
2620 template <
typename T, const
unsigned int tPlaneChannels>
2628 inline unsigned int size(
const unsigned int planeIndex = 0u)
const;
2635 inline unsigned int paddingElements(
const unsigned int planeIndex = 0u)
const;
2642 inline unsigned int paddingBytes(
const unsigned int planeIndex = 0u)
const;
2650 inline unsigned int strideElements(
const unsigned int planeIndex = 0u)
const;
2657 inline unsigned int strideBytes(
const unsigned int planeIndex = 0u)
const;
2664 inline unsigned int planeWidth(
const unsigned int planeIndex)
const;
2671 inline unsigned int planeHeight(
const unsigned int planeIndex)
const;
2678 inline unsigned int planeChannels(
const unsigned int planeIndex)
const;
2685 inline unsigned int planeWidthElements(
const unsigned int planeIndex)
const;
2692 inline unsigned int planeWidthBytes(
const unsigned int planeIndex)
const;
2700 inline unsigned int planeBytesPerPixel(
const unsigned int planeIndex)
const;
2707 inline bool isPlaneContinuous(
const unsigned int planeIndex = 0u)
const;
2714 inline bool isPlaneOwner(
const unsigned int planeIndex = 0u)
const;
2720 inline const Timestamp& timestamp()
const;
2726 inline const Timestamp& relativeTimestamp()
const;
2733 inline void setTimestamp(
const Timestamp& timestamp);
2741 inline void setRelativeTimestamp(
const Timestamp& relative);
2756 template <
typename T>
2757 inline T* data(
const unsigned int planeIndex = 0u);
2766 template <
typename T>
2767 inline const T* constdata(
const unsigned int planeIndex = 0u)
const;
2784 template <
typename T>
2785 inline T* row(
const unsigned int y,
const unsigned int planeIndex = 0u);
2802 template <
typename T>
2803 inline const T* constrow(
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2857 template <
typename T>
2858 inline T* pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u);
2882 template <
typename T>
2883 inline const T* constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex = 0u)
const;
2889 inline bool isContinuous()
const;
2898 inline bool isOwner()
const;
2907 inline bool isReadOnly()
const;
2913 inline bool hasAlphaChannel()
const;
2921 template <
typename T>
2922 bool hasTransparentPixel(
const T opaque)
const;
2929 inline bool isValid()
const;
2945 explicit inline operator bool()
const;
2975 static bool strideBytes2paddingElements(
const PixelFormat& pixelFormat,
const unsigned int imageWidth,
const unsigned int planeStrideBytes,
unsigned int& planePaddingElements,
const unsigned int planeIndex = 0u);
3039 template <
typename T>
3051 template <
typename T>
3067 pixelFormat_(pixelFormat)
3082 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3097 pixelFormat_(type.pixelFormat_),
3098 pixelOrigin_(type.pixelOrigin_)
3104 ocean_assert(
false &&
"The configuration of this frame type is invalid - this should never happen!");
3117 width_(type.width_),
3118 height_(type.height_),
3119 pixelFormat_(pixelFormat),
3120 pixelOrigin_(type.pixelOrigin_)
3126 width_(type.width_),
3127 height_(type.height_),
3128 pixelFormat_(type.pixelFormat_),
3129 pixelOrigin_(pixelOrigin)
3135 width_(type.width_),
3136 height_(type.height_),
3137 pixelFormat_(pixelFormat),
3138 pixelOrigin_(pixelOrigin)
3210 return !(*
this == right);
3231 static_assert(
sizeof(
char) == 1,
"Invalid data type!");
3239 static_assert(
sizeof(
signed char) == 1,
"Invalid data type!");
3246 static_assert(
sizeof(
unsigned char) == 1,
"Invalid data type!");
3253 static_assert(
sizeof(
unsigned short) == 2,
"Invalid data type!");
3260 static_assert(
sizeof(
short) == 2,
"Invalid data type!");
3267 static_assert(
sizeof(
unsigned int) == 4,
"Invalid data type!");
3274 static_assert(
sizeof(
int) == 4,
"Invalid data type!");
3281 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3289 static_assert(
sizeof(
unsigned long) == 4 ||
sizeof(
unsigned long) == 8,
"Invalid data type!");
3297 static_assert(
sizeof(
unsigned long long) == 8,
"Invalid data type!");
3304 static_assert(
sizeof(
long long) == 8,
"Invalid data type!");
3311 static_assert(
sizeof(
float) == 4,
"Invalid data type!");
3318 static_assert(
sizeof(
double) == 8,
"Invalid data type!");
3322 template <
typename T>
3344 ocean_assert(planes >= 1u && planes <= 255u);
3351 template <FrameType::DataType tDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3354 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3355 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3356 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3357 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3358 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3360 return genericPixelFormat(tDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3363 template <FrameType::DataType tDataType>
3366 static_assert(uint8_t(tDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(tDataType) <
DT_END,
"Invalid data type!");
3371 template <
typename TDataType, u
int32_t tChannels, u
int32_t tPlanes, u
int32_t tW
idthMultiple, u
int32_t tHeightMultiple>
3374 static_assert(tChannels >= 1u && tChannels < 31u,
"Invalid channel number!");
3375 static_assert(tPlanes >= 1u && tPlanes <= 255u,
"Invalid plane number!");
3376 static_assert(tWidthMultiple >= 1u && tWidthMultiple <= 255u,
"Invalid width-multiple!");
3377 static_assert(tHeightMultiple >= 1u && tHeightMultiple <= 255u,
"Invalid height-multiple!");
3379 constexpr
DataType pixelFormatDataType = dataType<TDataType>();
3380 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3382 return genericPixelFormat(pixelFormatDataType, tChannels, tPlanes, tWidthMultiple, tHeightMultiple);
3385 template <
typename TDataType>
3388 constexpr
DataType pixelFormatDataType = dataType<TDataType>();
3389 static_assert(uint8_t(pixelFormatDataType) > uint8_t(
DT_UNDEFINED) && uint8_t(pixelFormatDataType) <
DT_END,
"Invalid data type!");
3392 ocean_assert(planes >= 1u && planes <= 255u);
3401 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3418 static_assert(std::is_same<std::underlying_type<PixelFormat>::type, uint64_t>::value,
"Invalid pixel format data type!");
3435 unsigned int planeWidthDummy;
3436 unsigned int planeHeightDummy;
3440 unsigned int planeWidthElementsMultiple;
3441 unsigned int planeHeightElementsMultiple;
3445 ocean_assert(
planeChannels >= 1u && planeWidthElementsMultiple >= 1u && planeHeightElementsMultiple >= 1u);
3447 if (planeWidthElementsMultiple != 1u || planeHeightElementsMultiple != 1u)
3457 ocean_assert(
false &&
"Invalid input!");
3462 inline 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)
3464 ocean_assert(frameType.
isValid());
3469 template <
typename T>
3472 ocean_assert(data !=
nullptr);
3473 return size_t(data) %
sizeof(T) ==
size_t(0);
3478 *
this = std::move(plane);
3481 template <
typename T>
3482 inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const T* dataToUse,
const unsigned int paddingElements) noexcept :
3483 Plane(width, height, channels,
sizeof(T), (
const void*)dataToUse, paddingElements)
3488 template <
typename T>
3489 inline Frame::Plane::Plane(
const unsigned int width,
const unsigned int height,
const unsigned int channels, T* dataToUse,
const unsigned int paddingElements) noexcept :
3490 Plane(width, height, channels,
sizeof(T), (
void*)dataToUse, paddingElements)
3495 template <
typename T>
3496 inline 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 :
3497 Plane(width, height, channels,
sizeof(T), (
const void*)sourceDataToCopy, targetPaddingElements, sourcePaddingElements, makeCopyOfPaddingData)
3502 template <
typename T>
3503 inline 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 :
3504 Plane(width, height, channels,
sizeof(T), (
const void*)sourceDataToCopy, sourcePaddingElements, copyMode)
3509 inline 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 :
3510 allocatedData_(
nullptr),
3511 constData_(constData),
3515 channels_(channels),
3516 elementTypeSize_(elementTypeSize),
3517 paddingElements_(paddingElements)
3519 strideBytes_ = calculateStrideBytes();
3520 bytesPerPixel_ = calculateBytesPerPixel();
3543 template <
typename T>
3546 return reinterpret_cast<const T*
>(constData_);
3549 template <
typename T>
3552 return reinterpret_cast<T*
>(data_);
3557 return paddingElements_;
3562 return paddingElements_ * elementTypeSize_;
3567 return elementTypeSize_;
3572 return width_ * channels_;
3577 return widthElements() * elementTypeSize_;
3582 return width_ * channels_ + paddingElements_;
3587 ocean_assert(
width_ == 0u || strideBytes_ != 0u);
3588 ocean_assert(strideBytes_ == calculateStrideBytes());
3590 return strideBytes_;
3595 ocean_assert(bytesPerPixel_ == calculateBytesPerPixel());
3597 return bytesPerPixel_;
3600 template <
typename T>
3603 return elementTypeSize_ ==
sizeof(T);
3613 return paddingElements_ == 0u;
3618 return allocatedData_ !=
nullptr;
3623 return data_ ==
nullptr;
3636 template <
typename T>
3640 copyMode_(copyMode),
3641 paddingElements_(dataPaddingElements)
3646 template <
typename T>
3648 constdata_(nullptr),
3650 copyMode_(copyMode),
3651 paddingElements_(dataPaddingElements)
3656 template <
typename T>
3658 constdata_(nullptr),
3661 paddingElements_(planePaddingElements)
3666 template <
typename T>
3670 planeInitializers.reserve(paddingElementsPerPlane.size());
3677 return planeInitializers;
3690 *
this = std::move(frame);
3692 ocean_assert(planes_.size() >= 1);
3693 ocean_assert(frame.planes_.size() == 1);
3697 Frame(frameType,
PlaneInitializer<void>::createPlaneInitializersWithPaddingElements(planePaddingElements), timestamp)
3699 ocean_assert(
frameType.
numberPlanes() == planePaddingElements.size() || planePaddingElements.empty());
3720 template <
typename T>
3722 Frame(frameType, (const void*)(data), copyMode, paddingElements, timestamp)
3729 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3745 template <
typename T>
3747 Frame(frameType, (void*)(data), copyMode, paddingElements, timestamp)
3754 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3760 template <
typename T>
3762 Frame(frameType, (const
PlaneInitializer<void>*)planeInitializers.data(), planeInitializers.size(), timestamp)
3769 ocean_assert(debugTemplateDataType ==
FrameType::DT_UNDEFINED || debugTemplateDataType == debugFrameTypeDataType);
3785 template <
typename T>
3788 ocean_assert(
data !=
nullptr);
3789 if (
data !=
nullptr)
3796 if constexpr (!std::is_void_v<T>)
3805 plane.
data_ =
nullptr;
3815 template <
typename T>
3818 ocean_assert(
data !=
nullptr);
3819 if (
data !=
nullptr)
3826 if constexpr (!std::is_void_v<T>)
3845 template <
typename T>
3848 ocean_assert(planeDatas.size() != 0);
3849 ocean_assert(planeDatas.size() <=
planes_.
size());
3851 if (planeDatas.size() == 0 || planeDatas.size() >
planes_.
size())
3856 for (
unsigned int planeIndex = 0u; planeIndex < planeDatas.size(); ++planeIndex)
3858 if (!
updateMemory(planeDatas.begin()[planeIndex], planeIndex))
3867 template <
typename T, const
unsigned int tPlaneChannels>
3870 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
3877 ocean_assert(plane.
isValid());
3881 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
3885 if (plane.
channels() != tPlaneChannels)
3887 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
3900 for (
unsigned int n = 0u; n < plane.
width() * plane.
height(); ++n)
3902 data[n] = planePixelValue;
3907 const unsigned int planeStrideBytes = plane.
strideBytes();
3909 for (
unsigned int y = 0u; y < plane.
height(); ++y)
3913 for (
unsigned int x = 0u; x < plane.
width(); ++x)
3915 data[x] = planePixelValue;
3923 template <
typename T, const
unsigned int tPlaneChannels>
3926 static_assert(!std::is_void_v<T>,
"Value access/comparison cannot be performed with void types.");
3933 ocean_assert(plane.
isValid());
3937 ocean_assert(
false &&
"The specified data type must fit to the frame's data type!");
3941 if (plane.
channels() != tPlaneChannels)
3943 ocean_assert(
false &&
"The specified number of channels does not fit with the plane's actual channels!");
3947 const unsigned int planeStrideBytes = plane.
strideBytes();
3949 for (
unsigned int y = 0u; y < plane.
height(); ++y)
3953 for (
unsigned int x = 0u; x < plane.
width(); ++x)
3955 if (
data[x] == planePixelValue)
3965 template <
typename T>
3966 bool Frame::setValue(
const T* planePixelValue,
const size_t planePixelValueSize,
const unsigned int planeIndex)
3968 static_assert(!std::is_void_v<T>,
"Value access/assignment cannot be performed with void types.");
3970 ocean_assert(planePixelValue !=
nullptr);
3972 ocean_assert(
planes_[planeIndex].elementTypeSize() ==
sizeof(T));
3975 switch (planePixelValueSize)
3984 return setValue<T, 1u>(value, planeIndex);
3995 return setValue<T, 2u>(value, planeIndex);
4007 return setValue<T, 3u>(value, planeIndex);
4020 return setValue<T, 4u>(value, planeIndex);
4024 ocean_assert(
false &&
"The number of channels is not supported");
4028 template <
typename T>
4031 return setValue<T>(planePixelValues.begin(), planePixelValues.size(), planeIndex);
4047 return planes_[planeIndex].paddingElements();
4055 return planes_[planeIndex].paddingBytes();
4063 return planes_[planeIndex].strideElements();
4071 return planes_[planeIndex].strideBytes();
4079 return planes_[planeIndex].width();
4087 return planes_[planeIndex].height();
4095 return planes_[planeIndex].channels();
4103 return planes_[planeIndex].widthElements();
4111 return planes_[planeIndex].widthBytes();
4127 return planes_[planeIndex].isContinuous();
4135 return planes_[planeIndex].isOwner();
4158 template <
typename T>
4164 return planes_[planeIndex].data<T>();
4167 template <
typename T>
4173 return planes_[planeIndex].constdata<T>();
4176 template <
typename T>
4177 inline T*
Frame::row(
const unsigned int y,
const unsigned int planeIndex)
4180 ocean_assert(y <
height());
4186 ocean_assert(plane.
isValid());
4188 ocean_assert(y < plane.
height());
4189 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes());
4192 template <
typename T>
4193 inline const T*
Frame::constrow(
const unsigned int y,
const unsigned int planeIndex)
const
4196 ocean_assert(y <
height());
4202 ocean_assert(plane.
isValid());
4204 ocean_assert(y < plane.
height());
4208 template <
typename T>
4209 inline T*
Frame::pixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
4219 ocean_assert(plane.
isValid());
4221 if constexpr (!std::is_void_v<T>)
4245 ocean_assert(y < plane.
height());
4246 return reinterpret_cast<T*
>(plane.
data<uint8_t>() + y * plane.
strideBytes() + xBytes);
4249 template <
typename T>
4250 inline const T*
Frame::constpixel(
const unsigned int x,
const unsigned int y,
const unsigned int planeIndex)
const
4260 ocean_assert(plane.
isValid());
4262 if constexpr (!std::is_void_v<T>)
4272 ocean_assert(y < plane.
height());
4273 return reinterpret_cast<const T*
>(plane.
constdata<uint8_t>() + y * plane.
strideBytes() + xBytes);
4282 if (!plane.isContinuous())
4297 if (!plane.isOwner())
4312 if (plane.isReadOnly())
4338 if (
dataType() != dataType<uint8_t>())
4340 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4346 for (
unsigned int y = 0u; y <
height(); ++y)
4348 const uint8_t*
row = constrow<uint8_t>(y) + 1;
4350 for (
unsigned int x = 0u; x <
width(); ++x)
4367 for (
unsigned int y = 0u; y <
height(); ++y)
4369 const uint8_t*
row = constrow<uint8_t>(y) + offset;
4371 for (
unsigned int x = 0u; x <
width(); ++x)
4396 if (
dataType() != dataType<uint16_t>())
4398 ocean_assert(
false &&
"Data type does not fit with the frame's data type!");
4404 for (
unsigned int y = 0u; y <
height(); ++y)
4406 const uint16_t*
row = constrow<uint16_t>(y) + 3;
4408 for (
unsigned int x = 0u; x <
width(); ++x)
4423 for (
unsigned int y = 0u; y <
height(); ++y)
4425 const uint16_t*
row = constrow<uint16_t>(y);
4427 for (
unsigned int x = 0u; x <
width(); ++x)
4429 if ((*
row & opaque) != opaque)
4442 template <
typename T>
4458 size_t debugValidPlanes = 0;
4462 if (plane.isValid())
4470 ocean_assert(debugIsValid == frameTypeIsValid);
4474 return frameTypeIsValid;
4477 inline 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:1857
unsigned int width() const
Returns the width of the plane in pixel.
Definition: Frame.h:3528
bool isCompatibleWithDataType() const
Returns whether this plane is compatible with a given element data type.
Definition: Frame.h:3601
unsigned int paddingElements() const
Returns the number of padding elements at the end of each plane row, in elements.
Definition: Frame.h:3555
void * allocatedData_
The pointer to the memory which this plane has allocated, this pointer is pointing to the memory whic...
Definition: Frame.h:2205
unsigned int paddingBytes() const
Returns the number of padding bytes at the end of each plane row, in bytes.
Definition: Frame.h:3560
unsigned int elementTypeSize() const
Returns the size of each element of this plane.
Definition: Frame.h:3565
bool isOwner() const
Returns whether this plane is the owner of the memory.
Definition: Frame.h:3616
unsigned int calculateStrideBytes() const
Calculates the number of bytes between the start positions of two consecutive rows,...
Definition: Frame.h:3631
void * data_
The pointer to the writable memory of the plane (not the pointer to the allocated memory),...
Definition: Frame.h:2211
unsigned int strideBytes() const
Returns the number of bytes between the start positions of two consecutive rows, in bytes.
Definition: Frame.h:3585
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:3611
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:3544
bool isValid() const
Returns whether this plane holds valid data.
Definition: Frame.h:3626
T * data()
Returns the writable memory pointer to this plane with a specific data type compatible with elementTy...
Definition: Frame.h:3550
bool isReadOnly() const
Returns whether this plane holds read-only memory.
Definition: Frame.h:3621
unsigned int size() const
Returns the number of bytes necessary for the entire plane data including optional padding elements a...
Definition: Frame.h:3606
unsigned int widthBytes() const
Returns the width of the plane in bytes, the width does not contain optional padding elements.
Definition: Frame.h:3575
~Plane()
Destructs a Plane object.
Definition: Frame.h:3523
Plane()=default
Creates a new invalid plane.
unsigned int channels() const
Returns the channels of the plane.
Definition: Frame.h:3538
const void * constData_
The pointer to the read-only memory of the plane (not the pointer to the allocated memory),...
Definition: Frame.h:2208
unsigned int bytesPerPixel() const
Returns the number of bytes which is used for each pixel.
Definition: Frame.h:3593
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:3580
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:3533
unsigned int paddingElements_
The number of padding elements at the end of each plane row, in elements, with range [0,...
Definition: Frame.h:2226
unsigned int widthElements() const
Returns the width of the plane in elements, the width does not contain optional padding elements.
Definition: Frame.h:3570
This class implements a helper class which can be used to initialize a multi-plane frame in the const...
Definition: Frame.h:2247
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:3637
static std::vector< PlaneInitializer< T > > createPlaneInitializersWithPaddingElements(const Indices32 &paddingElementsPerPlane)
Creates plane initializer objects with padding elements only.
Definition: Frame.h:3667
This class implements Ocean's image class.
Definition: Frame.h:1792
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 & operator=(Frame &&right) noexcept
Move operator.
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:2311
Timestamp relativeTimestamp_
Relative timestamp of this frame.
Definition: Frame.h:3063
bool isContinuous() const
Returns whether all planes of this frame have continuous memory and thus do not contain any padding a...
Definition: Frame.h:4276
bool hasAlphaChannel() const
Returns whether the frame's pixel format contains an alpha channel.
Definition: Frame.h:4321
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:4066
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:3060
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:4058
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:4177
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:3786
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:4168
void setRelativeTimestamp(const Timestamp &relative)
Sets the relative timestamp of this frame.
Definition: Frame.h:4153
const FrameType & frameType() const
Returns the frame type of this frame.
Definition: Frame.h:3775
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:4159
bool isValid() const
Returns whether this frame is valid.
Definition: Frame.h:4448
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:4209
void setTimestamp(const Timestamp ×tamp)
Sets the timestamp of this frame.
Definition: Frame.h:4148
bool isReadOnly() const
Returns true, if the frame allows only read access (using constdata()).
Definition: Frame.h:4306
Frame & operator=(const Frame &right) noexcept
Assign operator.
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.
const Timestamp & timestamp() const
Returns the timestamp of this frame.
Definition: Frame.h:4138
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:4114
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:4098
std::vector< PlaneInitializer< T > > PlaneInitializers
Definition of a vector holding plane initializer objects.
Definition: Frame.h:2303
const Timestamp & relativeTimestamp() const
Returns the relative timestamp of this frame.
Definition: Frame.h:4143
const Planes & planes() const
Returns the individual planes of this frame.
Definition: Frame.h:3780
bool isOwner() const
Returns whether the frame is the owner of the internal frame data.
Definition: Frame.h:4291
CopyMode
Definition of individual copy modes.
Definition: Frame.h:1799
@ CM_USE_KEEP_LAYOUT
The source memory is used only, no copy is created, the padding layout is preserved.
Definition: Frame.h:1801
unsigned int planeChannels(const unsigned int planeIndex) const
Returns the channels of a plane of this frame.
Definition: Frame.h:4090
unsigned int planeWidth(const unsigned int planeIndex) const
Returns the width of a plane of this frame.
Definition: Frame.h:4074
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:3680
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:4250
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:1814
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:4122
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:3924
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:4130
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:4050
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:4193
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:4106
bool hasTransparentPixel(const T opaque) const
Returns whether the frame holds at least one pixel with an non opaque alpha value.
Definition: Frame.h:4443
unsigned int planeHeight(const unsigned int planeIndex) const
Returns the height of a plane of this frame.
Definition: Frame.h:4082
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:4034
Planes planes_
The individual memory planes of this frame.
Definition: Frame.h:3057
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:4042
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:3423
static const FrameType::DataTypes & definedDataTypes()
Returns all defined data types.
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:3193
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 const FrameType::PixelFormats & definedPixelFormats()
Returns all defined pixel formats.
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:3143
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:3188
std::vector< PixelFormat > PixelFormats
Definition of a vector holding pixel formats.
Definition: Frame.h:1040
constexpr static PixelFormat genericPixelFormat(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 a specified data type and channel number.
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:3335
unsigned int height_
Frame height in pixel, with range [0, infinity)
Definition: Frame.h:1738
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:3470
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:3208
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.
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition: Frame.h:3183
PixelOrigin pixelOrigin_
The origin of the pixel data, either the upper left corner or the bottom left corner (if valid).
Definition: Frame.h:1744
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
constexpr static PixelFormat genericPixelFormat()
Returns a specific generic pixel format with a specified data type and channel number.
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:3428
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition: Frame.h:3153
unsigned int bytesPerDataType() const
Returns the number of bytes which are necessary to store the data type of this frame.
Definition: Frame.h:3168
constexpr static 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
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:3433
unsigned int height() const
Returns the height of the frame in pixel.
Definition: Frame.h:3148
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:1735
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:3416
bool isValid() const
Returns whether this frame type is valid.
Definition: Frame.h:3213
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:3198
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition: Frame.h:3173
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:1741
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:3163
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:3399
static unsigned int planeChannels(const PixelFormat &imagePixelFormat, const unsigned int planeIndex)
Returns the channels of a plane for a pixel format.
bool isFrameTypeCompatible(const FrameType &frameType, const bool allowDifferentPixelOrigins) const
Returns whether this frame type is compatible with a given frame type.
Definition: Frame.h:3203
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:3223
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:3406
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:3158
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:1755
std::vector< FrameRef > FrameRefs
Definition of a vector holding frame references.
Definition: Frame.h:1767
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