This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

The following commit(s) were added to refs/heads/master by this push:
     new e250854ecf aarch64/h264pred: disable inefficient functions
e250854ecf is described below

commit e250854ecfa4269e5507b507375cd91581688641
Author:     Zhao Zhili <[email protected]>
AuthorDate: Sun Jan 25 19:13:20 2026 +0800
Commit:     Zhao Zhili <[email protected]>
CommitDate: Wed Feb 4 09:06:37 2026 +0000

    aarch64/h264pred: disable inefficient functions
    
    These assembly optimizations have been identified as "performance
    regressions." Due to advancements in modern CPU micro-architectures
    and compiler optimization the C implementations now consistently
    outperform these handwritten routines.
    
    Test Name                A55-clang       M1             A76-gcc-14      
A510-clang      A715-clang      X3-clang
    
--------------------------------------------------------------------------------------------------------------------
    pred8x8_dc_8_neon        55.9 ( 0.79x)!  0.2 ( 0.31x)!  35.7 ( 0.63x)!  
98.3 ( 0.37x)!  35.9 ( 0.45x)!  33.6 ( 0.38x)!
    pred8x8_dc_10_neon       57.0 ( 1.04x)   0.3 ( 0.36x)!  35.9 ( 0.94x)!  
98.2 ( 0.53x)!  35.8 ( 0.58x)!  33.2 ( 0.50x)!
    pred8x8_dc_128_8_neon    26.0 ( 0.69x)!  0.1 ( 0.43x)!  15.3 ( 0.73x)!  
46.4 ( 0.36x)!  10.6 ( 0.48x)!  10.3 ( 1.09x)
    pred8x8_dc_128_10_neon   25.3 ( 0.99x)!  0.1 ( 0.42x)!  19.3 ( 0.48x)!  
44.5 ( 0.42x)!  10.0 ( 0.61x)!  11.0 ( 1.00x)
    pred8x8_left_dc_8_neon   46.9 ( 0.72x)!  0.2 ( 0.26x)!  30.2 ( 0.49x)!  
71.4 ( 0.39x)!  29.8 ( 0.35x)!  26.5 ( 0.44x)!
    pred8x8_left_dc_10_neon  45.4 ( 0.82x)!  0.2 ( 0.29x)!  28.1 ( 0.67x)!  
70.2 ( 0.47x)!  30.0 ( 0.38x)!  26.5 ( 0.43x)!
    pred16x16_dc_8_neon      74.4 ( 1.34x)   0.3 ( 0.62x)!  44.7 ( 0.89x)!  
128.0 ( 0.79x)! 48.5 ( 0.67x)!  39.4 ( 0.71x)!
    pred16x16_dc_128_8_neon  37.9 ( 0.79x)!  0.1 ( 0.60x)!  20.1 ( 0.80x)!  
41.8 ( 0.46x)!  16.2 ( 0.81x)!  12.8 ( 0.95x)!
    pred16x16_left_dc_8_neon 69.9 ( 1.19x)   0.3 ( 0.46x)!  49.6 ( 0.54x)!  
116.8 ( 0.62x)! 52.8 ( 0.45x)!  44.2 ( 0.51x)!
    pred8x8_hori_8_neon      30.6 ( 1.39x)   0.1 ( 0.45x)!  19.4 ( 0.81x)!  
71.0 ( 0.50x)!  15.9 ( 0.55x)!  12.2 ( 0.94x)!
    pred8x8_hori_10_neon*    29.3 ( 1.82x)   0.1 ( 0.59x)!  18.5 ( 1.56x)   
68.9 ( 0.64x)!  15.8 ( 0.62x)!  11.8 ( 0.97x)!
    pred8x8_top_dc_8_neon    35.8 ( 0.96x)!  0.1 ( 0.59x)!  16.8 ( 0.81x)!  
58.9 ( 0.44x)!  11.3 ( 0.89x)!  11.4 ( 0.99x)!
    pred8x8_top_dc_10_neon   37.4 ( 1.24x)   0.1 ( 0.92x)!  20.4 ( 0.81x)!  
59.5 ( 0.69x)!  10.5 ( 1.48x)   11.8 ( 1.02x)
    pred8x8_vertical_8_neon  18.3 ( 1.08x)   0.1 ( 0.54x)!  12.8 ( 0.89x)!  
37.2 ( 0.40x)!   8.3 ( 0.77x)!  11.2 ( 1.00x)
    pred8x8_vertical_10_neon 19.0 ( 1.24x)   0.1 ( 0.55x)!  15.3 ( 0.62x)!  
39.7 ( 0.50x)!   8.2 ( 0.91x)!  11.1 ( 0.99x)!
    
    - pred8x8_horizontal_10 also underperforms on new architectures, but useful 
on A55 and A76.
    
    Signed-off-by: Zhao Zhili <[email protected]>
---
 libavcodec/aarch64/h264pred_init.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/libavcodec/aarch64/h264pred_init.c 
