FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Macros | Functions
swscale_template.c File Reference
#include <stdint.h>
#include "libavutil/x86/asm.h"
#include "libswscale/swscale_internal.h"

Go to the source code of this file.

Macros

#define PREFETCH   " # nop"
 
#define REAL_MOVNTQ(a, b)   "movq " #a ", " #b " \n\t"
 
#define MOVNTQ2   "movq "
 
#define MOVNTQ(a, b)   REAL_MOVNTQ(a,b)
 
#define YSCALEYUV2PACKEDX_UV
 
#define YSCALEYUV2PACKEDX_YA(offset, coeff, src1, src2, dst1, dst2)
 
#define YSCALEYUV2PACKEDX
 
#define YSCALEYUV2PACKEDX_END
 
#define YSCALEYUV2PACKEDX_ACCURATE_UV
 
#define YSCALEYUV2PACKEDX_ACCURATE_YA(offset)
 
#define YSCALEYUV2PACKEDX_ACCURATE
 
#define YSCALEYUV2RGBX
 
#define REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)
 
#define WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)   REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)
 
#define REAL_WRITERGB16(dst, dstw, index)
 
#define WRITERGB16(dst, dstw, index)   REAL_WRITERGB16(dst, dstw, index)
 
#define REAL_WRITERGB15(dst, dstw, index)
 
#define WRITERGB15(dst, dstw, index)   REAL_WRITERGB15(dst, dstw, index)
 
#define WRITEBGR24MMX(dst, dstw, index)
 
#define WRITEBGR24MMXEXT(dst, dstw, index)
 
#define WRITEBGR24(dst, dstw, index)   WRITEBGR24MMX(dst, dstw, index)
 
#define REAL_WRITEYUY2(dst, dstw, index)
 
#define WRITEYUY2(dst, dstw, index)   REAL_WRITEYUY2(dst, dstw, index)
 
#define REAL_YSCALEYUV2RGB_UV(index, c)
 
#define REAL_YSCALEYUV2RGB_YA(index, c, b1, b2)
 
#define REAL_YSCALEYUV2RGB_COEFF(c)
 
#define YSCALEYUV2RGB_YA(index, c, b1, b2)   REAL_YSCALEYUV2RGB_YA(index, c, b1, b2)
 
#define YSCALEYUV2RGB(index, c)
 
#define REAL_YSCALEYUV2PACKED(index, c)
 
#define YSCALEYUV2PACKED(index, c)   REAL_YSCALEYUV2PACKED(index, c)
 
#define REAL_YSCALEYUV2RGB1(index, c)
 
#define YSCALEYUV2RGB1(index, c)   REAL_YSCALEYUV2RGB1(index, c)
 
#define REAL_YSCALEYUV2RGB1b(index, c)
 
#define YSCALEYUV2RGB1b(index, c)   REAL_YSCALEYUV2RGB1b(index, c)
 
#define REAL_YSCALEYUV2RGB1_ALPHA(index)
 
#define YSCALEYUV2RGB1_ALPHA(index)   REAL_YSCALEYUV2RGB1_ALPHA(index)
 
#define REAL_YSCALEYUV2PACKED1(index, c)
 
#define YSCALEYUV2PACKED1(index, c)   REAL_YSCALEYUV2PACKED1(index, c)
 
#define REAL_YSCALEYUV2PACKED1b(index, c)
 
#define YSCALEYUV2PACKED1b(index, c)   REAL_YSCALEYUV2PACKED1b(index, c)
 

Functions

static av_always_inline void dither_8to16 (const uint8_t *srcDither, int rot)
 
