[FFmpeg-devel] [PATCH v3 1/6] lavc/arm: dont assign hevc_qpel functions for non-multiple of 8 widths

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Wed Jan 5 08:46:23 EET 2022


J. Dekker:
> The assembly is written assuming that the width is a multiple of 8.
> 
> However the real issue is the functions were errorneously assigned to
> the 2, 4, 6 & 12 widths. This behaviour never broke the decoder as
> samples which trigger the functions for these widths have not been found
> in the wild. This relies on the mappings in ff_hevc_pel_weight[].
> 
> Signed-off-by: J. Dekker <jdek at itanimul.li>
> ---
>  libavcodec/arm/hevcdsp_init_neon.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
>  This set has already been reviewed by Martin, sending to list for
>  transparency.
> 
> diff --git a/libavcodec/arm/hevcdsp_init_neon.c b/libavcodec/arm/hevcdsp_init_neon.c
> index 201a088dac..112edb5edd 100644
> --- a/libavcodec/arm/hevcdsp_init_neon.c
> +++ b/libavcodec/arm/hevcdsp_init_neon.c
> @@ -270,7 +270,8 @@ av_cold void ff_hevc_dsp_init_neon(HEVCDSPContext *c, const int bit_depth)
>          put_hevc_qpel_uw_neon[3][1]      = ff_hevc_put_qpel_uw_h1v3_neon_8;
>          put_hevc_qpel_uw_neon[3][2]      = ff_hevc_put_qpel_uw_h2v3_neon_8;
>          put_hevc_qpel_uw_neon[3][3]      = ff_hevc_put_qpel_uw_h3v3_neon_8;
> -        for (x = 0; x < 10; x++) {
> +        for (x = 3; x < 10; x++) {
> +            if (x == 4) continue;
>              c->put_hevc_qpel[x][1][0]         = ff_hevc_put_qpel_neon_wrapper;
>              c->put_hevc_qpel[x][0][1]         = ff_hevc_put_qpel_neon_wrapper;
>              c->put_hevc_qpel[x][1][1]         = ff_hevc_put_qpel_neon_wrapper;
> 

This patchset led to regressions; see e.g.
http://fate.ffmpeg.org/report.cgi?time=20220104162724&slot=aarch64-linux-qemu-ubuntu-gcc-4.8

- Andreas


More information about the ffmpeg-devel mailing list