相关疑难解决方法(0)

android ffmpeg opengl es渲染电影

我试图通过NDK渲染视频,添加一些在sdk中不支持的功能.我使用FFmpeg解码视频,可以通过ndk编译,并以此为出发点.我已经修改了这个例子而不是使用glDrawTexiOES来绘制纹理我已经设置了一些顶点并且在其上面渲染纹理(opengl es渲染四边形的方式).

下面是我要渲染的内容,但创建glTexImage2D的速度很慢.我想知道是否有任何方法可以加快速度,或者给出加快速度的外观,例如尝试在背景中设置一些纹理并渲染预先设置的纹理.或者,如果有任何其他方法可以更快速地将视频帧绘制到android中的屏幕?目前我只能得到大约12fps.

glClear(GL_COLOR_BUFFER_BIT);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, textureConverted);

//this is slow
glTexImage2D(GL_TEXTURE_2D, /* target */
0, /* level */
GL_RGBA, /* internal format */
textureWidth, /* width */
textureHeight, /* height */
0, /* border */
GL_RGBA, /* format */
GL_UNSIGNED_BYTE,/* type */
pFrameConverted->data[0]);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
Run Code Online (Sandbox Code Playgroud)

编辑 我改变了我的代码只初始化gltextImage2D一次,并用glSubTexImage2D修改它,它对帧速率没有太大的改进.

然后,我修改了代码以修改NDK上的本机Bitmap对象.通过这种方法,我有一个后台线程运行,处理下一帧并填充本机端的位图对象.我认为这有潜力,但我需要提高将AVFrame对象从FFmpeg转换为本机位图的速度.下面是目前我用来转换的一种蛮力方法.有没有办法提高速度或优化转换?

static void fill_bitmap(AndroidBitmapInfo*  info, void *pixels, AVFrame *pFrame)
{
uint8_t *frameLine;

int  yy;
for (yy = …
Run Code Online (Sandbox Code Playgroud)

android ffmpeg opengl-es android-ndk

4
推荐指数
1
解决办法
7220
查看次数

标签 统计

android ×1

android-ndk ×1

ffmpeg ×1

opengl-es ×1