MediaCodec有一个限制FPS的解码,我想打破它,所以我需要自己渲染帧,而不是MediaCodec的内部功能。
我假设只有RGB565可以在Android平台上渲染到SurfaceView。 我一直在Android上搜索YUV420-> RGB565的许多解决方案,但所有解决方案都需要分离Y U V数据,但是将YUV420SP数据分成Y U V需要花费很多时间。
我该如何解决?
感谢所有帮助过的人。
@Codo
if(colorFmt == 21) {
int nSize = bufferInfo.size / 6;
byte[] buf = new byte[bufferInfo.size];
byte[] y = new byte[nSize * 4];
byte[] u = new byte[nSize];
byte[] v = new byte[nSize];
ByteBuffer decoded = mc.getOutputBuffer(outputBufferIndex);
if(decoded != null) {
decoded.get(buf);
System.arraycopy(buf, 0, y, 0, nSize * 4);
for(int i = 0; i < nSize; ++i) {
u[i] = buf[nSize*4 + i*2];
v[i] = buf[nSize*4 + i*2 + 1];
}
}
答案 0 :(得分:0)
您不需要生成RGB用于显示。您可以使用适当的着色器使用OpenGL,这样可以节省大量时间。
但如果您真的想尽快将NV21帧转换为RGB,请考虑renderscript。