我目前正在开发一个通过 Android 上的 OpenGL ES 1.0 显示视频帧(作为位图)的系统。我的问题是我无法获得超过 10 fps 的速度。
在进行了一些测试之后,我确定最大的瓶颈之一是位图的宽度和高度都必须是 2 的幂。例如,必须将 640x480 视频放大到 1024x1024。在没有缩放的情况下,我能够获得大约 40-50fps,但纹理只是看起来是白色的,这对我没有好处。
我知道 OpenGL ES 2.0 支持使用两个纹理的非幂,但我对着色器/2.0 中的任何其他新内容没有经验
有什么办法可以解决这个问题吗?与我所拥有的相比,其他视频播放器如何获得如此出色的性能?我已经包含了一些代码供参考。
private Bitmap makePowerOfTwo(Bitmap bitmap)
{
// If one of the bitmap's resolutions is not a power of two
if(!isPowerOfTwo(bitmap.getWidth()) || !isPowerOfTwo(bitmap.getHeight()))
{
int newWidth = nextPowerOfTwo(bitmap.getWidth());
int newHeight = nextPowerOfTwo(bitmap.getHeight());
// Generate a new bitmap which has the needed padding
return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true);
}
else
{
return bitmap;
}
}
private static boolean isPowerOfTwo(int num)
{
// Check if a bitwise and of the number and itself minus one is zero
return (num & (num - 1)) == 0;
}
private static int nextPowerOfTwo(int num)
{
if(num <= 0)
{
return 0;
}
int nextPowerOfTwo = 1;
while(nextPowerOfTwo < num)
{
nextPowerOfTwo <<= 1; // Bitwise shift left one bit
}
return nextPowerOfTwo;
}