Simplify thumbnail blend parser
authorCampbell Barton <ideasman42@gmail.com>
Mon, 17 Aug 2015 02:37:38 +0000 (12:37 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 17 Aug 2015 02:37:38 +0000 (12:37 +1000)
No need to convert the BHead code to an int, just compare the bytes.

release/bin/blender-thumbnailer.py

index d3b31d63fad94c0235fa4e8dd1a2d9abc925dd7f..fe5d462bba949c9591aae220668ff046c41e20fb 100755 (executable)
@@ -88,9 +88,8 @@ def blend_extract_thumb(path):
     import os
     open_wrapper = open_wrapper_get()
 
-    # def MAKE_ID(tag): ord(tag[0])<<24 | ord(tag[1])<<16 | ord(tag[2])<<8 | ord(tag[3])
-    REND = 1145980242  # MAKE_ID(b'REND')
-    TEST = 1414743380  # MAKE_ID(b'TEST')
+    REND = b'REND'
+    TEST = b'TEST'
 
     blendfile = open_wrapper(path, 'rb')
 
@@ -116,7 +115,8 @@ def blend_extract_thumb(path):
         return None, 0, 0
 
     sizeof_bhead = 24 if is_64_bit else 20
-    int_endian_pair = '>ii' if is_big_endian else '<ii'
+    int_endian = '>i' if is_big_endian else '<i'
+    int_endian_pair = int_endian + 'i'
 
     while True:
         bhead = blendfile.read(sizeof_bhead)
@@ -124,7 +124,8 @@ def blend_extract_thumb(path):
         if len(bhead) < sizeof_bhead:
             return None, 0, 0
 
-        code, length = struct.unpack(int_endian_pair, bhead[0:8])  # 8 == sizeof(int) * 2
+        code = bhead[:4]
+        length = struct.unpack(int_endian, bhead[4:8])[0]  # 4 == sizeof(int)
 
         if code == REND:
             blendfile.seek(length, os.SEEK_CUR)