gpt4 book ai didi

pointers - 在 Swift 中清理 AVCaptureSession

转载 作者:行者123 更新时间:2023-11-28 09:19:57 25 4
gpt4 key购买 nike

我有一个 Swift 项目,它使用 AVCaptureSession 在应用程序中拍照。我很难获得正确的语法来正确清理我的对象。在 Obj-C 中,建议的代码如下;

// Releases the object - used for late session cleanup
static void capture_cleanup(void* p)
{
NewPostPreviewViewController* csc = (NewPostPreviewViewController*)p;
[csc release]; // releases capture session if dealloc is called
}

// Stops the capture - this stops the capture, and upon stopping completion releases self.
- (void)stopCapture {
// Retain self, it will be released in capture_cleanup. This is to ensure cleanup is done properly,
// without the object being released in the middle of it.
[self retain];

// Stop the session
[session stopRunning];

// Add cleanup code when dispatch queue end
dispatch_queue_t queue = dispatch_queue_create("VideoDataOutputQueue", NULL);
dispatch_set_context(queue, self);
dispatch_set_finalizer_f(queue, capture_cleanup);
[dataOutput setSampleBufferDelegate: self queue: queue];
dispatch_release(queue);
}

终结器会调用 capture_cleanup 但我不知道如何设置上下文或指向 capture_cleanup 函数的指针(甚至不知道函数定义是什么样的)

到目前为止,我已经尝试了以下方法,但我不确定我是否走在正确的轨道上;

let p: UnsafeMutablePointer<NewPostPreviewViewController> = UnsafeMutablePointer.alloc(sizeof(NewPostPreviewViewController))
p.initialize(self)

var videoDataOutputQueue = dispatch_queue_create("VideoDataOutputQueue", nil)
dispatch_set_context(videoDataOutputQueue, p)
dispatch_set_finalizer_f(videoDataOutputQueue, ????);
self.videoDataOutput!.setSampleBufferDelegate(self, queue: videoDataOutputQueue)
dispatch_release(videoDataOutputQueue)

非常感谢任何帮助转换它!

最佳答案

使用桥接到 Objective-C 代码解决。通过在我的 Swift 项目中包含一个 CameraController.m Objective-C 类(带有关联的 header ),我桥接了对相机源的访问。

Objective-C 类完成我需要的所有工作,并存储最后拍摄的图像。它还会在拍摄图像后生成通知,允许我的 Swift 类观察通知并获取最后拍摄的图像。

关于pointers - 在 Swift 中清理 AVCaptureSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25613900/

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