问题标签 [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.

0 投票
1 回答
723 浏览

javascript - 朴素表面网络算法的工作流程

我目前正在研究等值面提取算法。我在这里找到了关于它的介绍,其中包含工作Javascript代码。我必须注意到我不是 Javascript 编码器。我主要是 Java 和 F#,但是我能够将代码移植到 F#。

毕竟我目前的问题是理解表面网络算法的实现。(下面提供了链接)。它是由博客/介绍的作者制作的。

197 行 (169 sloc) 6.38 KB 从这里

我将在这里写下我理解的和我不清楚的:

我如何理解算法:

  1. 制作一个 cube_edges(或者更确切地说是顶点列表)组合列表和一个边列表(查找表)

  2. 迭代整个网格,根据它们的拓扑(依赖于边列表)插入当前单元格/立方体中每个顶点的浮点值。

  3. 推回顶点并设置面。

我不清楚的是:

  1. 我已经在 Internet 上搜索了生成 edges_table 的算法,但没有找到。有人可以向我解释吗?
  2. 面是如何相互连接的。在制作面孔的最后一个片段中会发生什么?

我愿意改进我的问题以符合规则。

0 投票
1 回答
1203 浏览

objective-c - 使用 CGDisplayStream 编码 H.264 压缩会话

我正在尝试使用我屏幕上的数据创建一个 H.264 压缩会话。我创建了一个CGDisplayStreamRef这样的实例:

以下是我目前如何设置编码功能:

我试图了解如何将屏幕上的数据转换为 a CMSampleBufferRef,以便正确调用我的编码函数。到目前为止,我还无法确定这是否可能,或者我正在尝试做的事情的正确方法。有没有人有什么建议?

编辑:我已经IOSurface转换为 a CMBlockBuffer,但还没有弄清楚如何将其转换为 a CMSampleBufferRef

编辑 2

还有一些进展:

0 投票
1 回答
1220 浏览

ios - 如何在 Swift 中创建 IOSurface

我正在尝试在 Swift 中创建一个 IOSurface,然后从中创建一个 CIImage。IOSurfaceRef 看起来不错,但 CIImage 返回 nil:

请问有什么建议吗?我猜 CIImage 初始化器需要更多的元数据来完成它的工作,但我不知道是什么。

0 投票
2 回答
1191 浏览

ios - 有没有办法在没有内部缓存的情况下从 CGImage 读取数据?

我正在与CGContextDrawImage/CGDataProviderCopyData函数中的内部缓存(15 mp 图像大约 90 MB)作斗争。
这是分析器中的堆栈跟踪:

在此处输入图像描述

在所有情况下,IOSurface都被创建为“缓存”,并且在@autoreleasepool耗尽后不会被清除。
这使得应用程序生存的机会非常少。
缓存不依赖于图像大小:我尝试渲染,512x512以及(全尺寸) 图像块。4500x5124500x2500

在清理它们之前 ,我使用@autoreleasepool,CFGetRetainCount返回1所有对象。CG

操作数据的代码:


我所知道的IOSurface:它来自以前的私有框架IOSurface
CIContext有一个功能render: ... toIOSurface:
我已经创建了 myIOSurfaceRef并将其传递给了这个函数,内部实现仍然创建了自己的表面,并且不清理它。

那么,您是否知道(或假设): 1. 除了/
之外,还有其他方法可以读取 CGImage 的数据缓冲区 吗? 2. 有没有办法在渲染时禁用缓存? 3. 为什么会发生缓存? 4. 我可以使用一些较低级别的(非私有的)API 来手动清理系统内存吗?CGContextDrawImageCGDataProviderCopyData



欢迎任何建议。

0 投票
1 回答
1869 浏览

ios - IOSurface在iOS 12及以上版本逐渐增加内存

我在 iOS 12 及更高版本的应用程序中面临内存问题。IOSurface在 iOS 12.1.1 中逐渐同时增加,在 iOS 11 版本中运行良好。我附上了下面的问题截图,

在此处输入图像描述

为什么在 iOS 12 版本中会出现此问题?有人可以帮我解决这个问题吗?我交叉检查了 iOS 11 版本,它工作正常。

0 投票
1 回答
1301 浏览

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共享相同的视频内存,那怎么可能呢?如果读取和写入发生在同一个通道中,我肯定会撕裂表面的内容。

0 投票
1 回答
593 浏览

objective-c - 您可以重复使用已清除的 IOSurface 吗?

TL;DR:IOSurfaceRef在清除并且其状态更改为之后写入的有效表面是否有效kIOSurfacePurgeableEmpty


我试图更好地理解IOSurface被清除的含义。我遇到的唯一文档是在IOSurfaceRef.h,我遇到的唯一示例代码是在 WebKit 中。

我正在使用命令行工具memory_pressure模拟 10 秒的关键内存压力环境,如下所示:

我编写了一个非常简单的应用程序,它分配了 100 个IOSurfaces具有相同属性的数据。当我使用 Instruments 测量内存分配时,我看到VM: IOSurface大约 6GB,每个表面大约 6MB。(4096x4096x4)

然后我将每个的可清除状态更改IOSurfacekIOSurfacePurgeableVolatile并运行 memory_pressure 模拟。

Instruments 仍然报告说我分配了 6GB 的表面。但是,如果我检查每个表面的可清除状态,它们会被标记为kIOSurfacePurgeableEmpty

所以看起来它们已成功清除,但内存仍分配给我的应用程序。为什么会这样?这些表面处于什么状态?

头文件指出我应该假设它们中有“未定义的内容”。很公平。

但是实际IOSurfaceRefIOSurface *对象仍然有效吗?我可以成功查询它的所有属性,并且可以成功锁定它以进行读写。

即使它的内容已被清除,我是否可以只重用该对象,或者我是否必须丢弃该实例并创建一个全新的 IOSurface?

macOS 10.14

0 投票
1 回答
338 浏览

ios - VTDecompressionSession - IOSurface分配逐渐增加

我正在使用 VTDecompressionSession 来解码 .h264 流。解码器按预期工作,我得到正确解码的缓冲区。但是,我看到 XCode 工具“Allocations”中的“Created And Persistent”分配逐渐增加。如屏幕截图所示,这些可以归因于解码器内部分配的 IOSurface 缓冲区,即使在 VTDecompressionSession 释放后这些缓冲区也不会被释放。我在同步解码和异步回调 decompressionSessionDecodeFrameCallback 中都看到了这些情况。剩余的帧数在发生和时间上是随机的。这些缓冲区的大小正好等于解码帧的大小。在使解码器会话无效之前,我确实调用了 VTDecompressionSessionWaitForAsynchronousFrames,但这些分配不会消失。有没有办法在解码器会话结束时释放这些 IOSurface 缓冲区?

这是我的解码器运行的大纲。创建解码器会话

当 NALU 数据包准备好时调用进行解码

打回来

结束解码器会话

在此处输入图像描述

0 投票
1 回答
501 浏览

ios - CoreVideo / IOSurface:未知像素格式

我正在尝试使用两者CVPixelBufferCreateWithIOSurface以及通过读取像素来捕获 IOSurface IOSurfaceGetBaseAddressOfPlane

但是,在较新的设备(iPhone XS)上,我得到了一个未知的像素格式&wq2(同样,同时使用IOSurfaceGetPixelFormatCVPixelBufferGetPixelFormatType)。

CVPixelFormatDescriptionCreateWithPixelFormatType返回以下内容:

我的代码在旧设备上完美运行(它BGRA以像素格式返回),但在我认为是较新设备的情况下分解。如何从这种未记录的格式中解组像素。

0 投票
1 回答
116 浏览

swift - 不支持的 IOSurface 格式:0x26424741 在场景包中使用 twilio 视频

我正在使用 twilio 发送视频并在场景包中使用该视频作为纹理。但问题是它在 iPhone X 上运行良好,但Unsupported IOSurface format: 0x26424741在 iPhone XR 和 XS 上却出现了这个错误。

这就是我正在做的事情:

获取视频:

代表:

并将视频添加到飞机: