OpenGLES渲染yuv数据,YUV是一种颜色编码方法,主要用于电视系统以及模拟视频领域
OpenGLES渲染yuv数据
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
摄像头采集,获取YUV数据, 渲染YUV数据,能给一下这三项的样例代码吗?
312浏览 • 1回复 待解决
OpenGL无法正常渲染某些分辨率YUV数据
219浏览 • 0回复 待解决
HarmonyOS在使用XComponent做视频渲染,直接将yuv数据传给对应buffer后渲染视频不正常
437浏览 • 1回复 待解决
摄像头获取到的yuv数据是否有旋转
458浏览 • 1回复 待解决
线性布局,该demo主要用于展示线性布局在不同容器以及不同属性下的布局效果
743浏览 • 1回复 待解决
为什么获取到的yuv数据量比宽 * 高 * 1.5多
406浏览 • 1回复 待解决
js api 中 类似 localstorage 的存储是哪一种?
4414浏览 • 1回复 待解决
java主要用来干嘛的?
8138浏览 • 1回复 待解决
使用Promise实现一种串行调用方式
891浏览 • 1回复 待解决
图片的多宫格布局,对于这两个APP中发布图片分为两种,一种是发布单张图片,另一种就是发布多张图片
686浏览 • 1回复 待解决
HarmonyOS 求一种类似总线通知的功能
215浏览 • 1回复 待解决
HarmonyOS 目前系统只支持一种字体,希望支持常用字体 比如PingFang 等
363浏览 • 1回复 待解决
HarmonyOS 有没有一种方法可以把全局的自定义dialog都关闭?
190浏览 • 1回复 待解决
HarmonyOS 需要一种能把一个文字转成图片pixelmap的能力
108浏览 • 1回复 待解决
HarmonyOS UIAbility能否提供一种不显示在任务列表的方式
213浏览 • 1回复 待解决
控制颜色渐变,实现图形图像的那种颜色渐变的效果
784浏览 • 1回复 待解决
HarmonyOS 是否存在一种布局,可以让其中的组件相互覆盖?
140浏览 • 1回复 待解决
支付的UI界面只有一种吗?是否还有其他支付界面?
1593浏览 • 1回复 待解决
请教一下想要开发鸿蒙系统的智能电视用什么硬件方案
5931浏览 • 1回复 待解决
HarmonyOS 视频编码使用surface 作为输入,是怎么携带pts的呢
234浏览 • 1回复 待解决
HarmonyOS 是否有办法定义一种类型,可以指向任意一个返回string的函数?
327浏览 • 1回复 待解决
ArkTS注册后,C++启动的业务线程收到消息通知ArkTS层的一种思路
760浏览 • 1回复 待解决
HarmonyOS 视频编码surface模式运行报错
221浏览 • 1回复 待解决
视频硬编码异常 :慧眼核身活检后需要把动作检测帧硬编码成视频
1484浏览 • 1回复 待解决
粘贴图片的两种方式,本模块主要提供管理系统剪贴板的能力,为系统复制、粘贴功能提供支持。
838浏览 • 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)上屏渲染