Commit f081afd4bd for ffmpeg

commit f081afd4bd12ec60e99fd3d45b0f163e9ce518ad
Author: Michael Niedermayer <michael@niedermayer.cc>
Date:   Thu Oct 15 18:22:06 2026 +0200

    ffplay: compute the alpha reciprocals of the list once

    Assisted-by: Claude

diff --git a/fftools/ffplay_list.c b/fftools/ffplay_list.c
index 00affb1430..564f3c048e 100644
--- a/fftools/ffplay_list.c
+++ b/fftools/ffplay_list.c
@@ -121,6 +121,8 @@ struct ListView {
     ListSortKey sort[LIST_SORT_NB];
     int shuffle_seed;
     int libass_missing_reported;
+    /* 16.16 reciprocals of the alpha values, for the un-premultiplication of blended pixels */
+    uint32_t reciprocal[256];
 };

 static double list_alpha(const ListView *lv, int64_t now)
@@ -612,13 +614,11 @@ static uint32_t blend_over(uint32_t dst, uint32_t rgb, int a, const uint32_t *re
 static int strip_render(ListView *lv, ListCacheEntry *entry)
 {
 #if CONFIG_LIBASS
-    uint32_t *pixels = (uint32_t *)entry->pixels, reciprocal[256] = { 1 << 16 };
+    uint32_t *pixels = (uint32_t *)entry->pixels;
     int w = entry->w, h = entry->h;

     ass_flush_events(lv->track);
     ass_process_data(lv->track, entry->script, strlen(entry->script));
-    for (int a = 1; a < 256; a++)
-        reciprocal[a] = ((255 << 16) + a - 1) / a;
     for (int i = 0; i < w * h; i++)
         pixels[i] = entry->background;
     for (const ASS_Image *image = ass_render_frame(lv->ass, lv->track, 0, NULL); image; image = image->next) {
@@ -633,7 +633,7 @@ static int strip_render(ListView *lv, ListCacheEntry *entry)
                 int a = (opacity * coverage[x] + 127) / 255;

                 if (a)
-                    dst[x] = blend_over(dst[x], image->color >> 8, a, reciprocal);
+                    dst[x] = blend_over(dst[x], image->color >> 8, a, lv->reciprocal);
             }
         }
     }
@@ -740,6 +740,9 @@ ListView *list_view_alloc(SDL_Renderer *renderer)
     lv->playing  = -1;
     lv->mouse_x  = lv->mouse_y = -1;
     lv->hover    = (ListHit){ 0, -1, -1, 0 };
+    lv->reciprocal[0] = 1 << 16;
+    for (int a = 1; a < 256; a++)
+        lv->reciprocal[a] = ((255 << 16) + a - 1) / a;
     list_view_clear(lv);
     return lv;
 }