gpt4 book ai didi

ios - 像素格式、CVPixelBufferRefs 和 glReadPixels

转载 作者:可可西里 更新时间:2023-11-01 03:37:37 27 4
gpt4 key购买 nike

我正在使用 glReadPixels 将数据读入 CVPixelBufferRef。我使用 CVPixelBufferRef 作为 AVAssetWriter 的输入。不幸的是,像素格式似乎不匹配。

我认为 glReadPixels 正在返回 RGBA 格式的像素数据,而 AVAssetWriter 需要 ARGB 格式的像素数据。将 RGBA 转换为 ARGB 的最佳方法是什么?

这是我到目前为止尝试过的:

  • 按照 argb = (rgba >> 8) | 行进行位操作 | (rgba << 24)
  • 使用 CGImageRef 作为中间步骤

位操作不起作用,因为 CVPixelBufferRef 似乎不支持下标。 CGImageRef 中间步骤确实有效...但我不希望有 50 行额外的代码,这可能会影响性能。

最佳答案

比使用 CPU 交换组件更好的方法是编写一个简单的片段着色器,以便在渲染图像时在 GPU 上高效地执行此操作。

最好的方法是使用 iOS5 CoreVideo CVOpenGLESTextureCache 完全删除复制阶段,它允许您直接渲染到 CVPixelBufferRef,从而消除对 glReadPixels 的调用。

附注我很确定 AVAssetWriter 想要 BGRA 格式的数据(实际上它可能想要 yuv 格式的数据,但那是另一回事了)。

更新:至于链接,doco 似乎仍在保密协议(protocol)下,但有两段可免费下载的示例代码可用:

GLCameraRippleRosyWriter

头文件本身包含很好的文档,mac 等效项非常相似 (CVOpenGLTextureCache),因此您应该有足够的资料来入门。

关于ios - 像素格式、CVPixelBufferRefs 和 glReadPixels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7895856/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com