diff mbox series

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

Message ID 20211117045614.55251-1-jdek@itanimul.li
State New
Headers show
Series [FFmpeg-devel,v2,1/6] lavc/arm: dont assign hevc_qpel functions for non-multiple of 8 widths
Related show

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

J. Dekker Nov. 17, 2021, 4:56 a.m. UTC
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@itanimul.li>
---
 libavcodec/arm/hevcdsp_init_neon.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

 Updated commit message.

Comments

Martin Storsjö Nov. 18, 2021, 8:37 a.m. UTC | #1
On Wed, 17 Nov 2021, J. Dekker wrote:

> 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[].

LGTM, thanks for the updated commit message - this makes the situation 
clear.

// Martin
diff mbox series

Patch

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;