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>
1845 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1884 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2019 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2060 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2090 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2427 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2453 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2474 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2495 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2512 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2536 static OCEAN_FORCE_INLINE
void unpack5ElementsBayerMosaicPacked10Bit(
const uint8_t*
const packed, uint16_t* unpacked);
2538 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
2551 template <
bool tAllowLastOverlappingElement>
2552 static OCEAN_FORCE_INLINE
void unpack15ElementsBayerMosaicPacked10BitNEON(
const uint8_t*
const packed, uint16x8_t& unpackedAB_u_16x8, uint16x4_t& unpackedC_u_16x4);
2566 optionsType_(OT_ALPHA_CHANNEL_TARGET_VALUE),
2567 alphaChannelTargetValue_(alphaChannelTargetValue)
2576 optionsType_(OT_GAMMA_CORRECTION),
2587 inline FrameConverter::Options::Options(
const uint16_t blackLevel,
const float whiteBalanceRed,
const float whiteBalanceGreen,
const float whiteBalanceBlue,
const float gamma,
const bool allowApproximation) :
2588 optionsType_(OT_BLACKLEVEL_WHITEBALANCE_GAMMA),
2590 blackLevel_(blackLevel)
2593 ocean_assert(whiteBalanceRed >= 0.0f && whiteBalanceGreen >= 0.0f && whiteBalanceBlue >= 0.0f);
2594 ocean_assert(
gamma_ >= 0.0f);
2608 return optionsType_;
2613 ocean_assert(optionsType_ & OT_ALPHA_CHANNEL_TARGET_VALUE);
2614 return alphaChannelTargetValue_;
2619 ocean_assert((optionsType_ & OT_GAMMA_CORRECTION) || (optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA));
2625 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2631 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2632 return whiteBalance_;
2637 return (optionsType_ & OT_APPROXIMATED) == OT_APPROXIMATED;
2646 sourcePixelFormat_(sourcePixelFormat),
2647 targetPixelFormat_(targetPixelFormat),
2648 optionsType_(optionsType)
2660 return convert(source, targetPixelFormat, source.
pixelOrigin(), target, forceCopy, worker, options);
2665 return convert(source, source.
pixelFormat(), targetPixelOrigin, target, forceCopy, worker, options);
2670 ocean_assert(frame.
isValid());
2684 if (!convert(frame, targetPixelFormat, targetPixelOrigin, tmpFrame, forceCopy, worker, options))
2692 frame.
copy(tmpFrame);
2696 frame = std::move(tmpFrame);
2704 return change(frame, targetPixelFormat, frame.
pixelOrigin(), forceCopy, worker, options);
2709 return change(frame, frame.
pixelFormat(), targetPixelOrigin, forceCopy, worker, options);
2712 OCEAN_RE_ENABLE_DOCUMENTATION_DIAGNOSTIC
2714 template <
typename TSource,
typename TTarget>
2715 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)
2717 ocean_assert(source !=
nullptr && target !=
nullptr);
2718 ocean_assert(width != 0u && height != 0u);
2719 ocean_assert(channels != 0u);
2724 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
2726 if (std::is_same<TSource, TTarget>::value)
2728 memcpy(target, source,
size_t(width * height * channels) *
sizeof(TSource));
2732 const unsigned int elementsPerFrame = width * height * channels;
2733 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
2735 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
2737 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
2739 cast16Elements<TSource, TTarget>(source, target);
2745 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
2747 target[i] = TTarget(source[i]);
2753 if (std::is_same<TSource, TTarget>::value)
2755 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
2756 const unsigned int targetStrideElements = width * channels + targetPaddingElements;
2758 const size_t bytesPerRowToCopy = size_t(width * channels) *
sizeof(TSource);
2760 for (
unsigned int y = 0u; y < height; ++y)
2762 memcpy(target, source, bytesPerRowToCopy);
2764 source += sourceStrideElements;
2765 target += targetStrideElements;
2770 const unsigned int elementsPerRow = width * channels;
2771 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
2773 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
2775 for (
unsigned int y = 0u; y < height; ++y)
2777 for (
unsigned int x = 0u; x < blocksPerRow_16; ++x)
2779 cast16Elements<TSource, TTarget>(source, target);
2785 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
2787 target[i] = TTarget(source[i]);
2790 source += remainingElementsPerRow + sourcePaddingElements;
2791 target += remainingElementsPerRow + targetPaddingElements;
2797 template <
typename TSource,
typename TTarget>
2798 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)
2800 ocean_assert(source !=
nullptr && target !=
nullptr);
2801 ocean_assert(width != 0u && height != 0u);
2802 ocean_assert(channels != 0u);
2807 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
2809 const unsigned int elementsPerFrame = width * height * channels;
2810 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
2812 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
2814 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
2816 for (
unsigned int i = 0u; i < 16u; ++i)
2818 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2825 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
2827 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2832 const unsigned int elementsPerRow = width * channels;
2833 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
2835 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
2837 for (
unsigned int y = 0u; y < height; ++y)
2839 for (
unsigned int n = 0u; n < blocksPerRow_16; ++n)
2841 for (
unsigned int i = 0u; i < 16u; ++i)
2843 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2850 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
2852 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
2855 source += remainingElementsPerRow + sourcePaddingElements;
2856 target += remainingElementsPerRow + targetPaddingElements;
2861 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
2864 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, float>(
const uint8_t*
const source,
float*
const target)
2866 const uint8x16_t source_8x16 = vld1q_u8(source);
2868 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2869 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2871 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2872 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2873 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2874 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2876 const float32x4_t target_32x4_0 = vcvtq_f32_u32(source_32x4_0);
2877 const float32x4_t target_32x4_1 = vcvtq_f32_u32(source_32x4_1);
2878 const float32x4_t target_32x4_2 = vcvtq_f32_u32(source_32x4_2);
2879 const float32x4_t target_32x4_3 = vcvtq_f32_u32(source_32x4_3);
2881 vst1q_f32(target + 0, target_32x4_0);
2882 vst1q_f32(target + 4, target_32x4_1);
2883 vst1q_f32(target + 8, target_32x4_2);
2884 vst1q_f32(target + 12, target_32x4_3);
2888 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint16_t>(
const uint8_t*
const source, uint16_t*
const target)
2890 const uint8x16_t source_8x16 = vld1q_u8(source);
2892 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2893 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2895 vst1q_u16(target + 0, source_16x8_0);
2896 vst1q_u16(target + 8, source_16x8_1);
2900 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int16_t>(
const uint8_t*
const source, int16_t*
const target)
2902 const uint8x16_t source_8x16 = vld1q_u8(source);
2904 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2905 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2907 vst1q_s16(target + 0, vreinterpretq_s16_u16(source_16x8_0));
2908 vst1q_s16(target + 8, vreinterpretq_s16_u16(source_16x8_1));
2912 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint32_t>(
const uint8_t*
const source, uint32_t*
const target)
2914 const uint8x16_t source_8x16 = vld1q_u8(source);
2916 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2917 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2919 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2920 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2921 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2922 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2924 vst1q_u32(target + 0, source_32x4_0);
2925 vst1q_u32(target + 4, source_32x4_1);
2926 vst1q_u32(target + 8, source_32x4_2);
2927 vst1q_u32(target + 12, source_32x4_3);
2931 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int32_t>(
const uint8_t*
const source, int32_t*
const target)
2933 const uint8x16_t source_8x16 = vld1q_u8(source);
2935 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
2936 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
2938 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
2939 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
2940 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
2941 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
2943 vst1q_s32(target + 0, vreinterpretq_s32_u32(source_32x4_0));
2944 vst1q_s32(target + 4, vreinterpretq_s32_u32(source_32x4_1));
2945 vst1q_s32(target + 8, vreinterpretq_s32_u32(source_32x4_2));
2946 vst1q_s32(target + 12, vreinterpretq_s32_u32(source_32x4_3));
2950 OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<float, uint8_t>(
const float*
const source, uint8_t*
const target)
2952 const float32x4_t source_32x4_0 = vld1q_f32(source + 0);
2953 const float32x4_t source_32x4_1 = vld1q_f32(source + 4);
2954 const float32x4_t source_32x4_2 = vld1q_f32(source + 8);
2955 const float32x4_t source_32x4_3 = vld1q_f32(source + 12);
2957 const uint32x4_t target_32x4_0 = vcvtq_u32_f32(source_32x4_0);
2958 const uint32x4_t target_32x4_1 = vcvtq_u32_f32(source_32x4_1);
2959 const uint32x4_t target_32x4_2 = vcvtq_u32_f32(source_32x4_2);
2960 const uint32x4_t target_32x4_3 = vcvtq_u32_f32(source_32x4_3);
2962 const uint16x8_t target_16x8_0 = vcombine_u16(vmovn_u32(target_32x4_0), vmovn_u32(target_32x4_1));
2963 const uint16x8_t target_16x8_1 = vcombine_u16(vmovn_u32(target_32x4_2), vmovn_u32(target_32x4_3));
2965 const uint8x16_t target_8x16 = vcombine_u8(vmovn_u16(target_16x8_0), vmovn_u16(target_16x8_1));
2967 vst1q_u8(target, target_8x16);
2972 template <
typename TSource,
typename TTarget>
2975 for (
unsigned int i = 0u; i < 16u; ++i)
2977 target[i] = TTarget(source[i]);
2981 template <
typename T>
2982 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)
2984 ocean_assert(source !=
nullptr && target !=
nullptr);
2986 if (sourceLeft + width > sourceWidth || sourceTop + height > sourceHeight || targetLeft + width > targetWidth || targetTop + height > targetHeight)
2991 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
2992 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
2994 const T* subSource = source + sourceStrideElements * sourceTop + sourceLeft * channels;
2995 T* subTarget = target + targetStrideElements * targetTop + targetLeft * channels;
2997 if (sourcePaddingElements == 0u && targetPaddingElements == 0u && width == sourceWidth && sourceWidth == targetWidth)
2999 memcpy(subTarget, subSource, height * width * channels *
sizeof(T));
3003 for (
unsigned int y = 0u; y < height; ++y)
3005 memcpy(subTarget, subSource, width * channels *
sizeof(T));
3007 subTarget += targetStrideElements;
3008 subSource += sourceStrideElements;
3015 template <
typename T>
3016 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)
3018 if (subFrameWidth == 0u || subFrameHeight == 0u)
3025 ocean_assert(
false &&
"Invalid input");
3029 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);
3032 template <
typename T>
3033 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)
3035 ocean_assert(source !=
nullptr && target !=
nullptr && mask !=
nullptr);
3037 if (sourceLeft + subFrameWidth > sourceWidth || sourceTop + subFrameHeight > sourceHeight || targetLeft + subFrameWidth > targetWidth || targetTop + subFrameHeight > targetHeight)
3039 ocean_assert(
false &&
"Invalid input");
3043 const unsigned int maskStrideElements = subFrameWidth + maskPaddingElements;
3045 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
3046 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
3048 for (
unsigned int y = 0u; y < subFrameHeight; ++y)
3050 const uint8_t* maskRow = mask + maskStrideElements * y;
3052 const T* subSource = source + sourceStrideElements * (sourceTop + y) + sourceLeft * channels;
3053 T* subTarget = target + targetStrideElements * (targetTop + y) + targetLeft * channels;
3055 for (
unsigned int x = 0u; x < subFrameWidth; ++x)
3057 if (*maskRow == maskValue)
3059 for (
unsigned int c = 0u; c < channels; ++c)
3061 subTarget[c] = subSource[c];
3067 subSource += channels;
3068 subTarget += channels;
3075 template <
typename T>
3076 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)
3078 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3079 ocean_assert(width >= patchSize && channels >= 1u);
3081 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3082 const unsigned int patchSize_2 = patchSize / 2u;
3084 ocean_assert(x >= patchSize_2 && y >= patchSize_2);
3085 ocean_assert(x + patchSize_2 < width);
3087 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
3088 const unsigned int bufferStrideElements = patchSize * channels + bufferPaddingElements;
3090 const unsigned int sourceLeft = x - patchSize_2;
3091 const unsigned int sourceTop = y - patchSize_2;
3093 source += sourceTop * sourceStrideElements + sourceLeft * channels;
3095 for (
unsigned int row = 0u; row < patchSize; ++row)
3097 memcpy(buffer, source, channels * patchSize *
sizeof(T));
3099 source += sourceStrideElements;
3100 buffer += bufferStrideElements;
3104 template <
typename T,
unsigned int tChannels>
3105 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)
3107 static_assert(tChannels >= 1u,
"Invalid number of color channels!");
3109 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3111 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3112 const unsigned int patchSize_2 = patchSize / 2u;
3114 const unsigned int widthPatchSize1 = width - (patchSize - 1u);
3115 ocean_assert(widthPatchSize1 == width - patchSize_2 * 2u);
3117 ocean_assert(width >= patchSize_2 + 1u && height >= patchSize_2 + 1u);
3119 ocean_assert(x < width && y < height);
3121 const unsigned int sourceStrideElements = width * tChannels + sourcePaddingElements;
3123 for (
int top =
int(y - patchSize_2); top <= int(y + patchSize_2); ++top)
3127 for (
int left =
int(x - patchSize_2); left <= int(x + patchSize_2); ++left)
3129 if ((
unsigned int)(left) - patchSize_2 < widthPatchSize1)
3131 ocean_assert(left >=
int(patchSize_2) && left <
int(width - patchSize_2));
3133 const T* sourcePixel = sourceRow + left * tChannels;
3135 for (
unsigned int n = 0u; n < tChannels; ++n)
3137 buffer[n] = sourcePixel[n];
3142 ocean_assert((
unsigned int)(left) <= patchSize_2 || (
unsigned int)(left) >= width - patchSize_2);
3146 for (
unsigned int n = 0u; n < tChannels; ++n)
3148 buffer[n] = sourcePixel[n];
3152 buffer += tChannels;
3155 buffer += bufferPaddingElements;
3159 template <
typename TSource,
typename TTarget>
3160 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)
3162 ocean_assert(source !=
nullptr && target !=
nullptr);
3163 ocean_assert(width >= 1u && height >= 1u);
3164 ocean_assert(sourceStrideElements >= width && targetStrideElements >= width);
3165 ocean_assert(rowConversionFunction !=
nullptr);
3170 const unsigned int sourceStrideBytes = sourceStrideElements *
sizeof(TSource);
3171 const unsigned int targetStrideBytes = targetStrideElements *
sizeof(TTarget);
3173 if (worker && height >= 200u)
3175 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);
3179 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);
3185 ocean_assert(multipleRowsPerIteration != 0u && height % multipleRowsPerIteration == 0u);
3187 const unsigned int rowIterations = height / multipleRowsPerIteration;
3189 if (worker && rowIterations >= 200u)
3191 worker->
executeFunction(
Worker::Function::createStatic(&
FrameConverter::convertArbitraryPixelFormatSubset, sources, targets, width, height, flag, multipleRowsPerIteration, multipleRowsConversionFunction, options, 0u, 0u), 0u, rowIterations, 8u, 9u, 20u);
3201 ocean_assert(packed !=
nullptr);
3202 ocean_assert(unpacked !=
nullptr);
3204 unpacked[0] = uint16_t(uint16_t(packed[0]) << uint16_t(2) | (uint16_t(packed[4]) & uint16_t(0b00000011)));
3205 unpacked[1] = uint16_t(uint16_t(packed[1]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00001100)) >> uint16_t(2)));
3206 unpacked[2] = uint16_t(uint16_t(packed[2]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00110000)) >> uint16_t(4)));
3207 unpacked[3] = uint16_t(uint16_t(packed[3]) << uint16_t(2) | (uint16_t(packed[4]) >> uint16_t(6)));
3210 #if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
3212 template <
bool tAllowLastOverlappingElement>
3215 constexpr uint8x8_t shuffleC_u_8x8 = {6u, 2u, 6u, 3u, 6u, 4u, 6u, 5u};
3217 constexpr int8x16_t leftShifts_s_8x16 = {6, 0, 4, 0, 2, 0, 0, 0, 6, 0, 4, 0, 2, 0, 0, 0};
3218 constexpr int16x8_t rightShifts_s_16x8 = {-6, -6, -6, -6, -6, -6, -6, -6};
3220 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));
3226 constexpr uint8x16_t shuffle_u_8x16 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u, 9u, 5u, 9u, 6u, 9u, 7u, 9u, 8u};
3227 const uint8x16_t intermediateAB_u_8x16 = vqtbl1q_u8(packed_u_8x16, shuffle_u_8x16);
3229 const uint8x8_t packedA_u_8x8 = vget_low_u8(packed_u_8x16);
3230 const uint8x8_t packedB_u_8x8 = vget_low_u8(vextq_u8(packed_u_8x16, packed_u_8x16, 5));
3232 constexpr uint8x8_t shuffleAB_u_8x8 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u};
3233 const uint8x16_t intermediateAB_u_8x16 = vcombine_u8(vtbl1_u8(packedA_u_8x8, shuffleAB_u_8x8), vtbl1_u8(packedB_u_8x8, shuffleAB_u_8x8));
3239 const uint8x8_t intermediateC_u_8x8 = vtbl1_u8(vget_high_u8(packed_u_8x16), shuffleC_u_8x8);
3244 const uint16x8_t intermediateAB_u_16x8 = vreinterpretq_u16_u8(vshlq_u8(intermediateAB_u_8x16, leftShifts_s_8x16));
3246 const uint16x4_t intermediateC_u_16x4 = vreinterpret_u16_u8(vshl_u8(intermediateC_u_8x8, vget_low_u8(leftShifts_s_8x16)));
3251 unpackedAB_u_16x8 = vshlq_u16(intermediateAB_u_16x8, rightShifts_s_16x8);
3253 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:2668
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:2653
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:2617
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:2606
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:2611
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:2557
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:2623
const float * whiteBalance() const
Returns the white balance values for a conversion with white balance correction.
Definition: FrameConverter.h:2629
bool allowApproximation() const
Returns whether the conversion can be approximated.
Definition: FrameConverter.h:2635
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:3199
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:2798
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:3076
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 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:3016
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:3160
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:3213
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:2982
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:3105
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:3183
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:1760
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:4136
T * data(const unsigned int planeIndex=0u)
Returns a pointer to the pixel data of a specific plane.
Definition: Frame.h:4127
bool isValid() const
Returns whether this frame is valid.
Definition: Frame.h:4416
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:4259
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:4010
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:3111
PixelOrigin pixelOrigin() const
Returns the pixel origin of the frame.
Definition: Frame.h:3156
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition: Frame.h:3151
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition: Frame.h:3121
PixelOrigin
Defines different types of frame origin positions.
Definition: Frame.h:1014
@ ORIGIN_INVALID
Invalid origin type.
Definition: Frame.h:1016
unsigned int height() const
Returns the height of the frame in pixel.
Definition: Frame.h:3116
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition: Frame.h:3141
DataType dataType() const
Returns the data type of the pixel format of this frame.
Definition: Frame.h:3131
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:2640
Definition of the parameters used by the function for row-wise conversion of RGGB14_PACKED to RGB24/B...
Definition: FrameConverter.h:595