微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ios – 像素格式,CVPixelBufferRefs和glReadPixels

我正在使用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似乎仍然在NDA下,但有两个可免费下载的示例代码

GLCameraRippleRosyWriter

文件本身包含良好的文档,并且mac等价物非常相似(CVOpenGLTextureCache),所以你应该有足够的东西让你开始.

原文地址:https://www.jb51.cc/iOS/331200.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