]> granicus.if.org Git - handbrake/commitdiff
MacGui: fix a wrong usage of CFData API, CFDataCreateMutable creates a a CFData...
authorDamiano Galassi <damiog@gmail.com>
Fri, 3 Nov 2017 06:32:09 +0000 (07:32 +0100)
committerDamiano Galassi <damiog@gmail.com>
Fri, 3 Nov 2017 06:32:09 +0000 (07:32 +0100)
macosx/HBCore.m

index acd4c187e7ef2e5435c05a930788b1e6869ef5bb..5e0cbb80da0aed4f664833be20055dcc74455c85 100644 (file)
@@ -342,9 +342,27 @@ typedef void (^HBCoreCleanupHandler)(void);
         // Create an CGImageRef and copy the libhb image into it.
         // The image data returned by hb_get_preview2 is 4 bytes per pixel, BGRA format.
         // Alpha is ignored.
-        CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
-        CFMutableDataRef imgData = CFDataCreateMutable(kCFAllocatorDefault, 3 * image->width * image->height);
+        CFMutableDataRef imgData = CFDataCreateMutable(kCFAllocatorDefault, 0);
+        CFDataSetLength(imgData, 3 * image->width * image->height);
+
+        UInt8 *src_line = image->data;
+        UInt8 *dst = CFDataGetMutableBytePtr(imgData);
+        for (int r = 0; r < image->height; r++)
+        {
+            UInt8 *src = src_line;
+            for (int c = 0; c < image->width; c++)
+            {
+                *dst++ = src[2];
+                *dst++ = src[1];
+                *dst++ = src[0];
+                src += 4;
+            }
+            src_line += image->plane[0].stride;
+        }
+
         CGDataProviderRef provider = CGDataProviderCreateWithCFData(imgData);
+
+        CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaNone;
         CGColorSpaceRef colorSpace = copyColorSpace(title.hb_title->color_prim,
                                                     title.hb_title->color_transfer,
                                                     title.hb_title->color_matrix);
@@ -360,25 +378,11 @@ typedef void (^HBCoreCleanupHandler)(void);
                             NULL,
                             NO,
                             kCGRenderingIntentDefault);
+
         CGColorSpaceRelease(colorSpace);
         CGDataProviderRelease(provider);
         CFRelease(imgData);
 
-        UInt8 *src_line = image->data;
-        UInt8 *dst = CFDataGetMutableBytePtr(imgData);
-        for (int r = 0; r < image->height; r++)
-        {
-            UInt8 *src = src_line;
-            for (int c = 0; c < image->width; c++)
-            {
-                *dst++ = src[2];
-                *dst++ = src[1];
-                *dst++ = src[0];
-                src += 4;
-            }
-            src_line += image->plane[0].stride;
-        }
-
         hb_image_close(&image);
     }