OpenGLES渲染yuv数据,YUV是一种颜色编码方法,主要用于电视系统以及模拟视频领域
OpenGLES渲染yuv数据
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
摄像头获取到的yuv数据是否有旋转
153浏览 • 1回复 待解决
线性布局,该demo主要用于展示线性布局在不同容器以及不同属性下的布局效果
466浏览 • 1回复 待解决
js api 中 类似 localstorage 的存储是哪一种?
2978浏览 • 1回复 待解决
使用Promise实现一种串行调用方式
360浏览 • 1回复 待解决
图片的多宫格布局,对于这两个APP中发布图片分为两种,一种是发布单张图片,另一种就是发布多张图片
401浏览 • 1回复 待解决
为什么获取到的yuv数据量比宽 * 高 * 1.5多
116浏览 • 1回复 待解决
java主要用来干嘛的?
7270浏览 • 1回复 待解决
支付的UI界面只有一种吗?是否还有其他支付界面?
547浏览 • 1回复 待解决
控制颜色渐变,实现图形图像的那种颜色渐变的效果
459浏览 • 1回复 待解决
请教一下想要开发鸿蒙系统的智能电视用什么硬件方案
4885浏览 • 1回复 待解决
ArkTS注册后,C++启动的业务线程收到消息通知ArkTS层的一种思路
370浏览 • 1回复 待解决
视频硬编码异常 :慧眼核身活检后需要把动作检测帧硬编码成视频
397浏览 • 1回复 待解决
但每一种分类的信息内容又都不同。数据库该怎么设计呢?
1013浏览 • 1回复 待解决
视频流数据编码生成MP4文件保存到沙箱路径
386浏览 • 1回复 待解决
怎么给图片渲染不同的颜色,使用colorFilter设置滤镜颜色太过于复杂
528浏览 • 1回复 待解决
粘贴图片的两种方式,本模块主要提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持。
440浏览 • 1回复 待解决
分布式函数方法distributedDataObject是否支持手机以及模拟器进行操作
314浏览 • 0回复 待解决
音视频都支持哪些编码格式
171浏览 • 1回复 待解决
求鸿蒙视频编码解码的具体demo
5339浏览 • 1回复 待解决
Color.Black如何转成对应的颜色编码
650浏览 • 1回复 待解决
视频解码结果通过到vulkan渲染
503浏览 • 1回复 待解决
为什么鸿蒙系统还要用Linux内核
5279浏览 • 2回复 待解决
视频进度滑动条的三种实现方式
347浏览 • 1回复 待解决
视频硬编码异常:使用自带API 进行视频硬编码,不杀进程的情况下,大概10-15次硬编码使用周期,会开始复现
458浏览 • 1回复 待解决
一、yuv数据介绍
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0.
YU12和YV12属于YUV420格 式,又叫Plane模式,Y , U , V分别在不同平面,也就是有三个plane。将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一 组UV。注意,上图中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次类推。 YU12格式也叫作I420格式,首先是所有Y值,然后是所有U值,最后是所有V值。
二、EGL环境搭建
1.1 关键方法介绍
1)eglGetDisplay
获取EGL显示窗口
2)eglInitialize
对(1)中获取到的Display进行初始化
3)eglChooseConfig
根据对窗口的条件要求从系统中选择最佳的配置数据
4)eglCreateContext
结合EGLDisplay与EGLConfig创建EGL上下文
6)eglMakeCurrent
7)eglSwapBuffer
三、OpenGL 着色器
2.1 关键方法介绍
加载着色器
1)eglCreateShader
根据指定类型(GL_FRAGMENT_SHADER、GL_VERTEX_SHADER…)创建一个空的OpenGL Shader
2)glShaderSource
给创建出来的Shader输入GLSL代码
3)glCompileShader
编译shader
4)glGetShaderiv
获取编译过程中的状态信息
GL_COMPILE_STATUS 获取编译状态,0表示编译失败
GL_INFO_LOG_LENGTH 获取编译中的日志字符长度
5)glGetShaderInfoLog
根据(4)中的日志长度得到编译中的日志信息
6)glDeleteShader
清除Shader
创建着色器程序
7)glCreateProgram
创建一个空的着色器程序
8)glAttachShader
为着色器程序添加Shader
9)glLinkProgram
对(8)中的Shader进行链接
10)glGetProgramiv
获取链接过程中的状态信息
GL_LINK_STATUS 获取链接状态码,0表示链接失败
GL_INFO_LOG_LENGTH 获取链接过程中的日志字符长度
11)glGetProgramInfoLog
根据(10)中的日志长度得到链接过程中的日志信息
12)glDeleteProgram
清理着色器程序
渲染流程
四、demo代码
1)顶点着色器
2)片段着色器
3)初始化GL环境
4)加载yuv数据
5)上屏渲染