问题标签 [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 回答
8100 浏览

ios - iOS 中的 CVPixelBuffer 是什么?

根据 Apple 文档,它是存储在主内存中的图像,但这些图像如何用于制作电影?

0 投票
0 回答
145 浏览

ios - 是否可以将 PixelBufferPool 与 AVPlayerItemVideoOutput.copyPixelBuffer 一起使用?

根据我最近的经验,使用 PixelBufferPool 来存储像素缓冲区而不是一直创建新的缓冲区可以产生相当大的性能提升。

在我的应用程序中,我正在使用copyPixelBuffer从视频中读取缓冲区。从文档看来,似乎没有办法将指针传递给缓冲区来管理内存使用情况。如果是真的,为什么会这样?不是很强的性能损失吗?如果是假的,我该怎么做?

0 投票
1 回答
858 浏览

ios - AVPlayerItemVideoOutput copyPixelBufferForItemTime 在 iOS 上为特定视频提供不正确的 CVPixelBufferRef

您是否遇到过相同视频copyPixelBufferForItemTime在 iOS 上不正确的问题?

我有AVPlayerItemVideoOutput,挂合适AVPlayerItem。我调用copyPixelBufferForItemTime、接收CVPixelBufferRef然后从中检索 OpenGL 纹理。

对于此示例视频,CVPixelBufferRef 存在错误:

Mac 输出
bpr = 2400
width_real = 596
width_working = 600

iOS 输出
bpr = 2432
width_real = 596
width_working = 608

它是如何在 iOS 上呈现的:
在此处输入图像描述

在 Mac 上的渲染方式:
在此处输入图像描述

CVPixelBufferGetPixelFormatTypeBGRA在两个平台上返回。

编辑 在 iOS 上创建纹理时,我通过从像素缓冲区读取数据CVPixelBufferGetBaseAddress 并使用提供的大小CVPixelBufferGetWidth/ CVPixelBufferGetHeight

所以width_working只是为了调试。由于它 mismatch ,并且两者都没有width_real传递不起作用,我认为这是像素缓冲区的错误。width_workingwidth_real

0 投票
1 回答
1046 浏览

ios - 从 CVPixelBufferRef 获取 RAW 拜耳像素数据

我正在使用AVCaptureSession&AVCapturePhotoOutput以格式从设备的相机中捕获 RAW 照片数据kCVPixelFormatType_14Bayer_RGGB

我已经在AVCapturePhotoCaptureDelegate回调中获取原始照片样本缓冲区:

我现在正在尝试按照这个问题的答案来获取像素值,CVPixelBufferRef但是当使用 14 位 Bayer RGGB 像素格式而不是答案中提到的 32 位 RGB 格式时,我无法弄清楚如何做到这一点。

0 投票
2 回答
1453 浏览

ios - UIImage to CVPixelBuffer memory issue

I have a swift function that takes an UIImage and returns a CVPixelBuffer. When running this function multiple times, the memory keeps growing, leading to a crash.

What I already figured out:

  1. With instruments I isolated the memory problem in the image.draw line of code. It shows a lot of CGImage data kept in memory over the time.
  2. I isolated the function, so I'm sure that the problem is not in something that happen outside of it (in the caller), cause I removed all the code from there and the memory keeps growing.
  3. I tried dispatching the calls to this method, with some delay, to give time to the system to deallocate, but it's not working
  4. I tried wrapping multiple part of the code in autoreleasepool, still not working.
  5. I tried on the main thread, on utility.qos thread, etc, nothing changes
  6. I read every other question on StackOverflow, but looks like other people solutions aren't working in my case.

This is my code. Any help is appreciated, since I'm really banging my head on this one.

0 投票
5 回答
8561 浏览

ios - 从 ARKit 获取 RGB“CVPixelBuffer”

我正在尝试CVPixelBuffer从 Apple 的 ARKit 中获得 RGB 色彩空间。在func session(_ session: ARSession, didUpdate frame: ARFrame)方法中,ARSessionDelegate我得到了一个ARFrame. 在Displaying an AR Experience with Metal页面上,我发现这个像素缓冲区位于 YCbCr (YUV) 颜色空间中。

我需要将其转换为 RGB 颜色空间(我实际上需要CVPixelBuffer而不是UIImage)。我在 iOS 上找到了一些关于颜色转换的东西,但我无法在 Swift 3 中使用它。

0 投票
1 回答
20193 浏览

swift - 如何将 UIImage 转换为 CVPixelBuffer

Apple 的新 CoreML 框架有一个预测功能,它需要一个CVPixelBuffer. 为了分类,UIImage必须在两者之间进行转换。

我从 Apple 工程师那里得到的转换代码:

该解决方案速度很快,适用于灰度图像。必须根据图像类型进行的更改是:

  • 5号线| kCVPixelFormatType_OneComponent8到另一个OSTypekCVPixelFormatType_32ARGBRGB)
  • 8号线| colorSpace到另一个CGColorSpaceCGColorSpaceCreateDeviceRGBRGB)
  • 9号线| bitsPerComponent到内存每个像素的位数(RGB 为 32)
  • 9号线| bitmapInfo到非零CGBitmapInfo属性(kCGBitmapByteOrderDefault是默认值)
0 投票
2 回答
7537 浏览

ios - 调整 CVPixelBuffer 的大小

我正在尝试将 CVPixelBuffer 的大小调整为 128x128。我正在使用 750x750 的。我目前正在使用 CVPixelBuffer 创建一个新的 CGImage,我调整它的大小然后转换回 CVPixelBuffer。这是我的代码:

我也尝试过缩放 CIImage 然后转换它:

但这也没有用。

任何帮助表示赞赏。谢谢!

0 投票
1 回答
2725 浏览

ios - 将 UIImage 转换为 8-Gray 类型的像素缓冲区

我可以将 a 转换UIImage为 ARGB CVPixelBuffer,但现在我正在尝试将 a 转换UIImage为灰度缓冲区。自从代码通过以来,我以为我已经拥有了它,但是 coreML 模型抱怨说:

“错误域 = com.apple.CoreML 代码 = 1 “图像不是 8 灰色类型,而是不受支持 (40)”

CGContext这是我到目前为止的灰度:

任何帮助将不胜感激

0 投票
1 回答
1092 浏览

ios - 如何创建和重用 CVPixelBufferRef 数组?

在我的应用程序中,我需要

  1. 创建 24 个CVPixelBufferRef
  2. 稍后以自定义顺序将它们添加到AVAssetWriterInputPixelBufferAdaptor以编写 mp4 电影。

VideoExport ::addFrame函数接收原始像素数据并将其存储在下一个空的 CVPixelBufferRef 中。这是演示代码:

像素缓冲区似乎已成功填充。问题是当我尝试通过更改将不同的帧写入电影文件indexbuffers[index],相同的帧被保存,一遍又一遍。

被保存的帧似乎总是我发送到的最后一个帧addFrame,挫败了我使用一组唯一缓冲区的尝试。我怀疑任何调用都会addFrame覆盖以前的数据。

注1:我已经测试了发送到的像素addFrame是唯一的。

注意 2:如果我立即将帧添加到电影中,addFrame则生成的电影具有独特的帧,但我无法调整帧顺序。

创建和重用CVPixelBufferRef数组的正确方法是什么?会pixelBufferPool有所帮助,如果可以,我该如何使用它?

谢谢你。