Fix T45451: File Browser crash on 16bits PNG image previews.
authorBastien Montagne <montagne29@wanadoo.fr>
Thu, 16 Jul 2015 15:26:53 +0000 (17:26 +0200)
committerBastien Montagne <montagne29@wanadoo.fr>
Thu, 16 Jul 2015 15:28:25 +0000 (17:28 +0200)
Issue was that with those files, Blender generate a float image by default, not a byte one...

Now, we ensure in two places we only get a byte imbuf for our thumbnails!

source/blender/imbuf/intern/thumbs.c

index bd7495734d13d3759dc5fcaa645c8e1a7ac29082..09e7d04408248028ea6b3714bb775728d2b66ed7 100644 (file)
@@ -442,6 +442,10 @@ static ImBuf *thumb_create_ex(
                img->ftype = IMB_FTYPE_PNG;
                img->planes = 32;
 
+               /* If we generated from a 16bit PNG e.g., we have a float rect, not a byte one - fix this. */
+               IMB_rect_from_float(img);
+               imb_freerectfloatImBuf(img);
+
                if (IMB_saveiff(img, temp, IB_rect | IB_metadata)) {
 #ifndef WIN32
                        chmod(temp, S_IRUSR | S_IWUSR);
@@ -604,5 +608,11 @@ ImBuf *IMB_thumb_manage(const char *org_path, ThumbSize size, ThumbSource source
                }
        }
 
+       /* Our imbuf **must** have a valid rect (i.e. 8-bits/channels) data, we rely on this in draw code.
+        * However, in some cases we may end loading 16bits PNGs, which generated float buffers.
+        * This should be taken care of in generation step, but add also a safeguard here! */
+       IMB_rect_from_float(img);
+       imb_freerectfloatImBuf(img);
+
        return img;
 }