问题标签 [iosurface]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 朴素表面网络算法的工作流程
我目前正在研究等值面提取算法。我在这里找到了关于它的介绍,其中包含工作Javascript代码。我必须注意到我不是 Javascript 编码器。我主要是 Java 和 F#,但是我能够将代码移植到 F#。
毕竟我目前的问题是理解表面网络算法的实现。(下面提供了链接)。它是由博客/介绍的作者制作的。
197 行 (169 sloc) 6.38 KB 从这里
我将在这里写下我理解的和我不清楚的:
我如何理解算法:
制作一个 cube_edges(或者更确切地说是顶点列表)组合列表和一个边列表(查找表)
迭代整个网格,根据它们的拓扑(依赖于边列表)插入当前单元格/立方体中每个顶点的浮点值。
推回顶点并设置面。
我不清楚的是:
- 我已经在 Internet 上搜索了生成 edges_table 的算法,但没有找到。有人可以向我解释吗?
- 面是如何相互连接的。在制作面孔的最后一个片段中会发生什么?
我愿意改进我的问题以符合规则。
objective-c - 使用 CGDisplayStream 编码 H.264 压缩会话
我正在尝试使用我屏幕上的数据创建一个 H.264 压缩会话。我创建了一个CGDisplayStreamRef
这样的实例:
以下是我目前如何设置编码功能:
我试图了解如何将屏幕上的数据转换为 a CMSampleBufferRef
,以便正确调用我的编码函数。到目前为止,我还无法确定这是否可能,或者我正在尝试做的事情的正确方法。有没有人有什么建议?
编辑:我已经IOSurface
转换为 a CMBlockBuffer
,但还没有弄清楚如何将其转换为 a CMSampleBufferRef
:
编辑 2
还有一些进展:
ios - 如何在 Swift 中创建 IOSurface
我正在尝试在 Swift 中创建一个 IOSurface,然后从中创建一个 CIImage。IOSurfaceRef 看起来不错,但 CIImage 返回 nil:
请问有什么建议吗?我猜 CIImage 初始化器需要更多的元数据来完成它的工作,但我不知道是什么。
ios - 有没有办法在没有内部缓存的情况下从 CGImage 读取数据?
我正在与CGContextDrawImage
/CGDataProviderCopyData
函数中的内部缓存(15 mp 图像大约 90 MB)作斗争。
这是分析器中的堆栈跟踪:
在所有情况下,IOSurface
都被创建为“缓存”,并且在@autoreleasepool
耗尽后不会被清除。
这使得应用程序生存的机会非常少。
缓存不依赖于图像大小:我尝试渲染,512x512
以及(全尺寸) 图像块。4500x512
4500x2500
在清理它们之前 ,我使用@autoreleasepool
,CFGetRetainCount
返回1
所有对象。CG
操作数据的代码:
我所知道的IOSurface
:它来自以前的私有框架IOSurface
。
CIContext
有一个功能render: ... toIOSurface:
。
我已经创建了 myIOSurfaceRef
并将其传递给了这个函数,内部实现仍然创建了自己的表面,并且不清理它。
那么,您是否知道(或假设): 1. 除了/
之外,还有其他方法可以读取 CGImage 的数据缓冲区
吗?
2. 有没有办法在渲染时禁用缓存?
3. 为什么会发生缓存?
4. 我可以使用一些较低级别的(非私有的)API 来手动清理系统内存吗?CGContextDrawImage
CGDataProviderCopyData
欢迎任何建议。
macos - 如何跨进程同步 MTLTexture 和 IOSurface?
在写入同时用作主应用程序中IOSurface
的后备存储的 XPC 进程中时,我需要使用哪些 API,需要采取哪些预防措施?MTLTexture
在我的 XPC 服务中,我有以下内容:
在我的应用程序中,我有以下内容:
我有一个MTKView
正在运行它的正常更新循环。我希望我的 XPC 服务能够定期写入IOSurface
使用的 Core Image,然后让 Metal 在应用程序端呈现新内容。
需要什么同步来确保正确完成?双重或三重缓冲策略是一种,但这对我来说并不适用,因为我可能没有足够的内存来分配 2 倍或 3 倍的表面数量。(上面的例子为了清晰起见使用了一个表面,但实际上我可能有几十个表面我正在绘制。每个表面代表图像的一个平铺。图像可以像 JPG/TIFF/etc 允许的那样大。)
WWDC 2010-442 谈到IOSurface
并简要提到这一切都“正常工作”,但这是在 OpenGL 的上下文中,并没有提到 Core Image 或 Metal。
我最初认为 Core Image 和/或 Metal 会调用IOSurfaceLock()
并IOSurfaceUnlock()
保护读/写访问,但事实并非如此。(头文件中的注释IOSurfaceRef.h
表明锁定仅用于 CPU 访问。)
我真的可以让 Core Image 随意CIRenderDestination
写入我从应用程序更新循环中IOSurface
读取的相应内容吗?MTLTexture
如果是这样,那么如果正如 WWDC 视频所述,绑定到一个的所有纹理IOSurface
共享相同的视频内存,那怎么可能呢?如果读取和写入发生在同一个通道中,我肯定会撕裂表面的内容。
objective-c - 您可以重复使用已清除的 IOSurface 吗?
TL;DR:IOSurfaceRef
在清除并且其状态更改为之后写入的有效表面是否有效kIOSurfacePurgeableEmpty
?
我试图更好地理解IOSurface
被清除的含义。我遇到的唯一文档是在IOSurfaceRef.h
,我遇到的唯一示例代码是在 WebKit 中。
我正在使用命令行工具memory_pressure
模拟 10 秒的关键内存压力环境,如下所示:
我编写了一个非常简单的应用程序,它分配了 100 个IOSurfaces
具有相同属性的数据。当我使用 Instruments 测量内存分配时,我看到VM: IOSurface
大约 6GB,每个表面大约 6MB。(4096x4096x4)
然后我将每个的可清除状态更改IOSurface
为kIOSurfacePurgeableVolatile
并运行 memory_pressure 模拟。
Instruments 仍然报告说我分配了 6GB 的表面。但是,如果我检查每个表面的可清除状态,它们会被标记为kIOSurfacePurgeableEmpty
。
所以看起来它们已成功清除,但内存仍分配给我的应用程序。为什么会这样?这些表面处于什么状态?
头文件指出我应该假设它们中有“未定义的内容”。很公平。
但是实际IOSurfaceRef
或IOSurface *
对象仍然有效吗?我可以成功查询它的所有属性,并且可以成功锁定它以进行读写。
即使它的内容已被清除,我是否可以只重用该对象,或者我是否必须丢弃该实例并创建一个全新的 IOSurface?
macOS 10.14
ios - VTDecompressionSession - IOSurface分配逐渐增加
我正在使用 VTDecompressionSession 来解码 .h264 流。解码器按预期工作,我得到正确解码的缓冲区。但是,我看到 XCode 工具“Allocations”中的“Created And Persistent”分配逐渐增加。如屏幕截图所示,这些可以归因于解码器内部分配的 IOSurface 缓冲区,即使在 VTDecompressionSession 释放后这些缓冲区也不会被释放。我在同步解码和异步回调 decompressionSessionDecodeFrameCallback 中都看到了这些情况。剩余的帧数在发生和时间上是随机的。这些缓冲区的大小正好等于解码帧的大小。在使解码器会话无效之前,我确实调用了 VTDecompressionSessionWaitForAsynchronousFrames,但这些分配不会消失。有没有办法在解码器会话结束时释放这些 IOSurface 缓冲区?
这是我的解码器运行的大纲。创建解码器会话
当 NALU 数据包准备好时调用进行解码
打回来
结束解码器会话
ios - CoreVideo / IOSurface:未知像素格式
我正在尝试使用两者CVPixelBufferCreateWithIOSurface
以及通过读取像素来捕获 IOSurface IOSurfaceGetBaseAddressOfPlane
。
但是,在较新的设备(iPhone XS)上,我得到了一个未知的像素格式&wq2
(同样,同时使用IOSurfaceGetPixelFormat
和CVPixelBufferGetPixelFormatType
)。
CVPixelFormatDescriptionCreateWithPixelFormatType
返回以下内容:
我的代码在旧设备上完美运行(它BGRA
以像素格式返回),但在我认为是较新设备的情况下分解。如何从这种未记录的格式中解组像素。
swift - 不支持的 IOSurface 格式:0x26424741 在场景包中使用 twilio 视频
我正在使用 twilio 发送视频并在场景包中使用该视频作为纹理。但问题是它在 iPhone X 上运行良好,但Unsupported IOSurface format: 0x26424741
在 iPhone XR 和 XS 上却出现了这个错误。
这就是我正在做的事情:
获取视频:
代表:
并将视频添加到飞机: