8#ifndef META_OCEAN_CV_FRAME_CONVERTER_H
9#define META_OCEAN_CV_FRAME_CONVERTER_H
25OCEAN_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 };
266 FT_3_UINT8_TO_3_UINT8
272 template <
typename TSource,
typename TTarget>
278 template <
typename TSource,
typename TTarget>
284 template <
typename TSource,
typename TTarget>
290 template <
typename TSource,
typename TTarget>
291 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);
296 template <
typename TSource,
typename TTarget>
297 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);
302 template <
typename TSource,
typename TTarget>
303 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);
308 template <
typename TSource,
typename TTarget>
309 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);
314 template <
typename TSource,
typename TTarget>
315 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);
320 template <
typename TSource,
typename TTarget>
321 using TwoSourcesTwoTargetConversionFunction = void(*)(
const TSource* source0,
const TSource* source1, TTarget* target0, TTarget* target1,
const uint32_t width,
const uint32_t height,
const ConversionFlag conversionFlag,
const uint32_t source0PaddingElements,
const uint32_t source1PaddingElements,
const uint32_t target0PaddingElements,
const uint32_t target1PaddingElements,
Worker* worker);
326 template <
typename TSource,
typename TTarget>
327 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);
332 template <
typename TSource,
typename TTarget>
333 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);
338 template <
typename TSource,
typename TTarget>
339 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);
344 template <
typename TSource,
typename TTarget>
345 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);
571 template <
typename TSource,
typename TTarget>
572 using RowConversionFunction = void (*)(
const TSource* sourceRow, TTarget* targetRow,
const size_t width,
const void* options);
584 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);
593 template <
typename T>
602 template <
typename T>
611 uint16_t blackLevel = 0u;
614 unsigned int whiteBalance7[3] = { 128u, 128u, 128u };
617 const uint8_t* gammaLookupValues =
nullptr;
620 unsigned int sourcePaddingElements = 0u;
623 unsigned int targetPaddingElements = 0u;
888 template <
typename TSource,
typename TTarget>
889 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);
934 template <
typename TSource,
typename TTarget>
935 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);
958 template <
typename T>
959 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);
981 template <
typename T>
982 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);
1012 template <
typename T>
1013 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);
1028 template <
typename T>
1029 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);
1046 template <
typename T,
unsigned int tChannels>
1047 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);
1373 template <
typename TSource,
typename TTarget>
1374 static inline void cast16Elements(
const TSource*
const source, TTarget*
const target);
1394 template <
typename TSource,
typename TTarget>
1395 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);
1410 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);
1430 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);
1863 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1914 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
1964 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2003 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2142 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2183 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2213 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2750 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2776 template <
unsigned int tSourceChannelIndex0,
unsigned int tSourceChannelIndex1,
unsigned int tSourceChannelIndex2>
2797 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2818 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2835 template <
unsigned int tIndexRed,
unsigned int tIndexGreen,
unsigned int tIndexBlue>
2859 static OCEAN_FORCE_INLINE
void unpack5ElementsBayerMosaicPacked10Bit(
const uint8_t*
const packed, uint16_t* unpacked);
2861#if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
2874 template <
bool tAllowLastOverlappingElement>
2875 static OCEAN_FORCE_INLINE
void unpack15ElementsBayerMosaicPacked10BitNEON(
const uint8_t*
const packed, uint16x8_t& unpackedAB_u_16x8, uint16x4_t& unpackedC_u_16x4);
2889 optionsType_(OT_ALPHA_CHANNEL_TARGET_VALUE),
2890 alphaChannelTargetValue_(alphaChannelTargetValue)
2899 optionsType_(OT_GAMMA_CORRECTION),
2910inline FrameConverter::Options::Options(
const uint16_t blackLevel,
const float whiteBalanceRed,
const float whiteBalanceGreen,
const float whiteBalanceBlue,
const float gamma,
const bool allowApproximation) :
2911 optionsType_(OT_BLACKLEVEL_WHITEBALANCE_GAMMA),
2913 blackLevel_(blackLevel)
2916 ocean_assert(whiteBalanceRed >= 0.0f && whiteBalanceGreen >= 0.0f && whiteBalanceBlue >= 0.0f);
2917 ocean_assert(
gamma_ >= 0.0f);
2931 return optionsType_;
2936 ocean_assert(optionsType_ & OT_ALPHA_CHANNEL_TARGET_VALUE);
2937 return alphaChannelTargetValue_;
2942 ocean_assert((optionsType_ & OT_GAMMA_CORRECTION) || (optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA));
2948 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2954 ocean_assert(optionsType_ & OT_BLACKLEVEL_WHITEBALANCE_GAMMA);
2955 return whiteBalance_;
2960 return (optionsType_ & OT_APPROXIMATED) == OT_APPROXIMATED;
2969 sourcePixelFormat_(sourcePixelFormat),
2970 targetPixelFormat_(targetPixelFormat),
2971 optionsType_(optionsType)
2983 return convert(source, targetPixelFormat, source.
pixelOrigin(), target, forceCopy, worker, options);
2988 return convert(source, source.
pixelFormat(), targetPixelOrigin, target, forceCopy, worker, options);
2993 ocean_assert(frame.
isValid());
3007 if (!convert(frame, targetPixelFormat, targetPixelOrigin, tmpFrame, forceCopy, worker, options))
3015 frame.
copy(tmpFrame);
3019 frame = std::move(tmpFrame);
3027 return change(frame, targetPixelFormat, frame.
pixelOrigin(), forceCopy, worker, options);
3032 return change(frame, frame.
pixelFormat(), targetPixelOrigin, forceCopy, worker, options);
3035OCEAN_RE_ENABLE_DOCUMENTATION_DIAGNOSTIC
3037template <
typename TSource,
typename TTarget>
3038void 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)
3040 ocean_assert(source !=
nullptr && target !=
nullptr);
3041 ocean_assert(width != 0u && height != 0u);
3042 ocean_assert(channels != 0u);
3047 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
3049 if (std::is_same<TSource, TTarget>::value)
3051 memcpy(target, source,
size_t(width * height * channels) *
sizeof(TSource));
3055 const unsigned int elementsPerFrame = width * height * channels;
3056 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
3058 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
3060 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
3062 cast16Elements<TSource, TTarget>(source, target);
3068 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
3070 target[i] = TTarget(source[i]);
3076 if (std::is_same<TSource, TTarget>::value)
3078 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
3079 const unsigned int targetStrideElements = width * channels + targetPaddingElements;
3081 const size_t bytesPerRowToCopy =
size_t(width * channels) *
sizeof(TSource);
3083 for (
unsigned int y = 0u; y < height; ++y)
3085 memcpy(target, source, bytesPerRowToCopy);
3087 source += sourceStrideElements;
3088 target += targetStrideElements;
3093 const unsigned int elementsPerRow = width * channels;
3094 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
3096 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
3098 for (
unsigned int y = 0u; y < height; ++y)
3100 for (
unsigned int x = 0u; x < blocksPerRow_16; ++x)
3102 cast16Elements<TSource, TTarget>(source, target);
3108 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
3110 target[i] = TTarget(source[i]);
3113 source += remainingElementsPerRow + sourcePaddingElements;
3114 target += remainingElementsPerRow + targetPaddingElements;
3120template <
typename TSource,
typename TTarget>
3121void 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)
3123 ocean_assert(source !=
nullptr && target !=
nullptr);
3124 ocean_assert(width != 0u && height != 0u);
3125 ocean_assert(channels != 0u);
3130 if (sourcePaddingElements == 0u && targetPaddingElements == 0u)
3132 const unsigned int elementsPerFrame = width * height * channels;
3133 const unsigned int blocksPerFrame_16 = elementsPerFrame / 16u;
3135 const unsigned int remainingElementsPerFrame = elementsPerFrame - blocksPerFrame_16 * 16u;
3137 for (
unsigned int n = 0u; n < blocksPerFrame_16; ++n)
3139 for (
unsigned int i = 0u; i < 16u; ++i)
3141 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
3148 for (
unsigned int i = 0u; i < remainingElementsPerFrame; ++i)
3150 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
3155 const unsigned int elementsPerRow = width * channels;
3156 const unsigned int blocksPerRow_16 = elementsPerRow / 16u;
3158 const unsigned int remainingElementsPerRow = elementsPerRow - blocksPerRow_16 * 16u;
3160 for (
unsigned int y = 0u; y < height; ++y)
3162 for (
unsigned int n = 0u; n < blocksPerRow_16; ++n)
3164 for (
unsigned int i = 0u; i < 16u; ++i)
3166 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
3173 for (
unsigned int i = 0u; i < remainingElementsPerRow; ++i)
3175 target[i] = TTarget(source[i]) * multiplicationFactor + offset;
3178 source += remainingElementsPerRow + sourcePaddingElements;
3179 target += remainingElementsPerRow + targetPaddingElements;
3184#if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
3187OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, float>(
const uint8_t*
const source,
float*
const target)
3189 const uint8x16_t source_8x16 = vld1q_u8(source);
3191 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
3192 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
3194 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
3195 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
3196 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
3197 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
3199 const float32x4_t target_32x4_0 = vcvtq_f32_u32(source_32x4_0);
3200 const float32x4_t target_32x4_1 = vcvtq_f32_u32(source_32x4_1);
3201 const float32x4_t target_32x4_2 = vcvtq_f32_u32(source_32x4_2);
3202 const float32x4_t target_32x4_3 = vcvtq_f32_u32(source_32x4_3);
3204 vst1q_f32(target + 0, target_32x4_0);
3205 vst1q_f32(target + 4, target_32x4_1);
3206 vst1q_f32(target + 8, target_32x4_2);
3207 vst1q_f32(target + 12, target_32x4_3);
3211OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint16_t>(
const uint8_t*
const source, uint16_t*
const target)
3213 const uint8x16_t source_8x16 = vld1q_u8(source);
3215 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
3216 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
3218 vst1q_u16(target + 0, source_16x8_0);
3219 vst1q_u16(target + 8, source_16x8_1);
3223OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int16_t>(
const uint8_t*
const source, int16_t*
const target)
3225 const uint8x16_t source_8x16 = vld1q_u8(source);
3227 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
3228 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
3230 vst1q_s16(target + 0, vreinterpretq_s16_u16(source_16x8_0));
3231 vst1q_s16(target + 8, vreinterpretq_s16_u16(source_16x8_1));
3235OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, uint32_t>(
const uint8_t*
const source, uint32_t*
const target)
3237 const uint8x16_t source_8x16 = vld1q_u8(source);
3239 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
3240 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
3242 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
3243 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
3244 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
3245 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
3247 vst1q_u32(target + 0, source_32x4_0);
3248 vst1q_u32(target + 4, source_32x4_1);
3249 vst1q_u32(target + 8, source_32x4_2);
3250 vst1q_u32(target + 12, source_32x4_3);
3254OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<uint8_t, int32_t>(
const uint8_t*
const source, int32_t*
const target)
3256 const uint8x16_t source_8x16 = vld1q_u8(source);
3258 const uint16x8_t source_16x8_0 = vmovl_u8(vget_low_u8(source_8x16));
3259 const uint16x8_t source_16x8_1 = vmovl_u8(vget_high_u8(source_8x16));
3261 const uint32x4_t source_32x4_0 = vmovl_u16(vget_low_u16(source_16x8_0));
3262 const uint32x4_t source_32x4_1 = vmovl_u16(vget_high_u16(source_16x8_0));
3263 const uint32x4_t source_32x4_2 = vmovl_u16(vget_low_u16(source_16x8_1));
3264 const uint32x4_t source_32x4_3 = vmovl_u16(vget_high_u16(source_16x8_1));
3266 vst1q_s32(target + 0, vreinterpretq_s32_u32(source_32x4_0));
3267 vst1q_s32(target + 4, vreinterpretq_s32_u32(source_32x4_1));
3268 vst1q_s32(target + 8, vreinterpretq_s32_u32(source_32x4_2));
3269 vst1q_s32(target + 12, vreinterpretq_s32_u32(source_32x4_3));
3273OCEAN_FORCE_INLINE
void FrameConverter::cast16Elements<float, uint8_t>(
const float*
const source, uint8_t*
const target)
3275 const float32x4_t source_32x4_0 = vld1q_f32(source + 0);
3276 const float32x4_t source_32x4_1 = vld1q_f32(source + 4);
3277 const float32x4_t source_32x4_2 = vld1q_f32(source + 8);
3278 const float32x4_t source_32x4_3 = vld1q_f32(source + 12);
3280 const uint32x4_t target_32x4_0 = vcvtq_u32_f32(source_32x4_0);
3281 const uint32x4_t target_32x4_1 = vcvtq_u32_f32(source_32x4_1);
3282 const uint32x4_t target_32x4_2 = vcvtq_u32_f32(source_32x4_2);
3283 const uint32x4_t target_32x4_3 = vcvtq_u32_f32(source_32x4_3);
3285 const uint16x8_t target_16x8_0 = vcombine_u16(vmovn_u32(target_32x4_0), vmovn_u32(target_32x4_1));
3286 const uint16x8_t target_16x8_1 = vcombine_u16(vmovn_u32(target_32x4_2), vmovn_u32(target_32x4_3));
3288 const uint8x16_t target_8x16 = vcombine_u8(vmovn_u16(target_16x8_0), vmovn_u16(target_16x8_1));
3290 vst1q_u8(target, target_8x16);
3295template <
typename TSource,
typename TTarget>
3298 for (
unsigned int i = 0u; i < 16u; ++i)
3300 target[i] = TTarget(source[i]);
3304template <
typename T>
3305bool 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)
3307 ocean_assert(source !=
nullptr && target !=
nullptr);
3309 if (sourceLeft + width > sourceWidth || sourceTop + height > sourceHeight || targetLeft + width > targetWidth || targetTop + height > targetHeight)
3314 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
3315 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
3317 const T* subSource = source + sourceStrideElements * sourceTop + sourceLeft * channels;
3318 T* subTarget = target + targetStrideElements * targetTop + targetLeft * channels;
3320 if (sourcePaddingElements == 0u && targetPaddingElements == 0u && width == sourceWidth && sourceWidth == targetWidth)
3322 memcpy(subTarget, subSource, height * width * channels *
sizeof(T));
3326 for (
unsigned int y = 0u; y < height; ++y)
3328 memcpy(subTarget, subSource, width * channels *
sizeof(T));
3330 subTarget += targetStrideElements;
3331 subSource += sourceStrideElements;
3338template <
typename T>
3339bool 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)
3341 if (subFrameWidth == 0u || subFrameHeight == 0u)
3348 ocean_assert(
false &&
"Invalid input");
3352 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);
3355template <
typename T>
3356bool 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)
3358 ocean_assert(source !=
nullptr && target !=
nullptr && mask !=
nullptr);
3360 if (sourceLeft + subFrameWidth > sourceWidth || sourceTop + subFrameHeight > sourceHeight || targetLeft + subFrameWidth > targetWidth || targetTop + subFrameHeight > targetHeight)
3362 ocean_assert(
false &&
"Invalid input");
3366 const unsigned int maskStrideElements = subFrameWidth + maskPaddingElements;
3368 const unsigned int sourceStrideElements = sourceWidth * channels + sourcePaddingElements;
3369 const unsigned int targetStrideElements = targetWidth * channels + targetPaddingElements;
3371 for (
unsigned int y = 0u; y < subFrameHeight; ++y)
3373 const uint8_t* maskRow = mask + maskStrideElements * y;
3375 const T* subSource = source + sourceStrideElements * (sourceTop + y) + sourceLeft * channels;
3376 T* subTarget = target + targetStrideElements * (targetTop + y) + targetLeft * channels;
3378 for (
unsigned int x = 0u; x < subFrameWidth; ++x)
3380 if (*maskRow == maskValue)
3382 for (
unsigned int c = 0u; c < channels; ++c)
3384 subTarget[c] = subSource[c];
3390 subSource += channels;
3391 subTarget += channels;
3398template <
typename T>
3399void 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)
3401 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3402 ocean_assert(width >= patchSize && channels >= 1u);
3404 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3405 const unsigned int patchSize_2 = patchSize / 2u;
3407 ocean_assert(x >= patchSize_2 && y >= patchSize_2);
3408 ocean_assert(x + patchSize_2 < width);
3410 const unsigned int sourceStrideElements = width * channels + sourcePaddingElements;
3411 const unsigned int bufferStrideElements = patchSize * channels + bufferPaddingElements;
3413 const unsigned int sourceLeft = x - patchSize_2;
3414 const unsigned int sourceTop = y - patchSize_2;
3416 source += sourceTop * sourceStrideElements + sourceLeft * channels;
3418 for (
unsigned int row = 0u; row < patchSize; ++row)
3420 memcpy(buffer, source, channels * patchSize *
sizeof(T));
3422 source += sourceStrideElements;
3423 buffer += bufferStrideElements;
3427template <
typename T,
unsigned int tChannels>
3428void 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)
3430 static_assert(tChannels >= 1u,
"Invalid number of color channels!");
3432 ocean_assert(source !=
nullptr && buffer !=
nullptr);
3434 ocean_assert(patchSize >= 1u && patchSize % 2u == 1u);
3435 const unsigned int patchSize_2 = patchSize / 2u;
3437 const unsigned int widthPatchSize1 = width - (patchSize - 1u);
3438 ocean_assert(widthPatchSize1 == width - patchSize_2 * 2u);
3440 ocean_assert(width >= patchSize_2 + 1u && height >= patchSize_2 + 1u);
3442 ocean_assert(x < width && y < height);
3444 const unsigned int sourceStrideElements = width * tChannels + sourcePaddingElements;
3446 for (
int top =
int(y - patchSize_2); top <= int(y + patchSize_2); ++top)
3450 for (
int left =
int(x - patchSize_2); left <= int(x + patchSize_2); ++left)
3452 if ((
unsigned int)(left) - patchSize_2 < widthPatchSize1)
3454 ocean_assert(left >=
int(patchSize_2) && left <
int(width - patchSize_2));
3456 const T* sourcePixel = sourceRow + left * tChannels;
3458 for (
unsigned int n = 0u; n < tChannels; ++n)
3460 buffer[n] = sourcePixel[n];
3465 ocean_assert((
unsigned int)(left) <= patchSize_2 || (
unsigned int)(left) >= width - patchSize_2);
3469 for (
unsigned int n = 0u; n < tChannels; ++n)
3471 buffer[n] = sourcePixel[n];
3475 buffer += tChannels;
3478 buffer += bufferPaddingElements;
3482template <
typename TSource,
typename TTarget>
3483inline 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)
3485 ocean_assert(source !=
nullptr && target !=
nullptr);
3486 ocean_assert(width >= 1u && height >= 1u);
3487 ocean_assert(sourceStrideElements >= width && targetStrideElements >= width);
3488 ocean_assert(rowConversionFunction !=
nullptr);
3493 const unsigned int sourceStrideBytes = sourceStrideElements *
sizeof(TSource);
3494 const unsigned int targetStrideBytes = targetStrideElements *
sizeof(TTarget);
3496 if (worker && height >= 200u)
3498 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);
3502 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);
3508 ocean_assert(multipleRowsPerIteration != 0u && height % multipleRowsPerIteration == 0u);
3510 const unsigned int rowIterations = height / multipleRowsPerIteration;
3512 if (worker && rowIterations >= 200u)
3514 worker->
executeFunction(
Worker::Function::createStatic(&
FrameConverter::convertArbitraryPixelFormatSubset, sources, targets, width, height, flag, multipleRowsPerIteration, multipleRowsConversionFunction, options, 0u, 0u), 0u, rowIterations, 8u, 9u, 20u);
3524 ocean_assert(packed !=
nullptr);
3525 ocean_assert(unpacked !=
nullptr);
3527 unpacked[0] = uint16_t(uint16_t(packed[0]) << uint16_t(2) | (uint16_t(packed[4]) & uint16_t(0b00000011)));
3528 unpacked[1] = uint16_t(uint16_t(packed[1]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00001100)) >> uint16_t(2)));
3529 unpacked[2] = uint16_t(uint16_t(packed[2]) << uint16_t(2) | ((uint16_t(packed[4]) & uint16_t(0b00110000)) >> uint16_t(4)));
3530 unpacked[3] = uint16_t(uint16_t(packed[3]) << uint16_t(2) | (uint16_t(packed[4]) >> uint16_t(6)));
3533#if defined(OCEAN_HARDWARE_NEON_VERSION) && OCEAN_HARDWARE_NEON_VERSION >= 10
3535template <
bool tAllowLastOverlappingElement>
3538 constexpr uint8x8_t shuffleC_u_8x8 = {6u, 2u, 6u, 3u, 6u, 4u, 6u, 5u};
3540 constexpr int8x16_t leftShifts_s_8x16 = {6, 0, 4, 0, 2, 0, 0, 0, 6, 0, 4, 0, 2, 0, 0, 0};
3541 constexpr int16x8_t rightShifts_s_16x8 = {-6, -6, -6, -6, -6, -6, -6, -6};
3543 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));
3549 constexpr uint8x16_t shuffle_u_8x16 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u, 9u, 5u, 9u, 6u, 9u, 7u, 9u, 8u};
3550 const uint8x16_t intermediateAB_u_8x16 = vqtbl1q_u8(packed_u_8x16, shuffle_u_8x16);
3552 const uint8x8_t packedA_u_8x8 = vget_low_u8(packed_u_8x16);
3553 const uint8x8_t packedB_u_8x8 = vget_low_u8(vextq_u8(packed_u_8x16, packed_u_8x16, 5));
3555 constexpr uint8x8_t shuffleAB_u_8x8 = {4u, 0u, 4u, 1u, 4u, 2u, 4u, 3u};
3556 const uint8x16_t intermediateAB_u_8x16 = vcombine_u8(vtbl1_u8(packedA_u_8x8, shuffleAB_u_8x8), vtbl1_u8(packedB_u_8x8, shuffleAB_u_8x8));
3562 const uint8x8_t intermediateC_u_8x8 = vtbl1_u8(vget_high_u8(packed_u_8x16), shuffleC_u_8x8);
3567 const uint16x8_t intermediateAB_u_16x8 = vreinterpretq_u16_u8(vshlq_u8(intermediateAB_u_8x16, leftShifts_s_8x16));
3569 const uint16x4_t intermediateC_u_16x4 = vreinterpret_u16_u8(vshl_u8(intermediateC_u_8x8, vget_low_u8(leftShifts_s_8x16)));
3574 unpackedAB_u_16x8 = vshlq_u16(intermediateAB_u_16x8, rightShifts_s_16x8);
3576 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:459
The following comfort class provides comfortable functions simplifying prototyping applications but a...
Definition FrameConverter.h:634
static bool isSupported(const FrameType &sourceType, const FrameType::PixelFormat targetPixelFormat, const FrameType::PixelOrigin targetPixelOrigin=FrameType::ORIGIN_INVALID, const Options &options=Options())
Returns whether the convert function of this class supports the conversion of a frame with one pixel ...
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 convertWithConversionFunction(const Frame &source, const FrameType &targetType, Frame &target, const Options &options, Worker *worker)
Converts frames using a registered conversion function from the ConversionFunctionMap.
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 convertCompatibleFormats(const Frame &source, const FrameType &targetType, Frame &target, const bool forceCopy)
Converts frames with compatible formats that do not require an actual conversion, either memory is co...
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:2991
static bool convertGenericFormats(const Frame &source, const FrameType &targetType, Frame &target, Worker *worker)
Converts frames with generic pixel formats.
This class combines source pixel format, target pixel format, and options types.
Definition FrameConverter.h:353
bool operator==(const ConversionTriple &conversionTriple) const
Returns whether two objects are identical.
Definition FrameConverter.h:2976
FrameType::PixelFormat sourcePixelFormat_
The pixel format of the source frame, must be valid.
Definition FrameConverter.h:395
Options::OptionsType optionsType_
The type of the options for which the conversion is defined.
Definition FrameConverter.h:401
ConversionTriple()=default
Default constructor.
FrameType::PixelFormat targetPixelFormat_
The pixel format of the target frame, must be valid.
Definition FrameConverter.h:398
This class is a wrapper for function pointers.
Definition FrameConverter.h:408
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 TwoSourcesTwoTargetConversionFunction< uint8_t, uint8_t > function)
Creates a new wrapper object and stores a function pointer to a FT_2_UINT8_TO_2_UINT8 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:527
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:524
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
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:285
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:339
const void * function(const FrameType::PixelFormat &sourcePixelFormat, const FrameType::PixelFormat &targetPixelFormat, FunctionType &functionType, const Options &options) const
Returns the function pointer for a source and target pixel format.
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:303
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:327
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:309
void(*)(const TSource *source0, const TSource *source1, TTarget *target0, TTarget *target1, const uint32_t width, const uint32_t height, const ConversionFlag conversionFlag, const uint32_t source0PaddingElements, const uint32_t source1PaddingElements, const uint32_t target0PaddingElements, const uint32_t target1PaddingElements, Worker *worker) TwoSourcesTwoTargetConversionFunction
Definition of a function pointer to a conversion function with two source planes and two target plane...
Definition FrameConverter.h:321
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:345
FormatPair2FunctionWrapperMap formatPair2FunctionWrapperMap_
The map mapping pairs or pixel formats to function pointers.
Definition FrameConverter.h:557
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:279
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:291
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:273
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_2_UINT8_TO_2_UINT8
2-plane uint8 to 2-plane uint8 conversion function.
Definition FrameConverter.h:258
@ 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:262
@ FT_3_UINT8_TO_1_UINT8_ALPHA
3-plane uint8 to 1-plane uint8 with constant alpha channel conversion function.
Definition FrameConverter.h:264
@ 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:260
@ 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
std::unordered_map< ConversionTriple, FunctionWrapper, ConversionTriple::Hash > FormatPair2FunctionWrapperMap
Definition of a map mapping pairs or pixel formats to function pointers.
Definition FrameConverter.h:533
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:315
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:333
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:297
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:2940
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:2929
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:2934
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:2880
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:2946
const float * whiteBalance() const
Returns the white balance values for a conversion with white balance correction.
Definition FrameConverter.h:2952
bool allowApproximation() const
Returns whether the conversion can be approximated.
Definition FrameConverter.h:2958
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:3522
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:584
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:572
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:3121
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 convertOneRow_1Plane1Channel_To_1Plane4Channels_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 a single-channel image to a 4-channel image with 10-bit precision and range conve...
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 const ConversionFlags & conversionFlags()
Returns a vector holding all possible conversion flags.
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:3399
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 void convertOneRow_1Plane1Channel_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 a single-channel image to a 4-channel image with 6-bit precision and range conver...
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:3339
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:3483
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:603
static void convertOneRow_1Plane1Channel_To_1Plane1Channel_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 a single-channel image to another single-channel image with 10-bit precision.
static void convertOneRow_1Plane1Channel_To_1Plane1Channel_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 a single-channel image to another single-channel image with 6-bit precision.
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:3536
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:3305
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 convertOneRow_1Plane1Channel_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 a single-channel image to a 3-channel image with 6-bit precision and range conver...
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:3428
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:594
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:3506
static void convertOneRow_1Plane1Channel_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 a single-channel image to a 3-channel image with 10-bit precision and range conve...
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:2877
This class implements Ocean's image class.
Definition Frame.h:1832
const T * constdata(const unsigned int planeIndex=0u) const
Returns a pointer to the read-only pixel data of a specific plane.
Definition Frame.h:4275
T * data(const unsigned int planeIndex=0u)
Returns a pointer to the pixel data of a specific plane.
Definition Frame.h:4266
bool isValid() const
Returns whether this frame is valid.
Definition Frame.h:4555
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:4398
unsigned int paddingElements(const unsigned int planeIndex=0u) const
Returns the optional number of padding elements at the end of each row for a specific plane.
Definition Frame.h:4149
Definition of a frame type composed by the frame dimension, pixel format and pixel origin.
Definition Frame.h:30
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:3194
PixelOrigin pixelOrigin() const
Returns the pixel origin of the frame.
Definition Frame.h:3239
uint32_t numberPlanes() const
Returns the number of planes of the pixel format of this frame.
Definition Frame.h:3234
PixelFormat pixelFormat() const
Returns the pixel format of the frame.
Definition Frame.h:3204
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:3199
unsigned int channels() const
Returns the number of individual channels the frame has.
Definition Frame.h:3224
DataType dataType() const
Returns the data type of the pixel format of this frame.
Definition Frame.h:3214
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:361
size_t operator()(const ConversionTriple &conversionTriple) const
Hash function.
Definition FrameConverter.h:2963
Definition of the parameters used by the function for row-wise conversion of RGGB14_PACKED to RGB24/B...
Definition FrameConverter.h:609