故事的背景要从之前的FFMpeg系列文章演示代码说起,有大佬留言工程中的NV12渲染shader中存在一个问题
确实是uv的取值写反了,渲染下来图像的颜色会不对
之前这个shader并没有做过测试,趁着修复这个issue的机会赶紧补上一个Test Case
准备Test Case
渲染相关的逻辑都在librender内,新增RenderTestActivity
运行下useRenderTestActivity,效果如下,可以看到画面颜色异常
RenderTestActivity的逻辑非常简单
NV12的数据我们通过ffmpeg来生成
修复渲染颜色异常
在NV12Drawer中,UV纹理采用的是GL_LUMINANCE_ALPHA
查看官方文档对这个format的解释
结合NV12的YUV排布可以得到U数据从纹理的rgb任意通道读取,V数据从纹理的a通道读取,运行Test Case后观察到效果正常
RenderManager简介
渲染模块librender的对外入口是RenderManager,内部做了一些常用格式的渲染支持、切换和缓存管理,目前能力虽然比较简陋,但是后续还会逐步迭代、重构和支持Vulkan(Vulkan简介)
用法也很简单,可以参考RenderTestActivity
上面NV12渲染的流程控制在draw()中,会先将NV12数据绘制到FBO,中间可以加一些filter处理,最后再draw上屏
完整代码可以点击文末的"阅读原文"获取,欢迎各位大佬提issue和PR
~~END~~