gpt4 book ai didi

iphone - 获取 CVPixelBuffer 中对象的潜在泄漏

转载 作者:行者123 更新时间:2023-12-03 20:42:01 26 4
gpt4 key购买 nike

我正在创建一个应用程序来从 iPhone 进行屏幕截图。因此,在完成编码后,我使用分析和分析来检查内存泄漏。我在代码的一个部分中仅遇到一处内存泄漏。这是我的代码,它给了我内存泄漏。

-(void) writeSample: (NSTimer*) _timer {

if (assetWriterInput.readyForMoreMediaData) {
// CMSampleBufferRef sample = nil;

CVReturn cvErr = kCVReturnSuccess;

// get screenshot image!
CGImageRef image = (CGImageRef) [[self screenshot] CGImage];
NSLog (@"made screenshot");

// prepare the pixel buffer
CVPixelBufferRef pixelBuffer = NULL;
CFDataRef imageData= CGDataProviderCopyData(CGImageGetDataProvider(image));
NSLog (@"copied image data");
cvErr = CVPixelBufferCreateWithBytes(kCFAllocatorDefault,
FRAME_WIDTH,
FRAME_HEIGHT,
kCVPixelFormatType_32BGRA,
(void*)CFDataGetBytePtr(imageData),
CGImageGetBytesPerRow(image),
NULL,
NULL,
NULL,
&pixelBuffer);
NSLog (@"CVPixelBufferCreateWithBytes returned %d", cvErr);

// calculate the time
CFAbsoluteTime thisFrameWallClockTime = CFAbsoluteTimeGetCurrent();
CFTimeInterval elapsedTime = thisFrameWallClockTime - firstFrameWallClockTime;
NSLog (@"elapsedTime: %f", elapsedTime);
CMTime presentationTime = CMTimeMake (elapsedTime * TIME_SCALE, TIME_SCALE);

// write the sample
BOOL appended = [assetWriterPixelBufferAdaptor appendPixelBuffer:pixelBuffer withPresentationTime:presentationTime];

if (appended) {
NSLog (@"appended sample at time %lf", CMTimeGetSeconds(presentationTime));
} else {
NSLog (@"failed to append");
[self stopRecording];
self.startStopButton.selected = NO;
}
}
}

它说存储在“imageData”中的对象存在潜在泄漏。任何人都可以帮我找出上述代码中的错误。当我也使用内存管理工具检查上面的代码时,存在内存泄漏。如果有人可以帮助我,那将是一个很大的帮助。

提前致谢!!

最佳答案

来自评论 -

完成后对您的 imageData 执行 CFRelease 吗?

您可以将其放在 NSLog (@"CVPixelBufferCreateWithBytes returned %d", cvErr); 之前或之后;

CFRelease(imageData);

关于iphone - 获取 CVPixelBuffer 中对象的潜在泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com