static void yuv2yuvX_TMPL (const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
 
static void yuv2rgb32_X_ar_TMPL (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 dstY)
 
static void yuv2rgb32_X_TMPL (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 dstY)
 
static void yuv2rgb565_X_ar_TMPL (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 dstY)
 
static void yuv2rgb565_X_TMPL (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 dstY)
 
static void yuv2rgb555_X_ar_TMPL (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 dstY)
 
static void yuv2rgb555_X_TMPL (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 dstY)
 
static void yuv2yuyv422_X_ar_TMPL (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 dstY)
 
static void yuv2yuyv422_X_TMPL (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 dstY)
 
static void yuv2rgb32_2_TMPL (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)
 vertical bilinear scale YV12 to RGB
 
static void yuv2bgr24_2_TMPL (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)
 
static void yuv2rgb555_2_TMPL (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)
 
static void yuv2rgb565_2_TMPL (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)
 
static void yuv2yuyv422_2_TMPL (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)
 
static void yuv2rgb32_1_TMPL (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)
 YV12 to RGB without scaling or interpolating.
 
static void yuv2bgr24_1_TMPL (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)
 
static void yuv2rgb555_1_TMPL (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)
 
static void yuv2rgb565_1_TMPL (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)
 
static void yuv2yuyv422_1_TMPL (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)
 
static av_cold void sws_init_swscale_TMPL (SwsContext *c)
 

Macro Definition Documentation

#define PREFETCH   " # nop"

Definition at line 34 of file swscale_template.c.

#define REAL_MOVNTQ (   a,
  b 
)    "movq " #a ", " #b " \n\t"

Definition at line 41 of file swscale_template.c.

#define MOVNTQ2   "movq "

Definition at line 42 of file swscale_template.c.

Referenced by yuv2yuvX_TMPL().

#define MOVNTQ (   a,
  b 
)    REAL_MOVNTQ(a,b)

Definition at line 44 of file swscale_template.c.

#define YSCALEYUV2PACKEDX_UV
Value:
__asm__ volatile(\
"xor %%"REG_a", %%"REG_a" \n\t"\
".p2align 4 \n\t"\
"nop \n\t"\
"1: \n\t"\
"lea "CHR_MMX_FILTER_OFFSET"(%0), %%"REG_d" \n\t"\
"mov (%%"REG_d"), %%"REG_S" \n\t"\
"movq "VROUNDER_OFFSET"(%0), %%mm3 \n\t"\
"movq %%mm3, %%mm4 \n\t"\
".p2align 4 \n\t"\
"2: \n\t"\
"movq 8(%%"REG_d"), %%mm0 \n\t" /* filterCoeff */\
"movq (%%"REG_S", %%"REG_a"), %%mm2 \n\t" /* UsrcData */\
"add %6, %%"REG_S" \n\t" \
"movq (%%"REG_S", %%"REG_a"), %%mm5 \n\t" /* VsrcData */\
"add $16, %%"REG_d" \n\t"\
"mov (%%"REG_d"), %%"REG_S" \n\t"\
"pmulhw %%mm0, %%mm2 \n\t"\
"pmulhw %%mm0, %%mm5 \n\t"\
"paddw %%mm2, %%mm3 \n\t"\
"paddw %%mm5, %%mm4 \n\t"\
"test %%"REG_S", %%"REG_S" \n\t"\
" jnz 2b \n\t"\

Definition at line 128 of file swscale_template.c.

#define YSCALEYUV2PACKEDX_YA (   offset,
  coeff,
  src1,
  src2,
  dst1,
  dst2 
)
Value:
"lea "offset"(%0), %%"REG_d" \n\t"\
"mov (%%"REG_d"), %%"REG_S" \n\t"\
"movq "VROUNDER_OFFSET"(%0), "#dst1" \n\t"\
"movq "#dst1", "#dst2" \n\t"\
".p2align 4 \n\t"\
"2: \n\t"\
"movq 8(%%"REG_d"), "#coeff" \n\t" /* filterCoeff */\
"movq (%%"REG_S", %%"REG_a", 2), "#src1" \n\t" /* Y1srcData */\
"movq 8(%%"REG_S", %%"REG_a", 2), "#src2" \n\t" /* Y2srcData */\
"add $16, %%"REG_d" \n\t"\
"mov (%%"REG_d"), %%"REG_S" \n\t"\
"pmulhw "#coeff", "#src1" \n\t"\
"pmulhw "#coeff", "#src2" \n\t"\
"paddw "#src1", "#dst1" \n\t"\
"paddw "#src2", "#dst2" \n\t"\
"test %%"REG_S", %%"REG_S" \n\t"\
" jnz 2b \n\t"\

Definition at line 153 of file swscale_template.c.

Referenced by yuv2rgb32_X_TMPL().

#define YSCALEYUV2PACKEDX
#define YSCALEYUV2PACKEDX_END
Value:
:: "r" (&c->redDither), \
"m" (dummy), "m" (dummy), "m" (dummy),\
"r" (dest), "m" (dstW_reg), "m"(uv_off) \
: "%"REG_a, "%"REG_d, "%"REG_S \
);

Definition at line 176 of file swscale_template.c.

Referenced by yuv2rgb32_X_ar_TMPL(), yuv2rgb32_X_TMPL(), yuv2rgb555_X_ar_TMPL(), yuv2rgb555_X_TMPL(), yuv2rgb565_X_ar_TMPL(), yuv2rgb565_X_TMPL(), yuv2yuyv422_X_ar_TMPL(), and yuv2yuyv422_X_TMPL().

#define YSCALEYUV2PACKEDX_ACCURATE_UV

Definition at line 184 of file swscale_template.c.

#define YSCALEYUV2PACKEDX_ACCURATE_YA (   offset)

Definition at line 236 of file swscale_template.c.

Referenced by yuv2rgb32_X_ar_TMPL().

#define YSCALEYUV2PACKEDX_ACCURATE
#define YSCALEYUV2RGBX
#define REAL_WRITEBGR32 (   dst,
  dstw,
  index,
  b,
  g,
  r,
  a,
  q0,
  q2,
  q3,
 
)
Value:
"movq "#b", "#q2" \n\t" /* B */\
"movq "#r", "#t" \n\t" /* R */\
"punpcklbw "#g", "#b" \n\t" /* GBGBGBGB 0 */\
"punpcklbw "#a", "#r" \n\t" /* ARARARAR 0 */\
"punpckhbw "#g", "#q2" \n\t" /* GBGBGBGB 2 */\
"punpckhbw "#a", "#t" \n\t" /* ARARARAR 2 */\
"movq "#b", "#q0" \n\t" /* GBGBGBGB 0 */\
"movq "#q2", "#q3" \n\t" /* GBGBGBGB 2 */\
"punpcklwd "#r", "#q0" \n\t" /* ARGBARGB 0 */\
"punpckhwd "#r", "#b" \n\t" /* ARGBARGB 1 */\
"punpcklwd "#t", "#q2" \n\t" /* ARGBARGB 2 */\
"punpckhwd "#t", "#q3" \n\t" /* ARGBARGB 3 */\
MOVNTQ( q0, (dst, index, 4))\
MOVNTQ( b, 8(dst, index, 4))\
MOVNTQ( q2, 16(dst, index, 4))\
MOVNTQ( q3, 24(dst, index, 4))\
\
"add $8, "#index" \n\t"\
"cmp "dstw", "#index" \n\t"\
" jb 1b \n\t"

Definition at line 321 of file swscale_template.c.

#define WRITEBGR32 (   dst,
  dstw,
  index,
  b,
  g,
  r,
  a,
  q0,
  q2,
  q3,
 
)    REAL_WRITEBGR32(dst, dstw, index, b, g, r, a, q0, q2, q3, t)
#define REAL_WRITERGB16 (   dst,
  dstw,
  index 
)
Value:
"pand "MANGLE(bF8)", %%mm2 \n\t" /* B */\
"pand "MANGLE(bFC)", %%mm4 \n\t" /* G */\
"pand "MANGLE(bF8)", %%mm5 \n\t" /* R */\
"psrlq $3, %%mm2 \n\t"\
\
"movq %%mm2, %%mm1 \n\t"\
"movq %%mm4, %%mm3 \n\t"\
\
"punpcklbw %%mm7, %%mm3 \n\t"\
"punpcklbw %%mm5, %%mm2 \n\t"\
"punpckhbw %%mm7, %%mm4 \n\t"\
"punpckhbw %%mm5, %%mm1 \n\t"\
\
"psllq $3, %%mm3 \n\t"\
"psllq $3, %%mm4 \n\t"\
\
"por %%mm3, %%mm2 \n\t"\
"por %%mm4, %%mm1 \n\t"\
MOVNTQ(%%mm2, (dst, index, 2))\
MOVNTQ(%%mm1, 8(dst, index, 2))\
\
"add $8, "#index" \n\t"\
"cmp "dstw", "#index" \n\t"\
" jb 1b \n\t"

Definition at line 407 of file swscale_template.c.

