如何在FF应用程序中将帧从FFmpeg渲染到屏幕?

时间:2011-12-19 14:49:28

标签: iphone ios opengl-es

我是iOS的新手,但我在Android上实现了基于FFmpeg的播放例程。我打算在iOS上再做一次。

似乎我可以使用OpenGL ES 1.1 / 2.0从FFmpeg视频到屏幕绘制帧。但是,OpenGL ES似乎很难。此外,由于视频纹理的宽度,我遇到了一些限制。我不得不将视频帧分成许多图像并将它们绘制到屏幕上以构成帧。

在iOS上使用OpenGL ES渲染此视频有更简单的方法吗?有没有其他方法可以在iOS中快速将2-D视频帧绘制到屏幕上?

1 个答案:

答案 0 :(得分:1)

阿。所以你想渲染一个非POT源。这可以在不分割成多个纹理的情​​况下完成 - 通过创建最接近的POT大小的纹理,渲染到该纹理并仅对实际包含图像的部分进行blitting。 看一下here示例(C ++)。相关部分:

//Calculating the texture size
double exp = ceil(log((double)max(Texture.HardwareHeight, Texture.HardwareWidth))/log(2.0));
texsize = min(pow(2, exp), (double)maxSize);

然后

//draw the original frame 1:1 into the (larger) texture
float ymax = min(2.0f*((float)Texture.HardwareHeight/(float)texsize) - 1.0f, 1.0f);     //clamping is for cards with
float xmax = min(2.0f*((float)Texture.HardwareWidth/(float)texsize) - 1.0f, 1.0f);      //smaller max hardware texture than the current frame size

在渲染时作为纹理坐标使用这些最大值而不是1.0。