Revision: 28721
http://sourceforge.net/p/bibdesk/svn/28721
Author: hofman
Date: 2024-02-10 16:51:32 +0000 (Sat, 10 Feb 2024)
Log Message:
-----------
copy image buffer data using property
Modified Paths:
--------------
trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm
trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.h
trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.m
Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm
2024-02-10 16:07:42 UTC (rev 28720)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVCGImageUtilities.mm
2024-02-10 16:51:32 UTC (rev 28721)
@@ -990,9 +990,7 @@
// tell this buffer not to call free() when it deallocs, so we avoid
copying the data
CFDataRef data = NULL;
if (kvImageNoError == ret) {
- [interleavedImageBuffer setFreeBufferOnDealloc:NO];
- CFAllocatorRef alloc = [interleavedImageBuffer allocator];
- data = CFDataCreateWithBytesNoCopy(CFAllocatorGetDefault(), (uint8_t
*)interleavedBuffer->data, interleavedBuffer->rowBytes *
interleavedBuffer->height, alloc);
+ data = [interleavedImageBuffer copyBufferData];
}
// cleanup is safe now
Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.h
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.h 2024-02-10
16:07:42 UTC (rev 28720)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.h 2024-02-10
16:51:32 UTC (rev 28721)
@@ -86,16 +86,11 @@
@return An initialized buffer instance. */
- (id)initWithWidth:(size_t)w height:(size_t)h bytesPerSample:(size_t)bps;
-/** @internal @brief Byte buffer transfer.
- Pass NO to transfer ownership of the vImage data to e.g. CFData. This is
always set to YES for new instances.
- @param flag NO to allow another object to free the underlying vImage_Buffer
data. */
-- (void)setFreeBufferOnDealloc:(BOOL)flag;
-
-/** @internal @brief FVImageBuffer allocator.
+/** @internal @brief Copy of the buffer data copy.
- If you set _freeBufferOnDealloc to NO, use this allocator to free
buffer->data when you're finished with it. Do not rely on this returning the
same allocator for all instances.
- @return A CFAllocator instance. */
-@property (nonatomic, readonly) CFAllocatorRef allocator;
+ A CFDataRef copy wrapping buffer->data. The data takes ownership of
buffer->data, this instance will not free it whenthis is returned. This should
be used at most once for each buffer.
+ @return A CFDataRef instance. */
+@property (nonatomic, readonly) CFDataRef copyBufferData;
/** @internal @brief Internal buffer size.
Modified: trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.m
===================================================================
--- trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.m 2024-02-10
16:07:42 UTC (rev 28720)
+++ trunk/bibdesk_vendorsrc/amaxwell/FileView/FVImageBuffer.m 2024-02-10
16:51:32 UTC (rev 28721)
@@ -47,8 +47,8 @@
@implementation FVImageBuffer
-@dynamic allocator;
@synthesize bufferSize=_bufferSize;
+@dynamic copyBufferData;
+ (uint64_t)allocatedBytes
{
@@ -75,7 +75,7 @@
buffer->height = 1;
buffer->rowBytes = bufferSize;
_bufferSize = bufferSize;
- buffer->data = CFAllocatorAllocate([self allocator], bufferSize,
0);
+ buffer->data = CFAllocatorAllocate(FVAllocatorGetDefault(),
bufferSize, 0);
FVAtomicAdd64(_allocatedBytes, _bufferSize);
if (NULL == buffer->data) {
self = nil;
@@ -106,7 +106,6 @@
- (id)copyWithZone:(NSZone *)aZone
{
FVImageBuffer *copy = [[[self class] allocWithZone:aZone]
_initWithBufferSize:_bufferSize];
- copy->_freeBufferOnDealloc = _freeBufferOnDealloc;
copy->buffer->rowBytes = buffer->rowBytes;
copy->buffer->height = buffer->height;
copy->buffer->width = buffer->width;
@@ -116,16 +115,20 @@
- (void)dealloc
{
- if (_freeBufferOnDealloc) CFAllocatorDeallocate([self allocator],
buffer->data);
+ if (_freeBufferOnDealloc) CFAllocatorDeallocate(FVAllocatorGetDefault(),
buffer->data);
FVAtomicSub64(_allocatedBytes, _bufferSize);
if (buffer != NULL) NSZoneFree(NULL, buffer);
}
-- (void)setFreeBufferOnDealloc:(BOOL)flag;
+- (CFDataRef)copyBufferData;
{
- _freeBufferOnDealloc = flag;
+ // tell this buffer not to call free() when it deallocs, so we avoid
copying the data
+ CFAllocatorRef alloc = kCFAllocatorNull;
+ if (_freeBufferOnDealloc) {
+ _freeBufferOnDealloc = NO;
+ alloc = FVAllocatorGetDefault();
+ }
+ return CFDataCreateWithBytesNoCopy(CFAllocatorGetDefault(), (uint8_t
*)buffer->data, buffer->rowBytes * buffer->height, alloc);
}
-- (CFAllocatorRef)allocator { return FVAllocatorGetDefault(); }
-
@end
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