sws: support 12&14 bit planar colorspaces

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
pull/59/head
Michael Niedermayer 13 years ago
parent 1f29504204
commit fa36f33422
  1. 92
      libswscale/input.c
  2. 2
      libswscale/ppc/swscale_altivec.c
  3. 6
      libswscale/swscale.c
  4. 4
      libswscale/swscale_internal.h
  5. 22
      libswscale/utils.c
  6. 14
      libswscale/x86/swscale_mmx.c
  7. 2
      libswscale/x86/swscale_template.c
  8. 12
      tests/ref/lavfi/pixfmts_copy
  9. 12
      tests/ref/lavfi/pixfmts_null
  10. 12
      tests/ref/lavfi/pixfmts_pixdesctest
  11. 12
      tests/ref/lavfi/pixfmts_scale
  12. 12
      tests/ref/lavfi/pixfmts_vflip

@ -727,6 +727,26 @@ static void planar_rgb10be_to_y(uint8_t *dst, const uint8_t *src[4], int w)
planar_rgb16_to_y(dst, src, w, 10, 1); planar_rgb16_to_y(dst, src, w, 10, 1);
} }
static void planar_rgb12le_to_y(uint8_t *dst, const uint8_t *src[4], int w)
{
planar_rgb16_to_y(dst, src, w, 12, 0);
}
static void planar_rgb12be_to_y(uint8_t *dst, const uint8_t *src[4], int w)
{
planar_rgb16_to_y(dst, src, w, 12, 1);
}
static void planar_rgb14le_to_y(uint8_t *dst, const uint8_t *src[4], int w)
{
planar_rgb16_to_y(dst, src, w, 14, 0);
}
static void planar_rgb14be_to_y(uint8_t *dst, const uint8_t *src[4], int w)
{
planar_rgb16_to_y(dst, src, w, 14, 1);
}
static void planar_rgb16le_to_y(uint8_t *dst, const uint8_t *src[4], int w) static void planar_rgb16le_to_y(uint8_t *dst, const uint8_t *src[4], int w)
{ {
planar_rgb16_to_y(dst, src, w, 16, 0); planar_rgb16_to_y(dst, src, w, 16, 0);
@ -780,6 +800,30 @@ static void planar_rgb10be_to_uv(uint8_t *dstU, uint8_t *dstV,
planar_rgb16_to_uv(dstU, dstV, src, w, 10, 1); planar_rgb16_to_uv(dstU, dstV, src, w, 10, 1);
} }
static void planar_rgb12le_to_uv(uint8_t *dstU, uint8_t *dstV,
const uint8_t *src[4], int w)
{
planar_rgb16_to_uv(dstU, dstV, src, w, 12, 0);
}
static void planar_rgb12be_to_uv(uint8_t *dstU, uint8_t *dstV,
const uint8_t *src[4], int w)
{
planar_rgb16_to_uv(dstU, dstV, src, w, 12, 1);
}
static void planar_rgb14le_to_uv(uint8_t *dstU, uint8_t *dstV,
const uint8_t *src[4], int w)
{
planar_rgb16_to_uv(dstU, dstV, src, w, 14, 0);
}
static void planar_rgb14be_to_uv(uint8_t *dstU, uint8_t *dstV,
const uint8_t *src[4], int w)
{
planar_rgb16_to_uv(dstU, dstV, src, w, 14, 1);
}
static void planar_rgb16le_to_uv(uint8_t *dstU, uint8_t *dstV, static void planar_rgb16le_to_uv(uint8_t *dstU, uint8_t *dstV,
const uint8_t *src[4], int w) const uint8_t *src[4], int w)
{ {
@ -823,6 +867,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_GBRP10LE: case PIX_FMT_GBRP10LE:
c->readChrPlanar = planar_rgb10le_to_uv; c->readChrPlanar = planar_rgb10le_to_uv;
break; break;
case PIX_FMT_GBRP12LE:
c->readChrPlanar = planar_rgb12le_to_uv;
break;
case PIX_FMT_GBRP14LE:
c->readChrPlanar = planar_rgb14le_to_uv;
break;
case PIX_FMT_GBRP16LE: case PIX_FMT_GBRP16LE:
c->readChrPlanar = planar_rgb16le_to_uv; c->readChrPlanar = planar_rgb16le_to_uv;
break; break;
@ -832,6 +882,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_GBRP10BE: case PIX_FMT_GBRP10BE:
c->readChrPlanar = planar_rgb10be_to_uv; c->readChrPlanar = planar_rgb10be_to_uv;
break; break;
case PIX_FMT_GBRP12BE:
c->readChrPlanar = planar_rgb12be_to_uv;
break;
case PIX_FMT_GBRP14BE:
c->readChrPlanar = planar_rgb14be_to_uv;
break;
case PIX_FMT_GBRP16BE: case PIX_FMT_GBRP16BE:
c->readChrPlanar = planar_rgb16be_to_uv; c->readChrPlanar = planar_rgb16be_to_uv;
break; break;
@ -845,6 +901,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_YUV422P10LE: case PIX_FMT_YUV422P10LE:
case PIX_FMT_YUV444P10LE: case PIX_FMT_YUV444P10LE:
case PIX_FMT_YUV420P10LE: case PIX_FMT_YUV420P10LE:
case PIX_FMT_YUV422P12LE:
case PIX_FMT_YUV444P12LE:
case PIX_FMT_YUV420P12LE:
case PIX_FMT_YUV422P14LE:
case PIX_FMT_YUV444P14LE:
case PIX_FMT_YUV420P14LE:
case PIX_FMT_YUV420P16LE: case PIX_FMT_YUV420P16LE:
case PIX_FMT_YUV422P16LE: case PIX_FMT_YUV422P16LE:
case PIX_FMT_YUV444P16LE: case PIX_FMT_YUV444P16LE:
@ -857,6 +919,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_YUV444P10BE: case PIX_FMT_YUV444P10BE:
case PIX_FMT_YUV422P10BE: case PIX_FMT_YUV422P10BE:
case PIX_FMT_YUV420P10BE: case PIX_FMT_YUV420P10BE:
case PIX_FMT_YUV444P12BE:
case PIX_FMT_YUV422P12BE:
case PIX_FMT_YUV420P12BE:
case PIX_FMT_YUV444P14BE:
case PIX_FMT_YUV422P14BE:
case PIX_FMT_YUV420P14BE:
case PIX_FMT_YUV420P16BE: case PIX_FMT_YUV420P16BE:
case PIX_FMT_YUV422P16BE: case PIX_FMT_YUV422P16BE:
case PIX_FMT_YUV444P16BE: case PIX_FMT_YUV444P16BE:
@ -1028,6 +1096,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_GBRP10LE: case PIX_FMT_GBRP10LE:
c->readLumPlanar = planar_rgb10le_to_y; c->readLumPlanar = planar_rgb10le_to_y;
break; break;
case PIX_FMT_GBRP12LE:
c->readLumPlanar = planar_rgb12le_to_y;
break;
case PIX_FMT_GBRP14LE:
c->readLumPlanar = planar_rgb14le_to_y;
break;
case PIX_FMT_GBRP16LE: case PIX_FMT_GBRP16LE:
c->readLumPlanar = planar_rgb16le_to_y; c->readLumPlanar = planar_rgb16le_to_y;
break; break;
@ -1037,6 +1111,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_GBRP10BE: case PIX_FMT_GBRP10BE:
c->readLumPlanar = planar_rgb10be_to_y; c->readLumPlanar = planar_rgb10be_to_y;
break; break;
case PIX_FMT_GBRP12BE:
c->readLumPlanar = planar_rgb12be_to_y;
break;
case PIX_FMT_GBRP14BE:
c->readLumPlanar = planar_rgb14be_to_y;
break;
case PIX_FMT_GBRP16BE: case PIX_FMT_GBRP16BE:
c->readLumPlanar = planar_rgb16be_to_y; c->readLumPlanar = planar_rgb16be_to_y;
break; break;
@ -1050,6 +1130,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_YUV444P10LE: case PIX_FMT_YUV444P10LE:
case PIX_FMT_YUV422P10LE: case PIX_FMT_YUV422P10LE:
case PIX_FMT_YUV420P10LE: case PIX_FMT_YUV420P10LE:
case PIX_FMT_YUV444P12LE:
case PIX_FMT_YUV422P12LE:
case PIX_FMT_YUV420P12LE:
case PIX_FMT_YUV444P14LE:
case PIX_FMT_YUV422P14LE:
case PIX_FMT_YUV420P14LE:
case PIX_FMT_YUV420P16LE: case PIX_FMT_YUV420P16LE:
case PIX_FMT_YUV422P16LE: case PIX_FMT_YUV422P16LE:
case PIX_FMT_YUV444P16LE: case PIX_FMT_YUV444P16LE:
@ -1063,6 +1149,12 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case PIX_FMT_YUV444P10BE: case PIX_FMT_YUV444P10BE:
case PIX_FMT_YUV422P10BE: case PIX_FMT_YUV422P10BE:
case PIX_FMT_YUV420P10BE: case PIX_FMT_YUV420P10BE:
case PIX_FMT_YUV444P12BE:
case PIX_FMT_YUV422P12BE:
case PIX_FMT_YUV420P12BE:
case PIX_FMT_YUV444P14BE:
case PIX_FMT_YUV422P14BE:
case PIX_FMT_YUV420P14BE:
case PIX_FMT_YUV420P16BE: case PIX_FMT_YUV420P16BE:
case PIX_FMT_YUV422P16BE: case PIX_FMT_YUV422P16BE:
case PIX_FMT_YUV444P16BE: case PIX_FMT_YUV444P16BE:

@ -317,7 +317,7 @@ void ff_sws_init_swScale_altivec(SwsContext *c)
if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC)) if (!(av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC))
return; return;
if (c->srcBpc == 8 && c->dstBpc <= 10) { if (c->srcBpc == 8 && c->dstBpc <= 14) {
c->hyScale = c->hcScale = hScale_altivec_real; c->hyScale = c->hcScale = hScale_altivec_real;
} }
if (!is16BPS(dstFormat) && !is9_OR_10BPS(dstFormat) && if (!is16BPS(dstFormat) && !is9_OR_10BPS(dstFormat) &&

@ -691,7 +691,7 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
if (c->srcBpc == 8) { if (c->srcBpc == 8) {
if (c->dstBpc <= 10) { if (c->dstBpc <= 14) {
c->hyScale = c->hcScale = hScale8To15_c; c->hyScale = c->hcScale = hScale8To15_c;
if (c->flags & SWS_FAST_BILINEAR) { if (c->flags & SWS_FAST_BILINEAR) {
c->hyscale_fast = hyscale_fast_c; c->hyscale_fast = hyscale_fast_c;
@ -701,12 +701,12 @@ static av_cold void sws_init_swScale_c(SwsContext *c)
c->hyScale = c->hcScale = hScale8To19_c; c->hyScale = c->hcScale = hScale8To19_c;
} }
} else { } else {
c->hyScale = c->hcScale = c->dstBpc > 10 ? hScale16To19_c c->hyScale = c->hcScale = c->dstBpc > 14 ? hScale16To19_c
: hScale16To15_c; : hScale16To15_c;
} }
if (c->srcRange != c->dstRange && !isAnyRGB(c->dstFormat)) { if (c->srcRange != c->dstRange && !isAnyRGB(c->dstFormat)) {
if (c->dstBpc <= 10) { if (c->dstBpc <= 14) {
if (c->srcRange) { if (c->srcRange) {
c->lumConvertRange = lumRangeFromJpeg_c; c->lumConvertRange = lumRangeFromJpeg_c;
c->chrConvertRange = chrRangeFromJpeg_c; c->chrConvertRange = chrRangeFromJpeg_c;

@ -558,8 +558,8 @@ const char *sws_format_name(enum PixelFormat format);
(av_pix_fmt_descriptors[x].comp[0].depth_minus1 == 15) (av_pix_fmt_descriptors[x].comp[0].depth_minus1 == 15)
#define is9_OR_10BPS(x) \ #define is9_OR_10BPS(x) \
(av_pix_fmt_descriptors[x].comp[0].depth_minus1 == 8 || \ (av_pix_fmt_descriptors[x].comp[0].depth_minus1 >= 8 && \
av_pix_fmt_descriptors[x].comp[0].depth_minus1 == 9) av_pix_fmt_descriptors[x].comp[0].depth_minus1 <= 13)
#define isNBPS(x) is9_OR_10BPS(x) #define isNBPS(x) is9_OR_10BPS(x)

@ -145,19 +145,35 @@ static const FormatEntry format_entries[PIX_FMT_NB] = {
[PIX_FMT_YUV420P9LE] = { 1, 1 }, [PIX_FMT_YUV420P9LE] = { 1, 1 },
[PIX_FMT_YUV420P10BE] = { 1, 1 }, [PIX_FMT_YUV420P10BE] = { 1, 1 },
[PIX_FMT_YUV420P10LE] = { 1, 1 }, [PIX_FMT_YUV420P10LE] = { 1, 1 },
[PIX_FMT_YUV420P12BE] = { 1, 1 },
[PIX_FMT_YUV420P12LE] = { 1, 1 },
[PIX_FMT_YUV420P14BE] = { 1, 1 },
[PIX_FMT_YUV420P14LE] = { 1, 1 },
[PIX_FMT_YUV422P9BE] = { 1, 1 }, [PIX_FMT_YUV422P9BE] = { 1, 1 },
[PIX_FMT_YUV422P9LE] = { 1, 1 }, [PIX_FMT_YUV422P9LE] = { 1, 1 },
[PIX_FMT_YUV422P10BE] = { 1, 1 }, [PIX_FMT_YUV422P10BE] = { 1, 1 },
[PIX_FMT_YUV422P10LE] = { 1, 1 }, [PIX_FMT_YUV422P10LE] = { 1, 1 },
[PIX_FMT_YUV422P12BE] = { 1, 1 },
[PIX_FMT_YUV422P12LE] = { 1, 1 },
[PIX_FMT_YUV422P14BE] = { 1, 1 },
[PIX_FMT_YUV422P14LE] = { 1, 1 },
[PIX_FMT_YUV444P9BE] = { 1, 1 }, [PIX_FMT_YUV444P9BE] = { 1, 1 },
[PIX_FMT_YUV444P9LE] = { 1, 1 }, [PIX_FMT_YUV444P9LE] = { 1, 1 },
[PIX_FMT_YUV444P10BE] = { 1, 1 }, [PIX_FMT_YUV444P10BE] = { 1, 1 },
[PIX_FMT_YUV444P10LE] = { 1, 1 }, [PIX_FMT_YUV444P10LE] = { 1, 1 },
[PIX_FMT_YUV444P12BE] = { 1, 1 },
[PIX_FMT_YUV444P12LE] = { 1, 1 },
[PIX_FMT_YUV444P14BE] = { 1, 1 },
[PIX_FMT_YUV444P14LE] = { 1, 1 },
[PIX_FMT_GBRP] = { 1, 0 }, [PIX_FMT_GBRP] = { 1, 0 },
[PIX_FMT_GBRP9LE] = { 1, 0 }, [PIX_FMT_GBRP9LE] = { 1, 0 },
[PIX_FMT_GBRP9BE] = { 1, 0 }, [PIX_FMT_GBRP9BE] = { 1, 0 },
[PIX_FMT_GBRP10LE] = { 1, 0 }, [PIX_FMT_GBRP10LE] = { 1, 0 },
[PIX_FMT_GBRP10BE] = { 1, 0 }, [PIX_FMT_GBRP10BE] = { 1, 0 },
[PIX_FMT_GBRP12LE] = { 1, 0 },
[PIX_FMT_GBRP12BE] = { 1, 0 },
[PIX_FMT_GBRP14LE] = { 1, 0 },
[PIX_FMT_GBRP14BE] = { 1, 0 },
[PIX_FMT_GBRP16LE] = { 1, 0 }, [PIX_FMT_GBRP16LE] = { 1, 0 },
[PIX_FMT_GBRP16BE] = { 1, 0 }, [PIX_FMT_GBRP16BE] = { 1, 0 },
}; };
@ -1006,7 +1022,7 @@ int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter)
dst_stride <<= 1; dst_stride <<= 1;
FF_ALLOC_OR_GOTO(c, c->formatConvBuffer, FFALIGN(srcW*2+78, 16) * 2, fail); FF_ALLOC_OR_GOTO(c, c->formatConvBuffer, FFALIGN(srcW*2+78, 16) * 2, fail);
if (HAVE_MMX2 && cpu_flags & AV_CPU_FLAG_MMX2 && if (HAVE_MMX2 && cpu_flags & AV_CPU_FLAG_MMX2 &&
c->srcBpc == 8 && c->dstBpc <= 10) { c->srcBpc == 8 && c->dstBpc <= 14) {
c->canMMX2BeUsed = (dstW >= srcW && (dstW & 31) == 0 && c->canMMX2BeUsed = (dstW >= srcW && (dstW & 31) == 0 &&
(srcW & 15) == 0) ? 1 : 0; (srcW & 15) == 0) ? 1 : 0;
if (!c->canMMX2BeUsed && dstW >= srcW && (srcW & 15) == 0 if (!c->canMMX2BeUsed && dstW >= srcW && (srcW & 15) == 0
@ -1036,7 +1052,7 @@ int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter)
c->chrXInc += 20; c->chrXInc += 20;
} }
// we don't use the x86 asm scaler if MMX is available // we don't use the x86 asm scaler if MMX is available
else if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX && c->dstBpc <= 10) { else if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_MMX && c->dstBpc <= 14) {
c->lumXInc = ((int64_t)(srcW - 2) << 16) / (dstW - 2) - 20; c->lumXInc = ((int64_t)(srcW - 2) << 16) / (dstW - 2) - 20;
c->chrXInc = ((int64_t)(c->chrSrcW - 2) << 16) / (c->chrDstW - 2) - 20; c->chrXInc = ((int64_t)(c->chrSrcW - 2) << 16) / (c->chrDstW - 2) - 20;
} }
@ -1207,7 +1223,7 @@ int sws_init_context(SwsContext *c, SwsFilter *srcFilter, SwsFilter *dstFilter)
// try to avoid drawing green stuff between the right end and the stride end // try to avoid drawing green stuff between the right end and the stride end
for (i = 0; i < c->vChrBufSize; i++) for (i = 0; i < c->vChrBufSize; i++)
if(av_pix_fmt_descriptors[c->dstFormat].comp[0].depth_minus1 == 15){ if(av_pix_fmt_descriptors[c->dstFormat].comp[0].depth_minus1 == 15){
av_assert0(c->dstBpc > 10); av_assert0(c->dstBpc > 14);
for(j=0; j<dst_stride/2+1; j++) for(j=0; j<dst_stride/2+1; j++)
((int32_t*)(c->chrUPixBuf[i]))[j] = 1<<18; ((int32_t*)(c->chrUPixBuf[i]))[j] = 1<<18;
} else } else

@ -22,6 +22,7 @@
#include "config.h" #include "config.h"
#include "libswscale/swscale.h" #include "libswscale/swscale.h"
#include "libswscale/swscale_internal.h" #include "libswscale/swscale_internal.h"
#include "libavutil/avassert.h"
#include "libavutil/intreadwrite.h" #include "libavutil/intreadwrite.h"
#include "libavutil/x86_cpu.h" #include "libavutil/x86_cpu.h"
#include "libavutil/cpu.h" #include "libavutil/cpu.h"
@ -378,19 +379,19 @@ void ff_sws_init_swScale_mmx(SwsContext *c)
#if HAVE_YASM #if HAVE_YASM
#define ASSIGN_SCALE_FUNC2(hscalefn, filtersize, opt1, opt2) do { \ #define ASSIGN_SCALE_FUNC2(hscalefn, filtersize, opt1, opt2) do { \
if (c->srcBpc == 8) { \ if (c->srcBpc == 8) { \
hscalefn = c->dstBpc <= 10 ? ff_hscale8to15_ ## filtersize ## _ ## opt2 : \ hscalefn = c->dstBpc <= 14 ? ff_hscale8to15_ ## filtersize ## _ ## opt2 : \
ff_hscale8to19_ ## filtersize ## _ ## opt1; \ ff_hscale8to19_ ## filtersize ## _ ## opt1; \
} else if (c->srcBpc == 9) { \ } else if (c->srcBpc == 9) { \
hscalefn = c->dstBpc <= 10 ? ff_hscale9to15_ ## filtersize ## _ ## opt2 : \ hscalefn = c->dstBpc <= 14 ? ff_hscale9to15_ ## filtersize ## _ ## opt2 : \
ff_hscale9to19_ ## filtersize ## _ ## opt1; \ ff_hscale9to19_ ## filtersize ## _ ## opt1; \
} else if (c->srcBpc == 10) { \ } else if (c->srcBpc == 10) { \
hscalefn = c->dstBpc <= 10 ? ff_hscale10to15_ ## filtersize ## _ ## opt2 : \ hscalefn = c->dstBpc <= 14 ? ff_hscale10to15_ ## filtersize ## _ ## opt2 : \
ff_hscale10to19_ ## filtersize ## _ ## opt1; \ ff_hscale10to19_ ## filtersize ## _ ## opt1; \
} else if (c->srcBpc == 14 || ((c->srcFormat==PIX_FMT_PAL8||isAnyRGB(c->srcFormat)) && av_pix_fmt_descriptors[c->srcFormat].comp[0].depth_minus1<15)) { \ } else if (c->srcBpc == 14 || ((c->srcFormat==PIX_FMT_PAL8||isAnyRGB(c->srcFormat)) && av_pix_fmt_descriptors[c->srcFormat].comp[0].depth_minus1<15)) { \
hscalefn = c->dstBpc <= 10 ? ff_hscale14to15_ ## filtersize ## _ ## opt2 : \ hscalefn = c->dstBpc <= 14 ? ff_hscale14to15_ ## filtersize ## _ ## opt2 : \
ff_hscale14to19_ ## filtersize ## _ ## opt1; \ ff_hscale14to19_ ## filtersize ## _ ## opt1; \
} else { /* c->srcBpc == 16 */ \ } else { /* c->srcBpc == 16 */ \
hscalefn = c->dstBpc <= 10 ? ff_hscale16to15_ ## filtersize ## _ ## opt2 : \ hscalefn = c->dstBpc <= 14 ? ff_hscale16to15_ ## filtersize ## _ ## opt2 : \
ff_hscale16to19_ ## filtersize ## _ ## opt1; \ ff_hscale16to19_ ## filtersize ## _ ## opt1; \
} \ } \
} while (0) } while (0)
@ -412,7 +413,8 @@ switch(c->dstBpc){ \
case 16: if (!isBE(c->dstFormat)) vscalefn = ff_yuv2plane1_16_ ## opt1; break; \ case 16: if (!isBE(c->dstFormat)) vscalefn = ff_yuv2plane1_16_ ## opt1; break; \
case 10: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2plane1_10_ ## opt2; break; \ case 10: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2plane1_10_ ## opt2; break; \
case 9: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2plane1_9_ ## opt2; break; \ case 9: if (!isBE(c->dstFormat) && opt2chk) vscalefn = ff_yuv2plane1_9_ ## opt2; break; \
default: vscalefn = ff_yuv2plane1_8_ ## opt1; break; \ case 8: vscalefn = ff_yuv2plane1_8_ ## opt1; break; \
default: av_assert0(c->dstBpc>8); \
} }
#define case_rgb(x, X, opt) \ #define case_rgb(x, X, opt) \
case PIX_FMT_ ## X: \ case PIX_FMT_ ## X: \

@ -1689,7 +1689,7 @@ static av_cold void RENAME(sws_init_swScale)(SwsContext *c)
} }
} }
if (c->srcBpc == 8 && c->dstBpc <= 10) { if (c->srcBpc == 8 && c->dstBpc <= 14) {
// Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one). // Use the new MMX scaler if the MMX2 one can't be used (it is faster than the x86 ASM one).
#if COMPILE_TEMPLATE_MMX2 #if COMPILE_TEMPLATE_MMX2
if (c->flags & SWS_FAST_BILINEAR && c->canMMX2BeUsed) if (c->flags & SWS_FAST_BILINEAR && c->canMMX2BeUsed)

@ -42,6 +42,10 @@ yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9 yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
yuv420p10le 93f175084af4e78f97c7710e505f3057 yuv420p10le 93f175084af4e78f97c7710e505f3057
yuv420p12be 4a5001c006b8ee177d10fe9fdb59b98a
yuv420p12le d8aa40e7907413d396f9b4ce55ae3a84
yuv420p14be cb3f0486a1eaa92bd2bf69c43eabf0b3
yuv420p14le f15e2673af0eb0d896caf9448b4422c4
yuv420p16be ba858ff4246368c28f03152487f57ef3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le de239729a4fe1d4cfa3743e006654e78 yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be 64e36fd90573f67ac2006d103972a79b yuv420p9be 64e36fd90573f67ac2006d103972a79b
@ -49,6 +53,10 @@ yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
yuv422p10le ec04efb76efa79bf0d02b21572371a56 yuv422p10le ec04efb76efa79bf0d02b21572371a56
yuv422p12be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p12le d0607c260a45c973e6639f4e449730ad
yuv422p14be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p14le d0607c260a45c973e6639f4e449730ad
yuv422p16be 5499502e1c29534a158a1fe60e889f60 yuv422p16be 5499502e1c29534a158a1fe60e889f60
yuv422p16le e3d61fde6978591596bc36b914386623 yuv422p16le e3d61fde6978591596bc36b914386623
yuv422p9be 29b71579946940a8c00fa844c9dff507 yuv422p9be 29b71579946940a8c00fa844c9dff507
@ -57,6 +65,10 @@ yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
yuv444p 0a98447b78fd476aa39686da6a74fa2e yuv444p 0a98447b78fd476aa39686da6a74fa2e
yuv444p10be 71be185a2fb7a353eb024df9bc63212d yuv444p10be 71be185a2fb7a353eb024df9bc63212d
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
yuv444p12be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p12le 767179dd82846cf00ee4c340c9c1ab74
yuv444p14be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p14le 767179dd82846cf00ee4c340c9c1ab74
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90 yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4 yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054 yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054

@ -42,6 +42,10 @@ yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9 yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
yuv420p10le 93f175084af4e78f97c7710e505f3057 yuv420p10le 93f175084af4e78f97c7710e505f3057
yuv420p12be 4a5001c006b8ee177d10fe9fdb59b98a
yuv420p12le d8aa40e7907413d396f9b4ce55ae3a84
yuv420p14be cb3f0486a1eaa92bd2bf69c43eabf0b3
yuv420p14le f15e2673af0eb0d896caf9448b4422c4
yuv420p16be ba858ff4246368c28f03152487f57ef3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le de239729a4fe1d4cfa3743e006654e78 yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be 64e36fd90573f67ac2006d103972a79b yuv420p9be 64e36fd90573f67ac2006d103972a79b
@ -49,6 +53,10 @@ yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
yuv422p10le ec04efb76efa79bf0d02b21572371a56 yuv422p10le ec04efb76efa79bf0d02b21572371a56
yuv422p12be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p12le d0607c260a45c973e6639f4e449730ad
yuv422p14be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p14le d0607c260a45c973e6639f4e449730ad
yuv422p16be 5499502e1c29534a158a1fe60e889f60 yuv422p16be 5499502e1c29534a158a1fe60e889f60
yuv422p16le e3d61fde6978591596bc36b914386623 yuv422p16le e3d61fde6978591596bc36b914386623
yuv422p9be 29b71579946940a8c00fa844c9dff507 yuv422p9be 29b71579946940a8c00fa844c9dff507
@ -57,6 +65,10 @@ yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
yuv444p 0a98447b78fd476aa39686da6a74fa2e yuv444p 0a98447b78fd476aa39686da6a74fa2e
yuv444p10be 71be185a2fb7a353eb024df9bc63212d yuv444p10be 71be185a2fb7a353eb024df9bc63212d
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
yuv444p12be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p12le 767179dd82846cf00ee4c340c9c1ab74
yuv444p14be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p14le 767179dd82846cf00ee4c340c9c1ab74
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90 yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4 yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054 yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054

@ -42,6 +42,10 @@ yuv411p 8b298af3e43348ca1b11eb8a3252ac6c
yuv420p eba2f135a08829387e2f698ff72a2939 yuv420p eba2f135a08829387e2f698ff72a2939
yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9 yuv420p10be 2f88c301feeaccd2a5fb55f54fc30be9
yuv420p10le 93f175084af4e78f97c7710e505f3057 yuv420p10le 93f175084af4e78f97c7710e505f3057
yuv420p12be 4a5001c006b8ee177d10fe9fdb59b98a
yuv420p12le d8aa40e7907413d396f9b4ce55ae3a84
yuv420p14be cb3f0486a1eaa92bd2bf69c43eabf0b3
yuv420p14le f15e2673af0eb0d896caf9448b4422c4
yuv420p16be ba858ff4246368c28f03152487f57ef3 yuv420p16be ba858ff4246368c28f03152487f57ef3
yuv420p16le de239729a4fe1d4cfa3743e006654e78 yuv420p16le de239729a4fe1d4cfa3743e006654e78
yuv420p9be 64e36fd90573f67ac2006d103972a79b yuv420p9be 64e36fd90573f67ac2006d103972a79b
@ -49,6 +53,10 @@ yuv420p9le 9ed4b1dfabc53fd9e586ff6c4c43af80
yuv422p c9bba4529821d796a6ab09f6a5fd355a yuv422p c9bba4529821d796a6ab09f6a5fd355a
yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a yuv422p10be 11af7dfafe8bc025c7e3bd82b830fe8a
yuv422p10le ec04efb76efa79bf0d02b21572371a56 yuv422p10le ec04efb76efa79bf0d02b21572371a56
yuv422p12be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p12le d0607c260a45c973e6639f4e449730ad
yuv422p14be bdc13b630fd668b34c6fe1aae28dfc71
yuv422p14le d0607c260a45c973e6639f4e449730ad
yuv422p16be 5499502e1c29534a158a1fe60e889f60 yuv422p16be 5499502e1c29534a158a1fe60e889f60
yuv422p16le e3d61fde6978591596bc36b914386623 yuv422p16le e3d61fde6978591596bc36b914386623
yuv422p9be 29b71579946940a8c00fa844c9dff507 yuv422p9be 29b71579946940a8c00fa844c9dff507
@ -57,6 +65,10 @@ yuv440p 5a064afe2b453bb52cdb3f176b1aa1cf
yuv444p 0a98447b78fd476aa39686da6a74fa2e yuv444p 0a98447b78fd476aa39686da6a74fa2e
yuv444p10be 71be185a2fb7a353eb024df9bc63212d yuv444p10be 71be185a2fb7a353eb024df9bc63212d
yuv444p10le c1c6b30a12065c7901c0a267e4861a0f yuv444p10le c1c6b30a12065c7901c0a267e4861a0f
yuv444p12be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p12le 767179dd82846cf00ee4c340c9c1ab74
yuv444p14be e65cbae7e4f1892c23defbc8e8052cf6
yuv444p14le 767179dd82846cf00ee4c340c9c1ab74
yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90 yuv444p16be 1c6ea2c2f5e539006112ceec3d4e7d90
yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4 yuv444p16le 20f86bc2f68d2b3f1f2b48b97b2189f4
yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054 yuv444p9be 6ab31f4c12b533ce318ecdff83cdd054

@ -42,6 +42,10 @@ yuv411p 1143e7c5cc28fe0922b051b17733bc4c
yuv420p fdad2d8df8985e3d17e73c71f713cb14 yuv420p fdad2d8df8985e3d17e73c71f713cb14
yuv420p10be 418039dbd82cf612db88417276aa0d1a yuv420p10be 418039dbd82cf612db88417276aa0d1a
yuv420p10le ff7e5321208ab995b4f95634ebdf192b yuv420p10le ff7e5321208ab995b4f95634ebdf192b
yuv420p12be e50f22a1af717c8e986b760e082f67b9
yuv420p12le b94dae7fcf3f97cb591d727564168602
yuv420p14be 6d335e75b553da590135cf8bb999610c
yuv420p14le d510ddbabefd03ef39ec943fcb51b709
yuv420p16be 31988e9a5d6acacaa710f67bc1172f3a yuv420p16be 31988e9a5d6acacaa710f67bc1172f3a
yuv420p16le f5390ce399f88e0e4e2621ed7833b250 yuv420p16le f5390ce399f88e0e4e2621ed7833b250
yuv420p9be ec4983b7a949c0472110a7a2c58e278a yuv420p9be ec4983b7a949c0472110a7a2c58e278a
@ -49,6 +53,10 @@ yuv420p9le c136dce5913a722eee44ab72cff664b2
yuv422p 918e37701ee7377d16a8a6c119c56a40 yuv422p 918e37701ee7377d16a8a6c119c56a40
yuv422p10be 315654908d50718e175aae018c484732 yuv422p10be 315654908d50718e175aae018c484732
yuv422p10le 91bbc78a9a56f659b55abc17722dcc09 yuv422p10le 91bbc78a9a56f659b55abc17722dcc09
yuv422p12be 0e15336f06c20eb0224dbbb3c45e579e
yuv422p12le 223b9235c541365d994160e7ff5bedf7
yuv422p14be 091c5e50b7aff789f8f49d02aeb98cdb
yuv422p14le a42363449e2acbe784a57f15b389ded8
yuv422p16be e7e34fe9264784763ab6cb406524c0f3 yuv422p16be e7e34fe9264784763ab6cb406524c0f3
yuv422p16le c435b76b08204dda6908640fb5fd4621 yuv422p16le c435b76b08204dda6908640fb5fd4621
yuv422p9be 82494823944912f73cebc58ad2979bbd yuv422p9be 82494823944912f73cebc58ad2979bbd
@ -57,6 +65,10 @@ yuv440p 461503fdb9b90451020aa3b25ddf041c
yuv444p 81b2eba962d12e8d64f003ac56f6faf2 yuv444p 81b2eba962d12e8d64f003ac56f6faf2
yuv444p10be fb304d77c6d2e18df5938662a22176f0 yuv444p10be fb304d77c6d2e18df5938662a22176f0
yuv444p10le b17136913eb066dca6be6af645b9f7e8 yuv444p10le b17136913eb066dca6be6af645b9f7e8
yuv444p12be eb0102b8ccbf3c0f1e493ebe8990345f
yuv444p12le 059ee3758b0f184decc84ee16a574d1a
yuv444p14be 00656b655ebc6d7d8787c966365d75c2
yuv444p14le 3d7d0b41989fb416cb200533bad9435d
yuv444p16be 0da9bed80f5542682ab286f3261cf24c yuv444p16be 0da9bed80f5542682ab286f3261cf24c
yuv444p16le a0c5d3c7bf3f181db503cf8e450d1335 yuv444p16le a0c5d3c7bf3f181db503cf8e450d1335
yuv444p9be 9ac2643ce7f7e5c4e17c8c9fd8494d4a yuv444p9be 9ac2643ce7f7e5c4e17c8c9fd8494d4a

@ -42,6 +42,10 @@ yuv411p 4a90048cc3a65fac150e53289700efe1
yuv420p 2e6d6062e8cad37fb3ab2c433b55f382 yuv420p 2e6d6062e8cad37fb3ab2c433b55f382
yuv420p10be 7ce787a888381dd46b0212c099ecaad9 yuv420p10be 7ce787a888381dd46b0212c099ecaad9
yuv420p10le bf22a1c543a7b3dbc556a0eb9592e179 yuv420p10le bf22a1c543a7b3dbc556a0eb9592e179
yuv420p12be dca4f9402d34c83a524ab319126e9948
yuv420p12le 1800b5a8edc5997b79c12a645058da87
yuv420p14be 0199fb46ed3e20d09aa226d444b875f9
yuv420p14le 1f9a0543e0c1efa5e42ccb9f21a96f9e
yuv420p16be b6d25ba55bc1831d352f379311b42b6d yuv420p16be b6d25ba55bc1831d352f379311b42b6d
yuv420p16le 1d7ef427b6f79a02b93948738dab5442 yuv420p16le 1d7ef427b6f79a02b93948738dab5442
yuv420p9be 9865bf5c4392b56b1c4eb4f5a3fd32f9 yuv420p9be 9865bf5c4392b56b1c4eb4f5a3fd32f9
@ -49,6 +53,10 @@ yuv420p9le 0f1e371a1374d3cba2205b70cc7cac90
yuv422p d7f5cb44d9b0210d66d6a8762640ab34 yuv422p d7f5cb44d9b0210d66d6a8762640ab34
yuv422p10be 0be8378c3773e1c0b394315ef4994351 yuv422p10be 0be8378c3773e1c0b394315ef4994351
yuv422p10le 6518094fe8de6bee95af21af1e5dc1e1 yuv422p10le 6518094fe8de6bee95af21af1e5dc1e1
yuv422p12be 588fe319b96513c32e21d3e32b45447f
yuv422p12le 11b57f2bd9661024153f3973b9090cdb
yuv422p14be 588fe319b96513c32e21d3e32b45447f
yuv422p14le 11b57f2bd9661024153f3973b9090cdb
yuv422p16be 9bd8f8c961822b586fa4cf992be54acc yuv422p16be 9bd8f8c961822b586fa4cf992be54acc
yuv422p16le 9c4a1239605c7952b736ac3130163f14 yuv422p16le 9c4a1239605c7952b736ac3130163f14
yuv422p9be 7c6f1e140b3999ee7d923854e507752a yuv422p9be 7c6f1e140b3999ee7d923854e507752a
@ -57,6 +65,10 @@ yuv440p 876385e96165acf51271b20e5d85a416
yuv444p 9c3c667d1613b72d15bc6d851c5eb8f7 yuv444p 9c3c667d1613b72d15bc6d851c5eb8f7
yuv444p10be ee069cc6db48975eb029d72f889a7fe6 yuv444p10be ee069cc6db48975eb029d72f889a7fe6
yuv444p10le 645b3335248113cafe3c29edb1d7f3be yuv444p10le 645b3335248113cafe3c29edb1d7f3be
yuv444p12be 944a4997c4edb3a8dd0f0493cfd5a1fd
yuv444p12le 2d0947ae89ecc6a501eee6832cb27e06
yuv444p14be 944a4997c4edb3a8dd0f0493cfd5a1fd
yuv444p14le 2d0947ae89ecc6a501eee6832cb27e06
yuv444p16be de2dedfc6f12073ffead113f86e07ecf yuv444p16be de2dedfc6f12073ffead113f86e07ecf
yuv444p16le 8e83323cf102d6c823a03ae8a7b7e033 yuv444p16le 8e83323cf102d6c823a03ae8a7b7e033
yuv444p9be 6ac92b7dc9ab2fc59bee99204886899a yuv444p9be 6ac92b7dc9ab2fc59bee99204886899a

Loading…
Cancel
Save