ffmpeg视频软解码-yuv数据_第1页
ffmpeg视频软解码-yuv数据_第2页
ffmpeg视频软解码-yuv数据_第3页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FFmpeg+OpenGLES+OpenSLES打造Android视频播放器杨万里Android工程师

CSDN博客:邮箱:OpenGLES-绘制视频YUV数据什么是YUV格式?YUV,是一种颜色编码方法。Y表示明亮度,也就是灰度值。U和V则是色度、浓度,作用是描述影像色彩及饱和度,用于指定像素的颜色。主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,显示出来将是黑白效果。OpenGLES-绘制视频YUV数据什么是YUV420?YUV420是指:Y:UV=4:1什么是YUV420P?YUV420P是指:YUV的排列方式,先将Y排列完,再将U排列完,最后将V排列完。如:YYYYYYYYYYYYYYYYUUUUVVVVFFmpeg中YUV数据FFmpeg解码出来的视频YUV数据是存储在AVFrame中的data里面,我们以YUV420P为视频数据给OPenGL渲染。Y分量:frame->data[0]U分量:frame->data[1]V分量:frame->data[2]绝大多数视频都是YUV420P格式的,对于不是YUV420P格式的,我们先将其转换(sws_scale)为YUV420P后再给OPenGL渲染。OpenGLES渲染YUV420P为什么用OpenGL来处理YUVP颜色格式视频?OpenGL中是不能直接渲染YUV数据的,但是我们可以用3个纹理来分别获取Y、U和V的值,然后根据公式:r=y+1.403*v;g=y-0.344*u-0.714*v;b=y+1.770*u;转为rgb颜色格式显示出来。这个转换过程是在GPU中完成的,计算效率比在CPU中计算高很多倍!Shader编写vertex_shader.glslattributevec4av_Position;attributevec2af_Position;varyingvec2v_texPosition;voidmain(){v_texPosition=af_Position;gl_Position=av_Position;}注:attribute只能在vertex中使用varying用于vertex和fragment之间传递值Shader编写fragment_shader.glslprecisionmediumpfloat;varyingvec2v_texPosition;uniformsampler2Dsampler_y;uniformsampler2Dsampler_u;uniformsampler2Dsampler_v;voidmain(){floaty,u,v;y=texture2D(sampler_y,v_texPosition).r;u=texture2D(sampler_u,v_texPosition).r-0.5;v=texture2D(sampler_v,v_texPosition).r-0.5;vec3rgb;rgb.r=y+1.403*v;rgb.g=y-0.344*u-0.714*v;rgb.b=y+1.770*u;gl_FragColor=vec4(rgb,1);}注:uniform用于在application中向vertex和fragment中传递值。THANKSCSDN网站:企业服务:人才服务:CTO俱乐部:高校俱乐部:程序员杂志:CODE平台:项目外包:CSDN博客:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论