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_VU12LimitedRangeToY8LimitedRange(
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);
57 static inline void convertY_VU12LimitedRangeToY8FullRange(
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);
72 static inline void convertY_VU12FullRangeToY8FullRange(
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);
87 static inline void convertY_VU12FullRangeToY8LimitedRange(
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);
107 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);
129 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);
149 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);
169 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);
185 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);
201 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);
218 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);
237 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);
284 ocean_assert(ySource !=
nullptr && target !=
nullptr);
285 ocean_assert(width >= 1u && height >= 1u);
287 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, target, width, height, flag, ySourcePaddingElements, targetPaddingElements, worker);
292 ocean_assert(ySource !=
nullptr && target !=
nullptr);
293 ocean_assert(width >= 1u && height >= 1u);
300 ocean_assert(ySource !=
nullptr && target !=
nullptr);
301 ocean_assert(width >= 1u && height >= 1u);
303 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, target, width, height, flag, ySourcePaddingElements, targetPaddingElements, worker);
308 ocean_assert(ySource !=
nullptr && target !=
nullptr);
309 ocean_assert(width >= 1u && height >= 1u);
316 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
318 ocean_assert(width >= 2u && width % 2u == 0u);
319 ocean_assert(height >= 2u && height % 2u == 0u);
321 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
342 const int options[3 + 12] =
345 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
348 75, 75, 75, 0, -52, 102, 128, -25, 0,
354 const void* sources[2] =
370 const int options[3 + 12] =
373 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
376 1192, 1192, 1192, 0, -833, 1634, 2066, -400, 0,
382 const void* sources[2] =
388 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
394inline 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)
396 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
398 ocean_assert(width >= 2u && width % 2u == 0u);
399 ocean_assert(height >= 2u && height % 2u == 0u);
401 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
406 const int options[3 + 1] =
409 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
415 const void* sources[2] =
431 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
433 ocean_assert(width >= 2u && width % 2u == 0u);
434 ocean_assert(height >= 2u && height % 2u == 0u);
436 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
457 const int options[3 + 12] =
460 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
463 75, 75, 75, 102, -52, 0, 0, -25, 128,
469 const void* sources[2] =
485 const int options[3 + 12] =
488 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
491 1192, 1192, 1192, 1634, -833, 0, 0, -400, 2066,
497 const void* sources[2] =
503 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 1u, FrameConverter::convertOneRow1PlaneAnd2ChannelsZippedDownsampled2x2ToZipped3Channels8BitPerChannelPrecision10Bit, options, worker);
511 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
513 ocean_assert(width >= 2u && width % 2u == 0u);
514 ocean_assert(height >= 2u && height % 2u == 0u);
516 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
533 const int options[3 + 12] =
536 int(ySourcePaddingElements), int(vuSourcePaddingElements), int(targetPaddingElements),
539 64, 64, 64, 90, -46, 0, 0, -22, 113,
545 const void* sources[2] =
554inline 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)
556 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
558 ocean_assert(width >= 2u && width % 2u == 0u);
559 ocean_assert(height >= 2u && height % 2u == 0u);
561 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
566 const unsigned int options[3] = {ySourcePaddingElements, vuSourcePaddingElements, targetPaddingElements};
568 const void* sources[2] =
574 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 2u, FrameConverter::mapTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 2u, 1u>, options, worker);
577inline 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)
579 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && target !=
nullptr);
581 ocean_assert(width >= 2u && width % 2u == 0u);
582 ocean_assert(height >= 2u && height % 2u == 0u);
584 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
589 const unsigned int options[3] = {ySourcePaddingElements, vuSourcePaddingElements, targetPaddingElements};
591 const void* sources[2] =
597 FrameConverter::convertArbitraryPixelFormat(sources, (
void**)(&target), width, height, flag, 2u, FrameConverter::mapTwoRows_1Plane1ChannelAnd1Plane2ChannelsDownsampled2x2_To_1Plane3Channels_8BitPerChannel<0u, 1u, 2u>, options, worker);
600inline 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)
602 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && yTarget !=
nullptr && uvTarget !=
nullptr);
604 ocean_assert(width >= 2u && width % 2u == 0u);
605 ocean_assert(height >= 2u && height % 2u == 0u);
607 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
613 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, yTarget, width, height, flag, ySourcePaddingElements, yTargetPaddingElements, worker);
617 FrameChannels::reverseChannelOrder<uint8_t, 2u>(vuSource, uvTarget, width / 2u, height / 2u, flag, vuSourcePaddingElements, uvTargetPaddingElements, worker);
620inline 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)
622 ocean_assert(ySource !=
nullptr && vuSource !=
nullptr && yTarget !=
nullptr && uTarget !=
nullptr && vTarget !=
nullptr);
624 ocean_assert(width >= 2u && width % 2u == 0u);
625 ocean_assert(height >= 2u && height % 2u == 0u);
627 if (width < 2u || height < 2u || width % 2u != 0u || height % 2u != 0u)
633 FrameChannels::transformGeneric<uint8_t, 1u>(ySource, yTarget, width, height, flag, ySourcePaddingElements, yTargetPaddingElements, worker);
637 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: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_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_LIMITED_RANGE frame to a BGR24 frame into a second image buffer.
Definition FrameConverterY_VU12.h:314
static void convertY_VU12FullRangeToY8LimitedRange(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 a Y8_LIMITED_RANGE frame into a second image buffer.
Definition FrameConverterY_VU12.h:306
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 Y_VU12_FULL_RANGE frame to a BGRA32 frame into a second image buffer applying a transforma...
Definition FrameConverterY_VU12.h:394
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_VU12FullRangeToY8FullRange(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 a Y8_FULL_RANGE frame into a second image buffer.
Definition FrameConverterY_VU12.h:298
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_LIMITED_RANGE frame to a RGB24 frame into a second image buffer.
Definition FrameConverterY_VU12.h:429
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:600
static void convertY_VU12LimitedRangeToY8LimitedRange(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_LIMITED_RANGE frame to a Y8_LIMITED_RANGE frame into a second image buffer.
Definition FrameConverterY_VU12.h:282
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:620
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:577
static void convertY_VU12LimitedRangeToY8FullRange(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_LIMITED_RANGE frame to a Y8_FULL_RANGE frame into a second image buffer.
Definition FrameConverterY_VU12.h:290
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:554
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 a RGB24 frame into a second image buffer.
Definition FrameConverterY_VU12.h:509
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