|
@@ -112,60 +112,64 @@ av_cold SwsFunc ff_yuv2rgb_init_loongarch(SwsContext *c)
|
|
|
int cpu_flags = av_get_cpu_flags();
|
|
|
#if HAVE_LASX
|
|
|
if (have_lasx(cpu_flags)) {
|
|
|
- switch (c->dstFormat) {
|
|
|
- case AV_PIX_FMT_RGB24:
|
|
|
- return yuv420_rgb24_lasx;
|
|
|
- case AV_PIX_FMT_BGR24:
|
|
|
- return yuv420_bgr24_lasx;
|
|
|
- case AV_PIX_FMT_RGBA:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_rgba32_lasx;
|
|
|
- case AV_PIX_FMT_ARGB:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_argb32_lasx;
|
|
|
- case AV_PIX_FMT_BGRA:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_bgra32_lasx;
|
|
|
- case AV_PIX_FMT_ABGR:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_abgr32_lasx;
|
|
|
+ if (c->srcFormat == AV_PIX_FMT_YUV420P) {
|
|
|
+ switch (c->dstFormat) {
|
|
|
+ case AV_PIX_FMT_RGB24:
|
|
|
+ return yuv420_rgb24_lasx;
|
|
|
+ case AV_PIX_FMT_BGR24:
|
|
|
+ return yuv420_bgr24_lasx;
|
|
|
+ case AV_PIX_FMT_RGBA:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_rgba32_lasx;
|
|
|
+ case AV_PIX_FMT_ARGB:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_argb32_lasx;
|
|
|
+ case AV_PIX_FMT_BGRA:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_bgra32_lasx;
|
|
|
+ case AV_PIX_FMT_ABGR:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_abgr32_lasx;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
#endif // #if HAVE_LASX
|
|
|
if (have_lsx(cpu_flags)) {
|
|
|
- switch (c->dstFormat) {
|
|
|
- case AV_PIX_FMT_RGB24:
|
|
|
- return yuv420_rgb24_lsx;
|
|
|
- case AV_PIX_FMT_BGR24:
|
|
|
- return yuv420_bgr24_lsx;
|
|
|
- case AV_PIX_FMT_RGBA:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_rgba32_lsx;
|
|
|
- case AV_PIX_FMT_ARGB:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_argb32_lsx;
|
|
|
- case AV_PIX_FMT_BGRA:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_bgra32_lsx;
|
|
|
- case AV_PIX_FMT_ABGR:
|
|
|
- if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
- break;
|
|
|
- } else
|
|
|
- return yuv420_abgr32_lsx;
|
|
|
+ if (c->srcFormat == AV_PIX_FMT_YUV420P) {
|
|
|
+ switch (c->dstFormat) {
|
|
|
+ case AV_PIX_FMT_RGB24:
|
|
|
+ return yuv420_rgb24_lsx;
|
|
|
+ case AV_PIX_FMT_BGR24:
|
|
|
+ return yuv420_bgr24_lsx;
|
|
|
+ case AV_PIX_FMT_RGBA:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_rgba32_lsx;
|
|
|
+ case AV_PIX_FMT_ARGB:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_argb32_lsx;
|
|
|
+ case AV_PIX_FMT_BGRA:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_bgra32_lsx;
|
|
|
+ case AV_PIX_FMT_ABGR:
|
|
|
+ if (CONFIG_SWSCALE_ALPHA && isALPHA(c->srcFormat)) {
|
|
|
+ break;
|
|
|
+ } else
|
|
|
+ return yuv420_abgr32_lsx;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return NULL;
|