在我的文件中添加一个(方便的)计算height
属性会导致Swift编译器出现段错误......这里可能出现什么问题?UIView
UIViewExtension.swift
0 swift 0x00000001061e5608 llvm::sys::PrintStackTrace(__sFILE*) + 40
1 swift 0x00000001061e5af4 SignalHandler(int) + 452
2 libsystem_platform.dylib 0x00007fff894da5aa _sigtramp + 26
3 libsystem_platform.dylib 0xb03939841e997c88 _sigtramp + 2504775416
4 swift 0x00000001064c8bb9 swift::NominalTypeDecl::getMembers(bool) const + 41
5 swift 0x00000001055efab9 swift::irgen::ClassMetadataLayout<(anonymous namespace)::FindClassMethodIndex>::addClassMembers(swift::ClassDecl*) + 329
6 swift 0x00000001055e97b2 swift::irgen::emitVirtualMethodValue(swift::irgen::IRGenFunction&, llvm::Value*, swift::SILType, swift::SILDeclRef, swift::CanTypeWrapper<swift::SILFunctionType>, swift::ResilienceExpansion) + 434
7 swift 0x00000001056550d3 swift::SILVisitor<(anonymous namespace)::IRGenSILFunction, void>::visit(swift::ValueBase*) + 42611
8 swift 0x000000010564a266 swift::irgen::IRGenModule::emitSILFunction(swift::SILFunction*) + 8678
9 swift 0x00000001055cb6f8 swift::irgen::IRGenModule::emitGlobalTopLevel() + 184
10 swift 0x00000001056376e3 performIRGeneration(swift::IRGenOptions&, swift::Module*, swift::SILModule*, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个CMSampleBuffer的副本,该副本由captureOutput在a中返回AVCaptureAudioDataOutputSampleBufferDelegate
.
我遇到的问题是,captureOutput:didOutputSampleBuffer:fromConnection:
在我保留CFArray
了很长一段时间之后,来自委托方法的框架被丢弃了.
显然,我需要创建传入缓冲区的深层副本以供进一步处理.我也知道CMSampleBufferCreateCopy
只会创建浅拷贝.
SO上提出的相关问题很少:
但它们都没有帮助我使用12个参数正确使用CMSampleBufferCreate函数:
CMSampleBufferRef copyBuffer;
CMBlockBufferRef data = CMSampleBufferGetDataBuffer(sampleBuffer);
CMFormatDescriptionRef formatDescription = CMSampleBufferGetFormatDescription(sampleBuffer);
CMItemCount itemCount = CMSampleBufferGetNumSamples(sampleBuffer);
CMTime duration = CMSampleBufferGetDuration(sampleBuffer);
CMTime presentationStamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
CMSampleTimingInfo timingInfo;
timingInfo.duration = duration;
timingInfo.presentationTimeStamp = presentationStamp;
timingInfo.decodeTimeStamp = CMSampleBufferGetDecodeTimeStamp(sampleBuffer);
size_t sampleSize = CMBlockBufferGetDataLength(data);
CMBlockBufferRef sampleData;
if (CMBlockBufferCopyDataBytes(data, 0, sampleSize, &sampleData) != kCMBlockBufferNoErr) {
VLog(@"error during copying sample buffer");
}
// Here I tried data and sampleData CMBlockBuffer …
Run Code Online (Sandbox Code Playgroud) 以前曾经问过这个问题,但是有问题的话,Swift的内容一定有所改变.我正在尝试存储CMSampleBuffer
从AVCaptureSession
以后处理的对象.经过一些实验,我发现AVCaptureSession
必须重复使用它的CMSampleBuffer
引用.当我试图保持超过15时会话挂起.所以我想我会复制样本缓冲区.但我似乎无法让它发挥作用.这是我写的:
var allocator: Unmanaged<CFAllocator>! = CFAllocatorGetDefault()
var bufferCopy: UnsafeMutablePointer<CMSampleBuffer?>
let err = CMSampleBufferCreateCopy(allocator.takeRetainedValue(), sampleBuffer, bufferCopy)
if err == noErr {
bufferArray.append(bufferCopy.memory!)
} else {
NSLog("Failed to copy buffer. Error: \(err)")
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为它说Variable 'bufferCopy' used before being initialized
.我看了很多例子,他们要么编译也不能工作,否则他们就不会编译.
有谁看到我在这里做错了什么?