#define WRITERGB16 (   dst,
  dstw,
  index 
)    REAL_WRITERGB16(dst, dstw, index)
#define REAL_WRITERGB15 (   dst,
  dstw,
  index 
)
Value:
"pand "MANGLE(bF8)", %%mm2 \n\t" /* B */\
"pand "MANGLE(bF8)", %%mm4 \n\t" /* G */\
"pand "MANGLE(bF8)", %%mm5 \n\t" /* R */\
"psrlq $3, %%mm2 \n\t"\
"psrlq $1, %%mm5 \n\t"\
\
"movq %%mm2, %%mm1 \n\t"\
"movq %%mm4, %%mm3 \n\t"\
\
"punpcklbw %%mm7, %%mm3 \n\t"\
"punpcklbw %%mm5, %%mm2 \n\t"\
"punpckhbw %%mm7, %%mm4 \n\t"\
"punpckhbw %%mm5, %%mm1 \n\t"\
\
"psllq $2, %%mm3 \n\t"\
"psllq $2, %%mm4 \n\t"\
\
"por %%mm3, %%mm2 \n\t"\
"por %%mm4, %%mm1 \n\t"\
MOVNTQ(%%mm2, (dst, index, 2))\
MOVNTQ(%%mm1, 8(dst, index, 2))\
\
"add $8, "#index" \n\t"\
"cmp "dstw", "#index" \n\t"\
" jb 1b \n\t"

Definition at line 483 of file swscale_template.c.

#define WRITERGB15 (   dst,
  dstw,
  index 
)    REAL_WRITERGB15(dst, dstw, index)
#define WRITEBGR24MMX (   dst,
  dstw,
  index 
)

Definition at line 560 of file swscale_template.c.

#define WRITEBGR24MMXEXT (   dst,
  dstw,
  index 
)

Definition at line 613 of file swscale_template.c.

#define WRITEBGR24 (   dst,
  dstw,
  index 
)    WRITEBGR24MMX(dst, dstw, index)

Definition at line 666 of file swscale_template.c.

Referenced by yuv2bgr24_1_TMPL(), and yuv2bgr24_2_TMPL().

#define REAL_WRITEYUY2 (   dst,
  dstw,
  index 
)
Value:
"packuswb %%mm3, %%mm3 \n\t"\
"packuswb %%mm4, %%mm4 \n\t"\
"packuswb %%mm7, %%mm1 \n\t"\
"punpcklbw %%mm4, %%mm3 \n\t"\
"movq %%mm1, %%mm7 \n\t"\
"punpcklbw %%mm3, %%mm1 \n\t"\
"punpckhbw %%mm3, %%mm7 \n\t"\
MOVNTQ(%%mm1, (dst, index, 2))\
MOVNTQ(%%mm7, 8(dst, index, 2))\
\
"add $8, "#index" \n\t"\
"cmp "dstw", "#index" \n\t"\
" jb 1b \n\t"

Definition at line 721 of file swscale_template.c.

#define WRITEYUY2 (   dst,
  dstw,
  index 
)    REAL_WRITEYUY2(dst, dstw, index)
#define REAL_YSCALEYUV2RGB_UV (   index,
  c 
)
Value:
"xor "#index", "#index" \n\t"\
".p2align 4 \n\t"\
"1: \n\t"\
"movq (%2, "#index"), %%mm2 \n\t" /* uvbuf0[eax]*/\
"movq (%3, "#index"), %%mm3 \n\t" /* uvbuf1[eax]*/\
"add "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"movq (%2, "#index"), %%mm5 \n\t" /* uvbuf0[eax+2048]*/\
"movq (%3, "#index"), %%mm4 \n\t" /* uvbuf1[eax+2048]*/\
"sub "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"psubw %%mm3, %%mm2 \n\t" /* uvbuf0[eax] - uvbuf1[eax]*/\
"psubw %%mm4, %%mm5 \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048]*/\
"movq "CHR_MMX_FILTER_OFFSET"+8("#c"), %%mm0 \n\t"\
"pmulhw %%mm0, %%mm2 \n\t" /* (uvbuf0[eax] - uvbuf1[eax])uvalpha1>>16*/\
"pmulhw %%mm0, %%mm5 \n\t" /* (uvbuf0[eax+2048] - uvbuf1[eax+2048])uvalpha1>>16*/\
"psraw $4, %%mm3 \n\t" /* uvbuf0[eax] - uvbuf1[eax] >>4*/\
"psraw $4, %%mm4 \n\t" /* uvbuf0[eax+2048] - uvbuf1[eax+2048] >>4*/\
"paddw %%mm2, %%mm3 \n\t" /* uvbuf0[eax]uvalpha1 - uvbuf1[eax](1-uvalpha1)*/\
"paddw %%mm5, %%mm4 \n\t" /* uvbuf0[eax+2048]uvalpha1 - uvbuf1[eax+2048](1-uvalpha1)*/\
"psubw "U_OFFSET"("#c"), %%mm3 \n\t" /* (U-128)8*/\
"psubw "V_OFFSET"("#c"), %%mm4 \n\t" /* (V-128)8*/\
"movq %%mm3, %%mm2 \n\t" /* (U-128)8*/\
"movq %%mm4, %%mm5 \n\t" /* (V-128)8*/\
"pmulhw "UG_COEFF"("#c"), %%mm3 \n\t"\
"pmulhw "VG_COEFF"("#c"), %%mm4 \n\t"\
/* mm2=(U-128)8, mm3=ug, mm4=vg mm5=(V-128)8 */\

