diff options
author | Niklas Haas <git@haasn.dev> | 2024-12-17 13:23:14 +0100 |
---|---|---|
committer | Niklas Haas <git@haasn.dev> | 2024-12-21 10:57:54 +0100 |
commit | 095f8038fa9180842cd38d4d61c7c47a02aad9ed (patch) | |
tree | 9b5ab6bc1bee41d14b10752f8daa25d52f5bdb78 /libavcodec/riscv/h264qpel_rvv.S | |
parent | 6b31e42c47c00817f6249f43391873a15b1c00a4 (diff) | |
download | ffmpeg-095f8038fa9180842cd38d4d61c7c47a02aad9ed.tar.gz |
swscale/output: fix bilinear yuv2rgb chroma interpolation
These functions were divided into two special cases; one assuming that
uvalpha == 0, and the other assuming that uvalpha == 2048. This worked fine
for simple 2x chroma upscaling but broke for e.g. yuv410p, non-centered chroma,
or other special cases that involved non-aligned chroma filters.
Fix it by instead dividing this check into two cases, a uvalpha==0 fast path
and a uvalpha>0 general path. Instead of (A+B)/2 the general path now multiplies
in the true uvalpha weight.
I tried preserving the old fast path for the case of uvalpha == 2048, but this
was significantly slower in practise versus having just one general path.
However, we still need a uvalpha == 0 path for the unscaled case.
Fixes: ticket #5083
Signed-off-by: Niklas Haas <git@haasn.dev>
Sponsored-by: Sovereign Tech Fund
Diffstat (limited to 'libavcodec/riscv/h264qpel_rvv.S')
0 files changed, 0 insertions, 0 deletions