如何显示YUV420P数据?

时间:2011-08-12 03:58:50

标签: iphone opengl-es yuv video-player

我已成功将libavcodec库导入到iPhone应用程序项目中,并用它将电影文件解码为YUV420P数据,以便我可以获取电影的所有帧然后将它们转换为RGB数据,因此它可以由OpenGL ES显示。

电影可以成功播放,但由于从YUV到RGB的转换和OpenGL的显示方法(glDrawArrays)很慢,所以它很慢。

是否有更智能的方式播放视频(假设电影必须由libavcodec解码)?比如直接显示YUV或转换为类似YUV的数据,可以直接显示?或者其他显示方法比glDrawArrays更快? YUV数据可以由Core Graphics加载吗?

1 个答案:

答案 0 :(得分:1)

尝试将YUV转换为RGB。类似的东西:

img_convert_ctx = sws_getContext(320, 
                192,
                                                         PIX_FMT_YUV420P,
                                                         480, 
                                                         320,
                                                         PIX_FMT_RGB24,
                                                         sws_flags, NULL, NULL, NULL);

然后:

if (frameData->data[0]) {
        sws_scale (img_convert_ctx, frameData->data, frameData->linesize,
                   0, 192,
                   picture.data, picture.linesize);
    }