b/libavcodec/aarch64/h264pred_init.c
index 0ae8f70d23..9819f85f7d 100644
--- a/libavcodec/aarch64/h264pred_init.c
+++ b/libavcodec/aarch64/h264pred_init.c
@@ -25,6 +25,19 @@
 #include "libavcodec/avcodec.h"
 #include "libavcodec/h264pred.h"
 
+/* PERFORMANCE WARNING:
+ * These assembly optimizations have been identified as "performance 
regressions."
+ * Due to advancements in modern CPU micro-architectures and compiler 
optimization
+ * the C implementations now consistently outperform these handwritten 
routines.
+ *
+ * Keep them here for historical reference.
+ *
+ * New optimizations are highly welcome! If you can provide an optimized
+ * implementation that demonstrably beats the current C version in rigorous
+ * benchmarks, please submit a patch.
+ */
+#define ENABLE_INEFFICIENT_ASM 0
+
 void ff_pred16x16_vert_neon(uint8_t *src, ptrdiff_t stride);
 void ff_pred16x16_hor_neon(uint8_t *src, ptrdiff_t stride);
 void ff_pred16x16_plane_neon(uint8_t *src, ptrdiff_t stride);
@@ -69,16 +82,22 @@ static av_cold void h264_pred_init_neon(H264PredContext *h, 
int codec_id,
 {
     if (bit_depth == 8) {
         if (chroma_format_idc <= 1) {
+#if ENABLE_INEFFICIENT_ASM
             h->pred8x8[VERT_PRED8x8     ] = ff_pred8x8_vert_neon;
             h->pred8x8[HOR_PRED8x8      ] = ff_pred8x8_hor_neon;
+#endif
             if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8)
                 h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon;
+#if ENABLE_INEFFICIENT_ASM
             h->pred8x8[DC_128_PRED8x8   ] = ff_pred8x8_128_dc_neon;
+#endif
             if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 &&
                 codec_id != AV_CODEC_ID_VP8) {
+#if ENABLE_INEFFICIENT_ASM
                 h->pred8x8[DC_PRED8x8     ] = ff_pred8x8_dc_neon;
                 h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon;
                 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon;
+#endif
                 h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = ff_pred8x8_l0t_dc_neon;
                 h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = ff_pred8x8_0lt_dc_neon;
                 h->pred8x8[ALZHEIMER_DC_L00_PRED8x8] = ff_pred8x8_l00_dc_neon;
@@ -86,27 +105,37 @@ static av_cold void h264_pred_init_neon(H264PredContext 
*h, int codec_id,
             }
         }
 
+#if ENABLE_INEFFICIENT_ASM
         h->pred16x16[DC_PRED8x8     ] = ff_pred16x16_dc_neon;
+#endif
         h->pred16x16[VERT_PRED8x8   ] = ff_pred16x16_vert_neon;
         h->pred16x16[HOR_PRED8x8    ] = ff_pred16x16_hor_neon;
+#if ENABLE_INEFFICIENT_ASM
         h->pred16x16[LEFT_DC_PRED8x8] = ff_pred16x16_left_dc_neon;
         h->pred16x16[TOP_DC_PRED8x8 ] = ff_pred16x16_top_dc_neon;
         h->pred16x16[DC_128_PRED8x8 ] = ff_pred16x16_128_dc_neon;
+#endif
         if (codec_id != AV_CODEC_ID_SVQ3 && codec_id != AV_CODEC_ID_RV40 &&
             codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8)
             h->pred16x16[PLANE_PRED8x8  ] = ff_pred16x16_plane_neon;
     }
     if (bit_depth == 10) {
         if (chroma_format_idc <= 1) {
+#if ENABLE_INEFFICIENT_ASM
             h->pred8x8[VERT_PRED8x8     ] = ff_pred8x8_vert_neon_10;
+#endif
             h->pred8x8[HOR_PRED8x8      ] = ff_pred8x8_hor_neon_10;
             if (codec_id != AV_CODEC_ID_VP7 && codec_id != AV_CODEC_ID_VP8)
                 h->pred8x8[PLANE_PRED8x8] = ff_pred8x8_plane_neon_10;
+#if ENABLE_INEFFICIENT_ASM
             h->pred8x8[DC_128_PRED8x8   ] = ff_pred8x8_128_dc_neon_10;
+#endif
             if (codec_id != AV_CODEC_ID_RV40 && codec_id != AV_CODEC_ID_VP7 &&
                 codec_id != AV_CODEC_ID_VP8) {
+#if ENABLE_INEFFICIENT_ASM
                 h->pred8x8[DC_PRED8x8     ] = ff_pred8x8_dc_neon_10;
                 h->pred8x8[LEFT_DC_PRED8x8] = ff_pred8x8_left_dc_neon_10;
+#endif
                 h->pred8x8[TOP_DC_PRED8x8 ] = ff_pred8x8_top_dc_neon_10;
                 h->pred8x8[ALZHEIMER_DC_L0T_PRED8x8] = 
ff_pred8x8_l0t_dc_neon_10;
                 h->pred8x8[ALZHEIMER_DC_0LT_PRED8x8] = 
ff_pred8x8_0lt_dc_neon_10;

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to