PR #24104 opened by shiyou URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24104 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24104.patch
The base implementation has been updated to runtime coeff and offset. Benchmark results: name ticks (vs ref) chrRangeFromJpeg8_1920_c: 237.9 chrRangeFromJpeg8_1920_lsx: 39.3 ( 5.91x) chrRangeFromJpeg8_1920_lasx: 19.6 (11.95x) chrRangeFromJpeg16_1920_c: 240.3 chrRangeToJpeg8_1920_c: 444.3 chrRangeToJpeg8_1920_lsx: 63.7 ( 6.36x) chrRangeToJpeg8_1920_lasx: 28.9 (15.31x) chrRangeToJpeg16_1920_c: 502.9 lumRangeFromJpeg8_1920_c: 140.3 lumRangeFromJpeg8_1920_lsx: 29.0 ( 4.83x) lumRangeFromJpeg8_1920_lasx: 15.8 ( 8.39x) lumRangeFromJpeg16_1920_c: 71.7 lumRangeToJpeg8_1920_c: 303.4 lumRangeToJpeg8_1920_lsx: 29.2 (10.34x) lumRangeToJpeg8_1920_lasx: 14.8 (20.47x) lumRangeToJpeg16_1920_c: 294.1 # Summary of changes Briefly describe what this PR does and why. <!-- If this PR requires new FATE test samples, attach them to the PR and list their target paths below (relative to the fate-suite root). Attached filenames must match the sample's filename: ```fate-samples # e.g. vorbis/new-sample.ogg ``` --> >From 9fa9cc761a27e4d56e10ea4e312291c2ec1cc996 Mon Sep 17 00:00:00 2001 From: Shiyou Yin <[email protected]> Date: Wed, 12 Aug 2026 11:24:59 +0800 Subject: [PATCH] swscale/range_convert: Enable range_convert optimization for LA. The base implementation has been updated to runtime coeff and offset. Benchmark results: name ticks (vs ref) chrRangeFromJpeg8_1920_c: 237.9 chrRangeFromJpeg8_1920_lsx: 39.3 ( 5.91x) chrRangeFromJpeg8_1920_lasx: 19.6 (11.95x) chrRangeFromJpeg16_1920_c: 240.3 chrRangeToJpeg8_1920_c: 444.3 chrRangeToJpeg8_1920_lsx: 63.7 ( 6.36x) chrRangeToJpeg8_1920_lasx: 28.9 (15.31x) chrRangeToJpeg16_1920_c: 502.9 lumRangeFromJpeg8_1920_c: 140.3 lumRangeFromJpeg8_1920_lsx: 29.0 ( 4.83x) lumRangeFromJpeg8_1920_lasx: 15.8 ( 8.39x) lumRangeFromJpeg16_1920_c: 71.7 lumRangeToJpeg8_1920_c: 303.4 lumRangeToJpeg8_1920_lsx: 29.2 (10.34x) lumRangeToJpeg8_1920_lasx: 14.8 (20.47x) lumRangeToJpeg16_1920_c: 294.1 --- libswscale/loongarch/swscale.S | 478 +++++++++--------- libswscale/loongarch/swscale_init_loongarch.c | 36 +- libswscale/loongarch/swscale_loongarch.h | 16 +- 3 files changed, 267 insertions(+), 263 deletions(-) diff --git a/libswscale/loongarch/swscale.S b/libswscale/loongarch/swscale.S index a7e8513192..38e75d1143 100644 --- a/libswscale/loongarch/swscale.S +++ b/libswscale/loongarch/swscale.S @@ -1868,16 +1868,15 @@ function ff_hscale_16_to_19_sub_lsx endfunc function lumRangeFromJpeg_lsx - li.w t0, 14071 - li.w t1, 33561947 - vreplgr2vr.h vr0, t0 - srli.w t2, a1, 3 - andi t3, a1, 7 - beqz t2, 2f + vreplgr2vr.h vr0, a2 + vreplgr2vr.w vr4, a3 + srli.w t0, a1, 3 + andi t1, a1, 7 + beqz t0, 2f 1: vld vr1, a0, 0 - vreplgr2vr.w vr2, t1 - vreplgr2vr.w vr3, t1 + vor.v vr2, vr4, vr4 + vor.v vr3, vr4, vr4 vmaddwev.w.h vr2, vr0, vr1 vmaddwod.w.h vr3, vr0, vr1 vsrai.w vr2, vr2, 14 @@ -1885,33 +1884,32 @@ function lumRangeFromJpeg_lsx vpackev.h vr1, vr3, vr2 vst vr1, a0, 0 addi.d a0, a0, 16 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - mul.w t4, t4, t0 - add.w t4, t4, t1 - srai.w t4, t4, 14 - st.h t4, a0, 0 + ld.h t2, a0, 0 + mul.w t2, t2, a2 + add.w t2, t2, a3 + srai.w t2, t2, 14 + st.h t2, a0, 0 addi.d a0, a0, 2 - addi.d t3, t3, -1 - bnez t3, 3b + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function lumRangeFromJpeg_lasx - li.w t0, 14071 - li.w t1, 33561947 - xvreplgr2vr.h xr0, t0 - srli.w t2, a1, 4 - andi t3, a1, 15 - beqz t2, 2f + xvreplgr2vr.h xr0, a2 + xvreplgr2vr.w xr4, a3 + srli.w t0, a1, 4 + andi t1, a1, 15 + beqz t0, 2f 1: xvld xr1, a0, 0 - xvreplgr2vr.w xr2, t1 - xvreplgr2vr.w xr3, t1 + xvor.v xr2, xr4, xr4 + xvor.v xr3, xr4, xr4 xvmaddwev.w.h xr2, xr0, xr1 xvmaddwod.w.h xr3, xr0, xr1 xvsrai.w xr2, xr2, 14 @@ -1919,318 +1917,330 @@ function lumRangeFromJpeg_lasx xvpackev.h xr1, xr3, xr2 xvst xr1, a0, 0 addi.d a0, a0, 32 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - mul.w t4, t4, t0 - add.w t4, t4, t1 - srai.w t4, t4, 14 - st.h t4, a0, 0 - addi.d a0, a0, 2 - addi.d t3, t3, -1 - bnez t3, 3b + ld.h t2, a0, 0 + mul.w t2, t2, a2 + add.w t2, t2, a3 + srai.w t2, t2, 14 + st.h t2, a0, 0 + addi.d a0, a0, 2 + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function lumRangeToJpeg_lsx - li.w t0, 19077 - li.w t1, -39057361 - li.w t2, 30189 - vreplgr2vr.h vr0, t0 - vreplgr2vr.h vr4, t2 - srli.w t2, a1, 3 - andi t3, a1, 7 - beqz t2, 2f + vreplgr2vr.h vr0, a2 + vreplgr2vr.w vr4, a3 + lu12i.w t4, 0x8 + addi.w t4, t4, -1 + srli.w t0, a1, 3 + andi t1, a1, 7 + beqz t0, 2f 1: vld vr1, a0, 0 - vreplgr2vr.w vr2, t1 - vreplgr2vr.w vr3, t1 - vmin.h vr1, vr1, vr4 + vor.v vr2, vr4, vr4 + vor.v vr3, vr4, vr4 vmaddwev.w.h vr2, vr0, vr1 vmaddwod.w.h vr3, vr0, vr1 vsrai.w vr2, vr2, 14 vsrai.w vr3, vr3, 14 - vpackev.h vr1, vr3, vr2 - vst vr1, a0, 0 + vilvl.w vr1, vr3, vr2 + vilvh.w vr2, vr3, vr2 + vssrani.h.w vr2, vr1, 0 + vst vr2, a0, 0 addi.d a0, a0, 16 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - vreplgr2vr.h vr1, t4 - vmin.h vr1, vr1, vr4 - vpickve2gr.h t4, vr1, 0 - mul.w t4, t4, t0 - add.w t4, t4, t1 - srai.w t4, t4, 14 + ld.h t2, a0, 0 + mul.w t2, t2, a2 + add.w t2, t2, a3 + srai.w t2, t2, 14 + blt t4, t2, 5f + st.h t2, a0, 0 + b 6f +5: st.h t4, a0, 0 +6: addi.d a0, a0, 2 - addi.d t3, t3, -1 - bnez t3, 3b + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function lumRangeToJpeg_lasx - li.w t0, 19077 - li.w t1, -39057361 - li.w t2, 30189 - xvreplgr2vr.h xr0, t0 - xvreplgr2vr.h xr4, t2 - srli.w t2, a1, 4 - andi t3, a1, 15 - beqz t2, 2f + xvreplgr2vr.h xr0, a2 + xvreplgr2vr.w xr4, a3 + lu12i.w t4, 0x8 + addi.w t4, t4, -1 + srli.w t0, a1, 4 + andi t1, a1, 15 + beqz t0, 2f 1: xvld xr1, a0, 0 - xvreplgr2vr.w xr2, t1 - xvreplgr2vr.w xr3, t1 - xvmin.h xr1, xr1, xr4 + xvor.v xr2, xr4, xr4 + xvor.v xr3, xr4, xr4 xvmaddwev.w.h xr2, xr0, xr1 xvmaddwod.w.h xr3, xr0, xr1 xvsrai.w xr2, xr2, 14 xvsrai.w xr3, xr3, 14 - xvpackev.h xr1, xr3, xr2 - xvst xr1, a0, 0 + xvilvl.w xr1, xr3, xr2 + xvilvh.w xr2, xr3, xr2 + xvssrani.h.w xr2, xr1, 0 + xvst xr2, a0, 0 addi.d a0, a0, 32 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - vreplgr2vr.h vr1, t4 - vmin.h vr1, vr1, vr4 - vpickve2gr.h t4, vr1, 0 - mul.w t4, t4, t0 - add.w t4, t4, t1 - srai.w t4, t4, 14 + ld.h t2, a0, 0 + mul.w t2, t2, a2 + add.w t2, t2, a3 + srai.w t2, t2, 14 + blt t4, t2, 5f + st.h t2, a0, 0 + b 6f +5: st.h t4, a0, 0 +6: addi.d a0, a0, 2 - addi.d t3, t3, -1 - bnez t3, 3b + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function chrRangeFromJpeg_lsx - li.w t0, 1799 - li.w t1, 4081085 - vreplgr2vr.h vr0, t0 - srli.w t2, a2, 3 - andi t3, a2, 7 - beqz t2, 2f + vreplgr2vr.h vr0, a3 + vreplgr2vr.w vr7, a4 + srli.w t0, a2, 3 + andi t1, a2, 7 + beqz t0, 2f 1: vld vr1, a0, 0 vld vr2, a1, 0 - vreplgr2vr.w vr3, t1 - vreplgr2vr.w vr4, t1 - vreplgr2vr.w vr5, t1 - vreplgr2vr.w vr6, t1 + vor.v vr3, vr7, vr7 + vor.v vr4, vr7, vr7 + vor.v vr5, vr7, vr7 + vor.v vr6, vr7, vr7 vmaddwev.w.h vr3, vr0, vr1 vmaddwod.w.h vr4, vr0, vr1 vmaddwev.w.h vr5, vr0, vr2 vmaddwod.w.h vr6, vr0, vr2 - vsrai.w vr3, vr3, 11 - vsrai.w vr4, vr4, 11 - vsrai.w vr5, vr5, 11 - vsrai.w vr6, vr6, 11 + vsrai.w vr3, vr3, 14 + vsrai.w vr4, vr4, 14 + vsrai.w vr5, vr5, 14 + vsrai.w vr6, vr6, 14 vpackev.h vr1, vr4, vr3 vpackev.h vr2, vr6, vr5 vst vr1, a0, 0 vst vr2, a1, 0 addi.d a0, a0, 16 addi.d a1, a1, 16 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - ld.h t5, a1, 0 - mul.w t4, t4, t0 - mul.w t5, t5, t0 - add.w t4, t4, t1 - add.w t5, t5, t1 - srai.w t4, t4, 11 - srai.w t5, t5, 11 - st.h t4, a0, 0 - st.h t5, a1, 0 + ld.h t2, a0, 0 + ld.h t3, a1, 0 + mul.w t2, t2, a3 + mul.w t3, t3, a3 + add.w t2, t2, a4 + add.w t3, t3, a4 + srai.w t2, t2, 14 + srai.w t3, t3, 14 + st.h t2, a0, 0 + st.h t3, a1, 0 addi.d a0, a0, 2 addi.d a1, a1, 2 - addi.d t3, t3, -1 - bnez t3, 3b + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function chrRangeFromJpeg_lasx - li.w t0, 1799 - li.w t1, 4081085 - xvreplgr2vr.h xr0, t0 - srli.w t2, a2, 4 - andi t3, a2, 15 - beqz t2, 2f + xvreplgr2vr.h xr0, a3 + xvreplgr2vr.w xr7, a4 + srli.w t0, a2, 4 + andi t1, a2, 15 + beqz t0, 2f 1: xvld xr1, a0, 0 xvld xr2, a1, 0 - xvreplgr2vr.w xr3, t1 - xvreplgr2vr.w xr4, t1 - xvreplgr2vr.w xr5, t1 - xvreplgr2vr.w xr6, t1 + xvor.v xr3, xr7, xr7 + xvor.v xr4, xr7, xr7 + xvor.v xr5, xr7, xr7 + xvor.v xr6, xr7, xr7 xvmaddwev.w.h xr3, xr0, xr1 xvmaddwod.w.h xr4, xr0, xr1 xvmaddwev.w.h xr5, xr0, xr2 xvmaddwod.w.h xr6, xr0, xr2 - xvsrai.w xr3, xr3, 11 - xvsrai.w xr4, xr4, 11 - xvsrai.w xr5, xr5, 11 - xvsrai.w xr6, xr6, 11 + xvsrai.w xr3, xr3, 14 + xvsrai.w xr4, xr4, 14 + xvsrai.w xr5, xr5, 14 + xvsrai.w xr6, xr6, 14 xvpackev.h xr1, xr4, xr3 xvpackev.h xr2, xr6, xr5 xvst xr1, a0, 0 xvst xr2, a1, 0 addi.d a0, a0, 32 addi.d a1, a1, 32 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - ld.h t5, a1, 0 - mul.w t4, t4, t0 - mul.w t5, t5, t0 - add.w t4, t4, t1 - add.w t5, t5, t1 - srai.w t4, t4, 11 - srai.w t5, t5, 11 - st.h t4, a0, 0 - st.h t5, a1, 0 - addi.d a0, a0, 2 - addi.d a1, a1, 2 - addi.d t3, t3, -1 - bnez t3, 3b + ld.h t2, a0, 0 + ld.h t3, a1, 0 + mul.w t2, t2, a3 + mul.w t3, t3, a3 + add.w t2, t2, a4 + add.w t3, t3, a4 + srai.w t2, t2, 14 + srai.w t3, t3, 14 + st.h t2, a0, 0 + st.h t3, a1, 0 + addi.d a0, a0, 2 + addi.d a1, a1, 2 + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function chrRangeToJpeg_lsx - li.w t0, 4663 - li.w t1, -9289992 - li.w t2, 30775 - vreplgr2vr.h vr0, t0 - vreplgr2vr.h vr7, t2 - srli.w t2, a2, 3 - andi t3, a2, 7 - beqz t2, 2f + vreplgr2vr.h vr0, a3 + vreplgr2vr.w vr7, a4 + lu12i.w t4, 0x8 + addi.w t4, t4, -1 + srli.w t0, a2, 3 + andi t1, a2, 7 + beqz t0, 2f 1: vld vr1, a0, 0 vld vr2, a1, 0 - vreplgr2vr.w vr3, t1 - vreplgr2vr.w vr4, t1 - vreplgr2vr.w vr5, t1 - vreplgr2vr.w vr6, t1 - vmin.h vr1, vr1, vr7 - vmin.h vr2, vr2, vr7 + vor.v vr3, vr7, vr7 + vor.v vr4, vr7, vr7 + vor.v vr5, vr7, vr7 + vor.v vr6, vr7, vr7 vmaddwev.w.h vr3, vr0, vr1 vmaddwod.w.h vr4, vr0, vr1 vmaddwev.w.h vr5, vr0, vr2 vmaddwod.w.h vr6, vr0, vr2 - vsrai.w vr3, vr3, 12 - vsrai.w vr4, vr4, 12 - vsrai.w vr5, vr5, 12 - vsrai.w vr6, vr6, 12 - vpackev.h vr1, vr4, vr3 - vpackev.h vr2, vr6, vr5 - vst vr1, a0, 0 - vst vr2, a1, 0 + vsrai.w vr3, vr3, 14 + vsrai.w vr4, vr4, 14 + vsrai.w vr5, vr5, 14 + vsrai.w vr6, vr6, 14 + vilvl.w vr1, vr4, vr3 + vilvh.w vr3, vr4, vr3 + vssrani.h.w vr3, vr1, 0 + vilvl.w vr2, vr6, vr5 + vilvh.w vr5, vr6, vr5 + vssrani.h.w vr5, vr2, 0 + vst vr3, a0, 0 + vst vr5, a1, 0 addi.d a0, a0, 16 addi.d a1, a1, 16 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - ld.h t5, a1, 0 - vreplgr2vr.h vr1, t4 - vreplgr2vr.h vr2, t5 - vmin.h vr1, vr1, vr7 - vmin.h vr2, vr2, vr7 - vpickve2gr.h t4, vr1, 0 - vpickve2gr.h t5, vr2, 0 - mul.w t4, t4, t0 - mul.w t5, t5, t0 - add.w t4, t4, t1 - add.w t5, t5, t1 - srai.w t4, t4, 12 - srai.w t5, t5, 12 + ld.h t2, a0, 0 + ld.h t3, a1, 0 + mul.w t2, t2, a3 + mul.w t3, t3, a3 + add.w t2, t2, a4 + add.w t3, t3, a4 + srai.w t2, t2, 14 + srai.w t3, t3, 14 + blt t4, t2, 5f + st.h t2, a0, 0 + b 6f +5: st.h t4, a0, 0 - st.h t5, a1, 0 +6: + blt t4, t3, 7f + st.h t3, a1, 0 + b 8f +7: + st.h t4, a1, 0 +8: addi.d a0, a0, 2 addi.d a1, a1, 2 - addi.d t3, t3, -1 - bnez t3, 3b + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc function chrRangeToJpeg_lasx - li.w t0, 4663 - li.w t1, -9289992 - li.w t2, 30775 - xvreplgr2vr.h xr0, t0 - xvreplgr2vr.h xr7, t2 - srli.w t2, a2, 4 - andi t3, a2, 15 - beqz t2, 2f + xvreplgr2vr.h xr0, a3 + xvreplgr2vr.w xr7, a4 + lu12i.w t4, 0x8 + addi.w t4, t4, -1 + srli.w t0, a2, 4 + andi t1, a2, 15 + beqz t0, 2f 1: xvld xr1, a0, 0 xvld xr2, a1, 0 - xvreplgr2vr.w xr3, t1 - xvreplgr2vr.w xr4, t1 - xvreplgr2vr.w xr5, t1 - xvreplgr2vr.w xr6, t1 - xvmin.h xr1, xr1, xr7 - xvmin.h xr2, xr2, xr7 + xvor.v xr3, xr7, xr7 + xvor.v xr4, xr7, xr7 + xvor.v xr5, xr7, xr7 + xvor.v xr6, xr7, xr7 xvmaddwev.w.h xr3, xr0, xr1 xvmaddwod.w.h xr4, xr0, xr1 xvmaddwev.w.h xr5, xr0, xr2 xvmaddwod.w.h xr6, xr0, xr2 - xvsrai.w xr3, xr3, 12 - xvsrai.w xr4, xr4, 12 - xvsrai.w xr5, xr5, 12 - xvsrai.w xr6, xr6, 12 - xvpackev.h xr1, xr4, xr3 - xvpackev.h xr2, xr6, xr5 - xvst xr1, a0, 0 - xvst xr2, a1, 0 + xvsrai.w xr3, xr3, 14 + xvsrai.w xr4, xr4, 14 + xvsrai.w xr5, xr5, 14 + xvsrai.w xr6, xr6, 14 + xvilvl.w xr1, xr4, xr3 + xvilvh.w xr3, xr4, xr3 + xvssrani.h.w xr3, xr1, 0 + xvilvl.w xr2, xr6, xr5 + xvilvh.w xr5, xr6, xr5 + xvssrani.h.w xr5, xr2, 0 + xvst xr3, a0, 0 + xvst xr5, a1, 0 addi.d a0, a0, 32 addi.d a1, a1, 32 - addi.d t2, t2, -1 - bnez t2, 1b + addi.d t0, t0, -1 + bnez t0, 1b 2: - beqz t3, 4f + beqz t1, 4f 3: - ld.h t4, a0, 0 - ld.h t5, a1, 0 - vreplgr2vr.h vr1, t4 - vreplgr2vr.h vr2, t5 - vmin.h vr1, vr1, vr7 - vmin.h vr2, vr2, vr7 - vpickve2gr.h t4, vr1, 0 - vpickve2gr.h t5, vr2, 0 - mul.w t4, t4, t0 - mul.w t5, t5, t0 - add.w t4, t4, t1 - add.w t5, t5, t1 - srai.w t4, t4, 12 - srai.w t5, t5, 12 - st.h t4, a0, 0 - st.h t5, a1, 0 - addi.d a0, a0, 2 - addi.d a1, a1, 2 - addi.d t3, t3, -1 - bnez t3, 3b + ld.h t2, a0, 0 + ld.h t3, a1, 0 + mul.w t2, t2, a3 + mul.w t3, t3, a3 + add.w t2, t2, a4 + add.w t3, t3, a4 + srai.w t2, t2, 14 + srai.w t3, t3, 14 + blt t4, t2, 5f + st.h t2, a0, 0 + b 6f +5: + st.h t4, a0, 0 +6: + blt t4, t3, 7f + st.h t3, a1, 0 + b 8f +7: + st.h t4, a1, 0 +8: + addi.d a0, a0, 2 + addi.d a1, a1, 2 + addi.d t1, t1, -1 + bnez t1, 3b 4: endfunc diff --git a/libswscale/loongarch/swscale_init_loongarch.c b/libswscale/loongarch/swscale_init_loongarch.c index f0b8a7db12..0c937b047f 100644 --- a/libswscale/loongarch/swscale_init_loongarch.c +++ b/libswscale/loongarch/swscale_init_loongarch.c @@ -26,37 +26,31 @@ av_cold void ff_sws_init_range_convert_loongarch(SwsInternal *c) { - /* This code is currently disabled because of changes in the base - * implementation of these functions. This code should be enabled - * again once those changes are ported to this architecture. */ -#if 0 int cpu_flags = av_get_cpu_flags(); + if (c->dstBpc > 14) + return; + if (have_lsx(cpu_flags)) { - if (c->dstBpc <= 14) { - if (c->opts.src_range) { - c->lumConvertRange = lumRangeFromJpeg_lsx; - c->chrConvertRange = chrRangeFromJpeg_lsx; - } else { - c->lumConvertRange = lumRangeToJpeg_lsx; - c->chrConvertRange = chrRangeToJpeg_lsx; - } + if (c->opts.src_range) { + c->lumConvertRange = lumRangeFromJpeg_lsx; + c->chrConvertRange = chrRangeFromJpeg_lsx; + } else { + c->lumConvertRange = lumRangeToJpeg_lsx; + c->chrConvertRange = chrRangeToJpeg_lsx; } } #if HAVE_LASX if (have_lasx(cpu_flags)) { - if (c->dstBpc <= 14) { - if (c->opts.src_range) { - c->lumConvertRange = lumRangeFromJpeg_lasx; - c->chrConvertRange = chrRangeFromJpeg_lasx; - } else { - c->lumConvertRange = lumRangeToJpeg_lasx; - c->chrConvertRange = chrRangeToJpeg_lasx; - } + if (c->opts.src_range) { + c->lumConvertRange = lumRangeFromJpeg_lasx; + c->chrConvertRange = chrRangeFromJpeg_lasx; + } else { + c->lumConvertRange = lumRangeToJpeg_lasx; + c->chrConvertRange = chrRangeToJpeg_lasx; } } #endif // #if HAVE_LASX -#endif } av_cold void ff_sws_init_swscale_loongarch(SwsInternal *c) diff --git a/libswscale/loongarch/swscale_loongarch.h b/libswscale/loongarch/swscale_loongarch.h index 15aa983f20..cff3964c22 100644 --- a/libswscale/loongarch/swscale_loongarch.h +++ b/libswscale/loongarch/swscale_loongarch.h @@ -50,10 +50,10 @@ void ff_hscale_16_to_19_sub_lsx(SwsInternal *c, int16_t *_dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize, int sh); -void lumRangeFromJpeg_lsx(int16_t *dst, int width); -void chrRangeFromJpeg_lsx(int16_t *dstU, int16_t *dstV, int width); -void lumRangeToJpeg_lsx(int16_t *dst, int width); -void chrRangeToJpeg_lsx(int16_t *dstU, int16_t *dstV, int width); +void lumRangeFromJpeg_lsx(int16_t *dst, int width, uint32_t coeff, int64_t offset); +void chrRangeFromJpeg_lsx(int16_t *dstU, int16_t *dstV, int width, uint32_t coeff, int64_t offset); +void lumRangeToJpeg_lsx(int16_t *dst, int width, uint32_t coeff, int64_t offset); +void chrRangeToJpeg_lsx(int16_t *dstU, int16_t *dstV, int width, uint32_t coeff, int64_t offset); void planar_rgb_to_uv_lsx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq); @@ -135,10 +135,10 @@ void ff_hscale_16_to_15_lasx(SwsInternal *c, int16_t *dst, int dstW, const uint8_t *_src, const int16_t *filter, const int32_t *filterPos, int filterSize); -void lumRangeFromJpeg_lasx(int16_t *dst, int width); -void chrRangeFromJpeg_lasx(int16_t *dstU, int16_t *dstV, int width); -void lumRangeToJpeg_lasx(int16_t *dst, int width); -void chrRangeToJpeg_lasx(int16_t *dstU, int16_t *dstV, int width); +void lumRangeFromJpeg_lasx(int16_t *dst, int width, uint32_t coeff, int64_t offset); +void chrRangeFromJpeg_lasx(int16_t *dstU, int16_t *dstV, int width, uint32_t coeff, int64_t offset); +void lumRangeToJpeg_lasx(int16_t *dst, int width, uint32_t coeff, int64_t offset); +void chrRangeToJpeg_lasx(int16_t *dstU, int16_t *dstV, int width, uint32_t coeff, int64_t offset); void planar_rgb_to_uv_lasx(uint8_t *_dstU, uint8_t *_dstV, const uint8_t *src[4], int width, int32_t *rgb2yuv, void *opq); -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
