[Bf-blender-cvs] [3ee49c8711c] blender-v2.93-release: Fix PlayAnim issue with images gradually loading into cache

Campbell Barton noreply at git.blender.org
Fri May 7 10:17:50 CEST 2021


Commit: 3ee49c8711ca72b03687574a98adec904ec1699c
Author: Campbell Barton
Date:   Fri May 7 17:54:52 2021 +1000
Branches: blender-v2.93-release
https://developer.blender.org/rB3ee49c8711ca72b03687574a98adec904ec1699c

Fix PlayAnim issue with images gradually loading into cache

Instead of only drawing images on first start, load them into cache.

This resolves a logical problem when images don't load fast enough,
where the animation would load some frames each time until all images
loaded into cache.

In practice this could play back with severe frame skipping many times
times before all images were loaded making playback smooth.

Part of a fix for T81751.

===================================================================

M	source/blender/windowmanager/intern/wm_playanim.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_playanim.c b/source/blender/windowmanager/intern/wm_playanim.c
index 3a3d5436b8a..6e97476950e 100644
--- a/source/blender/windowmanager/intern/wm_playanim.c
+++ b/source/blender/windowmanager/intern/wm_playanim.c
@@ -634,6 +634,14 @@ static void build_pict_list_ex(
     }
   }
   else {
+    /* Load images into cache until the cache is full,
+     * this resolves choppiness for images that are slow to load, see: T81751. */
+#ifdef USE_FRAME_CACHE_LIMIT
+    bool fill_cache = true;
+#else
+    bool fill_cache = false;
+#endif
+
     int count = 0;
 
     int fp_framenr;
@@ -720,15 +728,33 @@ static void build_pict_list_ex(
 
       pupdate_time();
 
-      if (ptottime > 1.0) {
+      const bool display_imbuf = ptottime > 1.0;
+
+      if (display_imbuf || fill_cache) {
         /* OCIO_TODO: support different input color space */
         ImBuf *ibuf = ibuf_from_picture(picture);
+
         if (ibuf) {
-          playanim_toscreen(ps, picture, ibuf, fontid, fstep);
-          IMB_freeImBuf(ibuf);
+          if (display_imbuf) {
+            playanim_toscreen(ps, picture, ibuf, fontid, fstep);
+          }
+#ifdef USE_FRAME_CACHE_LIMIT
+          if (fill_cache) {
+            picture->ibuf = ibuf;
+            frame_cache_add(picture);
+            fill_cache = !frame_cache_limit_exceeded();
+          }
+          else
+#endif
+          {
+            IMB_freeImBuf(ibuf);
+          }
+        }
+
+        if (display_imbuf) {
+          pupdate_time();
+          ptottime = 0.0;
         }
-        pupdate_time();
-        ptottime = 0.0;
       }
 
       /* create a new filepath each time */



More information about the Bf-blender-cvs mailing list