从 VTCompressionOutputCallback 中引用“self”[重复]

2023-12-14

我目前正在尝试使用 VideoToolbox 对来自AVCaptureVideoDataOutput,但我在引用时遇到问题self从内部VTCompressionOutputCallback.

我的代码如下:

...

var sessionRef: VTCompressionSession?

let outputCallback: VTCompressionOutputCallback = { _, _, status, _, sampleBuffer in
    guard status == noErr, let sampleBuffer = sampleBuffer else {
        return
    }

    debugPrint("[INFO]: outputCallback: sampleBuffer: \(sampleBuffer)")
}

let sessionErr = VTCompressionSessionCreate(allocator: nil,
                                            width: width,
                                            height: height,
                                            codecType: kCMVideoCodecType_H264,
                                            encoderSpecification: nil,
                                            imageBufferAttributes: nil,
                                            compressedDataAllocator: nil,
                                            outputCallback: outputCallback,
                                            refcon: nil,
                                            compressionSessionOut: UnsafeMutablePointer(&sessionRef))

...

这工作正常,并且打印输出符合预期,但是一旦我尝试添加对selfVTCompressionOutputCallback,它得到一个编译器错误,指出

A C function pointer cannot be formed from a closure that captures context

我该如何使用self从回调中?

先谢谢您的帮助。


我想出了一个解决办法。

The VTCompressionSessionCreate调用有一个参数outputCallbackRefCon它被传递给VTCompressionOutputCallback.

通过将自己包裹在UnsafeMutableRawPointer like so

let unmanagedSelf = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())

我能够将该值传递给VTCompressionSessionCreate在下面refcon范围。在回调内部,我可以使用以下命令将该值拉出来

let scopedSelf = Unmanaged<ViewController>.fromOpaque(unmanagedSelf).takeUnretainedValue()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 VTCompressionOutputCallback 中引用“self”[重复] 的相关文章

  • 为什么performSegueWithIdentifier在viewDidLoad中不起作用?

    我试图在视图控制器上调用 viewDidLoad 后立即触发故事板转场 Segue 附加了一个标识符 当从链接到按钮或其他控件的方法内部调用时 它可以正常工作 但它在 viewDidLoad 内部不起作用 它只是默默地失败了 viewDid
  • Swift 协议扩展实现另一个具有共享关联类型的协议

    考虑以下 protocol Foo typealias A func hello gt A protocol FooBar Foo func hi gt A extension FooBar func hello gt A return h
  • `navigator.geolocation.getCurrentPosition()` 在 iOS PWA 上挂起

    我有这个片段 const getCurrentPosition gt new Promise
  • AppStore 提交:错误 ITMS-9000:“无效的捆绑结构 - 不允许二进制文件‘MyApp.app/BuildAgent’

    我陷入了以下错误 我根本不明白 错误 ITMS 9000 无效的捆绑结构 不允许使用二进制文件 MyApp app BuildAgent 您的应用程序可能只包含一个可执行文件 当我使用 Xcode 从 Archive 导出到 IPA 时 我
  • 如何从 SDK 实现每个会话的 Google Places 自动完成功能?

    是否可以从 Android 和 iOS 应用程序的 place sdk 实现基于会话的自动完成 根据 6 月 11 日生效的新 Google 地图框架定价 对自动完成的请求可以分为基于击键 会话的请求 我找不到描述实施步骤的文档 除了这个参
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • 错误域=kAFAssistantErrorDomain 代码=209“(空)”

    我面临着一个问题SFSpeechRecognizer 启动应用程序几秒钟后 我开始收到错误消息 错误域 kAFAssistantErrorDomain 代码 209 空 和 错误 域 kAFAssistantErrorDomain 代码 2
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • 无法在 Swift 中对闭包进行弱引用

    Update 我试着不弱化地写一下 好像也没有漏的情况 所以也许这个问题已经没有必要了 在 Objective C ARC 中 当你想让一个闭包能够在闭包内部使用它自己时 该块不能捕获对自身的强引用 否则它将是一个保留循环 因此您可以使闭包
  • 从按钮执行 Segue 时应用程序冻结

    我的故事板中有一个按钮 它呈现一个带有模式序列的视图控制器 每次按下此按钮时 应用程序都会冻结 没有崩溃 也没有错误消息 prepareForSegue被调用 所有应该存在的视图控制器都在代码中prepareForSegue 但它们不会出现
  • 如何让UITextView背景线与文字对齐?

    我正在尝试绘制 UITextView 的背景线 这是我用来画这些线的代码 CGContextBeginPath context CGContextSetStrokeColorWithColor context self horizontal
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • 如何在button.addTarget操作中发送多个按钮?斯威夫特3

    如何将button和button2发送到我的pressButton2函数中 当用户触摸按钮2时 我需要更改按钮和按钮2的颜色 当我的 button2 addTarget 看起来像这样时 我收到错误 表达式列表中存在预期表达式 import
  • UItextView 背景颜色 Linespacing 区域太

    我正在尝试在 UITextView 中复制文本突出显示 不是搜索文本突出显示 但我也被行间距的颜色所困扰 我该如何纠正这个问题 现在的情况 期望的结果 我已将以下属性添加到我的 UiTextview 的属性文本中 对于段落行间距 我使用了以
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • SpriteKit的更新函数:时间与帧率

    一般来说 我对编程和 Spritekit 很陌生 并且有兴趣探索毫秒和帧率之间的关系 以及如何使用更新函数作为两者之间的中介 帧率与毫秒 从本质上讲 帧速率和时间之间的主要区别在于时间始终一致 而帧速率则不然 由于密集的图形程序 它可能会下

