大佬教程收集整理的这篇文章主要介绍了android – 片段着色器的YUV到RGB转换,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
更新:
这是我的onPreviewFrame方法:
public void onPreviewFrame(byte[] data,Camera camera) { yBuffer.put(data); yBuffer.position(0); System.arraycopy(data,U_INDEX,uData,LENGTH_4 * 2); uBuffer.put(uData); uBuffer.position(0); System.arraycopy(data,V_INDEX,vData,LENGTH_4); vBuffer.put(vData); vBuffer.position(0); }
这是我在onDrawFrame方法中将字节数组绑定到OpenGL纹理的方法:
GLES20.glUniform1i(yTexture,1); GLES20.glTexImage2D( GLES20.GL_TEXTURE_2D,GLES20.GL_LUMINANCE,320,240,GLES20.GL_UNSIGNED_BYTE,yBuffer); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_LINEAR); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR); GLES20.glUniform1i(uTexture,2); GLES20.glTexImage2D( GLES20.GL_TEXTURE_2D,160,120,uBuffer); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_LINEAR); GLES20.glUniform1i(vTexture,3); GLES20.glTexImage2D( GLES20.GL_TEXTURE_2D,vBuffer); GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_LINEAR);
这是我的片段着色器代码:
#ifdef GL_ES precision highp float; #endif varying vec2 v_texCoord; uniform sampler2D y_texture; uniform sampler2D u_texture; uniform sampler2D v_texture; void main() { float nx,ny,r,g,b,y,u,v; nx=v_texCoord.x; ny=v_texCoord.y; y=texture2D(y_texture,v_texCoord).r; u=texture2D(u_texture,v_texCoord).r; v=texture2D(v_texture,v_texCoord).r; y=1.1643*(y-0.0625); u=u-0.5; v=v-0.5; r=y+1.5958*v; g=y-0.39173*u-0.81290*v; b=y+2.017*u; gl_FragColor = vec4(r,1.0); }@H_403_17@
>默认情况下,相机输出为NV12,但在片段着色器YUV到RGB中,您使用的是YV12 – > RGB.
你必须这样做
setPreviewFormat(ImageFormat.YV12);或者可能使用其他一些着色器
>有3种纹理,确保你这样做
GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,muTextureName)
在调用任何glTexImage2D之前.和glTexSubImage2D
>您还可以在每个帧和glTexImage2D上使用glTexSubImage2D一次.
> U和V的大小相同,至少为YV12,
System.arraycopy(data,LENGTH_4 * 2);
应该System.arraycopy(data,LENGTH_4);在代码中相应地更改大小.
@H_403_17@ @H_403_17@以上是大佬教程为你收集整理的android – 片段着色器的YUV到RGB转换全部内容,希望文章能够帮你解决android – 片段着色器的YUV到RGB转换所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。