我在UInt8阵列中有一个YUV420像素缓冲区。我需要创建一个纹理,以便用OpenGL渲染它。在Android中,有一种简单的方法可以将我的数组解码为纹理的RGB数组。代码如下:
BitmapFactory.Options bO = new BitmapFactory.Options();
bO.inJustDecodeBounds = false;
bO.inPreferredConfig = Bitmap.Config.RGB_565;
try {
myBitmap= BitmapFactory.decodeByteArray( yuvbuffer,
0,
yuvbuffer.length,
bO);
} catch (Throwable e) {
// ...
}
我需要在我的ios平台(Xcode 8.3.3,Swift 3.1)上解码yuv缓冲区,以便将其作为数据放入以下方法中:
void glTexImage2D( GLenum target,
GLint level,
GLint internalFormat,
GLsizei width,
GLsizei height,
GLint border,
GLenum format,
GLenum type,
const GLvoid * data);
如何实现此解码?
ALTERNATIVE:
我已经描述了我在Android上解码YUV缓冲区的方式。也许有另一种方法来创建基于yuvpixels的纹理而不像这样解码它。我已经使用FragmentShader(Link)尝试了以下方法,但它对我不起作用。我得到黑屏或绿屏,但图像永远不会呈现。还有一些方法使用两个单独的缓冲区用于Y和UV - 但在此我不知道如何将我的YUV缓冲区分成Y和UV。
你是否有任何新的yuv渲染示例/样本,这些示例/样本没有过时且有效?
答案 0 :(得分:0)
如果您只需要显示该图像/视频,那么您根本不需要将其转换为rgb纹理。您可以将所有3个平面(Y / Cb / Cr)绑定为单独的纹理,并在片段着色器中执行yuv-> rgb转换,只需要三个点的产品。