23 #define _SVID_SOURCE // needed for MAP_ANONYMOUS 31 #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS) 32 #define MAP_ANONYMOUS MAP_ANON 36 #define WIN32_LEAN_AND_MEAN 67 #define LICENSE_PREFIX "libswscale license: " 71 #define RET 0xC3 // near return opcode for x86 216 return "Unknown format";
223 return ((d * dist + c) * dist + b) * dist +
a;
226 b + 2.0 * c + 3.0 * d,
228 -b - 3.0 * c - 6.0 * d,
233 int *outFilterSize,
int xInc,
int srcW,
234 int dstW,
int filterAlign,
int one,
235 int flags,
int cpu_flags,
237 double param[2],
int is_horizontal)
244 int64_t *filter2 =
NULL;
245 const int64_t fone = 1LL << 54;
253 if (
FFABS(xInc - 0x10000) < 10) {
257 dstW *
sizeof(*filter) * filterSize,
fail);
259 for (i = 0; i < dstW; i++) {
260 filter[i * filterSize] = fone;
268 dstW *
sizeof(*filter) * filterSize,
fail);
270 xDstInSrc = xInc / 2 - 0x8000;
271 for (i = 0; i < dstW; i++) {
272 int xx = (xDstInSrc - ((filterSize - 1) << 15) + (1 << 15)) >> 16;
274 (*filterPos)[i] = xx;
278 }
else if ((xInc <= (1 << 16) && (flags &
SWS_AREA)) ||
284 dstW *
sizeof(*filter) * filterSize,
fail);
286 xDstInSrc = xInc / 2 - 0x8000;
287 for (i = 0; i < dstW; i++) {
288 int xx = (xDstInSrc - ((filterSize - 1) << 15) + (1 << 15)) >> 16;
291 (*filterPos)[i] = xx;
293 for (j = 0; j < filterSize; j++) {
294 int64_t coeff = fone -
FFABS((xx << 16) - xDstInSrc) *
298 filter[i * filterSize + j] = coeff;
309 else if (flags &
SWS_X)
329 filterSize = 1 + sizeFactor;
331 filterSize = 1 + (sizeFactor * srcW + dstW - 1) / dstW;
333 filterSize =
FFMIN(filterSize, srcW - 2);
334 filterSize =
FFMAX(filterSize, 1);
337 dstW *
sizeof(*filter) * filterSize,
fail);
339 xDstInSrc = xInc - 0x10000;
340 for (i = 0; i < dstW; i++) {
341 int xx = (xDstInSrc - ((int64_t)(filterSize - 2) << 16)) / (1 << 17);
343 (*filterPos)[i] = xx;
344 for (j = 0; j < filterSize; j++) {
345 int64_t d = (
FFABS(((int64_t)xx << 17) - xDstInSrc)) << 13;
351 floatd = d * (1.0 / (1 << 30));
353 if (flags & SWS_BICUBIC) {
357 if (d >= 1LL << 31) {
360 int64_t dd = (d * d) >> 30;
361 int64_t ddd = (dd * d) >> 30;
364 coeff = (12 * (1 << 24) - 9 * B - 6 * C) * ddd +
365 (-18 * (1 << 24) + 12 * B + 6 * C) * dd +
366 (6 * (1 << 24) - 2 * B) * (1 << 30);
368 coeff = (-B - 6 * C) * ddd +
369 (6 * B + 30 * C) * dd +
370 (-12 * B - 48 * C) * d +
371 (8 * B + 24 * C) * (1 << 30);
373 coeff *= fone >> (30 + 24);
375 else if (flags & SWS_X) {
380 c = cos(floatd * M_PI);
387 coeff = (c * 0.5 + 0.5) * fone;
388 }
else if (flags & SWS_AREA) {
389 int64_t d2 = d - (1 << 29);
390 if (d2 * xInc < -(1LL << (29 + 16)))
391 coeff = 1.0 * (1LL << (30 + 16));
392 else if (d2 * xInc < (1LL << (29 + 16)))
393 coeff = -d2 * xInc + (1LL << (29 + 16));
396 coeff *= fone >> (30 + 16);
397 }
else if (flags & SWS_GAUSS) {
399 coeff = (pow(2.0, -p * floatd * floatd)) * fone;
400 }
else if (flags & SWS_SINC) {
401 coeff = (d ? sin(floatd * M_PI) / (floatd * M_PI) : 1.0) * fone;
402 }
else if (flags & SWS_LANCZOS) {
404 coeff = (d ? sin(floatd * M_PI) * sin(floatd * M_PI / p) /
405 (floatd * floatd * M_PI * M_PI / p) : 1.0) * fone;
408 }
else if (flags & SWS_BILINEAR) {
409 coeff = (1 << 30) - d;
413 }
else if (flags & SWS_SPLINE) {
414 double p = -2.196152422706632;
421 filter[i * filterSize + j] = coeff;
424 xDstInSrc += 2 * xInc;
431 assert(filterSize > 0);
432 filter2Size = filterSize;
434 filter2Size += srcFilter->
length - 1;
436 filter2Size += dstFilter->
length - 1;
437 assert(filter2Size > 0);
440 for (i = 0; i < dstW; i++) {
444 for (k = 0; k < srcFilter->
length; k++) {
445 for (j = 0; j < filterSize; j++)
446 filter2[i * filter2Size + k + j] +=
447 srcFilter->
coeff[k] * filter[i * filterSize + j];
450 for (j = 0; j < filterSize; j++)
451 filter2[i * filter2Size + j] = filter[i * filterSize + j];
455 (*filterPos)[i] += (filterSize - 1) / 2 - (filter2Size - 1) / 2;
462 for (i = dstW - 1; i >= 0; i--) {
463 int min = filter2Size;
465 int64_t cutOff = 0.0;
468 for (j = 0; j < filter2Size; j++) {
470 cutOff +=
FFABS(filter2[i * filter2Size]);
477 if (i < dstW - 1 && (*filterPos)[i] >= (*filterPos)[i + 1])
481 for (k = 1; k < filter2Size; k++)
482 filter2[i * filter2Size + k - 1] = filter2[i * filter2Size + k];
483 filter2[i * filter2Size + k - 1] = 0;
489 for (j = filter2Size - 1; j > 0; j--) {
490 cutOff +=
FFABS(filter2[i * filter2Size + j]);
497 if (min > minFilterSize)
503 if (minFilterSize < 5)
509 if (minFilterSize < 3)
515 if (minFilterSize == 1 && filterAlign == 2)
519 assert(minFilterSize > 0);
520 filterSize = (minFilterSize + (filterAlign - 1)) & (~(filterAlign - 1));
521 assert(filterSize > 0);
522 filter =
av_malloc(filterSize * dstW *
sizeof(*filter));
526 *outFilterSize = filterSize;
530 "SwScaler: reducing / aligning filtersize %d -> %d\n",
531 filter2Size, filterSize);
533 for (i = 0; i < dstW; i++) {
536 for (j = 0; j < filterSize; j++) {
537 if (j >= filter2Size)
538 filter[i * filterSize + j] = 0;
540 filter[i * filterSize + j] = filter2[i * filter2Size + j];
542 filter[i * filterSize + j] = 0;
550 for (i = 0; i < dstW; i++) {
552 if ((*filterPos)[i] < 0) {
554 for (j = 1; j < filterSize; j++) {
555 int left =
FFMAX(j + (*filterPos)[i], 0);
556 filter[i * filterSize + left] += filter[i * filterSize + j];
557 filter[i * filterSize + j] = 0;
562 if ((*filterPos)[i] + filterSize > srcW) {
563 int shift = (*filterPos)[i] + filterSize - srcW;
565 for (j = filterSize - 2; j >= 0; j--) {
566 int right =
FFMIN(j + shift, filterSize - 1);
567 filter[i * filterSize + right] += filter[i * filterSize + j];
568 filter[i * filterSize + j] = 0;
570 (*filterPos)[i] = srcW - filterSize;
578 *outFilterSize * (dstW + 3) *
sizeof(int16_t),
fail);
581 for (i = 0; i < dstW; i++) {
586 for (j = 0; j < filterSize; j++) {
587 sum += filter[i * filterSize + j];
589 sum = (sum + one / 2) / one;
590 for (j = 0; j < *outFilterSize; j++) {
591 int64_t v = filter[i * filterSize + j] + error;
593 (*outFilter)[i * (*outFilterSize) + j] = intV;
594 error = v - intV * sum;
598 (*filterPos)[dstW + 0] =
599 (*filterPos)[dstW + 1] =
600 (*filterPos)[dstW + 2] = (*filterPos)[dstW - 1];
602 for (i = 0; i < *outFilterSize; i++) {
603 int k = (dstW - 1) * (*outFilterSize) + i;
604 (*outFilter)[k + 1 * (*outFilterSize)] =
605 (*outFilter)[k + 2 * (*outFilterSize)] =
606 (*outFilter)[k + 3 * (*outFilterSize)] = (*outFilter)[k];
617 #if HAVE_MMXEXT_INLINE 618 static av_cold int init_hscaler_mmxext(
int dstW,
int xInc,
uint8_t *filterCode,
647 "movq (%%"FF_REG_d
", %%"FF_REG_a
"), %%mm3 \n\t" 648 "movd (%%"FF_REG_c
", %%"FF_REG_S
"), %%mm0 \n\t" 649 "movd 1(%%"FF_REG_c
", %%"FF_REG_S
"), %%mm1 \n\t" 650 "punpcklbw %%mm7, %%mm1 \n\t" 651 "punpcklbw %%mm7, %%mm0 \n\t" 652 "pshufw $0xFF, %%mm1, %%mm1 \n\t" 654 "pshufw $0xFF, %%mm0, %%mm0 \n\t" 656 "psubw %%mm1, %%mm0 \n\t" 657 "movl 8(%%"FF_REG_b
", %%"FF_REG_a
"), %%esi \n\t" 658 "pmullw %%mm3, %%mm0 \n\t" 659 "psllw $7, %%mm1 \n\t" 660 "paddw %%mm1, %%mm0 \n\t" 662 "movq %%mm0, (%%"FF_REG_D
", %%"FF_REG_a
") \n\t" 664 "add $8, %%"FF_REG_a
" \n\t" 679 :
"=r" (fragmentA),
"=r" (imm8OfPShufW1A),
"=r" (imm8OfPShufW2A),
680 "=r" (fragmentLengthA)
687 "movq (%%"FF_REG_d
", %%"FF_REG_a
"), %%mm3 \n\t" 688 "movd (%%"FF_REG_c
", %%"FF_REG_S
"), %%mm0 \n\t" 689 "punpcklbw %%mm7, %%mm0 \n\t" 690 "pshufw $0xFF, %%mm0, %%mm1 \n\t" 692 "pshufw $0xFF, %%mm0, %%mm0 \n\t" 694 "psubw %%mm1, %%mm0 \n\t" 695 "movl 8(%%"FF_REG_b
", %%"FF_REG_a
"), %%esi \n\t" 696 "pmullw %%mm3, %%mm0 \n\t" 697 "psllw $7, %%mm1 \n\t" 698 "paddw %%mm1, %%mm0 \n\t" 700 "movq %%mm0, (%%"FF_REG_D
", %%"FF_REG_a
") \n\t" 702 "add $8, %%"FF_REG_a
" \n\t" 717 :
"=r" (fragmentB),
"=r" (imm8OfPShufW1B),
"=r" (imm8OfPShufW2B),
718 "=r" (fragmentLengthB)
724 for (i = 0; i < dstW / numSplits; i++) {
729 int b = ((xpos + xInc) >> 16) - xx;
730 int c = ((xpos + xInc * 2) >> 16) - xx;
731 int d = ((xpos + xInc * 3) >> 16) - xx;
732 int inc = (d + 1 < 4);
733 uint8_t *fragment = (d + 1 < 4) ? fragmentB : fragmentA;
734 x86_reg imm8OfPShufW1 = (d + 1 < 4) ? imm8OfPShufW1B : imm8OfPShufW1A;
735 x86_reg imm8OfPShufW2 = (d + 1 < 4) ? imm8OfPShufW2B : imm8OfPShufW2A;
736 x86_reg fragmentLength = (d + 1 < 4) ? fragmentLengthB : fragmentLengthA;
737 int maxShift = 3 - (d + inc);
741 filter[i] = ((xpos & 0xFFFF) ^ 0xFFFF) >> 9;
742 filter[i + 1] = (((xpos + xInc) & 0xFFFF) ^ 0xFFFF) >> 9;
743 filter[i + 2] = (((xpos + xInc * 2) & 0xFFFF) ^ 0xFFFF) >> 9;
744 filter[i + 3] = (((xpos + xInc * 3) & 0xFFFF) ^ 0xFFFF) >> 9;
745 filterPos[i / 2] = xx;
747 memcpy(filterCode + fragmentPos, fragment, fragmentLength);
749 filterCode[fragmentPos + imm8OfPShufW1] = (a + inc) |
753 filterCode[fragmentPos + imm8OfPShufW2] = a | (b << 2) |
757 if (i + 4 - inc >= dstW)
759 else if ((filterPos[i / 2] & 3) <= maxShift)
760 shift = filterPos[i / 2] & 3;
762 if (shift && i >= shift) {
763 filterCode[fragmentPos + imm8OfPShufW1] += 0x55 * shift;
764 filterCode[fragmentPos + imm8OfPShufW2] += 0x55 * shift;
765 filterPos[i / 2] -= shift;
769 fragmentPos += fragmentLength;
772 filterCode[fragmentPos] =
RET;
777 filterPos[((i / 2) + 1) & (~1)] = xpos >> 16;
779 return fragmentPos + 1;
791 int srcRange,
const int table[4],
int dstRange,
792 int brightness,
int contrast,
int saturation)
811 contrast, saturation);
816 contrast, saturation);
821 int *srcRange,
int **table,
int *dstRange,
822 int *brightness,
int *contrast,
int *saturation)
874 int usesVFilter, usesHFilter;
881 int dst_stride =
FFALIGN(dstW *
sizeof(int16_t) + 16, 16);
882 int dst_stride_px = dst_stride >> 1;
883 int flags, cpu_flags;
895 unscaled = (srcW == dstW && srcH == dstH);
925 if (dstW < srcW && dstH < srcH)
927 else if (dstW > srcW && dstH > srcH)
932 }
else if (i & (i - 1)) {
934 "Exactly one scaler algorithm must be chosen\n");
938 if (srcW < 4 || srcH < 1 || dstW < 8 || dstH < 1) {
942 srcW, srcH, dstW, dstH);
947 dstFilter = &dummyFilter;
949 srcFilter = &dummyFilter;
951 c->
lumXInc = (((int64_t)srcW << 16) + (dstW >> 1)) / dstW;
952 c->
lumYInc = (((int64_t)srcH << 16) + (dstH >> 1)) / dstH;
955 c->
vRounder = 4 * 0x0001000100010001ULL;
972 "%s output is not supported with half chroma resolution, switching to full\n",
991 "full chroma interpolation for destination format '%s' not yet implemented\n",
1024 if (unscaled && !usesHFilter && !usesVFilter &&
1031 "using unscaled %s -> %s special converter\n",
1050 (srcW & 15) == 0) ? 1 : 0;
1055 "output width is not a multiple of 32 -> no MMXEXT scaler\n");
1072 if (flags & SWS_FAST_BILINEAR) {
1079 c->
lumXInc = ((int64_t)(srcW - 2) << 16) / (dstW - 2) - 20;
1084 #define USE_MMAP (HAVE_MMAP && HAVE_MPROTECT && defined MAP_ANONYMOUS) 1088 #if HAVE_MMXEXT_INLINE 1094 NULL, NULL, NULL, 4);
1098 PROT_READ | PROT_WRITE,
1099 MAP_PRIVATE | MAP_ANONYMOUS,
1102 PROT_READ | PROT_WRITE,
1103 MAP_PRIVATE | MAP_ANONYMOUS,
1105 #elif HAVE_VIRTUALALLOC 1109 PAGE_EXECUTE_READWRITE);
1113 PAGE_EXECUTE_READWRITE);
1138 const int filterAlign =
X86_MMX(cpu_flags) ? 4 :
1143 srcW, dstW, filterAlign, 1 << 14,
1145 cpu_flags, srcFilter->
lumH, dstFilter->
lumH,
1151 (flags & SWS_BICUBLIN) ? (flags |
SWS_BILINEAR) : flags,
1152 cpu_flags, srcFilter->
chrH, dstFilter->
chrH,
1160 const int filterAlign =
X86_MMX(cpu_flags) ? 2 :
1164 c->
lumYInc, srcH, dstH, filterAlign, (1 << 12),
1166 cpu_flags, srcFilter->
lumV, dstFilter->
lumV,
1171 filterAlign, (1 << 12),
1172 (flags & SWS_BICUBLIN) ? (flags |
SWS_BILINEAR) : flags,
1173 cpu_flags, srcFilter->
chrV, dstFilter->
chrV,
1183 short *p = (
short *)&c->vYCoeffsBank[i];
1184 for (j = 0; j < 8; j++)
1190 short *p = (
short *)&c->vCCoeffsBank[i];
1191 for (j = 0; j < 8; j++)
1200 for (i = 0; i < dstH; i++) {
1201 int chrI = (int64_t)i * c->
chrDstH / dstH;
1228 dst_stride + 16,
fail);
1236 dst_stride * 2 + 32,
fail);
1244 dst_stride + 16,
fail);
1250 memset(c->
chrUPixBuf[i], 64, dst_stride * 2 + 1);
1255 if (flags & SWS_FAST_BILINEAR)
1261 else if (flags &
SWS_X)
1305 "lum srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
1308 "chr srcW=%d srcH=%d dstW=%d dstH=%d xInc=%d yInc=%d\n",
1322 SwsFilter *dstFilter,
const double *param)
1340 c->
param[0] = param[0];
1341 c->
param[1] = param[1];
1356 float lumaSharpen,
float chromaSharpen,
1357 float chromaHShift,
float chromaVShift,
1364 if (lumaGBlur != 0.0) {
1372 if (chromaGBlur != 0.0) {
1383 if (chromaSharpen != 0.0) {
1394 if (lumaSharpen != 0.0) {
1405 if (chromaHShift != 0.0)
1408 if (chromaVShift != 0.0)
1446 const int length = (int)(variance * quality + 0.5) | 1;
1448 double middle = (length - 1) * 0.5;
1454 for (i = 0; i < length; i++) {
1455 double dist = i - middle;
1456 vec->
coeff[i] = exp(-dist * dist / (2 * variance * variance)) /
1457 sqrt(2 * variance * M_PI);
1473 for (i = 0; i < length; i++)
1489 for (i = 0; i < a->
length; i++)
1499 for (i = 0; i < a->
length; i++)
1500 a->
coeff[i] *= scalar;
1517 for (i = 0; i < a->
length; i++) {
1518 for (j = 0; j < b->
length; j++) {
1535 for (i = 0; i < a->
length; i++)
1552 for (i = 0; i < a->
length; i++)
1570 for (i = 0; i < a->
length; i++) {
1571 vec->
coeff[i + (length - 1) / 2 -
1622 for (i = 0; i < a->
length; i++)
1635 for (i = 0; i < a->
length; i++)
1636 if (a->
coeff[i] > max)
1639 for (i = 0; i < a->
length; i++)
1640 if (a->
coeff[i] < min)
1645 for (i = 0; i < a->
length; i++) {
1646 int x = (int)((a->
coeff[i] - min) * 60.0 / range + 0.5);
1647 av_log(log_ctx, log_level,
"%1.3f ", a->
coeff[i]);
1649 av_log(log_ctx, log_level,
" ");
1650 av_log(log_ctx, log_level,
"|\n");
1724 #elif HAVE_VIRTUALALLOC 1749 const double *
param)
1755 param = default_param;
1758 (context->
srcW != srcW ||
1759 context->
srcH != srcH ||
1761 context->
dstW != dstW ||
1762 context->
dstH != dstH ||
1764 context->
flags != flags ||
1765 context->
param[0] != param[0] ||
1766 context->
param[1] != param[1])) {
1783 context->
param[0] = param[0];
1784 context->
param[1] = param[1];
1788 context->
dstRange, 0, 1 << 16, 1 << 16);
packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
int16_t ** alpPixBuf
Ring buffer for scaled horizontal alpha plane lines to be fed to the vertical scaler.
int sws_isSupportedOutput(enum AVPixelFormat pix_fmt)
Return a positive value if pix_fmt is a supported output format, 0 otherwise.
static const FormatEntry format_entries[AV_PIX_FMT_NB]
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
ptrdiff_t uv_off_px
offset (in pixels) between u and v planes
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static SwsVector * sws_sumVec(SwsVector *a, SwsVector *b)
av_cold void ff_yuv2rgb_init_tables_ppc(SwsContext *c, const int inv_table[4], int brightness, int contrast, int saturation)
#define SWS_SRC_V_CHR_DROP_MASK
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)
#define LIBAV_CONFIGURATION
uint8_t * chrMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for chroma planes.
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
8 bits gray, 8 bits alpha
av_cold void ff_rgb2rgb_init(void)
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
const char * sws_format_name(enum AVPixelFormat format)
uint8_t * lumMmxextFilterCode
Runtime-generated MMXEXT horizontal fast bilinear scaler code for luma/alpha planes.
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
packed RGB 8:8:8, 24bpp, RGBRGB...
packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in ...
int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation)
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
Return the number of bits per pixel used by the pixel format described by pixdesc.
SwsVector * sws_getGaussianVec(double variance, double quality)
Return a normalized Gaussian curve used to filter stuff quality = 3 is high quality, lower is lower quality.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
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)
packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is st...
packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0 ...
av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (%s)\, len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic ? ac->func_descr_generic :ac->func_descr)
static double getSplineCoeff(double a, double b, double c, double d, double dist)
int dstFormatBpp
Number of bits per pixel of the destination pixel format.
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
static int handle_jpeg(enum AVPixelFormat *format)
int sws_isSupportedEndiannessConversion(enum AVPixelFormat pix_fmt)
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
#define SWS_SRC_V_CHR_DROP_SHIFT
const char * swscale_configuration(void)
Return the libswscale build-time configuration.
planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0 ...
void sws_subVec(SwsVector *a, SwsVector *b)
int srcRange
0 = MPG YUV range, 1 = JPG YUV range (source image).
enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
Utility function to swap the endianness of a pixel format.
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in ...
Macro definitions for various function/variable attributes.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
int srcH
Height of source luma/alpha planes.
packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian ...
planar GBRA 4:4:4:4 64bpp, big-endian
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
const int32_t ff_yuv2rgb_coeffs[8][4]
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
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.
int length
number of coefficients in the vector
8 bits with AV_PIX_FMT_RGB32 palette
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as lit...
int vChrFilterSize
Vertical filter size for chroma pixels.
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
int16_t ** lumPixBuf
Ring buffer for scaled horizontal luma plane lines to be fed to the vertical scaler.
packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0 ...
void sws_addVec(SwsVector *a, SwsVector *b)
#define SWS_FULL_CHR_H_INT
packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
#define SWS_FAST_BILINEAR
planar GBR 4:4:4 48bpp, big-endian
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range...
SwsContext * sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Allocate and return an SwsContext.
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter)
Initialize the swscaler context sws_context.
#define AV_LOG_VERBOSE
Detailed information.
external api for the swscale stuff
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)
static SwsVector * sws_getShiftedVec(SwsVector *a, int shift)
#define ROUNDED_DIV(a, b)
int32_t * vChrFilterPos
Array of vertical filter starting positions for each dst[i] for chroma planes.
int dstH
Height of destination luma/alpha planes.
planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
SwsFilter * sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, float lumaSharpen, float chromaSharpen, float chromaHShift, float chromaVShift, int verbose)
planar GBR 4:4:4 27bpp, big-endian
#define INLINE_MMX(flags)
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
16 bits gray, 16 bits alpha (big-endian)
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
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.
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
int hLumFilterSize
Horizontal filter size for luma/alpha pixels.
SwsFunc ff_getSwsFunc(SwsContext *c)
Return function pointer to fastest main scaler path function depending on architecture and available ...
#define PPC_ALTIVEC(flags)
#define SWS_MAX_REDUCE_CUTOFF
packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (firs...
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
void sws_printVec2(SwsVector *a, AVClass *log_ctx, int log_level)
Print with av_log() a textual representation of the vector a if log_level <= av_log_level.
int vChrBufSize
Number of vertical chroma lines allocated in the ring buffer.
planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
void sws_scaleVec(SwsVector *a, double scalar)
Scale all the coefficients of a by the scalar value.
int chrDstW
Width of destination chroma planes.
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as lit...
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
void sws_normalizeVec(SwsVector *a, double height)
Scale all the coefficients of a so that their sum equals height.
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
struct SwsContext * sws_getCachedContext(struct SwsContext *context, int srcW, int srcH, enum AVPixelFormat srcFormat, int dstW, int dstH, enum AVPixelFormat dstFormat, int flags, SwsFilter *srcFilter, SwsFilter *dstFilter, const double *param)
Check if context can be reused, otherwise reallocate a new one.
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int32_t * hLumFilterPos
Array of horizontal filter starting positions for each dst[i] for luma/alpha planes.
void sws_freeFilter(SwsFilter *filter)
int hChrFilterSize
Horizontal filter size for chroma pixels.
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
SwsVector * sws_allocVec(int length)
Allocate and return an uninitialized vector with length coefficients.
ptrdiff_t uv_off_byte
offset (in bytes) between u and v planes
as above, but U and V bytes are swapped
int dstRange
0 = MPG YUV range, 1 = JPG YUV range (destination image).
packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
uint8_t * formatConvBuffer
#define INLINE_AMD3DNOW(flags)
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.
SwsVector * sws_getIdentityVec(void)
Allocate and return a vector with just one coefficient, with value 1.0.
void sws_freeContext(SwsContext *c)
Free the swscaler context swsContext.
planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
packed RGB 8:8:8, 24bpp, BGRBGR...
packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big...
planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
enum AVPixelFormat pix_fmt
unsigned swscale_version(void)
like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation)
int srcColorspaceTable[4]
int dstW
Width of destination luma/alpha planes.
planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big...
packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
int32_t * vLumFilterPos
Array of vertical filter starting positions for each dst[i] for luma/alpha planes.
#define AV_PIX_FMT_BGR555
packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
double * coeff
pointer to the list of coefficients
#define AV_LOG_INFO
Standard information.
planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
int dstColorspaceTable[4]
const AVClass * av_class
info on struct for av_log
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
void sws_freeVec(SwsVector *a)
planar GBR 4:4:4 30bpp, big-endian
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
int chrDstH
Height of destination chroma planes.
packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
static void getSubSampleFactors(int *h, int *v, enum AVPixelFormat format)
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
static SwsVector * sws_diffVec(SwsVector *a, SwsVector *b)
void sws_shiftVec(SwsVector *a, int shift)
int lumMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for luma/alpha planes...
Describe the class of an AVClass context structure.
planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
int vLumFilterSize
Vertical filter size for luma/alpha pixels.
int chrMmxextFilterCodeSize
Runtime-generated MMXEXT horizontal fast bilinear scaler code size for chroma planes.
planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1 ...
int16_t * vChrFilter
Array of vertical filter coefficients for chroma planes.
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
SwsVector * sws_cloneVec(SwsVector *a)
Allocate and return a clone of the vector a, that is a vector with the same coefficients as a...
int16_t * hLumFilter
Array of horizontal filter coefficients for luma/alpha planes.
SwsContext * sws_alloc_context(void)
Allocate an empty SwsContext.
#define AV_PIX_FMT_BGR565
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0 ...
packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1 ...
planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
void sws_convVec(SwsVector *a, SwsVector *b)
Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb...
#define INLINE_MMXEXT(flags)
static double sws_dcVec(SwsVector *a)
#define CONFIG_SWSCALE_ALPHA
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
double param[2]
Input parameters for scaling algorithms that need them.
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb...
planar GBRA 4:4:4:4 32bpp
#define FF_ALLOC_OR_GOTO(ctx, p, size, label)
planar GBR 4:4:4 27bpp, little-endian
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
enum AVPixelFormat srcFormat
Source pixel format.
planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
#define SWS_PARAM_DEFAULT
#define SWS_FULL_CHR_H_INP
SwsFunc swscale
Note that src, dst, srcStride, dstStride will be copied in the sws_scale() wrapper so they can be fre...
packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as lit...
int srcFormatBpp
Number of bits per pixel of the source pixel format.
const AVClass ff_sws_context_class
Y , 16bpp, little-endian.
uint8_t is_supported_endianness
16 bits gray, 16 bits alpha (little-endian)
int sws_isSupportedInput(enum AVPixelFormat pix_fmt)
Return a positive value if pix_fmt is a supported input format, 0 otherwise.
planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos, int *outFilterSize, int xInc, int srcW, int dstW, int filterAlign, int one, int flags, int cpu_flags, SwsVector *srcFilter, SwsVector *dstFilter, double param[2], int is_horizontal)
packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1 ...
number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of...
int16_t * vLumFilter
Array of vertical filter coefficients for luma/alpha planes.
SwsVector * sws_getConstVec(double c, int length)
Allocate and return a vector with length coefficients, all with the same value c. ...
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
planar GBR 4:4:4 48bpp, little-endian
int16_t * hChrFilter
Array of horizontal filter coefficients for chroma planes.
packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1 ...
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
int chrDstHSubSample
Binary logarithm of horizontal subsampling factor between luma/alpha and chroma planes in destination...
int chrSrcW
Width of source chroma planes.
int depth
Number of bits in the component.
void ff_get_unscaled_swscale(SwsContext *c)
Set c->swscale to an unscaled converter if one exists for the specific source and destination formats...
planar GBRA 4:4:4:4 64bpp, little-endian
int srcW
Width of source luma/alpha planes.
packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
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.
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
void(* rgb15to16)(const uint8_t *src, uint8_t *dst, int src_size)
planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
#define FF_ALLOCZ_OR_GOTO(ctx, p, size, label)
planar GBR 4:4:4 30bpp, little-endian
static SwsVector * sws_getConvVec(SwsVector *a, SwsVector *b)
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
#define LIBSWSCALE_VERSION_INT
#define AV_CEIL_RSHIFT(a, b)
Fast a / (1 << b) rounded toward +inf, assuming a >= 0 and b >= 0.
planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
const char * swscale_license(void)
Return the libswscale license.