Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.0
@@ -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 == 9) | |||||
(av_pix_fmt_descriptors[x].comp[0].depth_minus1 >= 8 && \ | |||||
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 | ||||