Definition at line 780 of file swscale_template.c.

#define REAL_YSCALEYUV2RGB_YA (   index,
  c,
  b1,
  b2 
)
Value:
"movq ("#b1", "#index", 2), %%mm0 \n\t" /*buf0[eax]*/\
"movq ("#b2", "#index", 2), %%mm1 \n\t" /*buf1[eax]*/\
"movq 8("#b1", "#index", 2), %%mm6 \n\t" /*buf0[eax]*/\
"movq 8("#b2", "#index", 2), %%mm7 \n\t" /*buf1[eax]*/\
"psubw %%mm1, %%mm0 \n\t" /* buf0[eax] - buf1[eax]*/\
"psubw %%mm7, %%mm6 \n\t" /* buf0[eax] - buf1[eax]*/\
"pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm0 \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
"pmulhw "LUM_MMX_FILTER_OFFSET"+8("#c"), %%mm6 \n\t" /* (buf0[eax] - buf1[eax])yalpha1>>16*/\
"psraw $4, %%mm1 \n\t" /* buf0[eax] - buf1[eax] >>4*/\
"psraw $4, %%mm7 \n\t" /* buf0[eax] - buf1[eax] >>4*/\
"paddw %%mm0, %%mm1 \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\
"paddw %%mm6, %%mm7 \n\t" /* buf0[eax]yalpha1 + buf1[eax](1-yalpha1) >>16*/\

Definition at line 807 of file swscale_template.c.

#define REAL_YSCALEYUV2RGB_COEFF (   c)
Value:
"pmulhw "UB_COEFF"("#c"), %%mm2 \n\t"\
"pmulhw "VR_COEFF"("#c"), %%mm5 \n\t"\
"psubw "Y_OFFSET"("#c"), %%mm1 \n\t" /* 8(Y-16)*/\
"psubw "Y_OFFSET"("#c"), %%mm7 \n\t" /* 8(Y-16)*/\
"pmulhw "Y_COEFF"("#c"), %%mm1 \n\t"\
"pmulhw "Y_COEFF"("#c"), %%mm7 \n\t"\
/* mm1= Y1, mm2=ub, mm3=ug, mm4=vg mm5=vr, mm7=Y2 */\
"paddw %%mm3, %%mm4 \n\t"\
"movq %%mm2, %%mm0 \n\t"\
"movq %%mm5, %%mm6 \n\t"\
"movq %%mm4, %%mm3 \n\t"\
"punpcklwd %%mm2, %%mm2 \n\t"\
"punpcklwd %%mm5, %%mm5 \n\t"\
"punpcklwd %%mm4, %%mm4 \n\t"\
"paddw %%mm1, %%mm2 \n\t"\
"paddw %%mm1, %%mm5 \n\t"\
"paddw %%mm1, %%mm4 \n\t"\
"punpckhwd %%mm0, %%mm0 \n\t"\
"punpckhwd %%mm6, %%mm6 \n\t"\
"punpckhwd %%mm3, %%mm3 \n\t"\
"paddw %%mm7, %%mm0 \n\t"\
"paddw %%mm7, %%mm6 \n\t"\
"paddw %%mm7, %%mm3 \n\t"\
/* mm0=B1, mm2=B2, mm3=G2, mm4=G1, mm5=R1, mm6=R2 */\
"packuswb %%mm0, %%mm2 \n\t"\
"packuswb %%mm6, %%mm5 \n\t"\
"packuswb %%mm3, %%mm4 \n\t"\

