织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>嵌入式开发>Android>

android 下使用opengles 调用GPU显示yuv420p核心功能分享

落鹤生 发布于 2013-10-24 22:34 点击:次 
很早之前研究了android下的硬解码后,由于涉及到高分辨率的比如(1280x720,25fps),由于android2.3后不支持直接 render yuv格式,必须要转换成rgb格式,而这种分辨率的yuv420,采用软件转换为rgb565,肯定CPU的性能消耗太大,方案不可行
TAG:

很早之前研究了android下的硬解码后,由于涉及到高分辨率的比如(1280x720,25fps),由于android2.3后不支持直接 render yuv格式,必须要转换成rgb格式,而这种分辨率的yuv420,采用软件转换为rgb565,肯定CPU的性能消耗太大,方案不可行, 而android2.3后,可以采用opengles2.0下的使用GPU把yuv420p格式转换为rgb565,
转换公式为:

const char fragmentShader_yuv420p[] =
{
    "precision mediump float;\n"
    "uniform sampler2D Ytex;\n"
    "uniform sampler2D Utex,Vtex;\n"
    "varying vec2 vTextureCoord;\n"
    "void main(void) {\n"
    "  float nx,ny,r,g,b,y,u,v;\n"
    "  mediump vec4 txl,ux,vx;"
    "  nx=vTextureCoord[0];\n"
    "  ny=vTextureCoord[1];\n"
    "  y=texture2D(Ytex,vec2(nx,ny)).r;\n"
    "  u=texture2D(Utex,vec2(nx,ny)).r;\n"
    "  v=texture2D(Vtex,vec2(nx,ny)).r;\n"

    "  y=1.1643*(y-0.0625);\n"
    "  u=u-0.5;\n"
    "  v=v-0.5;\n"

    "  r=y+1.5958*v;\n"
    "  g=y-0.39173*u-0.81290*v;\n"
    "  b=y+2.017*u;\n"
    "  gl_FragColor=vec4(r,g,b,1.0);\n"
    "}\n"
};

通过此公式就可以把yuv420p转换为rgb565。

(gamedr)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201310/16796.html]
本文出处:CSDN 作者:gamedr 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容