8 #ifndef META_OCEAN_CV_FRAME_CONVERTER_H
9 #define META_OCEAN_CV_FRAME_CONVERTER_H
25 OCEAN_DISABLE_DOCUMENTATION_DIAGNOSTIC
82 CONVERT_FLIPPED_AND_MIRRORED
96 CP_AVOID_COPY_IF_POSSIBLE =
false,
116 OT_ALPHA_CHANNEL_TARGET_VALUE = 1u << 0u,
118 OT_GAMMA_CORRECTION = 1u << 1u,
120 OT_BLACKLEVEL_WHITEBALANCE_GAMMA = 1u << 2u,
122 OT_APPROXIMATED = 1u << 2u,
131 explicit inline Options(
const bool allowApproximation =
false);
138 explicit inline Options(
const uint8_t alphaChannelTargetValue,
const bool allowApproximation =
false);
145 explicit inline Options(
const float gamma,
const bool allowApproximation =
false);
157 explicit inline Options(
const uint16_t blackLevel,
const float whiteBalanceRed,
const float whiteBalanceGreen,
const float whiteBalanceBlue,
const float gamma,
const bool allowApproximation =
false);
163 inline OptionsType optionsType()
const;
169 inline uint8_t alphaChannelTargetValue()
const;
175 inline float gamma()
const;
181 inline uint16_t blackLevel()
const;
187 inline const float* whiteBalance()
const;
193 inline bool allowApproximation()
const;
201 uint8_t alphaChannelTargetValue_ = 0xFFu;
207 uint16_t blackLevel_ = 0u;
210 float whiteBalance_[3] = { 1.0f, 1.0f, 1.0f };
264 FT_3_UINT8_TO_3_UINT8
270 template <
typename TSource,
typename TTarget>
276 template <
typename TSource,
typename TTarget>
282 template <
typename TSource,
typename TTarget>
288 template <
typename TSource,
typename TTarget>
289 using OneSourceOneTargetBlackLevelWhiteBalanceGammaConversionFunction = void(*)(
const TSource* source, TTarget* target,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint16_t blackLevelValue,
const float* whiteBalanceValues,
const float gamma,
const uint32_t sourcePaddingElements,
const uint32_t targetPaddingElements,
Worker* worker);
294 template <
typename TSource,
typename TTarget>
295 using OneSourceTwoTargetsConversionFunction = void(*)(
const TSource* source, TTarget* target0, TTarget* target1,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t sourcePaddingElements,
const uint32_t target0PaddingElements,
const uint32_t target1PaddingElements,
Worker* worker);
300 template <
typename TSource,
typename TTarget>
301 using OneSourceThreeTargetsConversionFunction = void(*)(
const TSource* source, TTarget* target0, TTarget* target1, TTarget* target2,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t sourcePaddingElements,
const uint32_t target0PaddingElements,
const uint32_t target1PaddingElements,
const uint32_t target2PaddingElements,
Worker* worker);
306 template <
typename TSource,
typename TTarget>
307 using TwoSourcesOneTargetConversionFunction = void(*)(
const TSource* source0,
const TSource* source1, TTarget* target,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t targetPaddingElements,
Worker* worker);
312 template <
typename TSource,
typename TTarget>
313 using TwoSourcesOneTargetAlphaConversionFunction = void(*)(
const TSource* source0,
const TSource* source1, TTarget* target,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t targetPaddingElements,
const uint8_t alphaValue,
Worker* worker);
318 template <
typename TSource,
typename TTarget>
319 using TwoSourcesThreeTargetConversionFunction = void(*)(
const TSource* source0,
const TSource* source1, TTarget* target0, TTarget* target1, TTarget* target2,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t targetPaddingElements0,
const uint32_t targetPaddingElements1,
const uint32_t targetPaddingElements2,
Worker* worker);
324 template <
typename TSource,
typename TTarget>
325 using ThreeSourcesOneTargetConversionFunction = void(*)(
const TSource* source0,
const TSource* source1,
const TSource* source2, TTarget* target,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t source2PaddingElements,
const uint32_t targetPaddingElements,
Worker* worker);
330 template <
typename TSource,
typename TTarget>
331 using ThreeSourcesOneTargetAlphaConversionFunction = void(*)(
const TSource* source0,
const TSource* source1,
const TSource* source2, TTarget* target,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t source2PaddingElements,
const uint32_t targetPaddingElements,
const uint8_t alphaValue,
Worker* worker);
336 template <
typename TSource,
typename TTarget>
337 using ThreeSourcesThreeTargetConversionFunction = void(*)(
const TSource* source0,
const TSource* source1,
const TSource* source2, TTarget* target0, TTarget* target1, TTarget* target2,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t source2PaddingElements,
const uint32_t targetPaddingElements0,
const uint32_t targetPaddingElements1,
const uint32_t targetPaddingElements2,
Worker* worker);
557 template <
typename TSource,
typename TTarget>
558 using RowConversionFunction = void (*)(
const TSource* sourceRow, TTarget* targetRow,
const size_t width,
const void* options);
570 using MultipleRowsConversionFunction = void (*)(
const void** sources,
void** targets,
const unsigned int multipleRowIndex,
const unsigned int width,
const unsigned int height,
const ConversionFlag conversionFlag,
const void* options);
579 template <
typename T>
588 template <
typename T>
597 uint16_t blackLevel = 0u;
600 unsigned int whiteBalance7[3] = { 128u, 128u, 128u };
603 const uint8_t* gammaLookupValues =
nullptr;
606 unsigned int sourcePaddingElements = 0u;
609 unsigned int targetPaddingElements = 0u;
838 template <
typename TSource,
typename TTarget>
839 static void cast(
const TSource* __restrict source, TTarget* __restrict target,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements);
884 template <
typename TSource,
typename TTarget>
885 static void normalizedCast(
const TSource* __restrict source, TTarget* __restrict target,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const TTarget multiplicationFactor,
const TTarget offset,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements);
908 template <
typename T>
909 static bool subFrame(
const T* source, T* target,
const unsigned int sourceWidth,
const unsigned int sourceHeight,
const unsigned int targetWidth,
const unsigned int targetHeight,
const unsigned int channels,
const unsigned int sourceLeft,
const unsigned int sourceTop,
const unsigned int targetLeft,
const unsigned int targetTop,
const unsigned int width,
const unsigned int height,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements);
931 template <
typename T>
932 static bool subFrameMask(
const Frame& sourceFrame,
Frame& targetFrame,
const Frame& maskFrame,
const uint32_t sourceLeft,
const uint32_t sourceTop,
const uint32_t targetLeft,
const uint32_t targetTop,
const uint32_t subFrameWidth,
const uint32_t subFrameHeight,
const uint8_t maskValue = 0u);
962 template <
typename T>
963 static bool subFrameMask(
const T* source, T* target,
const uint8_t* mask,
const unsigned int sourceWidth,
const unsigned int sourceHeight,
const unsigned int targetWidth,
const unsigned int targetHeight,
const unsigned int channels,
const unsigned int sourceLeft,
const unsigned int sourceTop,
const unsigned int targetLeft,
const unsigned int targetTop,
const unsigned int subFrameWidth,
const unsigned int subFrameHeight,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements,
const unsigned int maskPaddingElements,
const uint8_t maskValue = 0u);
978 template <
typename T>
979 static inline void patchFrame(
const T* source, T* buffer,
const unsigned int width,
const unsigned int channels,
const unsigned int x,
const unsigned int y,
const unsigned int patchSize,
const unsigned int sourcePaddingElements,
const unsigned int bufferPaddingElements);
996 template <
typename T,
unsigned int tChannels>
997 static void patchFrameMirroredBorder(
const T* source, T* buffer,
const unsigned int width,
const unsigned int height,
const unsigned int x,
const unsigned int y,
const unsigned int patchSize,
const unsigned int sourcePaddingElements,
const unsigned int bufferPaddingElements);
1323 template <
typename TSource,
typename TTarget>
1324 static inline void cast16Elements(
const TSource*
const source, TTarget*
const target);
1344 template <
typename TSource,
typename TTarget>
1345 static inline void convertGenericPixelFormat(
const TSource* source, TTarget* target,
const unsigned int width,
const unsigned int height,
const unsigned int sourceStrideElements,
const unsigned int targetStrideElements,
const ConversionFlag flag,
const RowConversionFunction<TSource, TTarget> rowConversionFunction,
const RowReversePixelOrderInPlaceFunction<TTarget> targetReversePixelOrderInPlaceFunction,
const bool areContinuous,
const void* options,
Worker* worker);
1360 static inline void convertArbitraryPixelFormat(
const void** sources,
void** targets,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int multipleRowsPerIteration,
const MultipleRowsConversionFunction multipleRowsConversionFunction,
const void* options,
Worker* worker);
1380 static void convertGenericPixelFormatSubset(
const uint8_t* source, uint8_t* target,
const unsigned int width,
const unsigned int height,
const unsigned int sourceStrideBytes,
const unsigned int targetStrideBytes,
const ConversionFlag flag,
const RowConversionFunction<uint8_t, uint8_t> rowConversionFunction,
const RowReversePixelOrderInPlaceFunction<uint8_t> targetReversePixelOrderInPlaceFunction,
const bool areContinuous,
const void* options,
const unsigned int firstRow,
const unsigned int numberRows);
1795 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1846 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1896 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1935 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2070 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2111 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2141 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2478 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2504 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2525 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2546 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2563 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2587 static OCEAN_FORCE_INLINE
void unpack5ElementsBayerMosaicPacked10Bit(
const uint8_t*
const packed, uint16_t* unpacked);
2589 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
2602 template <
bool tAllowLastOverlappingElement>
2603 static OCEAN_FORCE_INLINE
void unpack15ElementsBayerMosaicPacked10BitNEON(
const uint8_t*
const packed, uint16x8_t& unpackedAB_u_16x8, uint16x4_t& unpackedC_u_16x4);
2617 optionsType_(OT_ALPHA_CHANNEL_TARGET_VALUE),
2618 alphaChannelTargetValue_(alphaChannelTargetValue)
2627 optionsType_(OT_GAMMA_CORRECTION),
2638 inline FrameConverter::Options::Options(
const uint16_t blackLevel,
const float whiteBalanceRed,
const float whiteBalanceGreen,
const float whiteBalanceBlue,
const float gamma,
const bool allowApproximation) :
2639 optionsType_(OT_BLACKLEVEL_WHITEBALANCE_GAMMA),
2641 blackLevel_(blackLevel)
2644 ocean_assert(whiteBalanceRed >= 0.0f && whiteBalanceGreen >= 0.0f && whiteBalanceBlue >= 0.0f);
2645 ocean_assert(
gamma_ >= 0.0f);
2659 return optionsType_;
2664 ocean_assert(optionsType_ & OT_ALPHA_CHANNEL_TARGET_VALUE);
2665 return alphaChannelTargetValue_;
2670 ocean_assert((optionsType_ & OT_GAMMA_CORRECTION) || (optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA));
2676 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2682 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2683 return whiteBalance_;
2688 return (optionsType_ & OT_APPROXIMATED) == OT_APPROXIMATED;
2697 sourcePixelFormat_(sourcePixelFormat),
2698 targetPixelFormat_(targetPixelFormat),
2699 optionsType_(optionsType)
2711 return convert(source, targetPixelFormat, source.
pixelOrigin(), target, forceCopy, worker, options);
2716 return convert(source, source.
pixelFormat(), targetPixelOrigin, target, forceCopy, worker, options);
2721 ocean_assert(frame.
isValid());
2735 if (!convert(frame, targetPixelFormat, targetPixelOrigin, tmpFrame, forceCopy, worker, options))
2743 frame.
copy(tmpFrame);
2747 frame = std::move(tmpFrame);
2755 return change(frame, targetPixelFormat, frame.
pixelOrigin(), forceCopy, worker, options);
2760 return change(frame, frame.
pixelFormat(), targetPixelOrigin, forceCopy, worker, options);
2763 OCEAN_RE_ENABLE_DOCUMENTATION_DIAGNOSTIC
2765 template <
typename TSource,
typename TTarget>
2766 void FrameConverter::cast(
const TSource* __restrict source, TTarget* __restrict target,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements)
2768 ocean_assert(source !=
nullptr && target !=
nullptr);
2769 ocean_assert(width != 0u && height != 0u);
2770 ocean_assert(channels != 0u);
2775 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
2777 if (std::is_same<TSource, TTarget>::value)
2779 memcpy(target, source,
size_t(width * height * channels) *
sizeof(TSource));
2783 const unsigned int elementsPerFrame = width * height * channels;
2784 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
2786 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
2788 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
2790 cast16Elements<TSource, TTarget>(source, target);
2796 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
2798 target[i] = TTarget(source[i]);
2804 if (std::is_same<TSource, TTarget>::value)
2806 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
2807 const unsigned int targetStrideElements = width * channels + targetPaddingElements;
2809 const size_t bytesPerRowToCopy = size_t(width * channels) *
sizeof(TSource);
2811 for (
unsigned int y = 0u; y < height; ++y)
2813 memcpy(target, source, bytesPerRowToCopy);
2815 source += sourceStrideElements;
2816 target += targetStrideElements;
2821 const unsigned int elementsPerRow = width * channels;
2822 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
2824 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
2826 for (
unsigned int y = 0u; y < height; ++y)
2828 for (
unsigned int x = 0u; x < blocksPerRow_16; ++x)
2830 cast16Elements<TSource, TTarget>(source, target);
2836 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
2838 target[i] = TTarget(source[i]);
2841 source += remainingElementsPerRow + sourcePaddingElements;
2842 target += remainingElementsPerRow + targetPaddingElements;
2848 template <
typename TSource,
typename TTarget>
2849 void FrameConverter::normalizedCast(
const TSource* __restrict source, TTarget* __restrict target,
const unsigned int width,
const unsigned int height,
const unsigned int channels,
const TTarget multiplicationFactor,
const TTarget offset,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements)
2851 ocean_assert(source !=
nullptr && target !=
nullptr);
2852 ocean_assert(width != 0u && height != 0u);
2853 ocean_assert(channels != 0u);
2858 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
2860 const unsigned int elementsPerFrame = width * height * channels;
2861 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
2863 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
2865 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
2867 for (
unsigned int i = 0u; i < 16u; ++i)
2869 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2876 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
2878 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2883 const unsigned int elementsPerRow = width * channels;
2884 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
2886 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
2888 for (
unsigned int y = 0u; y < height; ++y)
2890 for (
unsigned int n = 0u; n < blocksPerRow_16; ++n)
2892 for (
unsigned int i = 0u; i < 16u; ++i)
2894 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2901 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
2903 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2906 source += remainingElementsPerRow + sourcePaddingElements;
2907 target += remainingElementsPerRow + targetPaddingElements;
2912 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
2915 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, float>(
const uint8_t*
const source,
float*
const target)
2917 const uint8x16_t source_8x16 = vld1q_u8(source);
2919 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2920 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2922 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2923 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2924 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2925 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2927 const float32x4_t target_32x4_0 = vcvtq_f32_u32(source_32x4_0);
2928 const float32x4_t target_32x4_1 = vcvtq_f32_u32(source_32x4_1);
2929 const float32x4_t target_32x4_2 = vcvtq_f32_u32(source_32x4_2);
2930 const float32x4_t target_32x4_3 = vcvtq_f32_u32(source_32x4_3);
2932 vst1q_f32(target + 0, target_32x4_0);
2933 vst1q_f32(target + 4, target_32x4_1);
2934 vst1q_f32(target + 8, target_32x4_2);
2935 vst1q_f32(target + 12, target_32x4_3);
2939 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint16_t>(
const uint8_t*
const source, uint16_t*
const target)
2941 const uint8x16_t source_8x16 = vld1q_u8(source);
2943 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2944 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2946 vst1q_u16(target + 0, source_16x8_0);
2947 vst1q_u16(target + 8, source_16x8_1);
2951 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int16_t>(
const uint8_t*
const source, int16_t*
const target)
2953 const uint8x16_t source_8x16 = vld1q_u8(source);
2955 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2956 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2958 vst1q_s16(target + 0, vreinterpretq_s16_u16(source_16x8_0));
2959 vst1q_s16(target + 8, vreinterpretq_s16_u16(source_16x8_1));
2963 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint32_t>(
const uint8_t*
const source, uint32_t*
const target)
2965 const uint8x16_t source_8x16 = vld1q_u8(source);
2967 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2968 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2970 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2971 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2972 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2973 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2975 vst1q_u32(target + 0, source_32x4_0);
2976 vst1q_u32(target + 4, source_32x4_1);
2977 vst1q_u32(target + 8, source_32x4_2);
2978 vst1q_u32(target + 12, source_32x4_3);
2982 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int32_t>(
const uint8_t*
const source, int32_t*
const target)
2984 const uint8x16_t source_8x16 = vld1q_u8(source);
2986 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2987 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2989 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2990 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2991 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2992 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2994 vst1q_s32(target + 0, vreinterpretq_s32_u32(source_32x4_0));
2995 vst1q_s32(target + 4, vreinterpretq_s32_u32(source_32x4_1));
2996 vst1q_s32(target + 8, vreinterpretq_s32_u32(source_32x4_2));
2997 vst1q_s32(target + 12, vreinterpretq_s32_u32(source_32x4_3));
3001 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<float, uint8_t>(
const float*
const source, uint8_t*
const target)
3003 const float32x4_t source_32x4_0 = vld1q_f32(source + 0);
3004 const float32x4_t source_32x4_1 = vld1q_f32(source + 4);
3005 const float32x4_t source_32x4_2 = vld1q_f32(source + 8);
3006 const float32x4_t source_32x4_3 = vld1q_f32(source + 12);
3008 const uint32x4_t target_32x4_0 = vcvtq_u32_f32(source_32x4_0);
3009 const uint32x4_t target_32x4_1 = vcvtq_u32_f32(source_32x4_1);
3010 const uint32x4_t target_32x4_2 = vcvtq_u32_f32(source_32x4_2);
3011 const uint32x4_t target_32x4_3 = vcvtq_u32_f32(source_32x4_3);
3013 const uint16x8_t target_16x8_0 = vcombine_u16(vmovn_u32(target_32x4_0), vmovn_u32(target_32x4_1));
3014 const uint16x8_t target_16x8_1 = vcombine_u16(vmovn_u32(target_32x4_2), vmovn_u32(target_32x4_3));
3016 const uint8x16_t target_8x16 = vcombine_u8(vmovn_u16(target_16x8_0), vmovn_u16(target_16x8_1));
3018 vst1q_u8(target, target_8x16);
3023 template <
typename TSource,
typename TTarget>
3026 for (
unsigned int i = 0u; i < 16u; ++i)
3028 target[i] = TTarget(source[i]);
3032 template <
typename T>
3033 bool FrameConverter::subFrame(
const T* source, T* target,
const unsigned int sourceWidth,
const unsigned int sourceHeight,
const unsigned int targetWidth,
const unsigned int targetHeight,
const unsigned int channels,
const unsigned int sourceLeft,
const unsigned int sourceTop,
const unsigned int targetLeft,
const unsigned int targetTop,
const unsigned int width,
const unsigned int height,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements)
3035 ocean_assert(source !=
nullptr && target !=
nullptr);
3037 if (sourceLeft + width > sourceWidth || sourceTop + height > sourceHeight || targetLeft + width > targetWidth || targetTop + height > targetHeight)
3042 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
3043 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
3045 const T* subSource = source + sourceStrideElements * sourceTop + sourceLeft * channels;
3046 T* subTarget = target + targetStrideElements * targetTop + targetLeft * channels;
3048 if (sourcePaddingElements == 0u && targetPaddingElements == 0u && width == sourceWidth && sourceWidth == targetWidth)
3050 memcpy(subTarget, subSource, height * width * channels *
sizeof(T));
3054 for (
unsigned int y = 0u; y < height; ++y)
3056 memcpy(subTarget, subSource, width * channels *
sizeof(T));
3058 subTarget += targetStrideElements;
3059 subSource += sourceStrideElements;
3066 template <
typename T>
3067 bool FrameConverter::subFrameMask(
const Frame& sourceFrame,
Frame& targetFrame,
const Frame& maskFrame,
const uint32_t sourceLeft,
const uint32_t sourceTop,
const uint32_t targetLeft,
const uint32_t targetTop,
const uint32_t subFrameWidth,
const uint32_t subFrameHeight,
const uint8_t maskValue)
3069 if (subFrameWidth == 0u || subFrameHeight == 0u)
3076 ocean_assert(
false &&
"Invalid input");
3080 return subFrameMask<T>(sourceFrame.
constdata<T>(), targetFrame.
data<T>(), maskFrame.
constdata<uint8_t>(), sourceFrame.
width(), sourceFrame.
height(), targetFrame.
width(), targetFrame.
height(), sourceFrame.
channels(), sourceLeft, sourceTop, targetLeft, targetTop, subFrameWidth, subFrameHeight, sourceFrame.
paddingElements(), targetFrame.
paddingElements(), maskFrame.
paddingElements(), maskValue);
3083 template <
typename T>
3084 bool FrameConverter::subFrameMask(
const T* source, T* target,
const uint8_t* mask,
const unsigned int sourceWidth,
const unsigned int sourceHeight,
const unsigned int targetWidth,
const unsigned int targetHeight,
const unsigned int channels,
const unsigned int sourceLeft,
const unsigned int sourceTop,
const unsigned int targetLeft,
const unsigned int targetTop,
const unsigned int subFrameWidth,
const unsigned int subFrameHeight,
const unsigned int sourcePaddingElements,
const unsigned int targetPaddingElements,
const unsigned int maskPaddingElements,
const uint8_t maskValue)
3086 ocean_assert(source !=
nullptr && target !=
nullptr && mask !=
nullptr);
3088 if (sourceLeft + subFrameWidth > sourceWidth || sourceTop + subFrameHeight > sourceHeight || targetLeft + subFrameWidth > targetWidth || targetTop + subFrameHeight > targetHeight)
3090 ocean_assert(
false &&
"Invalid input");
3094 const unsigned int maskStrideElements = subFrameWidth + maskPaddingElements;
3096 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
3097 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
3099 for (
unsigned int y = 0u; y < subFrameHeight; ++y)
3101 const uint8_t* maskRow = mask + maskStrideElements * y;
3103 const T* subSource = source + sourceStrideElements * (sourceTop + y) + sourceLeft * channels;
3104 T* subTarget = target + targetStrideElements * (targetTop + y) + targetLeft * channels;
3106 for (
unsigned int x = 0u; x < subFrameWidth; ++x)
3108 if (*maskRow == maskValue)
3110 for (
unsigned int c = 0u; c < channels; ++c)
3112 subTarget[c] = subSource[c];
3118 subSource += channels;
3119 subTarget += channels;
3126 template <
typename T>
3127 void FrameConverter::patchFrame(
const T* source, T* buffer,
const unsigned int width,
const unsigned int channels,
const unsigned int x,
const unsigned int y,
const unsigned int patchSize,
const unsigned int sourcePaddingElements,
const unsigned int bufferPaddingElements)
3129 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3130 ocean_assert(width >= patchSize && channels >= 1u);
3132 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3133 const unsigned int patchSize_2 = patchSize / 2u;
3135 ocean_assert(x >= patchSize_2 && y >= patchSize_2);
3136 ocean_assert(x + patchSize_2 < width);
3138 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
3139 const unsigned int bufferStrideElements = patchSize * channels + bufferPaddingElements;
3141 const unsigned int sourceLeft = x - patchSize_2;
3142 const unsigned int sourceTop = y - patchSize_2;
3144 source += sourceTop * sourceStrideElements + sourceLeft * channels;
3146 for (
unsigned int row = 0u; row < patchSize; ++row)
3148 memcpy(buffer, source, channels * patchSize *
sizeof(T));
3150 source += sourceStrideElements;
3151 buffer += bufferStrideElements;
3155 template <
typename T,
unsigned int tChannels>
3156 void FrameConverter::patchFrameMirroredBorder(
const T* source, T* buffer,
const unsigned int width,
const unsigned int height,
const unsigned int x,
const unsigned int y,
const unsigned int patchSize,
const unsigned int sourcePaddingElements,
const unsigned int bufferPaddingElements)
3158 static_assert(tChannels >= 1u,
"Invalid number of color channels!");
3160 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3162 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3163 const unsigned int patchSize_2 = patchSize / 2u;
3165 const unsigned int widthPatchSize1 = width - (patchSize - 1u);
3166 ocean_assert(widthPatchSize1 == width - patchSize_2 * 2u);
3168 ocean_assert(width >= patchSize_2 + 1u && height >= patchSize_2 + 1u);
3170 ocean_assert(x < width && y < height);
3172 const unsigned int sourceStrideElements = width * tChannels + sourcePaddingElements;
3174 for (
int top =
int(y - patchSize_2); top <= int(y + patchSize_2); ++top)
3178 for (
int left =
int(x - patchSize_2); left <= int(x + patchSize_2); ++left)
3180 if ((
unsigned int)(left) - patchSize_2 < widthPatchSize1)
3182 ocean_assert(left >=
int(patchSize_2) && left <
int(width - patchSize_2));
3184 const T* sourcePixel = sourceRow + left * tChannels;
3186 for (
unsigned int n = 0u; n < tChannels; ++n)
3188 buffer[n] = sourcePixel[n];
3193 ocean_assert((
unsigned int)(left) <= patchSize_2 || (
unsigned int)(left) >= width - patchSize_2);
3197 for (
unsigned int n = 0u; n < tChannels; ++n)
3199 buffer[n] = sourcePixel[n];
3203 buffer += tChannels;
3206 buffer += bufferPaddingElements;
3210 template <
typename TSource,
typename TTarget>
3211 inline void FrameConverter::convertGenericPixelFormat(
const TSource* source, TTarget* target,
const unsigned int width,
const unsigned int height,
const unsigned int sourceStrideElements,
const unsigned int targetStrideElements,
const ConversionFlag flag,
const RowConversionFunction<TSource, TTarget> rowConversionFunction,
const RowReversePixelOrderInPlaceFunction<TTarget> targetReversePixelOrderInPlaceFunction,
const bool areContinuous,
const void* options,
Worker* worker)
3213 ocean_assert(source !=
nullptr && target !=
nullptr);
3214 ocean_assert(width >= 1u && height >= 1u);
3215 ocean_assert(sourceStrideElements >= width && targetStrideElements >= width);
3216 ocean_assert(rowConversionFunction !=
nullptr);
3221 const unsigned int sourceStrideBytes = sourceStrideElements *
sizeof(TSource);
3222 const unsigned int targetStrideBytes = targetStrideElements *
sizeof(TTarget);
3224 if (worker && height >= 200u)
3226 worker->
executeFunction(
Worker::Function::createStatic(&
FrameConverter::convertGenericPixelFormatSubset, (
const uint8_t*)(source), (uint8_t*)(target), width, height, sourceStrideBytes, targetStrideBytes, flag, (
const RowConversionFunction<uint8_t, uint8_t>)rowConversionFunction, (
const RowReversePixelOrderInPlaceFunction<uint8_t>)targetReversePixelOrderInPlaceFunction, areContinuous, options, 0u, 0u), 0u, height, 11u, 12u, 20u);
3230 convertGenericPixelFormatSubset((
const uint8_t*)(source), (uint8_t*)(target), width, height, sourceStrideBytes, targetStrideBytes, flag, (
const RowConversionFunction<uint8_t, uint8_t>)rowConversionFunction, (
const RowReversePixelOrderInPlaceFunction<uint8_t>)targetReversePixelOrderInPlaceFunction, areContinuous, options, 0u, height);
3236 ocean_assert(multipleRowsPerIteration != 0u && height % multipleRowsPerIteration == 0u);
3238 const unsigned int rowIterations = height / multipleRowsPerIteration;
3240 if (worker && rowIterations >= 200u)
3242 worker->
executeFunction(
Worker::Function::createStatic(&
FrameConverter::convertArbitraryPixelFormatSubset, sources, targets, width, height, flag, multipleRowsPerIteration, multipleRowsConversionFunction, options, 0u, 0u), 0u, rowIterations, 8u, 9u, 20u);
3252 ocean_assert(packed !=
nullptr);
3253 ocean_assert(unpacked !=
nullptr);
3255 unpacked[0] = uint16_t(uint16_t(packed[0]) << uint16_t(2) | (uint16_t(packed[4]) & uint16_t(0b00000011)));
3256 unpacked[1] = uint16_t(uint16_t(packed[1]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00001100)) >> uint16_t(2)));
3257 unpacked[2] = uint16_t(uint16_t(packed[2]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00110000)) >> uint16_t(4)));
3258 unpacked[3] = uint16_t(uint16_t(packed[3]) << uint16_t(2) | (uint16_t(packed[4]) >> uint16_t(6)));
3261 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
3263 template <
bool tAllowLastOverlappingElement>
3266 constexpr uint8x8_t shuffleC_u_8x8 = {6u, 2u, 6u, 3u, 6u, 4u, 6u, 5u};
3268 constexpr int8x16_t leftShifts_s_8x16 = {6, 0, 4, 0, 2, 0, 0, 0, 6, 0, 4, 0, 2, 0, 0, 0};
3269 constexpr int16x8_t rightShifts_s_16x8 = {-6, -6, -6, -6, -6, -6, -6, -6};
3271 const uint8x16_t packed_u_8x16 = tAllowLastOverlappingElement ? vld1q_u8(packed) : vcombine_u8(vld1_u8(packed), vext_u8(vld1_u8(packed + 7), shuffleC_u_8x8, 1));
3277 constexpr uint8x16_t shuffle_u_8x16 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u, 9u, 5u, 9u, 6u, 9u, 7u, 9u, 8u};
3278 const uint8x16_t intermediateAB_u_8x16 = vqtbl1q_u8(packed_u_8x16, shuffle_u_8x16);
3280 const uint8x8_t packedA_u_8x8 = vget_low_u8(packed_u_8x16);
3281 const uint8x8_t packedB_u_8x8 = vget_low_u8(vextq_u8(packed_u_8x16, packed_u_8x16, 5));
3283 constexpr uint8x8_t shuffleAB_u_8x8 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u};
3284 const uint8x16_t intermediateAB_u_8x16 = vcombine_u8(vtbl1_u8(packedA_u_8x8, shuffleAB_u_8x8), vtbl1_u8(packedB_u_8x8, shuffleAB_u_8x8));
3290 const uint8x8_t intermediateC_u_8x8 = vtbl1_u8(vget_high_u8(packed_u_8x16), shuffleC_u_8x8);
3295 const uint16x8_t intermediateAB_u_16x8 = vreinterpretq_u16_u8(vshlq_u8(intermediateAB_u_8x16, leftShifts_s_8x16));
3297 const uint16x4_t intermediateC_u_16x4 = vreinterpret_u16_u8(vshl_u8(intermediateC_u_8x8, vget_low_u8(leftShifts_s_8x16)));
3302 unpackedAB_u_16x8 = vshlq_u16(intermediateAB_u_16x8, rightShifts_s_16x8);
3304 unpackedC_u_16x4 = vshl_u16(intermediateC_u_16x4, vget_low_u8(rightShifts_s_16x8));
static OCEAN_FORCE_INLINE unsigned int mirrorIndex(const int index, const unsigned int elements)
Returns the mirrored index for a given index.
Definition: CVUtilities.h:456
The following comfort class provides comfortable functions simplifying prototyping applications but a...
Definition: FrameConverter.h:620
static bool convert(const Frame &source, const FrameType::PixelFormat targetPixelFormat, const FrameType::PixelOrigin targetPixelOrigin, Frame &target, const bool forceCopy=true, Worker *worker=nullptr, const Options &options=Options())
Converts a frame with arbitrary dimension, pixel format and pixel origin into a frame with the same d...
static bool convertAndCopy(const Frame &source, Frame &target, Worker *worker=nullptr, const Options &options=Options())
Converts a frame with arbitrary dimension, pixel format and pixel origin into a frame with the same d...
static bool change(Frame &frame, const FrameType::PixelFormat targetPixelFormat, const FrameType::PixelOrigin targetPixelOrigin, const bool forceCopy=true, Worker *worker=nullptr, const Options &options=Options())
Converts / changes a frame with arbitrary dimension, pixel format and pixel origin into a frame with ...
Definition: FrameConverter.h:2719
static bool isSupported(const FrameType &sourceType, const FrameType::PixelFormat targetPixelFormat, const Options &options=Options())
Returns whether the convert function of this class supports the conversion of a frame with one pixel ...
This class combines source pixel format, target pixel format, and options types.
Definition: FrameConverter.h:345
bool operator==(const ConversionTriple &conversionTriple) const
Returns whether two objects are identical.
Definition: FrameConverter.h:2704
FrameType::PixelFormat sourcePixelFormat_
The pixel format of the source frame, must be valid.
Definition: FrameConverter.h:387
Options::OptionsType optionsType_
The type of the options for which the conversion is defined.
Definition: FrameConverter.h:393
ConversionTriple()=default
Default constructor.
FrameType::PixelFormat targetPixelFormat_
The pixel format of the target frame, must be valid.
Definition: FrameConverter.h:390
This class is a wrapper for function pointers.
Definition: FrameConverter.h:400
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint32_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT32_TO_1_UINT8 function.
FunctionWrapper(const ThreeSourcesOneTargetAlphaConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_3_UINT8_TO_1_UINT8_ALPHA function.
FunctionWrapper(const OneSourceOneTargetBlackLevelWhiteBalanceGammaConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_1_UINT8_BLACKLEVEL_WHIT...
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint16_t, uint16_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT16_TO_1_UINT16 function.
FunctionWrapper(const ThreeSourcesOneTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_3_UINT8_TO_1_UINT8 function.
FunctionWrapper(const TwoSourcesOneTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_2_UINT8_TO_1_UINT8 function.
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint32_t, uint16_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT32_TO_1_UINT16 function.
FunctionWrapper(const TwoSourcesOneTargetAlphaConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_2_UINT8_TO_1_UINT8_ALPHA function.
FunctionWrapper(const OneSourceGammaOneTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_GAMMA_TO_1_UINT8 function.
FunctionWrapper(const OneSourceOneTargetAlphaConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_1_UINT8_ALPHA function.
const FunctionType functionType_
The type of the conversion function.
Definition: FrameConverter.h:513
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_1_UINT8 function.
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint16_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT16_TO_1_UINT8 function.
const void * function_
The function pointer of the conversion function.
Definition: FrameConverter.h:510
FunctionWrapper(const ThreeSourcesThreeTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_3_UINT8_TO_3_UINT8 function.
FunctionWrapper(const OneSourceThreeTargetsConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_3_UINT8 function.
FunctionWrapper(const OneSourceOneTargetConversionFunction< uint8_t, uint16_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_1_UINT16 function.
FunctionWrapper(const TwoSourcesThreeTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_2_UINT8_TO_3_UINT8 function.
FunctionWrapper(const OneSourceTwoTargetsConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_1_UINT8_TO_2_UINT8 function.
This class implements a singleton-based map for function pointers of conversion functions.
Definition: FrameConverter.h:219
std::unordered_map< ConversionTriple, FunctionWrapper, ConversionTriple::Hash > FormatPair2FunctionWrapperMap
Definition of a map mapping pairs or pixel formats to function pointers.
Definition: FrameConverter.h:519
void(*)(const TSource *source, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t sourcePaddingElements, const uint32_t targetPaddingElements, const uint8_t alphaValue, Worker *worker) OneSourceOneTargetAlphaConversionFunction
Definition of a function pointer to a conversion function with one source plane and one target plane ...
Definition: FrameConverter.h:283
void(*)(const TSource *source0, const TSource *source1, const TSource *source2, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t source2PaddingElements, const uint32_t targetPaddingElements, const uint8_t alphaValue, Worker *worker) ThreeSourcesOneTargetAlphaConversionFunction
Definition of a function pointer to a conversion function with three source planes and one target pla...
Definition: FrameConverter.h:331
void(*)(const TSource *source, TTarget *target0, TTarget *target1, TTarget *target2, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t sourcePaddingElements, const uint32_t target0PaddingElements, const uint32_t target1PaddingElements, const uint32_t target2PaddingElements, Worker *worker) OneSourceThreeTargetsConversionFunction
Definition of a function pointer to a conversion function with one source plane and three target plan...
Definition: FrameConverter.h:301
void(*)(const TSource *source0, const TSource *source1, TTarget *target0, TTarget *target1, TTarget *target2, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t targetPaddingElements0, const uint32_t targetPaddingElements1, const uint32_t targetPaddingElements2, Worker *worker) TwoSourcesThreeTargetConversionFunction
Definition of a function pointer to a conversion function with two source planes and three target pla...
Definition: FrameConverter.h:319
void(*)(const TSource *source0, const TSource *source1, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t targetPaddingElements, Worker *worker) TwoSourcesOneTargetConversionFunction
Definition of a function pointer to a conversion function with two source planes and one target plane...
Definition: FrameConverter.h:307
void(*)(const TSource *source0, const TSource *source1, const TSource *source2, TTarget *target0, TTarget *target1, TTarget *target2, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t source2PaddingElements, const uint32_t targetPaddingElements0, const uint32_t targetPaddingElements1, const uint32_t targetPaddingElements2, Worker *worker) ThreeSourcesThreeTargetConversionFunction
Definition of a function pointer to a conversion function with three source planes and three target p...
Definition: FrameConverter.h:337
FormatPair2FunctionWrapperMap formatPair2FunctionWrapperMap_
The map mapping pairs or pixel formats to function pointers.
Definition: FrameConverter.h:543
void(*)(const TSource *source, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const float gamma, const uint32_t sourcePaddingElements, const uint32_t targetPaddingElements, Worker *worker) OneSourceGammaOneTargetConversionFunction
Definition of a function pointer to a conversion function with one source plane with gamma correction...
Definition: FrameConverter.h:277
void(*)(const TSource *source, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint16_t blackLevelValue, const float *whiteBalanceValues, const float gamma, const uint32_t sourcePaddingElements, const uint32_t targetPaddingElements, Worker *worker) OneSourceOneTargetBlackLevelWhiteBalanceGammaConversionFunction
Definition of a function pointer to a conversion function with one source plane and one target plane ...
Definition: FrameConverter.h:289
void(*)(const TSource *source, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t sourcePaddingElements, const uint32_t targetPaddingElements, Worker *worker) OneSourceOneTargetConversionFunction
Definition of a function pointer to a conversion function with one source plane and one target plane.
Definition: FrameConverter.h:271
FunctionType
Definition of individual types of conversion functions.
Definition: FrameConverter.h:228
@ FT_2_UINT8_TO_1_UINT8_ALPHA
2-plane uint8 to 1-plane uint8 with constant alpha channel conversion function.
Definition: FrameConverter.h:256
@ FT_1_UINT8_TO_1_UINT8_ALPHA
1-plane uint8 to 1-plane uint8 with constant alpha channel conversion function.
Definition: FrameConverter.h:236
@ FT_1_UINT8_TO_2_UINT8
1-plane uint8 to 2-plane uint8 conversion function.
Definition: FrameConverter.h:250
@ FT_1_UINT32_TO_1_UINT16
1-plane uint32 to 1-plane uint16 conversion function.
Definition: FrameConverter.h:248
@ FT_3_UINT8_TO_1_UINT8
3-plane uint8 to 1-plane uint8 conversion function.
Definition: FrameConverter.h:260
@ FT_3_UINT8_TO_1_UINT8_ALPHA
3-plane uint8 to 1-plane uint8 with constant alpha channel conversion function.
Definition: FrameConverter.h:262
@ FT_1_UINT8_TO_1_UINT8_BLACKLEVEL_WHITEBALANCE_GAMMA
1-plane uint8 to 1-plane uint8 conversion function with constant black level, white balance,...
Definition: FrameConverter.h:238
@ FT_2_UINT8_TO_1_UINT8
2-plane uint8 to 1-plane uint8 conversion function.
Definition: FrameConverter.h:254
@ FT_1_UINT16_TO_1_UINT16
1-plane uint16 to 1-plane uint16 conversion function.
Definition: FrameConverter.h:244
@ FT_1_UINT8_GAMMA_TO_1_UINT8
1-plane uint8 with constant gamma correction to 1-plane uint8 conversion function.
Definition: FrameConverter.h:234
@ FT_1_UINT16_TO_1_UINT8
1-plane uint16 to 1-plane uint8 conversion function.
Definition: FrameConverter.h:242
@ FT_1_UINT8_TO_1_UINT16
1-plane uint8 to 1-plane uint16 conversion function.
Definition: FrameConverter.h:240
@ FT_1_UINT8_TO_3_UINT8
1-plane uint8 to 3-plane uint8 conversion function.
Definition: FrameConverter.h:252
@ FT_2_UINT8_TO_3_UINT8
2-plane uint8 to 3-plane uint8 conversion function.
Definition: FrameConverter.h:258
@ FT_1_UINT32_TO_1_UINT8
1-plane uint32 to 1-plane uint8 conversion function.
Definition: FrameConverter.h:246
@ FT_1_UINT8_TO_1_UINT8
1-plane uint8 to 1-plane uint8 conversion function.
Definition: FrameConverter.h:232
void(*)(const TSource *source0, const TSource *source1, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t targetPaddingElements, const uint8_t alphaValue, Worker *worker) TwoSourcesOneTargetAlphaConversionFunction
Definition of a function pointer to a conversion function with two source planes and one target plane...
Definition: FrameConverter.h:313
void(*)(const TSource *source0, const TSource *source1, const TSource *source2, TTarget *target, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t source2PaddingElements, const uint32_t targetPaddingElements, Worker *worker) ThreeSourcesOneTargetConversionFunction
Definition of a function pointer to a conversion function with three source planes and one target pla...
Definition: FrameConverter.h:325
void(*)(const TSource *source, TTarget *target0, TTarget *target1, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t sourcePaddingElements, const uint32_t target0PaddingElements, const uint32_t target1PaddingElements, Worker *worker) OneSourceTwoTargetsConversionFunction
Definition of a function pointer to a conversion function with one source plane and two target planes...
Definition: FrameConverter.h:295
ConversionFunctionMap()
Creates a new map object and initializes all function pointers.
Definition of a class storing options for frame conversions.
Definition: FrameConverter.h:105
float gamma() const
Returns the gamma value for a conversion with gamma correction/encoding.
Definition: FrameConverter.h:2668
OptionsType optionsType_
The options type.
Definition: FrameConverter.h:198
OptionsType
Definition of individual types of options.
Definition: FrameConverter.h:112
@ OT_APPROXIMATED
Approximated conversion.
Definition: FrameConverter.h:122
OptionsType optionsType() const
Returns the options type.
Definition: FrameConverter.h:2657
uint8_t alphaChannelTargetValue() const
Returns the uint8_t alpha channel value for the target image if the source image does not contain an ...
Definition: FrameConverter.h:2662
uint16_t blackLevel_
The black level value that is subtracted from each element of the raw image before any other operatio...
Definition: FrameConverter.h:207
float gamma_
The gamma value for a conversion with gamma correction/encoding, with range (0, 2) (OT_GAMMA_CORRECTI...
Definition: FrameConverter.h:204
Options(const bool allowApproximation=false)
Default constructor.
Definition: FrameConverter.h:2608
float whiteBalance_[3]
The white balancing scalars of the red, green, and blue channels (in that order), with range [0,...
Definition: FrameConverter.h:210
uint16_t blackLevel() const
Returns the black level value for a conversion with black level correction.
Definition: FrameConverter.h:2674
const float * whiteBalance() const
Returns the white balance values for a conversion with white balance correction.
Definition: FrameConverter.h:2680
bool allowApproximation() const
Returns whether the conversion can be approximated.
Definition: FrameConverter.h:2686
This is the base class for all frame converter classes.
Definition: FrameConverter.h:32
static MatrixD transformationMatrix_FullRangeRGB24_To_LimitedRangeYUV24_BT601()
Returns the 3x4 color space transformation matrix from full range RGB24 to limited range YUV24 using ...
static void convertOneRow_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
This function is not used anymore due to the corresponding 2-row function.
ConversionFlag
Definition of individual conversion flags.
Definition: FrameConverter.h:39
@ CONVERT_NORMAL
Normal conversion, neither flips nor mirrors the image.
Definition: FrameConverter.h:49
@ CONVERT_MIRRORED
Mirrored conversion, exchanges left and right of the image (like in a mirror, mirroring around the y-...
Definition: FrameConverter.h:71
@ CONVERT_FLIPPED
Flipped conversion, exchanges top and bottom of the image (flipping around the x-axis).
Definition: FrameConverter.h:60
std::vector< ConversionFlag > ConversionFlags
Definition of a vector holding conversion flags.
Definition: FrameConverter.h:88
static void mapOneRow_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a Y_U_V12 pixel format to one row of an image with e....
static void convertTwoRows_1PlaneMosaicPacked10Bit_To_1PlaneUnpacked3Channels8BitAdvanced(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with 3-channel Bayer mosaic pixel format with packed 10-bit pixel value...
static MatrixD transformationMatrix_FullRangeYUV24_To_FullRangeBGR24_BT601()
Returns the color space transformation matrix from full range YUV24 to full range BGR24 using BT....
static void convertOneRow_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a Y_U_V12 pixel format to one row of an image with e....
static OCEAN_FORCE_INLINE void unpack5ElementsBayerMosaicPacked10Bit(const uint8_t *const packed, uint16_t *unpacked)
Unpacks 5 elements from a row in a packed Bayer mosaic to 4 pixels values The required memory layout ...
Definition: FrameConverter.h:3250
static void mapOneRow_1Plane3ChannelsWith2ChannelsDownsampled2x1BackIsDownsampled_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a YUYV16 pixel format to one row of an image with e....
void(*)(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options) MultipleRowsConversionFunction
Definition of a function pointer to a function able to convert multiple image row from an arbitrary p...
Definition: FrameConverter.h:570
void(*)(const TSource *sourceRow, TTarget *targetRow, const size_t width, const void *options) RowConversionFunction
Definition of a function pointer to a function able to convert one image row from one generic pixel f...
Definition: FrameConverter.h:558
static void normalizedCast(const TSource *__restrict source, TTarget *__restrict target, const unsigned int width, const unsigned int height, const unsigned int channels, const TTarget multiplicationFactor, const TTarget offset, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements)
Casts the pixel values from one frame type to another frame type but also normalizes the casted sourc...
Definition: FrameConverter.h:2849
static MatrixD transformationMatrix_FullRangeYUV24_To_FullRangeBGR24_Android()
Returns the color space transformation matrix from full range YUV24 to full range BGR24 similar to BT...
static MatrixD transformationMatrix_FullRangeYUV24_To_FullRangeRGB24_BT601()
Returns the color space transformation matrix from full range YUV24 to full range RGB24 using BT....
static void convertTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_UV12 pixel format to two rows of an image with e....
static void patchFrame(const T *source, T *buffer, const unsigned int width, const unsigned int channels, const unsigned int x, const unsigned int y, const unsigned int patchSize, const unsigned int sourcePaddingElements, const unsigned int bufferPaddingElements)
Copies a small patch area of a given frame into a buffer holding only the entire patch.
Definition: FrameConverter.h:3127
static MatrixD transformationMatrix_FullRangeYUV24_To_FullRangeRGB24_Android()
Returns the color space transformation matrix from full range YUV24 to full range RGB24 similar to BT...
static void mapOneRow_1Plane3Channels_To_3Plane1Channel_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts (maps) one row of an image with e.g., a RGB24 pixel format to one row of an image with e....
static bool subFrameMask(const Frame &sourceFrame, Frame &targetFrame, const Frame &maskFrame, const uint32_t sourceLeft, const uint32_t sourceTop, const uint32_t targetLeft, const uint32_t targetTop, const uint32_t subFrameWidth, const uint32_t subFrameHeight, const uint8_t maskValue=0u)
Copies pixels from one sub-frame to another if the pixels are part of a mask; input may use padding.
Definition: FrameConverter.h:3067
static void convertOneRow_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
This function is not used anymore due to the corresponding 2-row function.
static void mapOneRow_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts (matches) one row of an image with e.g., a Y_UV12 pixel format to one row of an image with e...
static MatrixD transformationMatrix_FullRangeYVU24_To_FullRangeRGB24_BT601()
Returns the color space transformation matrix from full range YVU24 to full range RGB24 using BT....
static void mapOneRow_3Plane1Channel_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts (maps) one row of an image with e.g., a Y_U_V24 pixel format to one row of an image with e....
static void convertOneRow_3Planes1Channel_To_1Plane3Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a Y_U_V24 pixel format to one rows of an image with e....
static void convertOneRow_1Plane3ChannelsWith2ChannelsDownsampled2x1FrontIsDownsampled_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a UYVY16 pixel format to one row of an image with e....
static void convertOneRow_1Plane3ChannelsWith2ChannelsDownsampled2x1BackIsDownsampled_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a YUYV16 pixel format to one row of an image with e....
static void mapOneRow_1Plane2Channels_To_2Planes1Channel_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Maps one row of a 1-plane, 2-channel image to two planes with 1 channels.
static std::string translateConversionFlag(const ConversionFlag conversionFlag)
Translates a given conversion flag to a string.
static MatrixD transformationMatrix_FullRangeBGR24_To_FullRangeYVU24_BT601()
Returns the 3x4 color space transformation matrix from full range BGR24 to full range YVU24 using BT....
static void convertArbitraryPixelFormatSubset(const void **sources, void **targets, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int multipleRowsPerIteration, const MultipleRowsConversionFunction multipleRowsConversionFunction, const void *options, const unsigned int firstMultipleRow, const unsigned int numberMultipleRows)
Converts a subset of a frame with arbitrary pixel format (e.g., Y_UV12, Y_VU12, YUYV16,...
static void convertGenericPixelFormat(const TSource *source, TTarget *target, const unsigned int width, const unsigned int height, const unsigned int sourceStrideElements, const unsigned int targetStrideElements, const ConversionFlag flag, const RowConversionFunction< TSource, TTarget > rowConversionFunction, const RowReversePixelOrderInPlaceFunction< TTarget > targetReversePixelOrderInPlaceFunction, const bool areContinuous, const void *options, Worker *worker)
Converts a frame with generic pixel format (e.g., RGBA32, BGR24, YUV24, ...) to a frame with generic ...
Definition: FrameConverter.h:3211
static void convertOneRow_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane4Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a Y_U_V12 pixel format to one row of an image with e....
static MatrixD transformationMatrix_FullRangeRGB24_To_FullRangeYVU24_BT601()
Returns the 3x4 color space transformation matrix from full range RGB24 to full range YVU24 using BT....
void(*)(T *row, const size_t width) RowReversePixelOrderInPlaceFunction
Definition of a function pointer to a function able to reverse the order of pixels in an image row wi...
Definition: FrameConverter.h:589
static const ConversionFlags & conversionFlags()
Returns a vector holding all possible conversion flags.
static MatrixD transformationMatrix_FullRangeRGB24_To_FullRangeYUV24_BT601()
Returns the 3x4 color space transformation matrix from full range RGB24 to full range YUV24 using BT....
static MatrixD transformationMatrix_FullRangeYVU24_To_FullRangeBGR24_Android()
Returns the color space transformation matrix from full range YVU24 to full range BGR24 similar to BT...
static OCEAN_FORCE_INLINE void unpack15ElementsBayerMosaicPacked10BitNEON(const uint8_t *const packed, uint16x8_t &unpackedAB_u_16x8, uint16x4_t &unpackedC_u_16x4)
Unpacks 15 elements from a row in a packed Bayer mosaic to 12 pixels values The required memory layou...
Definition: FrameConverter.h:3264
static void cast(const TSource *__restrict source, TTarget *__restrict target, const unsigned int width, const unsigned int height, const unsigned int channels, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements)
Casts the pixel values from one frame type to another frame type.
static void convertTwoRows_1PlaneMosaicPacked10Bit_To_1PlaneUnpacked3Channels16Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with 3-channel Bayer mosaic pixel format with packed 10-bit pixel value...
static void convertTwoRows_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane4Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_U_V12 pixel format to two rows of an image with e....
static void cast16Elements(const TSource *const source, TTarget *const target)
Casts 16 successive elements from one data type to another data type.
static void mapTwoRows_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_U_V12 pixel format to two rows of an image with e....
CopyPreference
Definition of a boolean enum for copy preferences (to improve code readability).
Definition: FrameConverter.h:94
static MatrixD transformationMatrix_FullRangeYVU24_To_FullRangeRGB24_Android()
Returns the color space transformation matrix from full range YVU24 to full range RGB24 similar to BT...
static bool subFrame(const T *source, T *target, const unsigned int sourceWidth, const unsigned int sourceHeight, const unsigned int targetWidth, const unsigned int targetHeight, const unsigned int channels, const unsigned int sourceLeft, const unsigned int sourceTop, const unsigned int targetLeft, const unsigned int targetTop, const unsigned int width, const unsigned int height, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements)
Copies a sub-frame of a given frame into a second frame while both frames might have an individual nu...
Definition: FrameConverter.h:3033
static void convertGenericPixelFormatSubset(const uint8_t *source, uint8_t *target, const unsigned int width, const unsigned int height, const unsigned int sourceStrideBytes, const unsigned int targetStrideBytes, const ConversionFlag flag, const RowConversionFunction< uint8_t, uint8_t > rowConversionFunction, const RowReversePixelOrderInPlaceFunction< uint8_t > targetReversePixelOrderInPlaceFunction, const bool areContinuous, const void *options, const unsigned int firstRow, const unsigned int numberRows)
Converts a subset of a frame with generic pixel format (e.g., RGBA32, BGR24, YUV24,...
static MatrixD transformationMatrix_FullRangeRGB24_To_LimitedRangeYVU24_BT601()
Returns the 3x4 color space transformation matrix from full range RGB24 to limited range YVU24 using ...
static void convertOneRow_3Planes1Channel_To_1Plane4Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a Y_U_V24 pixel format to one rows of an image with e....
static MatrixD transformationMatrix_LimitedRangeYVU24_To_FullRangeBGR24_BT601()
Returns the color space transformation matrix from limited range YVU24 to full range BGR24 using BT....
static void convertTwoRows_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_U_V12 pixel format to two rows of an image with e....
static MatrixD transformationMatrix_FullRangeYVU24_To_FullRangeBGR24_BT601()
Returns the color space transformation matrix from full range YVU24 to full range BGR24 using BT....
static void patchFrameMirroredBorder(const T *source, T *buffer, const unsigned int width, const unsigned int height, const unsigned int x, const unsigned int y, const unsigned int patchSize, const unsigned int sourcePaddingElements, const unsigned int bufferPaddingElements)
Copies a small patch area of a frame into a buffer holding only the entire patch.
Definition: FrameConverter.h:3156
void(*)(const T *inputRow, T *targetRow, const size_t width) RowReversePixelOrderFunction
Definition of a function pointer to a function able to reverse the order of pixels in an image row wi...
Definition: FrameConverter.h:580
static void convertTwoRows_1Plane3Channels_To_1Plane1ChannelAnd2Planes1ChannelsDownsampled2x2_8BitPerChannel_Precision7Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a RGB pixel format to two rows of an image with e....
static void mapTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts (matches) two rows of an image with e.g., a Y_UV12 pixel format to two rows of an image with...
static void convertTwoRows_1Plane3Channels_To_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_8BitPerChannel_Precision7Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a RGB pixel format to two rows of an image with e....
static MatrixD transformationMatrix_LimitedRangeYVU24_To_FullRangeRGB24_BT601()
Returns the color space transformation matrix from limited range YVU24 to full range RGB24 using BT....
static void mapTwoRows_1Plane3Channels_To_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a YUV24 pixel format to two rows of an image with e....
static void mapOneRow_1Plane3ChannelsWith2ChannelsDownsampled2x1FrontIsDownsampled_To_1Plane3Channels_8BitPerChannel(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts one row of an image with e.g., a UYVY16 pixel format to one row of an image with e....
static void convertTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision10Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_UV12 pixel format to two rows of an image with e....
static MatrixD transformationMatrix_LimitedRangeYUV24_To_FullRangeBGR24_BT601()
Returns the color space transformation matrix from limited range YUV24 to full range BGR24 using BT....
static void convertArbitraryPixelFormat(const void **sources, void **targets, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int multipleRowsPerIteration, const MultipleRowsConversionFunction multipleRowsConversionFunction, const void *options, Worker *worker)
Converts a frame with arbitrary pixel format (e.g., Y_UV12, Y_VU12, YUYV16, ...) to a frame with arbi...
Definition: FrameConverter.h:3234
static void convertTwoRows_1Plane1ChannelAnd2Planes1ChannelDownsampled2x2_To_1Plane3Channels_8BitPerChannel_Precision6Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with e.g., a Y_U_V12 pixel format to two rows of an image with e....
static MatrixD transformationMatrix_FullRangeBGR24_To_LimitedRangeYUV24_BT601()
Returns the color space transformation matrix from full range BGR24 to limited range YUV24 using BT....
static void convertTwoRows_1PlaneMosaicPacked10Bit_To_1PlaneUnpacked3Channels8Bit(const void **sources, void **targets, const unsigned int multipleRowIndex, const unsigned int width, const unsigned int height, const ConversionFlag conversionFlag, const void *options)
Converts two rows of an image with 3-channel Bayer mosaic pixel format with packed 10-bit pixel value...
static MatrixD transformationMatrix_LimitedRangeYUV24_To_FullRangeRGB24_BT601()
Returns the color space transformation matrix from limited range YUV24 to full range RGB24 using BT....
static MatrixD transformationMatrix_FullRangeBGR24_To_FullRangeYUV24_BT601()
Returns the 3x4 color space transformation matrix from full range BGR24 to full range YUV24 using BT....
static Caller< void > createStatic(typename StaticFunctionPointerMaker< void, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass, NullClass >::Type function)
Creates a new caller container for a static function with no function parameter.
Definition: Caller.h:2876
This class implements Ocean's image class.
Definition: Frame.h:1792
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
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
bool copy(const Frame &source, const bool copyTimestamp=true)
Deprecated.
bool isOwner() const
Returns whether the frame is the owner of the internal frame data.
Definition: Frame.h:4291
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
PixelFormat
Definition of all pixel formats available in the Ocean framework.
Definition: Frame.h:183
@ FORMAT_UNDEFINED
Undefined pixel format.
Definition: Frame.h:187
unsigned int width() const
Returns the width of the frame format in pixel.
Definition: Frame.h:3143
PixelOrigin pixelOrigin() const
Returns the pixel origin of the frame.
Definition: Frame.h:3188
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition: Frame.h:3183
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition: Frame.h:3153
PixelOrigin
Defines different types of frame origin positions.
Definition: Frame.h:1046
@ ORIGIN_INVALID
Invalid origin type.
Definition: Frame.h:1048
unsigned int height() const
Returns the height of the frame in pixel.
Definition: Frame.h:3148
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition: Frame.h:3173
DataType dataType() const
Returns the data type of the pixel format of this frame.
Definition: Frame.h:3163
This class implements a matrix with arbitrary size.
Definition: Matrix.h:63
This template class is the base class for all singleton objects.
Definition: Singleton.h:71
This class implements a worker able to distribute function calls over different threads.
Definition: Worker.h:33
bool executeFunction(const Function &function, const unsigned int first, const unsigned int size, const unsigned int firstIndex=(unsigned int)(-1), const unsigned int sizeIndex=(unsigned int)(-1), const unsigned int minimalIterations=1u, const unsigned int threadIndex=(unsigned int)(-1))
Executes a callback function separable by two function parameters.
The namespace covering the entire Ocean framework.
Definition: Accessor.h:15
Helper class for a hash function.
Definition: FrameConverter.h:353
size_t operator()(const ConversionTriple &conversionTriple) const
Hash function.
Definition: FrameConverter.h:2691
Definition of the parameters used by the function for row-wise conversion of RGGB14_PACKED to RGB24/B...
Definition: FrameConverter.h:595