1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00

swscale/input: parametrize ff_sws_init_input_funcs() pointers

Following the precedent set by ff_sws_init_output_funcs().

Sponsored-by: Sovereign Tech Fund
Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas 2024-10-01 12:32:29 +02:00
parent 20b350b284
commit 73b3344edd
3 changed files with 206 additions and 193 deletions

View File

@ -1285,86 +1285,92 @@ static void rgbaf16##endian_name##ToA_c(uint8_t *_dst, const uint8_t *_src, cons
rgbaf16_funcs_endian(le, 0)
rgbaf16_funcs_endian(be, 1)
av_cold void ff_sws_init_input_funcs(SwsContext *c)
av_cold void ff_sws_init_input_funcs(SwsContext *c,
planar1_YV12_fn *lumToYV12,
planar1_YV12_fn *alpToYV12,
planar2_YV12_fn *chrToYV12,
planarX_YV12_fn *readLumPlanar,
planarX_YV12_fn *readAlpPlanar,
planarX2_YV12_fn *readChrPlanar)
{
enum AVPixelFormat srcFormat = c->srcFormat;
c->chrToYV12 = NULL;
*chrToYV12 = NULL;
switch (srcFormat) {
case AV_PIX_FMT_YUYV422:
c->chrToYV12 = yuy2ToUV_c;
*chrToYV12 = yuy2ToUV_c;
break;
case AV_PIX_FMT_YVYU422:
c->chrToYV12 = yvy2ToUV_c;
*chrToYV12 = yvy2ToUV_c;
break;
case AV_PIX_FMT_UYVY422:
c->chrToYV12 = uyvyToUV_c;
*chrToYV12 = uyvyToUV_c;
break;
case AV_PIX_FMT_NV12:
case AV_PIX_FMT_NV16:
case AV_PIX_FMT_NV24:
c->chrToYV12 = nv12ToUV_c;
*chrToYV12 = nv12ToUV_c;
break;
case AV_PIX_FMT_NV21:
case AV_PIX_FMT_NV42:
c->chrToYV12 = nv21ToUV_c;
*chrToYV12 = nv21ToUV_c;
break;
case AV_PIX_FMT_RGB8:
case AV_PIX_FMT_BGR8:
case AV_PIX_FMT_PAL8:
case AV_PIX_FMT_BGR4_BYTE:
case AV_PIX_FMT_RGB4_BYTE:
c->chrToYV12 = palToUV_c;
*chrToYV12 = palToUV_c;
break;
case AV_PIX_FMT_GBRP9LE:
c->readChrPlanar = planar_rgb9le_to_uv;
*readChrPlanar = planar_rgb9le_to_uv;
break;
case AV_PIX_FMT_GBRAP10LE:
case AV_PIX_FMT_GBRP10LE:
c->readChrPlanar = planar_rgb10le_to_uv;
*readChrPlanar = planar_rgb10le_to_uv;
break;
case AV_PIX_FMT_GBRAP12LE:
case AV_PIX_FMT_GBRP12LE:
c->readChrPlanar = planar_rgb12le_to_uv;
*readChrPlanar = planar_rgb12le_to_uv;
break;
case AV_PIX_FMT_GBRAP14LE:
case AV_PIX_FMT_GBRP14LE:
c->readChrPlanar = planar_rgb14le_to_uv;
*readChrPlanar = planar_rgb14le_to_uv;
break;
case AV_PIX_FMT_GBRAP16LE:
case AV_PIX_FMT_GBRP16LE:
c->readChrPlanar = planar_rgb16le_to_uv;
*readChrPlanar = planar_rgb16le_to_uv;
break;
case AV_PIX_FMT_GBRAPF32LE:
case AV_PIX_FMT_GBRPF32LE:
c->readChrPlanar = planar_rgbf32le_to_uv;
*readChrPlanar = planar_rgbf32le_to_uv;
break;
case AV_PIX_FMT_GBRP9BE:
c->readChrPlanar = planar_rgb9be_to_uv;
*readChrPlanar = planar_rgb9be_to_uv;
break;
case AV_PIX_FMT_GBRAP10BE:
case AV_PIX_FMT_GBRP10BE:
c->readChrPlanar = planar_rgb10be_to_uv;
*readChrPlanar = planar_rgb10be_to_uv;
break;
case AV_PIX_FMT_GBRAP12BE:
case AV_PIX_FMT_GBRP12BE:
c->readChrPlanar = planar_rgb12be_to_uv;
*readChrPlanar = planar_rgb12be_to_uv;
break;
case AV_PIX_FMT_GBRAP14BE:
case AV_PIX_FMT_GBRP14BE:
c->readChrPlanar = planar_rgb14be_to_uv;
*readChrPlanar = planar_rgb14be_to_uv;
break;
case AV_PIX_FMT_GBRAP16BE:
case AV_PIX_FMT_GBRP16BE:
c->readChrPlanar = planar_rgb16be_to_uv;
*readChrPlanar = planar_rgb16be_to_uv;
break;
case AV_PIX_FMT_GBRAPF32BE:
case AV_PIX_FMT_GBRPF32BE:
c->readChrPlanar = planar_rgbf32be_to_uv;
*readChrPlanar = planar_rgbf32be_to_uv;
break;
case AV_PIX_FMT_GBRAP:
case AV_PIX_FMT_GBRP:
c->readChrPlanar = planar_rgb_to_uv;
*readChrPlanar = planar_rgb_to_uv;
break;
#if HAVE_BIGENDIAN
case AV_PIX_FMT_YUV420P9LE:
@ -1396,7 +1402,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_YUVA420P16LE:
case AV_PIX_FMT_YUVA422P16LE:
case AV_PIX_FMT_YUVA444P16LE:
c->chrToYV12 = bswap16UV_c;
*chrToYV12 = bswap16UV_c;
break;
#else
case AV_PIX_FMT_YUV420P9BE:
@ -1428,314 +1434,314 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_YUVA420P16BE:
case AV_PIX_FMT_YUVA422P16BE:
case AV_PIX_FMT_YUVA444P16BE:
c->chrToYV12 = bswap16UV_c;
*chrToYV12 = bswap16UV_c;
break;
#endif
case AV_PIX_FMT_VUYA:
case AV_PIX_FMT_VUYX:
c->chrToYV12 = read_vuyx_UV_c;
*chrToYV12 = read_vuyx_UV_c;
break;
case AV_PIX_FMT_XV30LE:
c->chrToYV12 = read_xv30le_UV_c;
*chrToYV12 = read_xv30le_UV_c;
break;
case AV_PIX_FMT_AYUV64LE:
c->chrToYV12 = read_ayuv64le_UV_c;
*chrToYV12 = read_ayuv64le_UV_c;
break;
case AV_PIX_FMT_XV36LE:
c->chrToYV12 = read_xv36le_UV_c;
*chrToYV12 = read_xv36le_UV_c;
break;
case AV_PIX_FMT_P010LE:
case AV_PIX_FMT_P210LE:
case AV_PIX_FMT_P410LE:
c->chrToYV12 = p010LEToUV_c;
*chrToYV12 = p010LEToUV_c;
break;
case AV_PIX_FMT_P010BE:
case AV_PIX_FMT_P210BE:
case AV_PIX_FMT_P410BE:
c->chrToYV12 = p010BEToUV_c;
*chrToYV12 = p010BEToUV_c;
break;
case AV_PIX_FMT_P012LE:
case AV_PIX_FMT_P212LE:
case AV_PIX_FMT_P412LE:
c->chrToYV12 = p012LEToUV_c;
*chrToYV12 = p012LEToUV_c;
break;
case AV_PIX_FMT_P012BE:
case AV_PIX_FMT_P212BE:
case AV_PIX_FMT_P412BE:
c->chrToYV12 = p012BEToUV_c;
*chrToYV12 = p012BEToUV_c;
break;
case AV_PIX_FMT_P016LE:
case AV_PIX_FMT_P216LE:
case AV_PIX_FMT_P416LE:
c->chrToYV12 = p016LEToUV_c;
*chrToYV12 = p016LEToUV_c;
break;
case AV_PIX_FMT_P016BE:
case AV_PIX_FMT_P216BE:
case AV_PIX_FMT_P416BE:
c->chrToYV12 = p016BEToUV_c;
*chrToYV12 = p016BEToUV_c;
break;
case AV_PIX_FMT_Y210LE:
c->chrToYV12 = y210le_UV_c;
*chrToYV12 = y210le_UV_c;
break;
case AV_PIX_FMT_Y212LE:
c->chrToYV12 = y212le_UV_c;
*chrToYV12 = y212le_UV_c;
break;
}
if (c->chrSrcHSubSample) {
switch (srcFormat) {
case AV_PIX_FMT_RGBA64BE:
c->chrToYV12 = rgb64BEToUV_half_c;
*chrToYV12 = rgb64BEToUV_half_c;
break;
case AV_PIX_FMT_RGBA64LE:
c->chrToYV12 = rgb64LEToUV_half_c;
*chrToYV12 = rgb64LEToUV_half_c;
break;
case AV_PIX_FMT_BGRA64BE:
c->chrToYV12 = bgr64BEToUV_half_c;
*chrToYV12 = bgr64BEToUV_half_c;
break;
case AV_PIX_FMT_BGRA64LE:
c->chrToYV12 = bgr64LEToUV_half_c;
*chrToYV12 = bgr64LEToUV_half_c;
break;
case AV_PIX_FMT_RGB48BE:
c->chrToYV12 = rgb48BEToUV_half_c;
*chrToYV12 = rgb48BEToUV_half_c;
break;
case AV_PIX_FMT_RGB48LE:
c->chrToYV12 = rgb48LEToUV_half_c;
*chrToYV12 = rgb48LEToUV_half_c;
break;
case AV_PIX_FMT_BGR48BE:
c->chrToYV12 = bgr48BEToUV_half_c;
*chrToYV12 = bgr48BEToUV_half_c;
break;
case AV_PIX_FMT_BGR48LE:
c->chrToYV12 = bgr48LEToUV_half_c;
*chrToYV12 = bgr48LEToUV_half_c;
break;
case AV_PIX_FMT_RGB32:
c->chrToYV12 = bgr32ToUV_half_c;
*chrToYV12 = bgr32ToUV_half_c;
break;
case AV_PIX_FMT_RGB32_1:
c->chrToYV12 = bgr321ToUV_half_c;
*chrToYV12 = bgr321ToUV_half_c;
break;
case AV_PIX_FMT_BGR24:
c->chrToYV12 = bgr24ToUV_half_c;
*chrToYV12 = bgr24ToUV_half_c;
break;
case AV_PIX_FMT_BGR565LE:
c->chrToYV12 = bgr16leToUV_half_c;
*chrToYV12 = bgr16leToUV_half_c;
break;
case AV_PIX_FMT_BGR565BE:
c->chrToYV12 = bgr16beToUV_half_c;
*chrToYV12 = bgr16beToUV_half_c;
break;
case AV_PIX_FMT_BGR555LE:
c->chrToYV12 = bgr15leToUV_half_c;
*chrToYV12 = bgr15leToUV_half_c;
break;
case AV_PIX_FMT_BGR555BE:
c->chrToYV12 = bgr15beToUV_half_c;
*chrToYV12 = bgr15beToUV_half_c;
break;
case AV_PIX_FMT_GBRAP:
case AV_PIX_FMT_GBRP:
c->chrToYV12 = gbr24pToUV_half_c;
*chrToYV12 = gbr24pToUV_half_c;
break;
case AV_PIX_FMT_BGR444LE:
c->chrToYV12 = bgr12leToUV_half_c;
*chrToYV12 = bgr12leToUV_half_c;
break;
case AV_PIX_FMT_BGR444BE:
c->chrToYV12 = bgr12beToUV_half_c;
*chrToYV12 = bgr12beToUV_half_c;
break;
case AV_PIX_FMT_BGR32:
c->chrToYV12 = rgb32ToUV_half_c;
*chrToYV12 = rgb32ToUV_half_c;
break;
case AV_PIX_FMT_BGR32_1:
c->chrToYV12 = rgb321ToUV_half_c;
*chrToYV12 = rgb321ToUV_half_c;
break;
case AV_PIX_FMT_RGB24:
c->chrToYV12 = rgb24ToUV_half_c;
*chrToYV12 = rgb24ToUV_half_c;
break;
case AV_PIX_FMT_RGB565LE:
c->chrToYV12 = rgb16leToUV_half_c;
*chrToYV12 = rgb16leToUV_half_c;
break;
case AV_PIX_FMT_RGB565BE:
c->chrToYV12 = rgb16beToUV_half_c;
*chrToYV12 = rgb16beToUV_half_c;
break;
case AV_PIX_FMT_RGB555LE:
c->chrToYV12 = rgb15leToUV_half_c;
*chrToYV12 = rgb15leToUV_half_c;
break;
case AV_PIX_FMT_RGB555BE:
c->chrToYV12 = rgb15beToUV_half_c;
*chrToYV12 = rgb15beToUV_half_c;
break;
case AV_PIX_FMT_RGB444LE:
c->chrToYV12 = rgb12leToUV_half_c;
*chrToYV12 = rgb12leToUV_half_c;
break;
case AV_PIX_FMT_RGB444BE:
c->chrToYV12 = rgb12beToUV_half_c;
*chrToYV12 = rgb12beToUV_half_c;
break;
case AV_PIX_FMT_X2RGB10LE:
c->chrToYV12 = rgb30leToUV_half_c;
*chrToYV12 = rgb30leToUV_half_c;
break;
case AV_PIX_FMT_X2BGR10LE:
c->chrToYV12 = bgr30leToUV_half_c;
*chrToYV12 = bgr30leToUV_half_c;
break;
case AV_PIX_FMT_RGBAF16BE:
c->chrToYV12 = rgbaf16beToUV_half_c;
*chrToYV12 = rgbaf16beToUV_half_c;
break;
case AV_PIX_FMT_RGBAF16LE:
c->chrToYV12 = rgbaf16leToUV_half_c;
*chrToYV12 = rgbaf16leToUV_half_c;
break;
}
} else {
switch (srcFormat) {
case AV_PIX_FMT_RGBA64BE:
c->chrToYV12 = rgb64BEToUV_c;
*chrToYV12 = rgb64BEToUV_c;
break;
case AV_PIX_FMT_RGBA64LE:
c->chrToYV12 = rgb64LEToUV_c;
*chrToYV12 = rgb64LEToUV_c;
break;
case AV_PIX_FMT_BGRA64BE:
c->chrToYV12 = bgr64BEToUV_c;
*chrToYV12 = bgr64BEToUV_c;
break;
case AV_PIX_FMT_BGRA64LE:
c->chrToYV12 = bgr64LEToUV_c;
*chrToYV12 = bgr64LEToUV_c;
break;
case AV_PIX_FMT_RGB48BE:
c->chrToYV12 = rgb48BEToUV_c;
*chrToYV12 = rgb48BEToUV_c;
break;
case AV_PIX_FMT_RGB48LE:
c->chrToYV12 = rgb48LEToUV_c;
*chrToYV12 = rgb48LEToUV_c;
break;
case AV_PIX_FMT_BGR48BE:
c->chrToYV12 = bgr48BEToUV_c;
*chrToYV12 = bgr48BEToUV_c;
break;
case AV_PIX_FMT_BGR48LE:
c->chrToYV12 = bgr48LEToUV_c;
*chrToYV12 = bgr48LEToUV_c;
break;
case AV_PIX_FMT_RGB32:
c->chrToYV12 = bgr32ToUV_c;
*chrToYV12 = bgr32ToUV_c;
break;
case AV_PIX_FMT_RGB32_1:
c->chrToYV12 = bgr321ToUV_c;
*chrToYV12 = bgr321ToUV_c;
break;
case AV_PIX_FMT_BGR24:
c->chrToYV12 = bgr24ToUV_c;
*chrToYV12 = bgr24ToUV_c;
break;
case AV_PIX_FMT_BGR565LE:
c->chrToYV12 = bgr16leToUV_c;
*chrToYV12 = bgr16leToUV_c;
break;
case AV_PIX_FMT_BGR565BE:
c->chrToYV12 = bgr16beToUV_c;
*chrToYV12 = bgr16beToUV_c;
break;
case AV_PIX_FMT_BGR555LE:
c->chrToYV12 = bgr15leToUV_c;
*chrToYV12 = bgr15leToUV_c;
break;
case AV_PIX_FMT_BGR555BE:
c->chrToYV12 = bgr15beToUV_c;
*chrToYV12 = bgr15beToUV_c;
break;
case AV_PIX_FMT_BGR444LE:
c->chrToYV12 = bgr12leToUV_c;
*chrToYV12 = bgr12leToUV_c;
break;
case AV_PIX_FMT_BGR444BE:
c->chrToYV12 = bgr12beToUV_c;
*chrToYV12 = bgr12beToUV_c;
break;
case AV_PIX_FMT_BGR32:
c->chrToYV12 = rgb32ToUV_c;
*chrToYV12 = rgb32ToUV_c;
break;
case AV_PIX_FMT_BGR32_1:
c->chrToYV12 = rgb321ToUV_c;
*chrToYV12 = rgb321ToUV_c;
break;
case AV_PIX_FMT_RGB24:
c->chrToYV12 = rgb24ToUV_c;
*chrToYV12 = rgb24ToUV_c;
break;
case AV_PIX_FMT_RGB565LE:
c->chrToYV12 = rgb16leToUV_c;
*chrToYV12 = rgb16leToUV_c;
break;
case AV_PIX_FMT_RGB565BE:
c->chrToYV12 = rgb16beToUV_c;
*chrToYV12 = rgb16beToUV_c;
break;
case AV_PIX_FMT_RGB555LE:
c->chrToYV12 = rgb15leToUV_c;
*chrToYV12 = rgb15leToUV_c;
break;
case AV_PIX_FMT_RGB555BE:
c->chrToYV12 = rgb15beToUV_c;
*chrToYV12 = rgb15beToUV_c;
break;
case AV_PIX_FMT_RGB444LE:
c->chrToYV12 = rgb12leToUV_c;
*chrToYV12 = rgb12leToUV_c;
break;
case AV_PIX_FMT_RGB444BE:
c->chrToYV12 = rgb12beToUV_c;
*chrToYV12 = rgb12beToUV_c;
break;
case AV_PIX_FMT_X2RGB10LE:
c->chrToYV12 = rgb30leToUV_c;
*chrToYV12 = rgb30leToUV_c;
break;
case AV_PIX_FMT_X2BGR10LE:
c->chrToYV12 = bgr30leToUV_c;
*chrToYV12 = bgr30leToUV_c;
break;
case AV_PIX_FMT_RGBAF16BE:
c->chrToYV12 = rgbaf16beToUV_c;
*chrToYV12 = rgbaf16beToUV_c;
break;
case AV_PIX_FMT_RGBAF16LE:
c->chrToYV12 = rgbaf16leToUV_c;
*chrToYV12 = rgbaf16leToUV_c;
break;
}
}
c->lumToYV12 = NULL;
c->alpToYV12 = NULL;
*lumToYV12 = NULL;
*alpToYV12 = NULL;
switch (srcFormat) {
case AV_PIX_FMT_GBRP9LE:
c->readLumPlanar = planar_rgb9le_to_y;
*readLumPlanar = planar_rgb9le_to_y;
break;
case AV_PIX_FMT_GBRAP10LE:
c->readAlpPlanar = planar_rgb10le_to_a;
*readAlpPlanar = planar_rgb10le_to_a;
case AV_PIX_FMT_GBRP10LE:
c->readLumPlanar = planar_rgb10le_to_y;
*readLumPlanar = planar_rgb10le_to_y;
break;
case AV_PIX_FMT_GBRAP12LE:
c->readAlpPlanar = planar_rgb12le_to_a;
*readAlpPlanar = planar_rgb12le_to_a;
case AV_PIX_FMT_GBRP12LE:
c->readLumPlanar = planar_rgb12le_to_y;
*readLumPlanar = planar_rgb12le_to_y;
break;
case AV_PIX_FMT_GBRAP14LE:
c->readAlpPlanar = planar_rgb14le_to_a;
*readAlpPlanar = planar_rgb14le_to_a;
case AV_PIX_FMT_GBRP14LE:
c->readLumPlanar = planar_rgb14le_to_y;
*readLumPlanar = planar_rgb14le_to_y;
break;
case AV_PIX_FMT_GBRAP16LE:
c->readAlpPlanar = planar_rgb16le_to_a;
*readAlpPlanar = planar_rgb16le_to_a;
case AV_PIX_FMT_GBRP16LE:
c->readLumPlanar = planar_rgb16le_to_y;
*readLumPlanar = planar_rgb16le_to_y;
break;
case AV_PIX_FMT_GBRAPF32LE:
c->readAlpPlanar = planar_rgbf32le_to_a;
*readAlpPlanar = planar_rgbf32le_to_a;
case AV_PIX_FMT_GBRPF32LE:
c->readLumPlanar = planar_rgbf32le_to_y;
*readLumPlanar = planar_rgbf32le_to_y;
break;
case AV_PIX_FMT_GBRP9BE:
c->readLumPlanar = planar_rgb9be_to_y;
*readLumPlanar = planar_rgb9be_to_y;
break;
case AV_PIX_FMT_GBRAP10BE:
c->readAlpPlanar = planar_rgb10be_to_a;
*readAlpPlanar = planar_rgb10be_to_a;
case AV_PIX_FMT_GBRP10BE:
c->readLumPlanar = planar_rgb10be_to_y;
*readLumPlanar = planar_rgb10be_to_y;
break;
case AV_PIX_FMT_GBRAP12BE:
c->readAlpPlanar = planar_rgb12be_to_a;
*readAlpPlanar = planar_rgb12be_to_a;
case AV_PIX_FMT_GBRP12BE:
c->readLumPlanar = planar_rgb12be_to_y;
*readLumPlanar = planar_rgb12be_to_y;
break;
case AV_PIX_FMT_GBRAP14BE:
c->readAlpPlanar = planar_rgb14be_to_a;
*readAlpPlanar = planar_rgb14be_to_a;
case AV_PIX_FMT_GBRP14BE:
c->readLumPlanar = planar_rgb14be_to_y;
*readLumPlanar = planar_rgb14be_to_y;
break;
case AV_PIX_FMT_GBRAP16BE:
c->readAlpPlanar = planar_rgb16be_to_a;
*readAlpPlanar = planar_rgb16be_to_a;
case AV_PIX_FMT_GBRP16BE:
c->readLumPlanar = planar_rgb16be_to_y;
*readLumPlanar = planar_rgb16be_to_y;
break;
case AV_PIX_FMT_GBRAPF32BE:
c->readAlpPlanar = planar_rgbf32be_to_a;
*readAlpPlanar = planar_rgbf32be_to_a;
case AV_PIX_FMT_GBRPF32BE:
c->readLumPlanar = planar_rgbf32be_to_y;
*readLumPlanar = planar_rgbf32be_to_y;
break;
case AV_PIX_FMT_GBRAP:
c->readAlpPlanar = planar_rgb_to_a;
*readAlpPlanar = planar_rgb_to_a;
case AV_PIX_FMT_GBRP:
c->readLumPlanar = planar_rgb_to_y;
*readLumPlanar = planar_rgb_to_y;
break;
#if HAVE_BIGENDIAN
case AV_PIX_FMT_YUV420P9LE:
@ -1765,7 +1771,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_P016LE:
case AV_PIX_FMT_P216LE:
case AV_PIX_FMT_P416LE:
c->lumToYV12 = bswap16Y_c;
*lumToYV12 = bswap16Y_c;
break;
case AV_PIX_FMT_YUVA420P9LE:
case AV_PIX_FMT_YUVA422P9LE:
@ -1778,8 +1784,8 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_YUVA420P16LE:
case AV_PIX_FMT_YUVA422P16LE:
case AV_PIX_FMT_YUVA444P16LE:
c->lumToYV12 = bswap16Y_c;
c->alpToYV12 = bswap16Y_c;
*lumToYV12 = bswap16Y_c;
*alpToYV12 = bswap16Y_c;
break;
#else
case AV_PIX_FMT_YUV420P9BE:
@ -1809,7 +1815,7 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_P016BE:
case AV_PIX_FMT_P216BE:
case AV_PIX_FMT_P416BE:
c->lumToYV12 = bswap16Y_c;
*lumToYV12 = bswap16Y_c;
break;
case AV_PIX_FMT_YUVA420P9BE:
case AV_PIX_FMT_YUVA422P9BE:
@ -1822,214 +1828,214 @@ av_cold void ff_sws_init_input_funcs(SwsContext *c)
case AV_PIX_FMT_YUVA420P16BE:
case AV_PIX_FMT_YUVA422P16BE:
case AV_PIX_FMT_YUVA444P16BE:
c->lumToYV12 = bswap16Y_c;
c->alpToYV12 = bswap16Y_c;
*lumToYV12 = bswap16Y_c;
*alpToYV12 = bswap16Y_c;
break;
#endif
case AV_PIX_FMT_YA16LE:
c->lumToYV12 = read_ya16le_gray_c;
*lumToYV12 = read_ya16le_gray_c;
break;
case AV_PIX_FMT_YA16BE:
c->lumToYV12 = read_ya16be_gray_c;
*lumToYV12 = read_ya16be_gray_c;
break;
case AV_PIX_FMT_VUYA:
case AV_PIX_FMT_VUYX:
c->lumToYV12 = read_vuyx_Y_c;
*lumToYV12 = read_vuyx_Y_c;
break;
case AV_PIX_FMT_XV30LE:
c->lumToYV12 = read_xv30le_Y_c;
*lumToYV12 = read_xv30le_Y_c;
break;
case AV_PIX_FMT_AYUV64LE:
c->lumToYV12 = read_ayuv64le_Y_c;
*lumToYV12 = read_ayuv64le_Y_c;
break;
case AV_PIX_FMT_XV36LE:
c->lumToYV12 = read_xv36le_Y_c;
*lumToYV12 = read_xv36le_Y_c;
break;
case AV_PIX_FMT_YUYV422:
case AV_PIX_FMT_YVYU422:
case AV_PIX_FMT_YA8:
c->lumToYV12 = yuy2ToY_c;
*lumToYV12 = yuy2ToY_c;
break;
case AV_PIX_FMT_UYVY422:
c->lumToYV12 = uyvyToY_c;
*lumToYV12 = uyvyToY_c;
break;
case AV_PIX_FMT_BGR24:
c->lumToYV12 = bgr24ToY_c;
*lumToYV12 = bgr24ToY_c;
break;
case AV_PIX_FMT_BGR565LE:
c->lumToYV12 = bgr16leToY_c;
*lumToYV12 = bgr16leToY_c;
break;
case AV_PIX_FMT_BGR565BE:
c->lumToYV12 = bgr16beToY_c;
*lumToYV12 = bgr16beToY_c;
break;
case AV_PIX_FMT_BGR555LE:
c->lumToYV12 = bgr15leToY_c;
*lumToYV12 = bgr15leToY_c;
break;
case AV_PIX_FMT_BGR555BE:
c->lumToYV12 = bgr15beToY_c;
*lumToYV12 = bgr15beToY_c;
break;
case AV_PIX_FMT_BGR444LE:
c->lumToYV12 = bgr12leToY_c;
*lumToYV12 = bgr12leToY_c;
break;
case AV_PIX_FMT_BGR444BE:
c->lumToYV12 = bgr12beToY_c;
*lumToYV12 = bgr12beToY_c;
break;
case AV_PIX_FMT_RGB24:
c->lumToYV12 = rgb24ToY_c;
*lumToYV12 = rgb24ToY_c;
break;
case AV_PIX_FMT_RGB565LE:
c->lumToYV12 = rgb16leToY_c;
*lumToYV12 = rgb16leToY_c;
break;
case AV_PIX_FMT_RGB565BE:
c->lumToYV12 = rgb16beToY_c;
*lumToYV12 = rgb16beToY_c;
break;
case AV_PIX_FMT_RGB555LE:
c->lumToYV12 = rgb15leToY_c;
*lumToYV12 = rgb15leToY_c;
break;
case AV_PIX_FMT_RGB555BE:
c->lumToYV12 = rgb15beToY_c;
*lumToYV12 = rgb15beToY_c;
break;
case AV_PIX_FMT_RGB444LE:
c->lumToYV12 = rgb12leToY_c;
*lumToYV12 = rgb12leToY_c;
break;
case AV_PIX_FMT_RGB444BE:
c->lumToYV12 = rgb12beToY_c;
*lumToYV12 = rgb12beToY_c;
break;
case AV_PIX_FMT_RGB8:
case AV_PIX_FMT_BGR8:
case AV_PIX_FMT_PAL8:
case AV_PIX_FMT_BGR4_BYTE:
case AV_PIX_FMT_RGB4_BYTE:
c->lumToYV12 = palToY_c;
*lumToYV12 = palToY_c;
break;
case AV_PIX_FMT_MONOBLACK:
c->lumToYV12 = monoblack2Y_c;
*lumToYV12 = monoblack2Y_c;
break;
case AV_PIX_FMT_MONOWHITE:
c->lumToYV12 = monowhite2Y_c;
*lumToYV12 = monowhite2Y_c;
break;
case AV_PIX_FMT_RGB32:
c->lumToYV12 = bgr32ToY_c;
*lumToYV12 = bgr32ToY_c;
break;
case AV_PIX_FMT_RGB32_1:
c->lumToYV12 = bgr321ToY_c;
*lumToYV12 = bgr321ToY_c;
break;
case AV_PIX_FMT_BGR32:
c->lumToYV12 = rgb32ToY_c;
*lumToYV12 = rgb32ToY_c;
break;
case AV_PIX_FMT_BGR32_1:
c->lumToYV12 = rgb321ToY_c;
*lumToYV12 = rgb321ToY_c;
break;
case AV_PIX_FMT_RGB48BE:
c->lumToYV12 = rgb48BEToY_c;
*lumToYV12 = rgb48BEToY_c;
break;
case AV_PIX_FMT_RGB48LE:
c->lumToYV12 = rgb48LEToY_c;
*lumToYV12 = rgb48LEToY_c;
break;
case AV_PIX_FMT_BGR48BE:
c->lumToYV12 = bgr48BEToY_c;
*lumToYV12 = bgr48BEToY_c;
break;
case AV_PIX_FMT_BGR48LE:
c->lumToYV12 = bgr48LEToY_c;
*lumToYV12 = bgr48LEToY_c;
break;
case AV_PIX_FMT_RGBA64BE:
c->lumToYV12 = rgb64BEToY_c;
*lumToYV12 = rgb64BEToY_c;
break;
case AV_PIX_FMT_RGBA64LE:
c->lumToYV12 = rgb64LEToY_c;
*lumToYV12 = rgb64LEToY_c;
break;
case AV_PIX_FMT_BGRA64BE:
c->lumToYV12 = bgr64BEToY_c;
*lumToYV12 = bgr64BEToY_c;
break;
case AV_PIX_FMT_BGRA64LE:
c->lumToYV12 = bgr64LEToY_c;
*lumToYV12 = bgr64LEToY_c;
break;
case AV_PIX_FMT_P010LE:
case AV_PIX_FMT_P210LE:
case AV_PIX_FMT_P410LE:
c->lumToYV12 = p010LEToY_c;
*lumToYV12 = p010LEToY_c;
break;
case AV_PIX_FMT_P010BE:
case AV_PIX_FMT_P210BE:
case AV_PIX_FMT_P410BE:
c->lumToYV12 = p010BEToY_c;
*lumToYV12 = p010BEToY_c;
break;
case AV_PIX_FMT_P012LE:
case AV_PIX_FMT_P212LE:
case AV_PIX_FMT_P412LE:
c->lumToYV12 = p012LEToY_c;
*lumToYV12 = p012LEToY_c;
break;
case AV_PIX_FMT_P012BE:
case AV_PIX_FMT_P212BE:
case AV_PIX_FMT_P412BE:
c->lumToYV12 = p012BEToY_c;
*lumToYV12 = p012BEToY_c;
break;
case AV_PIX_FMT_GRAYF32LE:
c->lumToYV12 = grayf32leToY16_c;
*lumToYV12 = grayf32leToY16_c;
break;
case AV_PIX_FMT_GRAYF32BE:
c->lumToYV12 = grayf32beToY16_c;
*lumToYV12 = grayf32beToY16_c;
break;
case AV_PIX_FMT_Y210LE:
c->lumToYV12 = y210le_Y_c;
*lumToYV12 = y210le_Y_c;
break;
case AV_PIX_FMT_Y212LE:
c->lumToYV12 = y212le_Y_c;
*lumToYV12 = y212le_Y_c;
break;
case AV_PIX_FMT_X2RGB10LE:
c->lumToYV12 = rgb30leToY_c;
*lumToYV12 = rgb30leToY_c;
break;
case AV_PIX_FMT_X2BGR10LE:
c->lumToYV12 = bgr30leToY_c;
*lumToYV12 = bgr30leToY_c;
break;
case AV_PIX_FMT_RGBAF16BE:
c->lumToYV12 = rgbaf16beToY_c;
*lumToYV12 = rgbaf16beToY_c;
break;
case AV_PIX_FMT_RGBAF16LE:
c->lumToYV12 = rgbaf16leToY_c;
*lumToYV12 = rgbaf16leToY_c;
break;
}
if (c->needAlpha) {
if (is16BPS(srcFormat) || isNBPS(srcFormat)) {
if (HAVE_BIGENDIAN == !isBE(srcFormat) && !c->readAlpPlanar)
c->alpToYV12 = bswap16Y_c;
if (HAVE_BIGENDIAN == !isBE(srcFormat) && !*readAlpPlanar)
*alpToYV12 = bswap16Y_c;
}
switch (srcFormat) {
case AV_PIX_FMT_BGRA64LE:
case AV_PIX_FMT_RGBA64LE: c->alpToYV12 = rgba64leToA_c; break;
case AV_PIX_FMT_RGBA64LE: *alpToYV12 = rgba64leToA_c; break;
case AV_PIX_FMT_BGRA64BE:
case AV_PIX_FMT_RGBA64BE: c->alpToYV12 = rgba64beToA_c; break;
case AV_PIX_FMT_RGBA64BE: *alpToYV12 = rgba64beToA_c; break;
case AV_PIX_FMT_BGRA:
case AV_PIX_FMT_RGBA:
c->alpToYV12 = rgbaToA_c;
*alpToYV12 = rgbaToA_c;
break;
case AV_PIX_FMT_ABGR:
case AV_PIX_FMT_ARGB:
c->alpToYV12 = abgrToA_c;
*alpToYV12 = abgrToA_c;
break;
case AV_PIX_FMT_RGBAF16BE:
c->alpToYV12 = rgbaf16beToA_c;
*alpToYV12 = rgbaf16beToA_c;
break;
case AV_PIX_FMT_RGBAF16LE:
c->alpToYV12 = rgbaf16leToA_c;
*alpToYV12 = rgbaf16leToA_c;
break;
case AV_PIX_FMT_YA8:
c->alpToYV12 = uyvyToY_c;
*alpToYV12 = uyvyToY_c;
break;
case AV_PIX_FMT_YA16LE:
c->alpToYV12 = read_ya16le_alpha_c;
*alpToYV12 = read_ya16le_alpha_c;
break;
case AV_PIX_FMT_YA16BE:
c->alpToYV12 = read_ya16be_alpha_c;
*alpToYV12 = read_ya16be_alpha_c;
break;
case AV_PIX_FMT_VUYA:
c->alpToYV12 = read_vuya_A_c;
*alpToYV12 = read_vuya_A_c;
break;
case AV_PIX_FMT_AYUV64LE:
c->alpToYV12 = read_ayuv64le_A_c;
*alpToYV12 = read_ayuv64le_A_c;
break;
case AV_PIX_FMT_PAL8 :
c->alpToYV12 = palToA_c;
*alpToYV12 = palToA_c;
break;
}
}

View File

@ -564,7 +564,8 @@ static av_cold void sws_init_swscale(SwsContext *c)
&c->yuv2nv12cX, &c->yuv2packed1,
&c->yuv2packed2, &c->yuv2packedX, &c->yuv2anyX);
ff_sws_init_input_funcs(c);
ff_sws_init_input_funcs(c, &c->lumToYV12, &c->alpToYV12, &c->chrToYV12,
&c->readLumPlanar, &c->readAlpPlanar, &c->readChrPlanar);
if (c->srcBpc == 8) {
if (c->dstBpc <= 14) {

View File

@ -988,7 +988,13 @@ void ff_get_unscaled_swscale_aarch64(SwsContext *c);
void ff_sws_init_scale(SwsContext *c);
void ff_sws_init_input_funcs(SwsContext *c);
void ff_sws_init_input_funcs(SwsContext *c,
planar1_YV12_fn *lumToYV12,
planar1_YV12_fn *alpToYV12,
planar2_YV12_fn *chrToYV12,
planarX_YV12_fn *readLumPlanar,
planarX_YV12_fn *readAlpPlanar,
planarX2_YV12_fn *readChrPlanar);
void ff_sws_init_output_funcs(SwsContext *c,
yuv2planar1_fn *yuv2plane1,
yuv2planarX_fn *yuv2planeX,