随机推荐

  • 无法从tomcat中自定义类加载器加载的类获取注释

    鉴于班级org popper example pages Login Page name Login public interface Login 出口到c pos example jar和以下 servlet public class P
  • JSP Servlet 会话 invalidate() 不会使会话为空

    我的 JSP 项目中有三个简单的 Http Servlet 类 LoginServlet Logout Servlet 和 Profile Servlet LoginServlet 通过为会话设置 name 属性来登录用户 LogoutSe
  • Lambda表达式编译方法

    我有几行代码 public void CreateMethod
  • 随机 MapView 强制关闭:NullPointerException com.google.googlenav.map.Tile.getTile

    我真的需要一些帮助 我有一份关于此堆栈跟踪强制关闭的报告 但我找不到任何有关如何防止的信息 也无法复制此类错误 我希望有人能够了解为什么会发生这种情况 com google googlenav map Tile getTile Unknow
  • include、include_once、require 还是 require_once?

    我有 PHP 文件 其中定义了服务器访问变量以及mysql connect and mysql select db 因为这个函数在后端的几乎每个页面中都经常使用 而我正在使用include 这现在对我来说非常有效 你会建议哪种方法或功能 我
  • 不可见元素的延迟加载

    我有一个案例 我有一个gridview listbox 任何类型的项目控件和绑定到控件的项目数量都很大 很容易在 5000 标记左右 其中每个项目都需要具有从各种 Web 服务加载的各种属性 显然 使用 Web 服务来一次性处理这么多元素是
  • 禁用 CURLOPT_SSL_VERIFYPEER (libcurl/openssl) 的安全后果

    我知道从这个线程禁用 CURLOPT SSL VERIFYHOST 时可能发生哪些攻击 我想知道禁用 VERIFYPEER 而不是 VERIFYHOST 时可能发生哪些攻击 使用信用卡付款的风险是否可以接受 我问的原因是因为我的code仅适
  • Pygame 蛇食物生成器

    我目前正在创建一个贪吃蛇游戏 我想创建一个食物生成器 根据我的游戏计时器每 10 秒生成一个苹果 计时器从 60 倒数到 0 游戏结束时 我希望每 10 秒生成一个新苹果 保留旧苹果 即使它还没有被吃掉 我不知道如何解决这个问题 需要一些帮
  • Windows Visual Studio 2008 中的 Unix Makefile

    我已经进行了不错的搜索 但似乎找不到一种方法让 Visual Studio 2008 使用 unix Makefile 甚至无法从 Makefile 创建一些与 MSVC 兼容的等效文件 有人有想法或类似的问题吗 注意 我已经知道使用 Ma
  • 在 macOS Big Sur 上将 Python 3.7 升级到 3.9

    我正在尝试在 macOS Big Sur 上将 Python 3 7 升级到 3 9 我还试图避免丢失在 Python 3 7 上安装的包并在 Python 3 9 上再次重新安装它们 我尝试使用 brew install python3
  • 是否可以仅使用 C# 以编程方式生成 X509 证书?

    我们正在尝试使用 C 和以下代码以编程方式生成 X509 证书 包括私钥 充气城堡图书馆 我们尝试使用一些代码这个样本由 Felix Kollmann 制作但证书的私钥部分返回 null 代码及单元测试如下 using System usi
  • 在 R 中拟合 Log Pearson III 时出现问题

    我想对我拥有的一些数据点执行对数 Pearson III 拟合 然而 每次我尝试这样做时 我都会收到错误消息 我真的不知道该怎么办 也许我应该补充一点 我从几天前才开始使用 R 所以 我不是这方面的专家 重要的代码部分 没有导入内容的部分等
  • 合并两个字典同时共享密钥

    我正在尝试构建一个小程序 给定一个包含姓名和地址的字典和另一个包含姓名和电话号码的字典 输出应该将它们合并 并且不会相互覆盖 最终输出字典应包含姓名 地址 如果可用 和电话 如果可用 这是一个例子 addr George via Wagne
  • 如何复制当前活动的浏览器 URL?

    我正在尝试获取活动浏览器窗口的当前活动浏览器 URL 有任何指针或代码示例吗 Code NSAppleScript script NSAppleScript alloc initWithSource tell application Saf
  • 调试无法检查变量

    while debugging in eclipse the problem is String hashCode line 1489 local variables unavailable thus not able to inspect
  • Android 网络服务 GPS 导航

    如何在应用程序导航中显示以查找方向和搜索任何地方 当我们在浏览器中打开谷歌地图时会发生这种情况 但我希望在应用程序中也有同样的情况 None
  • 获取已安装 COM 对象的 GUID

    我有一个 32 位 COM 对象 我想将其与 64 位 PHP 一起使用 我正在尝试按照这里的教程进行操作 http www gfi com blog 32bit object 64bit environment 但我被困在 找到你的 CO
  • ASP.NET Excel导出编码问题

    我正在 ASP NET 网站上进行一些 Excel 导出 除了编码之外 一切正常 当我在 Excel 中打开它时 它看起来像这样 Eingabe Kosten je Ger t Ger t 特殊情况 Betriebsmittel Heiz
  • Bootstrap:更改移动设备上全角列的顺序

    我有这样的架构 col 1 col 2 它们的宽度都是12块 和我的html div class col xs 12 col md 5 1 div div class col xs 12 col md 7 2 div 是否可以在 xs mo
  • 从 VTCompressionOutputCallback 中引用“self”[重复]

    这个问题在这里已经有答案了 我目前正在尝试使用 VideoToolbox 对来自AVCaptureVideoDataOutput 但我在引用时遇到问题self从内部VTCompressionOutputCallback 我的代码如下 var