如您所知,AVFrame有两个属性:pFrame->data,pFrame->linesize在我从video/sdcard/test.mp4(android平台)读取帧并转换为RGB AVFrame vice之后:

img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height,
                   pCodecCtx->pix_fmt,
                   target_width, target_height, PIX_FMT_RGB24, SWS_BICUBIC,
                   NULL, NULL, NULL);
            if(img_convert_ctx == NULL) {
                LOGE("could not initialize conversion context\n");
                return;
            }
            sws_scale(img_convert_ctx, (const uint8_t* const*)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize);

转换后得到pFrameRGB我需要使用glTextImage2D在opengl中对其进行纹理处理:
// Create The Texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, data);

//我不知道这里的数据是不是pFrameRGB->数据,如果不是,如何将它转换成合适的glTextImage格式,这样我就可以使用AVFrame和gltextImage2D在opengl中显示视频。非常感谢您的帮助。

最佳答案

pFrameRGB的实际像素数据位于pFrameRGB->数据[0]在glTexImage2D调用中,使用GL_RGBA而不是GL_RGB不管怎样,我就是这么做的假设您的纹理和顶点坐标创建正确,然后应该得到它的工作如果没有帮助,我可以发布一些代码示例。

10-08 02:39