21 #ifndef SWSCALE_SWSCALE_INTERNAL_H 22 #define SWSCALE_SWSCALE_INTERNAL_H 37 #define STR(s) AV_TOSTRING(s) // AV_STRINGIFY is too long 39 #define FAST_BGR2YV12 // use 7-bit instead of 15-bit coefficients 41 #define MAX_FILTER_SIZE 256 44 #define ALT32_CORR (-1) 62 int srcStride[],
int srcSliceY,
int srcSliceH,
63 uint8_t *dst[],
int dstStride[]);
113 const int16_t *chrFilter,
115 const int16_t **chrUSrc,
116 const int16_t **chrVSrc,
149 const int16_t *chrUSrc[2],
150 const int16_t *chrVSrc[2],
151 const int16_t *alpSrc,
uint8_t *dest,
152 int dstW,
int uvalpha,
int y);
182 const int16_t *chrUSrc[2],
183 const int16_t *chrVSrc[2],
184 const int16_t *alpSrc[2],
186 int dstW,
int yalpha,
int uvalpha,
int y);
214 const int16_t **lumSrc,
int lumFilterSize,
215 const int16_t *chrFilter,
216 const int16_t **chrUSrc,
217 const int16_t **chrVSrc,
int chrFilterSize,
218 const int16_t **alpSrc,
uint8_t *dest,
248 const int16_t **lumSrc,
int lumFilterSize,
249 const int16_t *chrFilter,
250 const int16_t **chrUSrc,
251 const int16_t **chrVSrc,
int chrFilterSize,
252 const int16_t **alpSrc,
uint8_t **dest,
372 #define RED_DITHER "0*8" 373 #define GREEN_DITHER "1*8" 374 #define BLUE_DITHER "2*8" 375 #define Y_COEFF "3*8" 376 #define VR_COEFF "4*8" 377 #define UB_COEFF "5*8" 378 #define VG_COEFF "6*8" 379 #define UG_COEFF "7*8" 380 #define Y_OFFSET "8*8" 381 #define U_OFFSET "9*8" 382 #define V_OFFSET "10*8" 383 #define LUM_MMX_FILTER_OFFSET "11*8" 384 #define CHR_MMX_FILTER_OFFSET "11*8+4*4*256" 385 #define DSTW_OFFSET "11*8+4*4*256*2" //do not change, it is hardcoded in the ASM 386 #define ESP_OFFSET "11*8+4*4*256*2+8" 387 #define VROUNDER_OFFSET "11*8+4*4*256*2+16" 388 #define U_TEMP "11*8+4*4*256*2+24" 389 #define V_TEMP "11*8+4*4*256*2+32" 390 #define Y_TEMP "11*8+4*4*256*2+40" 391 #define ALP_MMX_FILTER_OFFSET "11*8+4*4*256*2+48" 392 #define UV_OFF_PX "11*8+4*4*256*3+48" 393 #define UV_OFF_BYTE "11*8+4*4*256*3+56" 394 #define DITHER16 "11*8+4*4*256*3+64" 395 #define DITHER32 "11*8+4*4*256*3+80" 429 vector
signed short CY;
430 vector
signed short CRV;
431 vector
signed short CBU;
432 vector
signed short CGU;
433 vector
signed short CGV;
434 vector
signed short OY;
435 vector
unsigned short CSHIFT;
436 vector
signed short *vYCoeffsBank, *vCCoeffsBank;
450 int width, uint32_t *pal);
453 int width, uint32_t *pal);
457 int width, uint32_t *pal);
489 int16_t *dst,
int dstWidth,
492 int16_t *dst1, int16_t *dst2,
int dstWidth,
530 const int32_t *filterPos,
int filterSize);
533 const int32_t *filterPos,
int filterSize);
604 (!(av_pix_fmt_descriptors[x].flags & AV_PIX_FMT_FLAG_PAL) && \ 605 av_pix_fmt_descriptors[x].nb_components <= 2) 608 ((x) == AV_PIX_FMT_GRAY8 || \ 609 (x) == AV_PIX_FMT_YA8 || \ 610 (x) == AV_PIX_FMT_GRAY16BE || \ 611 (x) == AV_PIX_FMT_GRAY16LE || \ 612 (x) == AV_PIX_FMT_YA16BE || \ 613 (x) == AV_PIX_FMT_YA16LE) 616 #define isRGBinInt(x) \ 617 ((x) == AV_PIX_FMT_RGB48BE || \ 618 (x) == AV_PIX_FMT_RGB48LE || \ 619 (x) == AV_PIX_FMT_RGB32 || \ 620 (x) == AV_PIX_FMT_RGB32_1 || \ 621 (x) == AV_PIX_FMT_RGB24 || \ 622 (x) == AV_PIX_FMT_RGB565BE || \ 623 (x) == AV_PIX_FMT_RGB565LE || \ 624 (x) == AV_PIX_FMT_RGB555BE || \ 625 (x) == AV_PIX_FMT_RGB555LE || \ 626 (x) == AV_PIX_FMT_RGB444BE || \ 627 (x) == AV_PIX_FMT_RGB444LE || \ 628 (x) == AV_PIX_FMT_RGB8 || \ 629 (x) == AV_PIX_FMT_RGB4 || \ 630 (x) == AV_PIX_FMT_RGB4_BYTE || \ 631 (x) == AV_PIX_FMT_RGBA64BE || \ 632 (x) == AV_PIX_FMT_RGBA64LE || \ 633 (x) == AV_PIX_FMT_MONOBLACK || \ 634 (x) == AV_PIX_FMT_MONOWHITE) 636 #define isBGRinInt(x) \ 637 ((x) == AV_PIX_FMT_BGR48BE || \ 638 (x) == AV_PIX_FMT_BGR48LE || \ 639 (x) == AV_PIX_FMT_BGR32 || \ 640 (x) == AV_PIX_FMT_BGR32_1 || \ 641 (x) == AV_PIX_FMT_BGR24 || \ 642 (x) == AV_PIX_FMT_BGR565BE || \ 643 (x) == AV_PIX_FMT_BGR565LE || \ 644 (x) == AV_PIX_FMT_BGR555BE || \ 645 (x) == AV_PIX_FMT_BGR555LE || \ 646 (x) == AV_PIX_FMT_BGR444BE || \ 647 (x) == AV_PIX_FMT_BGR444LE || \ 648 (x) == AV_PIX_FMT_BGR8 || \ 649 (x) == AV_PIX_FMT_BGR4 || \ 650 (x) == AV_PIX_FMT_BGR4_BYTE || \ 651 (x) == AV_PIX_FMT_BGRA64BE || \ 652 (x) == AV_PIX_FMT_BGRA64LE || \ 653 (x) == AV_PIX_FMT_MONOBLACK || \ 654 (x) == AV_PIX_FMT_MONOWHITE) 656 #define isAnyRGB(x) \ #define AV_PIX_FMT_FLAG_PAL
Pixel format has a palette in data[1], values are indexes in this palette.
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, yuv2anyX_fn *yuv2anyX)
const char * sws_format_name(enum AVPixelFormat format)
int16_t ** alpPixBuf
Ring buffer for scaled horizontal alpha plane lines to be fed to the vertical scaler.
void(* hcScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
ptrdiff_t uv_off_px
offset (in pixels) between u and v planes
const uint64_t ff_dither8[2]
int chrBufIndex
Index in ring buffer of the last scaled horizontal chroma line from source.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
int chrSrcH
Height of source chroma planes.
static av_always_inline int isPlanarRGB(enum AVPixelFormat pix_fmt)
void(* chrConvertRange)(int16_t *dst1, int16_t *dst2, int width)
Color range conversion function for chroma planes if needed.
uint8_t * chrMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
uint8_t * lumMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
void updateMMXDitherTables(SwsContext *c, int dstY, int lumBufIndex, int chrBufIndex, int lastInLumBuf, int lastInChrBuf)
int vChrDrop
Binary logarithm of extra vertical subsampling factor in source image chroma planes specified by user...
int ff_yuv2rgb_c_init_tables(SwsContext *c, const int inv_table[4], int fullRange, int brightness, int contrast, int saturation)
int dstFormatBpp
Number of bits per pixel of the destination pixel format.
#define DECLARE_ALIGNED(n, t, v)
static av_always_inline int is16BPS(enum AVPixelFormat pix_fmt)
void(* hyScale)(struct SwsContext *c, int16_t *dst, int dstW, const uint8_t *src, const int16_t *filter, const int32_t *filterPos, int filterSize)
Scale one horizontal line of input data using a filter over the input lines, to produce one (differen...
int srcRange
0 = MPG YUV range, 1 = JPG YUV range (source image).
const uint8_t * lumDither8
void(* hyscale_fast)(struct SwsContext *c, int16_t *dst, int dstWidth, const uint8_t *src, int srcW, int xInc)
Scale one horizontal line of input data using a bilinear filter to produce one line of output data...
int dstY
Last destination vertical line output from last slice.
void ff_sws_init_input_funcs(SwsContext *c)
int srcH
Height of source luma/alpha planes.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
const int32_t ff_yuv2rgb_coeffs[8][4]
int chrDstVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in destination i...
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
8 bit with PIX_FMT_RGB32 palette
int vChrFilterSize
Vertical filter size for chroma pixels.
void(* chrToYV12)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src1, const uint8_t *src2, int width, uint32_t *pal)
Unscaled conversion of chroma planes to YV12 for horizontal scaler.
int16_t ** lumPixBuf
Ring buffer for scaled horizontal luma plane lines to be fed to the vertical scaler.
SwsFunc ff_yuv2rgb_init_x86(SwsContext *c)
int lastInLumBuf
Last scaled horizontal luma/alpha line from source in the ring buffer.
void(* yuv2planar1_fn)(const int16_t *src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output without any additional vertical scaling (...
enum AVPixelFormat dstFormat
Destination pixel format.
int chrSrcHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in source imag...
static av_always_inline int isYUV(enum AVPixelFormat pix_fmt)
yuv2packedX_fn yuv2packedX
int32_t * vChrFilterPos
Array of vertical filter starting positions for each dst[i] for chroma planes.
int dstH
Height of destination luma/alpha planes.
uint16_t depth_minus1
Number of bits in the component minus 1.
const uint64_t ff_dither4[2]
int16_t ** chrVPixBuf
Ring buffer for scaled horizontal chroma plane lines to be fed to the vertical scaler.
int32_t * hChrFilterPos
Array of horizontal filter starting positions for each dst[i] for chroma planes.
int hLumFilterSize
Horizontal filter size for luma/alpha pixels.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
yuv2packed1_fn yuv2packed1
simple assert() macros that are a bit more flexible than ISO C assert().
int vChrBufSize
Number of vertical chroma lines allocated in the ring buffer.
const uint8_t ff_dither_8x8_220[8][8]
void(* hcscale_fast)(struct SwsContext *c, int16_t *dst1, int16_t *dst2, int dstWidth, const uint8_t *src1, const uint8_t *src2, int srcW, int xInc)
int chrDstW
Width of destination chroma planes.
int32_t alpMmxFilter[4 *MAX_FILTER_SIZE]
int32_t * hLumFilterPos
Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
int hChrFilterSize
Horizontal filter size for chroma pixels.
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
ptrdiff_t uv_off_byte
offset (in bytes) between u and v planes
int dstRange
0 = MPG YUV range, 1 = JPG YUV range (destination image).
void ff_sws_init_swscale_ppc(SwsContext *c)
uint8_t nb_components
The number of components each pixel has, (1-4)
void(* lumToYV12)(uint8_t *dst, const uint8_t *src, int width, uint32_t *pal)
Unscaled conversion of luma plane to YV12 for horizontal scaler.
uint8_t * formatConvBuffer
static av_always_inline int is9_OR_10BPS(enum AVPixelFormat pix_fmt)
yuv2planar1_fn yuv2plane1
int vLumBufSize
Number of vertical luma/alpha lines allocated in the ring buffer.
int16_t ** chrUPixBuf
Ring buffer for scaled horizontal chroma plane lines to be fed to the vertical scaler.
yuv2interleavedX_fn yuv2nv12cX
#define AV_PIX_FMT_FLAG_PSEUDOPAL
The pixel format is "pseudo-paletted".
enum AVPixelFormat pix_fmt
void(* lumConvertRange)(int16_t *dst, int width)
Color range conversion function for luma plane if needed.
int srcColorspaceTable[4]
int dstW
Width of destination luma/alpha planes.
int sliceDir
Direction that slices are fed to the scaler (1 = top-to-bottom, -1 = bottom-to-top).
int(* SwsFunc)(struct SwsContext *context, const uint8_t *src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t *dst[], int dstStride[])
int needs_hcscale
Set if there are chroma planes to be converted.
int32_t * vLumFilterPos
Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
static av_always_inline int isBE(enum AVPixelFormat pix_fmt)
int32_t lumMmxFilter[4 *MAX_FILTER_SIZE]
static const uint16_t dither[8][8]
SwsFunc ff_getSwsFunc(SwsContext *c)
Return function pointer to fastest main scaler path function depending on architecture and available ...
const uint8_t ff_dither_8x8_128[8][8]
int dstColorspaceTable[4]
const AVClass * av_class
info on struct for av_log
void(* yuv2packedX_fn)(struct 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)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing multi-point ver...
static av_always_inline int isPlanar(enum AVPixelFormat pix_fmt)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
yuv2planarX_fn yuv2planeX
static void(WINAPI *cond_broadcast)(pthread_cond_t *cond)
const uint8_t ff_dither_8x8_32[8][8]
void(* yuv2packed1_fn)(struct SwsContext *c, const int16_t *lumSrc, const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc, uint8_t *dest, int dstW, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output without any additional v...
int chrDstH
Height of destination chroma planes.
static av_always_inline int isRGB(enum AVPixelFormat pix_fmt)
int lumMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes...
Describe the class of an AVClass context structure.
void(* yuv2planarX_fn)(const int16_t *filter, int filterSize, const int16_t **src, uint8_t *dest, int dstW, const uint8_t *dither, int offset)
Write one line of horizontally scaled data to planar output with multi-point vertical scaling between...
int vLumFilterSize
Vertical filter size for luma/alpha pixels.
SwsFunc ff_yuv2rgb_get_func_ptr(SwsContext *c)
int chrMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
static av_always_inline int isPlanarYUV(enum AVPixelFormat pix_fmt)
static av_always_inline int isALPHA(enum AVPixelFormat pix_fmt)
int16_t * vChrFilter
Array of vertical filter coefficients for chroma planes.
void(* readChrPlanar)(uint8_t *dstU, uint8_t *dstV, const uint8_t *src[4], int width)
void ff_sws_init_swscale_x86(SwsContext *c)
int16_t * hLumFilter
Array of horizontal filter coefficients for luma/alpha planes.
const uint8_t ff_dither_8x8_73[8][8]
const uint8_t * chrDither8
void ff_get_unscaled_swscale_ppc(SwsContext *c)
int lumBufIndex
Index in ring buffer of the last scaled horizontal luma/alpha line from source.
int lastInChrBuf
Last scaled horizontal chroma line from source in the ring buffer.
yuv2packed2_fn yuv2packed2
double param[2]
Input parameters for scaling algorithms that need them.
common internal and external API header
void(* readLumPlanar)(uint8_t *dst, const uint8_t *src[4], int width)
Functions to read planar input, such as planar RGB, and convert internally to Y/UV.
void(* yuv2packed2_fn)(struct SwsContext *c, const int16_t *lumSrc[2], const int16_t *chrUSrc[2], const int16_t *chrVSrc[2], const int16_t *alpSrc[2], uint8_t *dest, int dstW, int yalpha, int uvalpha, int y)
Write one line of horizontally scaled Y/U/V/A to packed-pixel YUV/RGB output by doing bilinear scalin...
enum AVPixelFormat srcFormat
Source pixel format.
int32_t chrMmxFilter[4 *MAX_FILTER_SIZE]
#define AV_PIX_FMT_FLAG_BE
Pixel format is big-endian.
SwsFunc swscale
Note that src, dst, srcStride, dstStride will be copied in the sws_scale() wrapper so they can be fre...
void ff_yuv2rgb_init_tables_ppc(SwsContext *c, const int inv_table[4], int brightness, int contrast, int saturation)
const AVClass sws_context_class
void(* yuv2interleavedX_fn)(struct SwsContext *c, const int16_t *chrFilter, int chrFilterSize, const int16_t **chrUSrc, const int16_t **chrVSrc, uint8_t *dest, int dstW)
Write one line of horizontally scaled chroma to interleaved output with multi-point vertical scaling ...
int srcFormatBpp
Number of bits per pixel of the source pixel format.
void(* yuv2anyX_fn)(struct 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)
Write one line of horizontally scaled Y/U/V/A to YUV/RGB output by doing multi-point vertical scaling...
static av_always_inline int isPackedRGB(enum AVPixelFormat pix_fmt)
int16_t * vLumFilter
Array of vertical filter coefficients for luma/alpha planes.
const uint8_t ff_dither_4x4_16[4][8]
static av_always_inline int usePal(enum AVPixelFormat pix_fmt)
int16_t * hChrFilter
Array of horizontal filter coefficients for chroma planes.
static av_always_inline int isPacked(enum AVPixelFormat pix_fmt)
void(* alpToYV12)(uint8_t *dst, const uint8_t *src, int width, uint32_t *pal)
Unscaled conversion of alpha plane to YV12 for horizontal scaler.
int chrDstHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination...
int chrSrcW
Width of source chroma planes.
void ff_get_unscaled_swscale(SwsContext *c)
Set c->swscale to an unscaled converter if one exists for the specific source and destination formats...
int srcW
Width of source luma/alpha planes.
int chrSrcVSubSample
Binary logarithm of vertical subsampling factor between luma/alpha and chroma planes in source image...
int flags
Flags passed by the user to select scaler algorithm, optimizations, subsampling, etc...
AVPixelFormat
Pixel format.
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
SwsFunc ff_yuv2rgb_init_ppc(SwsContext *c)