问题标签 [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 投票
1 回答
661 浏览

swift - 访问已使用 Padding 扩展的 CVPixelBuffer 之外的像素

我正在尝试扩展 CVPixelBuffer,以便通过使用填充重新初始化 CVPixelBuffer 来访问缓冲区外部的内存不会导致 EXC_BAD_ACCESS 错误。但是,它似乎不起作用。任何关于我做错了什么的提示将不胜感激。

使用扩展的 CVPixelBuffer,访问 CVPixelBuffer 之外的数据(例如当 x,y 为负数或大于缓冲区的宽度/高度时)应该是根据我的理解定义的行为。然而,以下代码在 VImageScale_ARGB8888 内部的最后一行崩溃,EXC_BAD_ACCESS 代码为 1。

这大概意味着正在访问的数据正在被取消映射。

非常感谢!

0 投票
0 回答
254 浏览

ios - 如何将 YUV 数据转换为 CVPixelBufferRef?

我有下面的 Yuv 数据:

现在如何将其转换为CVPixelBufferRef?

0 投票
1 回答
1146 浏览

opengl - 如何将现有的 OpenGL 纹理转换为金属纹理

我正在为 Motion 和 FCP X 开发一些 FxPlug 插件。最终,我想让它们在 Metal 中渲染,因为 Apple 正在弃用 OpenGL。

我目前正在使用 CoreImage,虽然我已经能够使用 CoreImage 功能在 FxPlug SDK 之外进行金属处理,但 FxPlug 只为我提供了作为 OpenGL 纹理的帧。我试过把它传递给 CoreImage 过滤器,但我最终得到了这个错误:

经过一番研究,我发现我应该可以使用 CVPixelBuffers 在两者之间共享纹理,但是在尝试使用这种方法编写代码一段时间后,我开始相信这是一种编写方式(如,从头开始创建)到共享缓冲区,但不能在两者之间转换。虽然这可能不正确,但我找不到让现有 GL 纹理存在于 CVPixelBuffer 中的方法。

TL; DR:我找到了从 CVPixelBuffer 获取结果 Metal 或 OpenGL 纹理的方法,但我找不到从现有 OpenGL 纹理创建 CVPixelBuffer 的方法。我的心不在这种方法上,因为我的最终目标是简单地从 OpenGL 转换为 Metal,然后再转换回 OpenGL(理想情况下以一种有效的方式)。

有没有其他人找到使用 FxPlug 和 Metal 的方法?有没有一种从 OpenGL 纹理转换为 Metal/CVPixelBuffer 的好方法?

0 投票
0 回答
391 浏览

avassetwriter - iOS - AVassetWriter 输出大小为 0 的文件并且不给出错误

我对 swift(和编程)仍然很陌生,我正在尝试将从 ARFrame 获得的 CVPixelbuffer 实时输出到视频中(顶部没有 AR 的东西)。

我已经设置了 AVAssetWriter 和 Input,并在每一帧上尝试附加 CVPixelbuffer(转换为 CMSampleBuffer)。

该代码创建了一个 0 字节的文件并且没有给出任何错误。我不知道出了什么问题,而且文档对于我的级别来说相当神秘。

我很确定每帧的时间戳不正确。但我无法弄清楚每一帧是否需要时间,或者自视频开始以来的总时间。

然后是 cvPixelBuffer 的大小和格式。我也不知道我是否需要告诉 AVAssetwriter 即将到来的数据的大小和格式是什么,或者它是否可以自己解决。

感谢您的时间。

0 投票
1 回答
95 浏览

swift - TokBox:使用修改后的像素缓冲区时“consumeFrame”崩溃

我正在尝试将像素缓冲区从实时视频源修改AVFoundation为流式传输OpenTok's API。但是每当我尝试这样做并通过 OpenTok 提供它时consumeFrame,它就会崩溃。

我这样做是为了可以应用不同的实时视频效果(滤镜、贴纸等)。我尝试CGImage->CVPixelBuffer使用不同的方法进行转换,但没有任何效果。

这是我的CGImage->CVPixelBuffer方法:

我在第一帧收到此错误:

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[NSConcretePointerArray pointerAtIndex:]:尝试访问索引 1 处的指针超出边界 1”

如果你做到了这一步,谢谢你的阅读。我已经在这个问题上停留了一段时间,所以任何类型的指针都将不胜感激。谢谢。

0 投票
1 回答
309 浏览

macos - CMSampleBufferGetImageBuffer 为捕获的 JPEG stillImage 返回 nil

我使用JPEG格式捕获Mac屏幕,然后获取捕获的JPEG样本缓冲区的pixelBuffer和imageBuffer。但是,pixelBuffer 始终为零,而当我将 JPEG 缓冲区转换为 NSImage 时,可以成功获取并显示图像。

在 processSampleBuffer 中 self.image 可以得到一个 NSImage 并成功显示在 NSImageView 中。但 imageBuffer 和 pixelBuffer 都是零。

这让我很困惑,有人可以帮忙看看吗?

0 投票
0 回答
54 浏览

swift - 为 coreML 模型提供图像时出现运行时异常

我正在尝试学习 Apple 的 CoreML 框架,为此我创建了一个非常简单的 CoreML 模型,该模型将判断图像显示的是苹果还是香蕉。为此,我在 Assets.xcassets 目录中有一个苹果的图像,当我按下一个按钮时,我希望这个图像传递到我的模型中,我希望得到关于它的正确信息。

现在我收到一个错误。我得到的错误是 Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

错误在该行旁边 guard let fruitName = try? model.prediction(image: image as! CVPixelBuffer) else{ fatalError("Unexpected runtime error.") }

我不确定是什么导致了错误。我能想到的唯一原因是我没有正确格式化图像。该模型需要一个 CVPixelBuffer,我不确定我从 UIImage 到 CVPixelBuffer 的转换是否正确。

我究竟做错了什么?

感谢所有帮助!

0 投票
3 回答
7812 浏览

swift - 如何在 Swift 中直接从 CIImage 而不是 UIImage 制作 CVPixelBuffer?

我正在通过 iPhone 摄像头录制过滤后的视频,在录制时将 CIImage 实时转换为 UIImage 时,CPU 使用率会大幅增加。我制作 CVPixelBuffer 的缓冲区函数使用 UIImage,到目前为止,这需要我进行此转换。如果可能的话,我想创建一个使用 CIImage 的缓冲区函数,这样我就可以跳过从 UIImage 到 CIImage 的转换。我认为这将大大提高录制视频时的性能,因为 CPU 和 GPU 之间不会有任何切换。

这就是我现在所拥有的。在我的 captureOutput 函数中,我从 CIImage 创建了一个 UIImage,它是过滤后的图像。我使用 UIImage 从缓冲区函数创建一个 CVPixelBuffer,并将其附加到assetWriter 的pixelBufferInput:

我使用 UIImage 的缓冲区函数:

0 投票
1 回答
1890 浏览

ios - WebRTC iOS:从 RTCCameraVideoCapturer 过滤相机流。从 RTCFrame 到 CVPixelBuffer 的转换

我发现下面的git 通过使用func capturer(_ capturer: RTCVideoCapturer, didCapture frame: RTCVideoFrame). RTCVideoCapturerDelegate你得到RTCVideoFrame然后转换CVPixelBuffer为修改。

https://gist.github.com/lyokato/d041f16b94c84753b5e877211874c6fc

但是,我发现 Chronium 说获取 PixelBuffer 的 nativeHandle 不再可用(链接如下)。我尝试了 frame.buffer.pixelbuffer ...,但是,查看 framework > Headers > RTCVideoFrameBuffer.h,我发现 CVPixelBuffer 也从这里消失了!

https://codereview.webrtc.org/2990253002

有什么好办法可以转换RTCVideoFrameCVPixelBuffer?还是我们有更好的方法来修改从 RTCCameraVideoCapturer 捕获的视频?

下面的链接建议直接修改 sdk,但希望我们可以在 Xcode 上实现这一点。

如何修改(添加过滤器)WebRTC 发送到其他对等方/服务器的摄像头流

0 投票
2 回答
704 浏览

swift - displayTransform 调用后图像方向错误

我正在尝试ARFrame使用以下方法从当前获取图像:



对于风景来说,效果很好。对于肖像,我以错误的角度获得图像(旋转 180 度)。知道为什么吗?

输出:

输出

预期的:

预期的