问题标签 [cvpixelbuffer]

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 投票
3 回答
6947 浏览

ios - 如何将 CVImageBuffer 转换为 UIImage?

我有tmpPixelBuffer像素缓冲区数据的临时变量,它不是nil,当检测到元数据对象时,我想从该缓冲区创建图像,因此我可以从该图像中裁剪元数据图像。

图像总是nil,我做错了什么?

我也尝试这样做:

但在这种情况下 UIImage 是不可读的。

0 投票
0 回答
135 浏览

macos - 将 NSAttributedString 绘制到 CVPixelBufferRef 中的最快方法是什么

NSAttributedString:drawAtPoint将文本通过RGBA32获取的最高效方法是CVPixelBufferRef什么?

只是为了澄清我的目标......

在播放电影时,我正在以CVPixelBufferRef@60fps 的速度收到物品。CVDisplayLink这些被包裹起来CMSampleBuffers输出。我使用 Apple 的“AVGreenScreenPlayer”示例代码作为我的工作基础。

我有一个NSAttributedString代表字符串的对象(例如@“ABC”)。我想把它画到一个小背景上(可能),然后把这个带有背景的文本画到CVPixelBufferRef正在播放的视频的一角。

虽然使用 aCIFilter可能是性能最高的,但我需要访问包含 video+overlay 结果为 aCVPixelBuffer或的视频帧vImageBuffer

对于 MacOSX 10.10.3。- 目标 C。

0 投票
1 回答
360 浏览

ios - 从 UIImages 导出时,iOS AVAssetWriter 视频高度“压扁”

我们正在使用来自 UIImages 的 AVAssetWriter 导出视频,这些视频首先转换为 CVPixelBufferRef 的 - 但图像在视频中被底部的 160 像素高的空像素黑色“条”“压扁”。

鉴于图像为 640x480,事实上可以看到 160 像素的黑条 - 就好像图像被旋转并且底部丢失了 - 但是 - 当我们查看视频图像时 - 捕获了相同高度的图像- 它只是被“压扁”以适合黑条。

下面是我们的 UIImage 到 CVBufferPixelRef 的代码。

任何想法可能导致这种行为?

0 投票
1 回答
3511 浏览

ios - VTCompressionSessionEncodeFrame 错误代码 -12902

我有一个函数,它接受一个 CVImageBufferRef 并将其传递给我的 VTCompressionSession 进行处理。

VTCompressionSession 已启动,我对 VTCompressionSessionCreate 的调用成功。

我正在从照片库中检索视频 URL 并使用以下内容对其进行处理:

该块基本上只是调用

状态为-12902。我在此站点上查看了有关状态的信息,但找不到任何其他相关信息。该网站说错误是kVTParameterErr.

我的 VTCompressionOutputCallback 没有被调用。

谁能向我解释这个错误代码?

0 投票
0 回答
385 浏览

opengl - SpriteKit——我可以获得底层像素缓冲区吗?

我想访问SpriteKit场景的底层 OpenGL 上下文,因此我可以在其上执行glReadPixels30/60fps 的操作,以便在渲染时获得场景的 RGB32 像素缓冲区图像表示。

理想情况下,我喜欢CVPixelBuffersSpriteKit/SceneKit渲染发生时访问类似的东西。

我很清楚我无法访问 SpriteKit 场景中的底层 OpenGL 上下文。这种情况已经有一段时间了。

但是,随着 的引入SceneKit,有可能使用SCNSceneRenderer暴露了 OpenGL 上下文属性的协议......嗯。

现在......如果我overlaySKScene:在 a SceneKit's中进行调用SCNSceneRenderer,这是否有效地允许我访问所需的像素缓冲区图像?

我无意在 3D ( SceneKit) 中做任何有意义的事情,但我的大部分工作将在SpriteKit(2D) 中完成。

有没有人尝试过这样的事情?

PS:(如果使用Metal,是SCNBufferSteam一个东西?那呢SCNTechnique?)

0 投票
4 回答
3271 浏览

ios9 - - copyPixelBufferForItemTime:itemTimeForDisplay: 空值

我遇到的问题是,当我使用 iOS9 sdk 编译我的应用程序时,当我的应用程序尝试CVPixelBufferRef从一个函数中获取一个时,当加载视频并创建所有实例时AVPlayerItemVideoOutput- copyPixelBufferForItemTime:itemTimeForDisplay:我不时得到一个空值。

