8#ifndef META_OCEAN_CV_FRAME_CONVERTER_Y_VU_12_H
9#define META_OCEAN_CV_FRAME_CONVERTER_Y_VU_12_H
42 static inline void convertY_VU12ToY8(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
62 static inline void convertY_VU12LimitedRangeToBGR24FullRange(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
84 static inline void convertY_VU12FullRangeToBGRA32FullRangeAndroid(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
const uint8_t alphaValue = 0xFF,
Worker* worker =
nullptr);
104 static inline void convertY_VU12LimitedRangeToRGB24FullRange(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
124 static inline void convertY_VU12FullRangeToRGB24FullRangePrecision6Bit(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
140 static inline void convertY_VU12ToYUV24(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
156 static inline void convertY_VU12ToYVU24(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker =
nullptr);
173 static inline void convertY_VU12ToY_UV12(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* yTarget, uint8_t* uvTarget,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uvTargetPaddingElements,
Worker* worker =
nullptr);
192 static inline void convertY_VU12ToY_U_V12(
const uint8_t* ySource,
const uint8_t* vuSource, 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 vuSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uTargetPaddingElements,
const unsigned int vTargetPaddingElements,
Worker* worker =
nullptr);
237inline void FrameConverterY_VU12::convertY_VU12ToY8(
const uint8_t* ySource,
const uint8_t* , uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int ,
const unsigned int targetPaddingElements,
Worker* worker)
239 ocean_assert(ySource !=
nullptr && target !=
nullptr);
240 ocean_assert(width >= 1u && height >= 1u);
242 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, target, width, height, flag, ySourcePaddingElements, targetPaddingElements, worker);
247 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
249 ocean_assert(width >= 2u && width % 2u == 0u);
250 ocean_assert(height >= 2u && height % 2u == 0u);
252 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
273 const int options[3 + 12] =
276 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
279 75, 75, 75, 0, -52, 102, 128, -25, 0,
285 const void* sources[2] =
301 const int options[3 + 12] =
304 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
307 1192, 1192, 1192, 0, -833, 1634, 2066, -400, 0,
313 const void* sources[2] =
319 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
325inline void FrameConverterY_VU12::convertY_VU12FullRangeToBGRA32FullRangeAndroid(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
const uint8_t alphaValue,
Worker* worker)
327 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
329 ocean_assert(width >= 2u && width % 2u == 0u);
330 ocean_assert(height >= 2u && height % 2u == 0u);
332 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
337 const int options[3 + 1] =
340 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
346 const void* sources[2] =
362 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
364 ocean_assert(width >= 2u && width % 2u == 0u);
365 ocean_assert(height >= 2u && height % 2u == 0u);
367 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
388 const int options[3 + 12] =
391 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
394 75, 75, 75, 102, -52, 0, 0, -25, 128,
400 const void* sources[2] =
416 const int options[3 + 12] =
419 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
422 1192, 1192, 1192, 1634, -833, 0, 0, -400, 2066,
428 const void* sources[2] =
434 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
442 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
444 ocean_assert(width >= 2u && width % 2u == 0u);
445 ocean_assert(height >= 2u && height % 2u == 0u);
447 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
464 const int options[3 + 12] =
467 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
470 64, 64, 64, 90, -46, 0, 0, -22, 113,
476 const void* sources[2] =
485inline void FrameConverterY_VU12::convertY_VU12ToYUV24(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker)
487 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
489 ocean_assert(width >= 2u && width % 2u == 0u);
490 ocean_assert(height >= 2u && height % 2u == 0u);
492 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
497 const unsigned int options[3] = {ySourcePaddingElements, vuSourcePaddingElements, targetPaddingElements};
499 const void* sources[2] =
505 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 2u, FrameConverter::mapTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 2u, 1u>, options, worker);
508inline void FrameConverterY_VU12::convertY_VU12ToYVU24(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* target,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int targetPaddingElements,
Worker* worker)
510 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
512 ocean_assert(width >= 2u && width % 2u == 0u);
513 ocean_assert(height >= 2u && height % 2u == 0u);
515 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
520 const unsigned int options[3] = {ySourcePaddingElements, vuSourcePaddingElements, targetPaddingElements};
522 const void* sources[2] =
528 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 2u, FrameConverter::mapTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 1u, 2u>, options, worker);
531inline void FrameConverterY_VU12::convertY_VU12ToY_UV12(
const uint8_t* ySource,
const uint8_t* vuSource, uint8_t* yTarget, uint8_t* uvTarget,
const unsigned int width,
const unsigned int height,
const ConversionFlag flag,
const unsigned int ySourcePaddingElements,
const unsigned int vuSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uvTargetPaddingElements,
Worker* worker)
533 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && yTarget !=
nullptr && uvTarget !=
nullptr);
535 ocean_assert(width >= 2u && width % 2u == 0u);
536 ocean_assert(height >= 2u && height % 2u == 0u);
538 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
544 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, yTarget, width, height, flag, ySourcePaddingElements, yTargetPaddingElements, worker);
548 FrameChannels::reverseChannelOrder<uint8_t, 2u>(vuSource, uvTarget, width / 2u, height / 2u, flag, vuSourcePaddingElements, uvTargetPaddingElements, worker);
551inline void FrameConverterY_VU12::convertY_VU12ToY_U_V12(
const uint8_t* ySource,
const uint8_t* vuSource, 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 vuSourcePaddingElements,
const unsigned int yTargetPaddingElements,
const unsigned int uTargetPaddingElements,
const unsigned int vTargetPaddingElements,
Worker* worker)
553 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && yTarget !=
nullptr && uTarget !=
nullptr && vTarget !=
nullptr);
555 ocean_assert(width >= 2u && width % 2u == 0u);
556 ocean_assert(height >= 2u && height % 2u == 0u);
558 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
564 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, yTarget, width, height, flag, ySourcePaddingElements, yTargetPaddingElements, worker);
568 const unsigned int options[3] = {vuSourcePaddingElements, vTargetPaddingElements, uTargetPaddingElements};
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:3248
This class provides functions to convert frames with Y_VU12 pixel format.
Definition FrameConverterY_VU12.h:26
static void convertY_VU12LimitedRangeToBGR24FullRange(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to an 24 bit BGR frame into a second image buffer.
Definition FrameConverterY_VU12.h:245
static void convertY_VU12FullRangeToBGRA32FullRangeAndroid(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, const uint8_t alphaValue=0xFF, Worker *worker=nullptr)
Converts a full range Y_VU12 frame to a full range BGRA32 frame into a second image buffer applying a...
Definition FrameConverterY_VU12.h:325
static void convertTwoRowsY_VU12FullRangeToBGRA32FullRangeAndroidPrecision6Bit(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 Y_UV12 pixel format to two rows of an image with BGRA32 pixel form...
static void convertY_VU12LimitedRangeToRGB24FullRange(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to an 24 bit RGB frame into a second image buffer.
Definition FrameConverterY_VU12.h:360
static void convertY_VU12ToY8(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to an 8 bit gray scale frame into a second image buffer.
Definition FrameConverterY_VU12.h:237
static void convertY_VU12ToY_UV12(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *yTarget, uint8_t *uvTarget, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int yTargetPaddingElements, const unsigned int uvTargetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to a Y_UV12 frame into a second image buffer.
Definition FrameConverterY_VU12.h:531
static void convertY_VU12ToY_U_V12(const uint8_t *ySource, const uint8_t *vuSource, 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 vuSourcePaddingElements, const unsigned int yTargetPaddingElements, const unsigned int uTargetPaddingElements, const unsigned int vTargetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to a Y_U_V12 frame into a second image buffer.
Definition FrameConverterY_VU12.h:551
static void convertY_VU12ToYVU24(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to an 24 bit YVU frame into a second image buffer.
Definition FrameConverterY_VU12.h:508
static void convertOneRowY_VU12FullRangeToBGRA32FullRangeAndroidPrecision6Bit(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 Y_UV12 pixel format to one row of an image with BGRA32 pixel format...
static void convertY_VU12ToYUV24(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 frame to an 24 bit YUV frame into a second image buffer.
Definition FrameConverterY_VU12.h:485
static void convertY_VU12FullRangeToRGB24FullRangePrecision6Bit(const uint8_t *ySource, const uint8_t *vuSource, uint8_t *target, const unsigned int width, const unsigned int height, const ConversionFlag flag, const unsigned int ySourcePaddingElements, const unsigned int vuSourcePaddingElements, const unsigned int targetPaddingElements, Worker *worker=nullptr)
Converts a Y_VU12 full range frame to an 24 bit RGB frame into a second image buffer.
Definition FrameConverterY_VU12.h:440
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