MediaCodec通过C++ 解码yuv怎么转化rgb传给glTexImage2D例子
时间: 2024-03-09 10:50:22 浏览: 141
以下是一个简单的例子:
```c++
// 初始化MediaCodec并解码出YUV数据
MediaCodec* codec = new MediaCodec();
uint8_t* yuvData = codec->decode();
// 转换YUV数据到RGB格式
uint8_t* rgbData = new uint8_t[width * height * 4];
for (int i = 0; i < width * height; i++) {
int y = yuvData[i * 3];
int u = yuvData[i * 3 + 1] - 128;
int v = yuvData[i * 3 + 2] - 128;
int r = (int)(y + 1.370705 * v);
int g = (int)(y - 0.698001 * v - 0.337633 * u);
int b = (int)(y + 1.732446 * u);
r = min(max(0, r), 255);
g = min(max(0, g), 255);
b = min(max(0, b), 255);
rgbData[i * 4] = (uint8_t)r;
rgbData[i * 4 + 1] = (uint8_t)g;
rgbData[i * 4 + 2] = (uint8_t)b;
rgbData[i * 4 + 3] = 255;
}
// 将RGB数据传给OpenGL
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgbData);
```
在这个例子中,我们首先使用MediaCodec从视频中解码出YUV数据。然后,我们将YUV数据转换为RGB格式,并存储在一个新的数组中。最后,我们将RGB数据传递给OpenGL的`glTexImage2D`函数,以便将其用作纹理。在这个例子中,我们假设输出图像的宽度和高度为`width`和`height`。
阅读全文