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

ios - 如何将文本绘制到 CIImage 中?

如何绘制CIImage(或者可能CVPixelBuffer是,但我想添加文本更容易CIImage)?不是 UIImage

AVAssetWriter我使用和CMSampleBuffer(来自视频、音频输入)录制视频(.mp4 文件)。在录制时我想在视频帧上添加文本,我已经转换CMSampleBufferCIImage,现在我需要以某种方式添加文本CIImage并转换回CVPixelBuffer. 我真的没有在 Swift 中找到任何简单的示例,如何添加(绘制)文本CIImage或添加任何其他内容(如线条、矩形,而不仅仅是文本)。

0 投票
0 回答
1593 浏览

ios - 带像素缓冲区的 vImage_Buffer 初始化

我正在使用以下代码从像素缓冲区初始化 vImage_Buffer。我已将 vImageBuffer_InitWithCVPixelBuffer 中的第二个参数作为 NULL (vImage_CGImageFormat) 传递,因此没有从像素缓冲区到 vImageBuffer 的内部格式转换。它在 XCode 中给出警告-“Null 传递给需要非空参数的被调用者”,但有效。问题是如果我将它转换为 Swift,它不会编译,因为它需要一个非零参数。以直通方式从像素缓冲区制作 vImage 缓冲区的正确方法是什么?甚至函数的声明都说第二个参数中的 NULL 值是可以接受的,但不确定为什么会出现警告。

0 投票
3 回答
3726 浏览

ios - 需要一些帮助将 cvpixelbuffer 数据转换为 iOS 中的 jpeg/png

因此,我试图获取通常在 iOS 图像深度示例中使用的灰度深度图的 jpeg/png 表示。深度数据作为辅助数据存储在每个 jpeg 中。我已经学习了一些教程,并且将这些灰度数据渲染到屏幕上没有问题,但是我找不到将其实际保存为 jpeg/png 表示的方法。我几乎使用此代码:https ://www.raywenderlich.com/168312/image-depth-maps-tutorial-ios-getting-started

深度数据被放入 acvpixelbuffer并进行相应的操作。我相信它的格式kCVPixelFormatType_DisparityFloat32

虽然我能够在屏幕上看到相应表示的这些数据,但我无法使用UIImagePNGRepresentationUIImageJPGRepresentation。当然,我可以手动捕获屏幕截图,但这并不理想。

我怀疑cvpixelbuffer数据格式与这些功能不兼容,这UIImage就是为什么我不能让它们吐出图像的原因。

有没有人有什么建议?

0 投票
0 回答
3364 浏览

ios - 旋转 CMSampleBuffer/CVPixelBuffer

我目前正在尝试通过首先将 CMSampleBuffer 转换为 CVPixelBuffer 然后使用 vImageRotate90_ARGB8888 转换缓冲区来更改其方向。我的代码的问题是,当 vImageRotate90_ARGB8888 执行时,它会立即崩溃。我知道有答案(比如这个这个),但是所有这些解决方案都无法在我的情况下工作,我真的找不到任何类型的错误,或者想到任何会导致这种行为的事情。我当前的代码如下:

0 投票
1 回答
364 浏览

ios - 在 CVImageBufferRef 上渲染 Alpha 图像

我正在努力达到这个效果。您可以在 music.ly 应用程序中查看此效果(波纹效果)

https://drive.google.com/open?id=1uXExnmWQ7OfSGLFXdH7-5imay8tW87vO

这是我的方法。

我将渲染 alpha 和缩放图像到像素缓冲区我使用 AVSampleBufferDisplayLayer 显示所有样本缓冲区。我想展示这个动画 3 sec - 5sec 。一旦用户完成然后我将使用 AVAssetWriter 将其转换为 mp4 。

我无法将 alpha 图像添加到 cvpixelbuffer

如果有更好的方法来制作这个动画。请指导。

我使用 AVAssetReaderTrackOutput 获取所有样本缓冲区。

然后我减少了 ciimage 的 alpha 并渲染到第一个像素缓冲区

我得到了这个结果。结果[1]

预期结果预期结果[2]

提前致谢