Definition at line 821 of file swscale_template.c.

#define YSCALEYUV2RGB_YA (   index,
  c,
  b1,
  b2 
)    REAL_YSCALEYUV2RGB_YA(index, c, b1, b2)

Definition at line 850 of file swscale_template.c.

Referenced by yuv2rgb32_2_TMPL().

#define YSCALEYUV2RGB (   index,
  c 
)
Value:
REAL_YSCALEYUV2RGB_YA(index, c, %0, %1) \
REAL_YSCALEYUV2RGB_COEFF(c)

Definition at line 852 of file swscale_template.c.

Referenced by yuv2bgr24_2_TMPL(), yuv2rgb32_2_TMPL(), yuv2rgb555_2_TMPL(), and yuv2rgb565_2_TMPL().

#define REAL_YSCALEYUV2PACKED (   index,
  c 
)

Definition at line 1005 of file swscale_template.c.

#define YSCALEYUV2PACKED (   index,
  c 
)    REAL_YSCALEYUV2PACKED(index, c)

Definition at line 1043 of file swscale_template.c.

Referenced by yuv2yuyv422_2_TMPL().

#define REAL_YSCALEYUV2RGB1 (   index,
  c 
)

Definition at line 1066 of file swscale_template.c.

#define YSCALEYUV2RGB1 (   index,
  c 
)    REAL_YSCALEYUV2RGB1(index, c)
#define REAL_YSCALEYUV2RGB1b (   index,
  c 
)

Definition at line 1118 of file swscale_template.c.

#define YSCALEYUV2RGB1b (   index,
  c 
)    REAL_YSCALEYUV2RGB1b(index, c)
#define REAL_YSCALEYUV2RGB1_ALPHA (   index)
Value:
"movq (%1, "#index", 2), %%mm7 \n\t" /* abuf0[index ] */\
"movq 8(%1, "#index", 2), %%mm1 \n\t" /* abuf0[index+4] */\
"psraw $7, %%mm7 \n\t" /* abuf0[index ] >>7 */\
"psraw $7, %%mm1 \n\t" /* abuf0[index+4] >>7 */\
"packuswb %%mm1, %%mm7 \n\t"

Definition at line 1173 of file swscale_template.c.

#define YSCALEYUV2RGB1_ALPHA (   index)    REAL_YSCALEYUV2RGB1_ALPHA(index)

Definition at line 1179 of file swscale_template.c.

Referenced by yuv2rgb32_1_TMPL().

#define REAL_YSCALEYUV2PACKED1 (   index,
  c 
)
Value:
"xor "#index", "#index" \n\t"\
".p2align 4 \n\t"\
"1: \n\t"\
"movq (%2, "#index"), %%mm3 \n\t" /* uvbuf0[eax]*/\
"add "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"movq (%2, "#index"), %%mm4 \n\t" /* uvbuf0[eax+2048]*/\
"sub "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"psraw $7, %%mm3 \n\t" \
"psraw $7, %%mm4 \n\t" \
"movq (%0, "#index", 2), %%mm1 \n\t" /*buf0[eax]*/\
"movq 8(%0, "#index", 2), %%mm7 \n\t" /*buf0[eax]*/\
"psraw $7, %%mm1 \n\t" \
"psraw $7, %%mm7 \n\t" \

Definition at line 1400 of file swscale_template.c.

#define YSCALEYUV2PACKED1 (   index,
  c 
)    REAL_YSCALEYUV2PACKED1(index, c)

Definition at line 1415 of file swscale_template.c.

Referenced by yuv2yuyv422_1_TMPL().

