问题标签 [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.
ios - 如何将文本绘制到 CIImage 中?
如何绘制CIImage
(或者可能CVPixelBuffer
是,但我想添加文本更容易CIImage
)?不是 UIImage
AVAssetWriter
我使用和CMSampleBuffer
(来自视频、音频输入)录制视频(.mp4 文件)。在录制时我想在视频帧上添加文本,我已经转换CMSampleBuffer
为CIImage
,现在我需要以某种方式添加文本CIImage
并转换回CVPixelBuffer
. 我真的没有在 Swift 中找到任何简单的示例,如何添加(绘制)文本CIImage
或添加任何其他内容(如线条、矩形,而不仅仅是文本)。
ios - 带像素缓冲区的 vImage_Buffer 初始化
我正在使用以下代码从像素缓冲区初始化 vImage_Buffer。我已将 vImageBuffer_InitWithCVPixelBuffer 中的第二个参数作为 NULL (vImage_CGImageFormat) 传递,因此没有从像素缓冲区到 vImageBuffer 的内部格式转换。它在 XCode 中给出警告-“Null 传递给需要非空参数的被调用者”,但有效。问题是如果我将它转换为 Swift,它不会编译,因为它需要一个非零参数。以直通方式从像素缓冲区制作 vImage 缓冲区的正确方法是什么?甚至函数的声明都说第二个参数中的 NULL 值是可以接受的,但不确定为什么会出现警告。
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
。
虽然我能够在屏幕上看到相应表示的这些数据,但我无法使用UIImagePNGRepresentation
或UIImageJPGRepresentation
。当然,我可以手动捕获屏幕截图,但这并不理想。
我怀疑cvpixelbuffer
数据格式与这些功能不兼容,这UIImage
就是为什么我不能让它们吐出图像的原因。
有没有人有什么建议?
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 并渲染到第一个像素缓冲区
我得到了这个结果。
预期结果
提前致谢
ios - CVOpenGLESTextureCache & CVMetalTextureCache 正确使用
关于 CVOpenGLESTextureCache 和 CVMetalTextureCache 的文档很少,更具体地说是关于它们的正确用法。为了将 CVPixelBuffer 映射到 OpenGLES 纹理,我们创建纹理缓存如下:
然后我们使用 CVOpenGLESTextureCacheCreateTextureFromImage(...) API 从 CVPixelBuffer 创建一个 OpenGLES 纹理。
Metal flow完全一样,先创建CVMetalTextureCache
然后使用 CVMetalTextureCacheCreateTextureFromImage(...) API 从 CVPixelBuffer 创建金属纹理。
我的问题:
我们可以创建多少个 CVOpenGLESTextureCache/CVMetalTextureCache 对象?在代码中使用多个纹理缓存对象是否存在隐藏的性能损失?我看到一些代码创建一个全局纹理缓存,而一些代码创建多个纹理缓存对象。
OpenGLES 代码使用 EAGLContext 创建纹理缓存,这意味着我们不能在多个线程上重用相同的 CVOpenGLESTextureCache。然而,看起来我们只能有一个 CVMetalTextureCache 可以在所有线程中重用。真的是这样吗?
我从支持 IOSurface 的相机中得到了 CVPixelBuffer 的反对。我正在以不同的方法为同一个 CVPixelBuffer 多次重新创建 OpenGLES/Metal 纹理,可能使用不同的纹理缓存对象,并且可能位于不同的线程上。从性能和内存管理的角度来看,这是正确的做事方式吗?或者我应该一劳永逸地创建 OpenGLES/Metal 纹理对象并将纹理提供给多个方法?
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)
ios - 无法使用 SceneKit 从 OpenGL 获取 CVPixelBufferRef 数据
我需要使用 SceneKit 从 OpenGL 上下文中获取 CVPixelBufferRef。
创建渲染器
然后从OpenGL获取缓冲区
CVPixelBufferRef _targetBuffer;
但是在渲染时我收到一个错误:
[SceneKit] 错误:渲染 SceneKit 内容之前的 glError:506
ios - 从 MtlTexture 获取字节以创建 CVPixelBufferRef
尝试在 SCNRender 对象的每个调用渲染上从 MTLTexture 创建 CVPixelBufferRef:
然后转换为 UIImage 显示在屏幕上
但图像不显示
cvpixelbuffer - 如何持久化 CVPixelBuffer?
我需要从 iOS 前置摄像头中提取帧,将它们中的每一个转换为 CVPixelBuffer 并将 CVPixelBuffer 对象实际存储在磁盘上而不会丢失数据。
有没有办法做到这一点?