0 投票
0 回答
640 浏览

ios - CVOpenGLESTextureCache & CVMetalTextureCache 正确使用

关于 CVOpenGLESTextureCache 和 CVMetalTextureCache 的文档很少,更具体地说是关于它们的正确用法。为了将 CVPixelBuffer 映射到 OpenGLES 纹理,我们创建纹理缓存如下:

然后我们使用 CVOpenGLESTextureCacheCreateTextureFromImage(...) API 从 CVPixelBuffer 创建一个 OpenGLES 纹理。

Metal flow完全一样,先创建CVMetalTextureCache

然后使用 CVMetalTextureCacheCreateTextureFromImage(...) API 从 CVPixelBuffer 创建金属纹理。

我的问题:

  1. 我们可以创建多少个 CVOpenGLESTextureCache/CVMetalTextureCache 对象?在代码中使用多个纹理缓存对象是否存在隐藏的性能损失?我看到一些代码创建一个全局纹理缓存,而一些代码创建多个纹理缓存对象。

  2. OpenGLES 代码使用 EAGLContext 创建纹理缓存,这意味着我们不能在多个线程上重用相同的 CVOpenGLESTextureCache。然而,看起来我们只能有一个 CVMetalTextureCache 可以在所有线程中重用。真的是这样吗?

  3. 我从支持 IOSurface 的相机中得到了 CVPixelBuffer 的反对。我正在以不同的方法为同一个 CVPixelBuffer 多次重新创建 OpenGLES/Metal 纹理,可能使用不同的纹理缓存对象,并且可能位于不同的线程上。从性能和内存管理的角度来看,这是正确的做事方式吗?或者我应该一劳永逸地创建 OpenGLES/Metal 纹理对象并将纹理提供给多个方法?

0 投票
0 回答
832 浏览

ios - 从 SCNView 录制视频的最快方法

我在屏幕中间有一些对象的 SCNView,用户可以旋转、缩放等。

我想在视频中记录所有这些动作并实时添加一些声音。我也想只记录 SCNView 的中间部分(例如 SCNView 帧是 375x812 但我只想要中间 375x375 没有顶部和底部边框)。我还想在视频捕获的同时在屏幕上显示它。

我目前的变种是:

获得的 CVPixelBuffer 将被添加到 AVAssetWriter 中。

但是所有这些方法都有一些缺陷。

1)MTLTexture 有 colorPixelFormat == 555(bgra10_XR_sRGB,如果我没记错的话),我不知道如何将其转换为 BGR(将其附加到 aseetWriter),也不知道如何更改 colorPixelFormat,也不知道如何将 bgra10_XR_sRGB 添加到 aseetWriter。

2)iOS10版本如何实现?

2,3) 裁剪图像的最快方法是什么?使用这种方法,我只能抓取完整图像而不是裁剪图像。而且我不想将它转换为 UIImage 因为它太慢了。

PS我以前的查看器在OpenGL ES(GLKView)上,我使用这种技术成功地做到了(使用.screenshot方法开销1ms而不是30ms)

0 投票
1 回答
486 浏览

ios - 无法使用 SceneKit 从 OpenGL 获取 CVPixelBufferRef 数据

我需要使用 SceneKit 从 OpenGL 上下文中获取 CVPixelBufferRef。

创建渲染器

然后从OpenGL获取缓冲区

CVPixelBufferRef _targetBuffer;

但是在渲染时我收到一个错误:

[SceneKit] 错误:渲染 SceneKit 内容之前的 glError:506

0 投票
2 回答
2900 浏览

ios - 从 MtlTexture 获取字节以创建 CVPixelBufferRef

尝试在 SCNRender 对象的每个调用渲染上从 MTLTexture 创建 CVPixelBufferRef:

然后转换为 UIImage 显示在屏幕上

但图像不显示

0 投票
0 回答
78 浏览

cvpixelbuffer - 如何持久化 CVPixelBuffer?

我需要从 iOS 前置摄像头中提取帧,将它们中的每一个转换为 CVPixelBuffer 并将 CVPixelBuffer 对象实际存储在磁盘上而不会丢失数据。

有没有办法做到这一点?