#include <assert.h>#include <math.h>#include <stdint.h>#include <stdio.h>#include <string.h>#include "libavutil/attributes.h"#include "libavutil/avutil.h"#include "libavutil/avassert.h"#include "libavutil/bswap.h"#include "libavutil/cpu.h"#include "libavutil/intreadwrite.h"#include "libavutil/mathematics.h"#include "libavutil/pixdesc.h"#include "config.h"#include "rgb2rgb.h"#include "swscale.h"#include "swscale_internal.h"Go to the source code of this file.
Defines | |
| #define | output_pixel(pos, val, bias, signedness) |
| #define | output_pixel(pos, val) |
| #define | yuv2NBPS(bits, BE_LE, is_be, template_size, typeX_t) |
| #define | accumulate_bit(acc, val) |
| #define | output_pixel(pos, acc) |
| #define | YUV2PACKEDWRAPPER(name, base, ext, fmt) |
| #define | output_pixels(pos, Y1, U, Y2, V) |
| #define | R_B ((target == PIX_FMT_RGB48LE || target == PIX_FMT_RGB48BE) ? R : B) |
| #define | B_R ((target == PIX_FMT_RGB48LE || target == PIX_FMT_RGB48BE) ? B : R) |
| #define | output_pixel(pos, val) |
| #define | YUV2PACKED16WRAPPER(name, base, ext, fmt) |
| #define | r_b ((target == PIX_FMT_RGB24) ? r : b) |
| #define | b_r ((target == PIX_FMT_RGB24) ? b : r) |
| #define | YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) |
| #define | YUV2RGBWRAPPER(name, base, ext, fmt, hasAlpha) |
Functions | |
| static av_always_inline void | yuv2plane1_16_c_template (const int32_t *src, uint16_t *dest, int dstW, int big_endian, int output_bits) |
| static av_always_inline void | yuv2planeX_16_c_template (const int16_t *filter, int filterSize, const int32_t **src, uint16_t *dest, int dstW, int big_endian, int output_bits) |
| static av_always_inline void | yuv2plane1_10_c_template (const int16_t *src, uint16_t *dest, int dstW, int big_endian, int output_bits) |
| static av_always_inline void | yuv2planeX_10_c_template (const int16_t *filter, int filterSize, const int16_t **src, uint16_t *dest, int dstW, int big_endian, int output_bits) |
| yuv2NBPS (yuv2NBPS(9, yuv2NBPS(BE, yuv2NBPS(1, yuv2NBPS(10, int16_t) | |
| static void | yuv2plane1_8_c (const int16_t *src, uint8_t *dest, int dstW, const uint8_t *dither, int offset) |
| static void | yuv2nv12cX_c (SwsContext *c, const int16_t *chrFilter, int chrFilterSize, const int16_t **chrUSrc, const int16_t **chrVSrc, uint8_t *dest, int chrDstW) |
| static av_always_inline void | yuv2mono_X_c_template (SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2mono_2_c_template (SwsContext *c, const int16_t *buf[2], const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2mono_1_c_template (SwsContext *c, const int16_t *buf0, const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf0, uint8_t *dest, int dstW, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2422_X_c_template (SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2422_2_c_template (SwsContext *c, const int16_t *buf[2], const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2422_1_c_template (SwsContext *c, const int16_t *buf0, const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf0, uint8_t *dest, int dstW, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2rgb48_X_c_template (SwsContext *c, const int16_t *lumFilter, const int32_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int32_t **chrUSrc, const int32_t **chrVSrc, int chrFilterSize, const int32_t **alpSrc, uint16_t *dest, int dstW, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2rgb48_2_c_template (SwsContext *c, const int32_t *buf[2], const int32_t *ubuf[2], const int32_t *vbuf[2], const int32_t *abuf[2], uint16_t *dest, int dstW, int yalpha, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2rgb48_1_c_template (SwsContext *c, const int32_t *buf0, const int32_t *ubuf[2], const int32_t *vbuf[2], const int32_t *abuf0, uint16_t *dest, int dstW, int uvalpha, int y, enum PixelFormat target) |
| static av_always_inline void | yuv2rgb_write (uint8_t *_dest, int i, int Y1, int Y2, unsigned A1, unsigned A2, const void *_r, const void *_g, const void *_b, int y, enum PixelFormat target, int hasAlpha) |
| static av_always_inline void | yuv2rgb_X_c_template (SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y, enum PixelFormat target, int hasAlpha) |
| static av_always_inline void | yuv2rgb_2_c_template (SwsContext *c, const int16_t *buf[2], const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y, enum PixelFormat target, int hasAlpha) |
| static av_always_inline void | yuv2rgb_1_c_template (SwsContext *c, const int16_t *buf0, const int16_t *ubuf[2], const int16_t *vbuf[2], const int16_t *abuf0, uint8_t *dest, int dstW, int uvalpha, int y, enum PixelFormat target, int hasAlpha) |
| static av_always_inline void | yuv2rgb_full_X_c_template (SwsContext *c, const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize, const int16_t *chrFilter, const int16_t **chrUSrc, const int16_t **chrVSrc, int chrFilterSize, const int16_t **alpSrc, uint8_t *dest, int dstW, int y, enum PixelFormat target, int hasAlpha) |
| av_cold void | ff_sws_init_output_funcs (SwsContext *c, yuv2planar1_fn *yuv2plane1, yuv2planarX_fn *yuv2planeX, yuv2interleavedX_fn *yuv2nv12cX, yuv2packed1_fn *yuv2packed1, yuv2packed2_fn *yuv2packed2, yuv2packedX_fn *yuv2packedX) |
Variables | |
| const uint8_t | dither_2x2_4 [][8] |
| const uint8_t | dither_2x2_8 [][8] |
| const uint8_t | dither_4x4_16 [][8] |
| const uint8_t | dither_8x8_32 [][8] |
| const uint8_t | dither_8x8_73 [][8] |
| const uint8_t | dither_8x8_220 [][8] |
| #define accumulate_bit | ( | acc, | |||
| val | ) |
Value:
Definition at line 311 of file output.c.
Referenced by yuv2mono_1_c_template(), yuv2mono_2_c_template(), and yuv2mono_X_c_template().
| #define b_r ((target == PIX_FMT_RGB24) ? b : r) |
| #define B_R ((target == PIX_FMT_RGB48LE || target == PIX_FMT_RGB48BE) ? B : R) |
Definition at line 603 of file output.c.
Referenced by yuv2rgb48_1_c_template(), yuv2rgb48_2_c_template(), and yuv2rgb48_X_c_template().
| #define output_pixel | ( | pos, | |||
| val | ) |
| #define output_pixel | ( | pos, | |||
| acc | ) |
Value:
if (target == PIX_FMT_MONOBLACK) { \ pos = acc; \ } else { \ pos = ~acc; \ }
| #define output_pixel | ( | pos, | |||
| val | ) |
| #define output_pixel | ( | pos, | |||
| val, | |||||
| bias, | |||||
| signedness | ) |
Value:
if (big_endian) { \ AV_WB16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \ } else { \ AV_WL16(pos, bias + av_clip_ ## signedness ## 16(val >> shift)); \ }
Definition at line 604 of file output.c.
Referenced by yuv2mono_1_c_template(), yuv2mono_2_c_template(), yuv2mono_X_c_template(), yuv2plane1_10_c_template(), yuv2plane1_16_c_template(), yuv2planeX_10_c_template(), yuv2planeX_16_c_template(), yuv2rgb48_1_c_template(), yuv2rgb48_2_c_template(), and yuv2rgb48_X_c_template().
| #define output_pixels | ( | pos, | |||
| Y1, | |||||
| U, | |||||
| Y2, | |||||
| V | ) |
Value:
if (target == PIX_FMT_YUYV422) { \ dest[pos + 0] = Y1; \ dest[pos + 1] = U; \ dest[pos + 2] = Y2; \ dest[pos + 3] = V; \ } else { \ dest[pos + 0] = U; \ dest[pos + 1] = Y1; \ dest[pos + 2] = V; \ dest[pos + 3] = Y2; \ }
Definition at line 459 of file output.c.
Referenced by yuv2422_1_c_template(), yuv2422_2_c_template(), and yuv2422_X_c_template().
| #define r_b ((target == PIX_FMT_RGB24) ? r : b) |
| #define R_B ((target == PIX_FMT_RGB48LE || target == PIX_FMT_RGB48BE) ? R : B) |
Definition at line 602 of file output.c.
Referenced by yuv2rgb48_1_c_template(), yuv2rgb48_2_c_template(), and yuv2rgb48_X_c_template().
| #define yuv2NBPS | ( | bits, | |||
| BE_LE, | |||||
| is_be, | |||||
| template_size, | |||||
| typeX_t | ) |
Value:
static void yuv2plane1_ ## bits ## BE_LE ## _c(const int16_t *src, \ uint8_t *dest, int dstW, \ const uint8_t *dither, int offset)\ { \ yuv2plane1_ ## template_size ## _c_template((const typeX_t *) src, \ (uint16_t *) dest, dstW, is_be, bits); \ }\ static void yuv2planeX_ ## bits ## BE_LE ## _c(const int16_t *filter, int filterSize, \ const int16_t **src, uint8_t *dest, int dstW, \ const uint8_t *dither, int offset)\ { \ yuv2planeX_## template_size ## _c_template(filter, \ filterSize, (const typeX_t **) src, \ (uint16_t *) dest, dstW, is_be, bits); \ }
Value:
static void name ## ext ## _X_c(SwsContext *c, const int16_t *lumFilter, \ const int16_t **lumSrc, int lumFilterSize, \ const int16_t *chrFilter, const int16_t **chrUSrc, \ const int16_t **chrVSrc, int chrFilterSize, \ const int16_t **alpSrc, uint8_t *dest, int dstW, \ int y) \ { \ name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ alpSrc, dest, dstW, y, fmt); \ } \ \ static void name ## ext ## _2_c(SwsContext *c, const int16_t *buf[2], \ const int16_t *ubuf[2], const int16_t *vbuf[2], \ const int16_t *abuf[2], uint8_t *dest, int dstW, \ int yalpha, int uvalpha, int y) \ { \ name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \ dest, dstW, yalpha, uvalpha, y, fmt); \ } \ \ static void name ## ext ## _1_c(SwsContext *c, const int16_t *buf0, \ const int16_t *ubuf[2], const int16_t *vbuf[2], \ const int16_t *abuf0, uint8_t *dest, int dstW, \ int uvalpha, int y) \ { \ name ## base ## _1_c_template(c, buf0, ubuf, vbuf, \ abuf0, dest, dstW, uvalpha, \ y, fmt); \ }
Value:
YUV2RGBWRAPPERX(name, base, ext, fmt, hasAlpha) \ static void name ## ext ## _2_c(SwsContext *c, const int16_t *buf[2], \ const int16_t *ubuf[2], const int16_t *vbuf[2], \ const int16_t *abuf[2], uint8_t *dest, int dstW, \ int yalpha, int uvalpha, int y) \ { \ name ## base ## _2_c_template(c, buf, ubuf, vbuf, abuf, \ dest, dstW, yalpha, uvalpha, y, fmt, hasAlpha); \ } \ \ static void name ## ext ## _1_c(SwsContext *c, const int16_t *buf0, \ const int16_t *ubuf[2], const int16_t *vbuf[2], \ const int16_t *abuf0, uint8_t *dest, int dstW, \ int uvalpha, int y) \ { \ name ## base ## _1_c_template(c, buf0, ubuf, vbuf, abuf0, dest, \ dstW, uvalpha, y, fmt, hasAlpha); \ }
Value:
static void name ## ext ## _X_c(SwsContext *c, const int16_t *lumFilter, \ const int16_t **lumSrc, int lumFilterSize, \ const int16_t *chrFilter, const int16_t **chrUSrc, \ const int16_t **chrVSrc, int chrFilterSize, \ const int16_t **alpSrc, uint8_t *dest, int dstW, \ int y) \ { \ name ## base ## _X_c_template(c, lumFilter, lumSrc, lumFilterSize, \ chrFilter, chrUSrc, chrVSrc, chrFilterSize, \ alpSrc, dest, dstW, y, fmt, hasAlpha); \ }
| av_cold void ff_sws_init_output_funcs | ( | SwsContext * | c, | |
| yuv2planar1_fn * | yuv2plane1, | |||
| yuv2planarX_fn * | yuv2planeX, | |||
| yuv2interleavedX_fn * | yuv2nv12cX, | |||
| yuv2packed1_fn * | yuv2packed1, | |||
| yuv2packed2_fn * | yuv2packed2, | |||
| yuv2packedX_fn * | yuv2packedX | |||
| ) |
| static av_always_inline void yuv2422_1_c_template | ( | SwsContext * | c, | |
| const int16_t * | buf0, | |||
| const int16_t * | ubuf[2], | |||
| const int16_t * | vbuf[2], | |||
| const int16_t * | abuf0, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | uvalpha, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2422_X_c_template | ( | SwsContext * | c, | |
| const int16_t * | lumFilter, | |||
| const int16_t ** | lumSrc, | |||
| int | lumFilterSize, | |||
| const int16_t * | chrFilter, | |||
| const int16_t ** | chrUSrc, | |||
| const int16_t ** | chrVSrc, | |||
| int | chrFilterSize, | |||
| const int16_t ** | alpSrc, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2mono_1_c_template | ( | SwsContext * | c, | |
| const int16_t * | buf0, | |||
| const int16_t * | ubuf[2], | |||
| const int16_t * | vbuf[2], | |||
| const int16_t * | abuf0, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | uvalpha, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2mono_X_c_template | ( | SwsContext * | c, | |
| const int16_t * | lumFilter, | |||
| const int16_t ** | lumSrc, | |||
| int | lumFilterSize, | |||
| const int16_t * | chrFilter, | |||
| const int16_t ** | chrUSrc, | |||
| const int16_t ** | chrVSrc, | |||
| int | chrFilterSize, | |||
| const int16_t ** | alpSrc, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| yuv2NBPS | ( | yuv2NBPS( | 9, | |
| yuv2NBPS( | BE, | |||
| yuv2NBPS( | 1, | |||
| yuv2NBPS( | 10, | |||
| int16_t | ||||
| ) |
| static av_always_inline void yuv2rgb48_1_c_template | ( | SwsContext * | c, | |
| const int32_t * | buf0, | |||
| const int32_t * | ubuf[2], | |||
| const int32_t * | vbuf[2], | |||
| const int32_t * | abuf0, | |||
| uint16_t * | dest, | |||
| int | dstW, | |||
| int | uvalpha, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2rgb48_2_c_template | ( | SwsContext * | c, | |
| const int32_t * | buf[2], | |||
| const int32_t * | ubuf[2], | |||
| const int32_t * | vbuf[2], | |||
| const int32_t * | abuf[2], | |||
| uint16_t * | dest, | |||
| int | dstW, | |||
| int | yalpha, | |||
| int | uvalpha, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2rgb48_X_c_template | ( | SwsContext * | c, | |
| const int16_t * | lumFilter, | |||
| const int32_t ** | lumSrc, | |||
| int | lumFilterSize, | |||
| const int16_t * | chrFilter, | |||
| const int32_t ** | chrUSrc, | |||
| const int32_t ** | chrVSrc, | |||
| int | chrFilterSize, | |||
| const int32_t ** | alpSrc, | |||
| uint16_t * | dest, | |||
| int | dstW, | |||
| int | y, | |||
| enum PixelFormat | target | |||
| ) | [static] |
| static av_always_inline void yuv2rgb_full_X_c_template | ( | SwsContext * | c, | |
| const int16_t * | lumFilter, | |||
| const int16_t ** | lumSrc, | |||
| int | lumFilterSize, | |||
| const int16_t * | chrFilter, | |||
| const int16_t ** | chrUSrc, | |||
| const int16_t ** | chrVSrc, | |||
| int | chrFilterSize, | |||
| const int16_t ** | alpSrc, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | y, | |||
| enum PixelFormat | target, | |||
| int | hasAlpha | |||
| ) | [static] |
| static av_always_inline void yuv2rgb_write | ( | uint8_t * | _dest, | |
| int | i, | |||
| int | Y1, | |||
| int | Y2, | |||
| unsigned | A1, | |||
| unsigned | A2, | |||
| const void * | _r, | |||
| const void * | _g, | |||
| const void * | _b, | |||
| int | y, | |||
| enum PixelFormat | target, | |||
| int | hasAlpha | |||
| ) | [static] |
Definition at line 843 of file output.c.
Referenced by yuv2rgb_1_c_template(), yuv2rgb_2_c_template(), and yuv2rgb_X_c_template().
| static av_always_inline void yuv2rgb_X_c_template | ( | SwsContext * | c, | |
| const int16_t * | lumFilter, | |||
| const int16_t ** | lumSrc, | |||
| int | lumFilterSize, | |||
| const int16_t * | chrFilter, | |||
| const int16_t ** | chrUSrc, | |||
| const int16_t ** | chrVSrc, | |||
| int | chrFilterSize, | |||
| const int16_t ** | alpSrc, | |||
| uint8_t * | dest, | |||
| int | dstW, | |||
| int | y, | |||
| enum PixelFormat | target, | |||
| int | hasAlpha | |||
| ) | [static] |
| const uint8_t dither_2x2_4[][8] |
Initial value:
{
{ 1, 3, 1, 3, 1, 3, 1, 3, },
{ 2, 0, 2, 0, 2, 0, 2, 0, },
{ 1, 3, 1, 3, 1, 3, 1, 3, },
}
Definition at line 40 of file output.c.
Referenced by yuv2rgb_write().
| const uint8_t dither_2x2_8[][8] |
Initial value:
{
{ 6, 2, 6, 2, 6, 2, 6, 2, },
{ 0, 4, 0, 4, 0, 4, 0, 4, },
{ 6, 2, 6, 2, 6, 2, 6, 2, },
}
Definition at line 46 of file output.c.
Referenced by yuv2rgb_write().
| const uint8_t dither_4x4_16[][8] |
Initial value:
{
{ 8, 4, 11, 7, 8, 4, 11, 7, },
{ 2, 14, 1, 13, 2, 14, 1, 13, },
{ 10, 6, 9, 5, 10, 6, 9, 5, },
{ 0, 12, 3, 15, 0, 12, 3, 15, },
{ 8, 4, 11, 7, 8, 4, 11, 7, },
}
Definition at line 52 of file output.c.
Referenced by yuv2rgb_write().
| const uint8_t dither_8x8_220[][8] |
Initial value:
{
{117, 62, 158, 103, 113, 58, 155, 100, },
{ 34, 199, 21, 186, 31, 196, 17, 182, },
{144, 89, 131, 76, 141, 86, 127, 72, },
{ 0, 165, 41, 206, 10, 175, 52, 217, },
{110, 55, 151, 96, 120, 65, 162, 107, },
{ 28, 193, 14, 179, 38, 203, 24, 189, },
{138, 83, 124, 69, 148, 93, 134, 79, },
{ 7, 172, 48, 213, 3, 168, 45, 210, },
{117, 62, 158, 103, 113, 58, 155, 100, },
}
Definition at line 85 of file output.c.
Referenced by yuv2mono_1_c_template(), yuv2mono_2_c_template(), yuv2mono_X_c_template(), and yuv2rgb_write().
| const uint8_t dither_8x8_32[][8] |
Initial value:
{
{ 17, 9, 23, 15, 16, 8, 22, 14, },
{ 5, 29, 3, 27, 4, 28, 2, 26, },
{ 21, 13, 19, 11, 20, 12, 18, 10, },
{ 0, 24, 6, 30, 1, 25, 7, 31, },
{ 16, 8, 22, 14, 17, 9, 23, 15, },
{ 4, 28, 2, 26, 5, 29, 3, 27, },
{ 20, 12, 18, 10, 21, 13, 19, 11, },
{ 1, 25, 7, 31, 0, 24, 6, 30, },
{ 17, 9, 23, 15, 16, 8, 22, 14, },
}
Definition at line 60 of file output.c.
Referenced by yuv2rgb_write().
| const uint8_t dither_8x8_73[][8] |
Initial value:
{
{ 0, 55, 14, 68, 3, 58, 17, 72, },
{ 37, 18, 50, 32, 40, 22, 54, 35, },
{ 9, 64, 5, 59, 13, 67, 8, 63, },
{ 46, 27, 41, 23, 49, 31, 44, 26, },
{ 2, 57, 16, 71, 1, 56, 15, 70, },
{ 39, 21, 52, 34, 38, 19, 51, 33, },
{ 11, 66, 7, 62, 10, 65, 6, 60, },
{ 48, 30, 43, 25, 47, 29, 42, 24, },
{ 0, 55, 14, 68, 3, 58, 17, 72, },
}
Definition at line 72 of file output.c.
Referenced by yuv2rgb_write().
1.5.8