diff options
author | Shiyou Yin <yinshiyou-hf@loongson.cn> | 2024-07-25 17:39:21 +0800 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2024-07-28 19:02:16 +0200 |
commit | 4713a5cc2478ac94150541918749913d05a54b7f (patch) | |
tree | 8afd4f985fb78a4ec55381a02a994ec1f1897677 | |
parent | 3b9c6c7fbb34153007ac3e0abca89e5baefbcad4 (diff) | |
download | ffmpeg-4713a5cc2478ac94150541918749913d05a54b7f.tar.gz |
swscale: [loongarch] Fix checkasm-sw_yuv2rgb failure.
Reviewed-by: 陈昊 <chenhao@loongson.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libswscale/loongarch/swscale_init_loongarch.c | 104 | ||||
-rw-r--r-- | libswscale/loongarch/yuv2rgb_lasx.c | 4 |
2 files changed, 56 insertions, 52 deletions
diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c index 4af62ad9f8..2a95ede6d9 100644 --- a/libswscale/loongarch/swscale_init_loongarch.c +++ b/libswscale/loongarch/swscale_init_loongarch.c @@ -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; diff --git a/libswscale/loongarch/yuv2rgb_lasx.c b/libswscale/loongarch/yuv2rgb_lasx.c index 64e434f50c..0ce553005a 100644 --- a/libswscale/loongarch/yuv2rgb_lasx.c +++ b/libswscale/loongarch/yuv2rgb_lasx.c @@ -82,8 +82,8 @@ #define YUV2RGB_RES \ m_y1 = __lasx_xvldrepl_d(py_1, 0); \ m_y2 = __lasx_xvldrepl_d(py_2, 0); \ - m_u = __lasx_xvldrepl_d(pu, 0); \ - m_v = __lasx_xvldrepl_d(pv, 0); \ + m_u = __lasx_xvldrepl_w(pu, 0); \ + m_v = __lasx_xvldrepl_w(pv, 0); \ m_y1 = __lasx_xvilvl_d(m_y2, m_y1); \ m_u = __lasx_xvilvl_b(m_u, m_u); \ m_v = __lasx_xvilvl_b(m_v, m_v); \ |