8#ifndef META_OCEAN_CV_FRAME_CONVERTER_Y_UV_12_H
9#define META_OCEAN_CV_FRAME_CONVERTER_Y_UV_12_H
43 static inline void convertY_UV12LimitedRangeToY8LimitedRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
58 static inline void convertY_UV12LimitedRangeToY8FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
73 static inline void convertY_UV12FullRangeToY8FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
88 static inline void convertY_UV12FullRangeToY8LimitedRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
107 static inline void convertY_UV12LimitedRangeToBGR24FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
126 static inline void convertY_UV12LimitedRangeToRGB24FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
145 static inline void convertY_UV12FullRangeToBGR24FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
164 static inline void convertY_UV12FullRangeToRGB24FullRange(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
179 static inline void convertY_UV12ToYUV24(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
194 static inline void convertY_UV12ToYVU24(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
213 static inline void convertY_UV12ToY_U_V12(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* yTarget, uint8_t* uTarget, uint8_t* vTarget,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uTargetPaddingElements,
const unsigned int vTargetPaddingElements,
Worker* worker =
nullptr);
218 ocean_assert(ySource !=
nullptr && target !=
nullptr);
219 ocean_assert(width >= 1u && height >= 1u);
221 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, target, width, height, flag, ySourcePaddingElements, targetPaddingElements, worker);
226 ocean_assert(ySource !=
nullptr && target !=
nullptr);
227 ocean_assert(width >= 1u && height >= 1u);
234 ocean_assert(ySource !=
nullptr && target !=
nullptr);
235 ocean_assert(width >= 1u && height >= 1u);
237 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, target, width, height, flag, ySourcePaddingElements, targetPaddingElements, worker);
242 ocean_assert(ySource !=
nullptr && target !=
nullptr);
243 ocean_assert(width >= 1u && height >= 1u);
250 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
252 ocean_assert(width >= 2u && width % 2u == 0u);
253 ocean_assert(height >= 2u && height % 2u == 0u);
255 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
276 const int options[3 + 12] =
279 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
282 75, 75, 75, 128, -25, 0, 0, -52, 102,
288 const void* sources[2] =
304 const int options[3 + 12] =
307 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
310 1192, 1192, 1192, 2066, -400, 0, 0, -833, 1634,
316 const void* sources[2] =
322 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
329 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
331 ocean_assert(width >= 2u && width % 2u == 0u);
332 ocean_assert(height >= 2u && height % 2u == 0u);
334 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
355 const int options[3 + 12] =
358 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
361 75, 75, 75, 0, -25, 128, 102, -52, 0,
367 const void* sources[2] =
383 const int options[3 + 12] =
386 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
389 1192, 1192, 1192, 0, -400, 2066, 1634, -833, 0,
395 const void* sources[2] =
401 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
409 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
411 ocean_assert(width >= 2u && width % 2u == 0u);
412 ocean_assert(height >= 2u && height % 2u == 0u);
414 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
434 const int options[3 + 12] =
437 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
440 64, 64, 64, 113, -22, 0, 0, -46, 90,
446 const void* sources[2] =
457 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
459 ocean_assert(width >= 2u && width % 2u == 0u);
460 ocean_assert(height >= 2u && height % 2u == 0u);
462 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
482 const int options[3 + 12] =
485 int(ySourcePaddingElements), int(uvSourcePaddingElements), int(targetPaddingElements),
488 64, 64, 64, 0, -22, 113, 90, -46, 0,
494 const void* sources[2] =
503inline void FrameConverterY_UV12::convertY_UV12ToYUV24(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker)
505 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
507 ocean_assert(width >= 2u && width % 2u == 0u);
508 ocean_assert(height >= 2u && height % 2u == 0u);
510 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
515 const unsigned int options[3] = {ySourcePaddingElements, uvSourcePaddingElements, targetPaddingElements};
517 const void* sources[2] =
523 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::mapOneRow_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 1u, 2u>, options, worker);
526inline void FrameConverterY_UV12::convertY_UV12ToYVU24(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker)
528 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && target !=
nullptr);
530 ocean_assert(width >= 2u && width % 2u == 0u);
531 ocean_assert(height >= 2u && height % 2u == 0u);
533 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
538 const unsigned int options[3] = {ySourcePaddingElements, uvSourcePaddingElements, targetPaddingElements};
540 const void* sources[2] =
546 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::mapOneRow_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 2u, 1u>, options, worker);
549inline void FrameConverterY_UV12::convertY_UV12ToY_U_V12(
const uint8_t* ySource,
const uint8_t* uvSource, uint8_t* yTarget, uint8_t* uTarget, uint8_t* vTarget,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int uvSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uTargetPaddingElements,
const unsigned int vTargetPaddingElements,
Worker* worker)
551 ocean_assert(ySource !=
nullptr && uvSource !=
nullptr && yTarget !=
nullptr && yTarget !=
nullptr && vTarget !=
nullptr);
553 ocean_assert(width >= 2u && width % 2u == 0u);
554 ocean_assert(height >= 2u && height % 2u == 0u);
556 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
562 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, yTarget, width, height, flag, ySourcePaddingElements, yTargetPaddingElements, worker);
566 const unsigned int options[3] = {uvSourcePaddingElements, uTargetPaddingElements, vTargetPaddingElements};
This is the base class for all frame converter classes.
Definition FrameConverter.h:32
ConversionFlag
Definition of individual conversion flags.
Definition FrameConverter.h:39
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 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 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 convertY8FullRangeToY8LimitedRange(const uint8_t *source, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y8 full range frame [0, 255] to a Y8 limited range frame [16, 235].
Definition FrameConverterY8.h:320
static void convertY8LimitedRangeToY8FullRange(const uint8_t *source, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int sourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y8 limited range frame [16, 235] to a Y8 full range frame [0, 255].
Definition FrameConverterY8.h:288
This class provides functions to convert frames with Y_UV12 pixel format.
Definition FrameConverterY_UV12.h:27
static void convertY_UV12LimitedRangeToRGB24FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_LIMITED_RANGE frame to a RGB24 frame into a second image buffer.
Definition FrameConverterY_UV12.h:327
static void convertY_UV12FullRangeToY8LimitedRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_FULL_RANGE frame to a Y8_LIMITED_RANGE frame into a second image buffer.
Definition FrameConverterY_UV12.h:240
static void convertY_UV12LimitedRangeToY8FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_LIMITED_RANGE frame to a Y8_FULL_RANGE frame into a second image buffer.
Definition FrameConverterY_UV12.h:224
static void convertY_UV12FullRangeToBGR24FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_FULL_RANGE frame to a BGR24 (full range) frame into a second image buffer.
Definition FrameConverterY_UV12.h:407
static void convertY_UV12ToYVU24(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12 frame to a 24 bit YVU frame into a second image buffer.
Definition FrameConverterY_UV12.h:526
static void convertY_UV12LimitedRangeToBGR24FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_LIMITED_RANGE frame to a BGR24 frame into a second image buffer.
Definition FrameConverterY_UV12.h:248
static void convertY_UV12FullRangeToRGB24FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_FULL_RANGE frame to a RGB24 (full range) frame into a second image buffer.
Definition FrameConverterY_UV12.h:455
static void convertY_UV12FullRangeToY8FullRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_FULL_RANGE frame to a Y8_FULL_RANGE frame into a second image buffer.
Definition FrameConverterY_UV12.h:232
static void convertY_UV12ToYUV24(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12 frame to a 24 bit YUV frame into a second image buffer.
Definition FrameConverterY_UV12.h:503
static void convertY_UV12ToY_U_V12(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *yTarget, uint8_t *uTarget, uint8_t *vTarget, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int yTargetPaddingElements, const unsigned int uTargetPaddingElements, const unsigned int vTargetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12 frame to a Y_U_V12 frame into a second image buffer.
Definition FrameConverterY_UV12.h:549
static void convertY_UV12LimitedRangeToY8LimitedRange(const uint8_t *ySource, const uint8_t *uvSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int uvSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_UV12_LIMITED_RANGE frame to a Y8_LIMITED_RANGE frame into a second image buffer.
Definition FrameConverterY_UV12.h:216
This class implements a worker able to distribute function calls over different threads.
Definition Worker.h:33
The namespace covering the entire Ocean framework.
Definition Accessor.h:15