使用 iOS 8,我的应用程序运行良好,但使用 iOS9 时出现问题,即使应用商店中可供下载且使用 iOS 8 SDK 编译的应用程序版本在安装时也会出现同样的问题IOS9。

当问题发生并且我得到一个 nullgetCVPixelBufferRef时,如果我按下主页按钮并且应用程序在我再次打开应用程序并变为活动状态时进入后台,AVPlayerItemVideoOutput那么给我 null 的实例CVPixelBufferRef开始正常工作并且问题得到解决。

这是一个 youtube 视频,我在其中复制了该问题:

https://www.youtube.com/watch?v=997zG08_DMM&feature=youtu.be

以下是创建所有项目实例的示例代码:

这是给我空像素缓冲区的示例代码

0 投票
1 回答
606 浏览

ios - 来自 iOS 相机的引用 CVPixelBuffer 的限制

我有一个应用程序,用于保存来自 iOS 相机的帧(CVPixelBuffer)。我使用委托方法 -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer (CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

由于最近的 iOS 更新没有更多的帧通过委托方法到达,如果前一次没有发布。现在需要在新帧到来之前调用存储的帧CVPixelBufferUnlockBaseAddressCVPixelBufferRelease

为什么会这样?我认为有一些硬件优化,但我找不到细节。

0 投票
2 回答
2447 浏览

swift2 - iOS CVPixelBuffer在swift 2中创建泄漏内存

我正在尝试将图像转换为视频,正确的方法似乎是使用带有 AVAssetWriterInputPixelBufferAdaptor 的 AVAssetWriter,它运行良好,但它会泄漏内存。

当我将 CGImage 转换为 CVPixelBuffer 时,我调用 CVPixelBufferCreate,它永远不会释放它的内存。

这是调用 CGImageToPixelBuffer 的代码

CVPixelBufferRelease 在 swift 2 中不可用

CVPixelBufferCreate 在 swift 2 中没有返回非托管指针,所以我不能使用这个家伙的代码

我尝试在 unsafepointer 上手动调用 destroy 和 dealloc,但无济于事。

每次调用它都会增加内存使用量,如果调用足够多,则会导致设备崩溃 内存配置文件

任何帮助或建议将不胜感激。

0 投票
1 回答
1099 浏览

swift - 如何在 Swift 中创建 CVPixelBuffer 属性字典

要在Objective-C中创建 CVPixelBuffer 属性,我会这样做:

然后在CVPixelBufferCreate肉类中,我将(__bridge CFDictionaryRef) attributes作为参数传递。

Swift中,我试图像这样创建我的字典:

但我发现 CFString 不是可哈希的,而且我一直无法让它工作。

有人可以提供一个例子来说明这在 Swift 中是如何工作的吗?

0 投票
1 回答
931 浏览

ios - 为什么 AVFoundation 不接受我在 iOS 设备上的平面像素缓冲区?

我一直在努力弄清楚我的代码有什么问题。我正在创建一个平面CVPixelBufferRef来写入AVAssetWriter. 这个像素缓冲区是通过其他一些过程手动创建的(即,我没有从相机或类似的东西中获取这些样本)。在 iOS 模拟器上,添加样本和创建有效的输出影片没有问题。

但是在设备上,它在第一个示例时立即失败,并提供了一些无用的错误信息:

AVAssetWriterError: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x12fd2c670 {Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-12780), NSLocalizedDescription=The operation could not be completed}

我对像素格式非常陌生,如果我以某种方式创建了无效的像素缓冲区,我不会感到惊讶,但它在模拟器(即 OS X)上运行良好的事实让我感到困惑。

这是我的代码:

success总是NO,并且资产编写器的错误是我在上面粘贴的。

我还尝试手动创建样本缓冲区,而不是AVAssetWriterInputPixelBufferAdaptor仅仅使用它来消除可能的问题,但结果是相同的。

同样,这确实适用于模拟器,所以我知道我的像素缓冲区确实包含正确的数据。

另外,我验证了我可以写入文件目标。我尝试在该位置创建一个虚拟文件,它成功了。

我想避免将我的缓冲区转换为 RGB,因为我不应该这样做。我一开始就有 Y'CbCr 缓冲区,我只想将它们编码为支持 Y'CbCr 的 H.264 视频。

创建这些缓冲区的源声明如下:

The image is currently always 3-channel YCbCr, with 4:2:0 chroma.

我确认它总是进入处理 8 位 YUV 通道的循环逻辑。

我究竟做错了什么?