#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().