#define REAL_YSCALEYUV2PACKED1b (   index,
  c 
)
Value:
"xor "#index", "#index" \n\t"\
".p2align 4 \n\t"\
"1: \n\t"\
"movq (%2, "#index"), %%mm2 \n\t" /* uvbuf0[eax]*/\
"movq (%3, "#index"), %%mm3 \n\t" /* uvbuf1[eax]*/\
"add "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"movq (%2, "#index"), %%mm5 \n\t" /* uvbuf0[eax+2048]*/\
"movq (%3, "#index"), %%mm4 \n\t" /* uvbuf1[eax+2048]*/\
"sub "UV_OFF_BYTE"("#c"), "#index" \n\t" \
"paddw %%mm2, %%mm3 \n\t" /* uvbuf0[eax] + uvbuf1[eax]*/\
"paddw %%mm5, %%mm4 \n\t" /* uvbuf0[eax+2048] + uvbuf1[eax+2048]*/\
"psrlw $8, %%mm3 \n\t" \
"psrlw $8, %%mm4 \n\t" \
"movq (%0, "#index", 2), %%mm1 \n\t" /*buf0[eax]*/\
"movq 8(%0, "#index", 2), %%mm7 \n\t" /*buf0[eax]*/\
"psraw $7, %%mm1 \n\t" \
"psraw $7, %%mm7 \n\t"

Definition at line 1417 of file swscale_template.c.

#define YSCALEYUV2PACKED1b (   index,
  c 
)    REAL_YSCALEYUV2PACKED1b(index, c)

Definition at line 1435 of file swscale_template.c.

Referenced by yuv2yuyv422_1_TMPL().

Function Documentation

static av_always_inline void dither_8to16 ( const uint8_t srcDither,
int  rot 
)
static

Definition at line 48 of file swscale_template.c.

Referenced by yuv2yuvX_TMPL().

static void yuv2yuvX_TMPL ( const int16_t *  filter,
int  filterSize,
const int16_t **  src,
uint8_t dest,
int  dstW,
const uint8_t dither,
int  offset 
)
static

Definition at line 74 of file swscale_template.c.

static void yuv2rgb32_X_ar_TMPL ( 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  dstY 
)
static

Definition at line 345 of file swscale_template.c.

static void yuv2rgb32_X_TMPL ( 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  dstY 
)
static

Definition at line 378 of file swscale_template.c.

static void yuv2rgb565_X_ar_TMPL ( 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  dstY 
)
static

Definition at line 435 of file swscale_template.c.

static void yuv2rgb565_X_TMPL ( 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  dstY 
)
static

Definition at line 459 of file swscale_template.c.

static void yuv2rgb555_X_ar_TMPL ( 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  dstY 
)
static

Definition at line 512 of file swscale_template.c.

static void yuv2rgb555_X_TMPL ( 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  dstY 
)
static

Definition at line 536 of file swscale_template.c.

static void yuv2yuyv422_X_ar_TMPL ( 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  dstY 
)
static

Definition at line 738 of file swscale_template.c.

static void yuv2yuyv422_X_TMPL ( 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  dstY 
)
static

Definition at line 759 of file swscale_template.c.

static void yuv2rgb32_2_TMPL ( 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 
)
static

vertical bilinear scale YV12 to RGB

Definition at line 860 of file swscale_template.c.

static void yuv2bgr24_2_TMPL ( 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 
)
static

Definition at line 924 of file swscale_template.c.

static void yuv2rgb555_2_TMPL ( 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 
)
static

Definition at line 947 of file swscale_template.c.

static void yuv2rgb565_2_TMPL ( 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 
)
static

Definition at line 976 of file swscale_template.c.

static void yuv2yuyv422_2_TMPL ( 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 
)
static

Definition at line 1045 of file swscale_template.c.

static void yuv2rgb32_1_TMPL ( 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 
)
static

YV12 to RGB without scaling or interpolating.

Definition at line 1184 of file swscale_template.c.

static void yuv2bgr24_1_TMPL ( 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 
)
static

Definition at line 1253 of file swscale_template.c.

static void yuv2rgb555_1_TMPL ( 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 
)
static

Definition at line 1294 of file swscale_template.c.

static void yuv2rgb565_1_TMPL ( 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 
)
static

Definition at line 1347 of file swscale_template.c.

static void yuv2yuyv422_1_TMPL ( 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 
)
static

Definition at line 1437 of file swscale_template.c.

static av_cold void sws_init_swscale_TMPL ( SwsContext c)
static

Definition at line 1658 of file swscale_template.c.