gpt4 book ai didi

android - 如何提高android中opengl es的显示性能

转载 作者:行者123 更新时间:2023-11-29 17:50:34 30 4
gpt4 key购买 nike

我正在努力提高我们在android中的视频 session 项目的视频显示效率。视频显示是用原生opengl代码实现的。 opengl 代码在 opengl 版本 1 中以原生方式实现。下面给出的代码用于显示视频的每一帧。

int ofi_vc_video_display::render_video_frame(unsigned char *frame_buffer)
{

// Check the frame is available or not. If available display the frame.
if (frame_buffer != NULL){

// Clear the screen buffers.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Bind the frame data to the texture.
glTexSubImage2D(GL_TEXTURE_2D,
0,
0,
0,
frame_width,
frame_height,
GL_RGB,
GL_UNSIGNED_BYTE,
frame_buffer);

// Check for the error status.
while ((gl_error_status=glGetError()) != GL_NO_ERROR) {

error_status = gl_error_status;
}

// Transform and rotate the texture.
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glTranslatef(0.5, 0.5, 0.0);
glRotatef(180.0, 180.0, 0.0,1.0);
glTranslatef(-0.5, -0.5, 0.0);
glMatrixMode(GL_MODELVIEW);

glLoadIdentity();
glTranslatef(0, 0, -4);

// Enable drawing texture.
glBindTexture(GL_TEXTURE_2D, mTextureId);

// Draw the frames in texture.
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices);

// Check for the error status.
while ((gl_error_status=glGetError()) != GL_NO_ERROR) {

error_status = gl_error_status;
}
}
return error_status;
}

所有的初始化都在之前完成。该代码适用于较低的分辨率。但是当显示更高分辨率(如 640 X 480)时,glTexSubImage2D 本身需要大约 35 - 40 毫秒,整个显示时间每帧超过 50 毫秒。但我需要 30 fps。

有人可以帮助您提出建议吗。

最佳答案

glTexSubImage2D() 对于视频帧率来说太慢了。使用 OpenGL ES 1.1 和 native 代码,您可以避免这种情况并改用 EGL 图像扩展,从而更快地将视频帧加载到纹理中。 this article 中的示例代码对其进行了讨论.

借助 OpenGL ES 2.0,您还可以在着色器代码中执行 YUV 到 RGB 色彩空间转换,这也是视频性能的重大改进。我之前已经在 StackOverflow 上发布了这方面的示例。

关于android - 如何提高android中opengl es的显示性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131472/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com