0

我已经成功将libavcodec库导入到一个iPhone应用项目中,我用它把一个电影文件解码成YUV420P数据,这样我就可以得到电影的所有帧,然后将它们转换成RGB数据,这样就可以显示出来了OpenGL ES。

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

有没有更聪明的方式来播放视频(假设电影必须由 libavcodec 解码)?喜欢直接显示 YUV 还是转换成可以直接显示的类似 YUV 的数据?或者其他比 glDrawArrays 更快的显示方法?Core Graphics 可以加载 YUV 数据吗?

4

1 回答 1

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);
    }
于 2012-01-31T20:50:00.023 回答