Revision: 28728
          http://sourceforge.net/p/bibdesk/svn/28728
Author:   hofman
Date:     2024-02-12 00:04:07 +0000 (Mon, 12 Feb 2024)
Log Message:
-----------
Assign planar tiles buffers to c-arrays, make them strong. No need for array to 
wrap them. Pass them as const pointers to functions to avoid ownership 
qualifier warnings.

Modified Paths:
--------------
    trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm

Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm     
2024-02-11 17:57:26 UTC (rev 28727)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm     
2024-02-12 00:04:07 UTC (rev 28728)
@@ -334,7 +334,7 @@
 
 #endif
 
-static vImage_Error __FVConvertIndexedImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
const FVImageBuffer * __unsafe_unretained planarBuffers[4])
+static vImage_Error __FVConvertIndexedImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
FVImageBuffer * const planarBuffers[4])
 {
     CGColorSpaceRef cspace = CGImageGetColorSpace(image);
     const size_t tableElements = CGColorSpaceGetColorTableCount(cspace) * 
CGColorSpaceGetNumberOfComponents(CGColorSpaceGetBaseColorSpace(cspace));
@@ -380,7 +380,7 @@
 }
 
 // the image's byte pointer is passed in as a parameter in case we're copying 
from the data provider (which can be really slow)
-static vImage_Error __FVConvertRGB888ImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
FVImageBuffer *destBuffer, const FVImageBuffer * __unsafe_unretained 
planarBuffers[4])
+static vImage_Error __FVConvertRGB888ImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
FVImageBuffer *destBuffer, FVImageBuffer * const planarBuffers[4])
 {
     const size_t bytesPerSample = 3;
     vImage_Buffer *dstBuffer = destBuffer->buffer;
@@ -442,7 +442,7 @@
 }
 
 // the image's byte pointer is passed in as a parameter in case we're copying 
from the data provider (which can be really slow)
-static vImage_Error __FVConvertARGB8888ImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
FVImageBuffer *destBuffer, const FVImageBuffer * __unsafe_unretained 
planarBuffers[4])
+static vImage_Error __FVConvertARGB8888ImageRegionToPlanar8_buffers(CGImageRef 
image, const uint8_t *srcBytes, const size_t rowBytes, const FVRegion& region, 
FVImageBuffer *destBuffer, FVImageBuffer * const planarBuffers[4])
 {
     NSCParameterAssert(destBuffer);
     const size_t bytesPerSample = 4;
@@ -620,7 +620,7 @@
 }
 
 
-static vImage_Error __FVConvertPlanar8To8888Host(const FVImageBuffer * 
__unsafe_unretained planarA[4], const vImage_Buffer *destBuffer)
+static vImage_Error __FVConvertPlanar8To8888Host(FVImageBuffer * const 
planarA[4], const vImage_Buffer *destBuffer)
 {
     vImage_Error ret;
     
@@ -823,9 +823,6 @@
     
     std::vector <FVRegion> regions = __FVTileRegionsForImage(image, scale);
     
-    // fixed size mutable array to retain planarA and planarB buffers
-    NS_VALID_UNTIL_END_OF_SCOPE NSMutableArray *planarTiles = [[NSMutableArray 
alloc] initWithCapacity:8];
-    
     // first region is not necessarily the largest region anymore; figure out 
the maximum height and width for tiles
     size_t maxWidth = 0, maxHeight = 0;
     std::vector<FVRegion>::iterator iter;
@@ -843,23 +840,30 @@
     FVImageBuffer *imageBuffer;
     size_t r = FVPaddedRowBytesForWidth(1, maxWidth);
     NSUInteger i;
-    for (i = 0; i < 8 && kvImageNoError == ret; i++) {
+    
+    FVImageBuffer * planarA[4];
+    for (i = 0; i < 4 && kvImageNoError == ret; i++) {
         imageBuffer = [[FVImageBuffer alloc] initWithWidth:maxWidth 
height:maxHeight rowBytes:r];
         if (imageBuffer) {
-            [planarTiles addObject:imageBuffer];
+            planarA[i] = imageBuffer;
         }
         else {
             ret = kvImageMemoryAllocationError;
         }
     }
+    
+    FVImageBuffer * planarB[4];
+    for (i = 0; i < 4 && kvImageNoError == ret; i++) {
+        imageBuffer = [[FVImageBuffer alloc] initWithWidth:maxWidth 
height:maxHeight rowBytes:r];
+        if (imageBuffer) {
+            planarB[i] = imageBuffer;
+        }
+        else {
+            ret = kvImageMemoryAllocationError;
+        }
+    }
     imageBuffer = nil;
-        
-    const FVImageBuffer * __unsafe_unretained planarA[4];
-    [planarTiles getObjects:planarA range:NSMakeRange(0, 4)];
     
-    const FVImageBuffer * __unsafe_unretained planarB[4];
-    [planarTiles getObjects:planarB range:NSMakeRange(4, 4)];
-    
     // keep track of the next scanline/byte offset in the final image
     NSUInteger nextScanline = 0;
     
@@ -995,10 +999,6 @@
         data = [interleavedImageBuffer copyBufferData];
     }
     
-    // cleanup is safe now
-    // dispose of the tiles
-    planarTiles = nil;
-    
 #if FV_LIMIT_TILEMEMORY_USAGE
     __FVCGImageDiscardAllocationSize(0);
 #endif

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to