OpenGLES渲染yuv数据,YUV是一种颜色编码方法,主要用于电视系统以及模拟视频领域
OpenGLES渲染yuv数据
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
摄像头采集,获取YUV数据, 渲染YUV数据,能给一下这三项的样例代码吗?
1522浏览 • 1回复 待解决
OpenGL无法正常渲染某些分辨率YUV数据
1677浏览 • 1回复 待解决
HarmonyOS在使用XComponent做视频渲染,直接将yuv数据传给对应buffer后渲染视频不正常
1939浏览 • 1回复 待解决
HarmonyOS XComponent使用OpenGL无法正常渲染某些分辨率YUV数据
935浏览 • 1回复 待解决
HarmonyOS 有没有native层用XComponent组件渲染yuv视频流的示例
951浏览 • 1回复 待解决
HarmonyOS XComponent组件播放渲染yuv视频文件,仅显示了1帧,怎么渲染播放整个视频文件
974浏览 • 1回复 待解决
HarmonyOS Native C++层能否直接渲染YUV或ARGB数据至指定的surfaceID
1195浏览 • 1回复 待解决
线性布局,该demo主要用于展示线性布局在不同容器以及不同属性下的布局效果
1718浏览 • 1回复 待解决
摄像头获取到的yuv数据是否有旋转
1588浏览 • 1回复 待解决
js api 中 类似 localstorage 的存储是哪一种?
5410浏览 • 1回复 待解决
HarmonyOS 如何自己定义一种结构
1048浏览 • 1回复 待解决
HarmonyOS CustomDialogController设置的openAnimation动画是否是只有一种动画效果
1029浏览 • 1回复 待解决
使用Promise实现一种串行调用方式
2359浏览 • 1回复 待解决
HarmonyOS 有无YUV格式转换png的api
873浏览 • 1回复 待解决
java主要用来干嘛的?
8943浏览 • 1回复 待解决
图片的多宫格布局,对于这两个APP中发布图片分为两种,一种是发布单张图片,另一种就是发布多张图片
1590浏览 • 1回复 待解决
为什么获取到的yuv数据量比宽 * 高 * 1.5多
1167浏览 • 1回复 待解决
HarmonyOS 求一种类似总线通知的功能
1402浏览 • 1回复 待解决
HarmonyOS 开发中目前系统只支持一种字体,希望支持常用字体 ?
941浏览 • 0回复 待解决
#鸿蒙通关秘籍#native的方案把png图片转化成yuv数据格式的帧数据
1195浏览 • 0回复 待解决
HarmonyOS 有没有一种方法可以把全局的自定义dialog都关闭?
1557浏览 • 1回复 待解决
HarmonyOS 针对音视频场景如多人视频会议/连麦场景下,进行多路视频流的YUV上屏,HarmonyOS是推荐一路流对应一个XComponent,还是多路流映射一个XComponent绘制?
1094浏览 • 1回复 待解决
HarmonyOS 目前系统只支持一种字体,希望支持常用字体 比如PingFang 等
1518浏览 • 1回复 待解决
HarmonyOS 需要一种能把一个文字转成图片pixelmap的能力
1017浏览 • 1回复 待解决
控制颜色渐变,实现图形图像的那种颜色渐变的效果
1910浏览 • 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)上屏渲染