2011-08-12 42 views
0

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

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

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

+0

你的方法是在一个模糊的法律领域,请参阅http://multinc.com/2009/08/24/compatibility-between-the-iphone-app-store-and-the-lgpl/ – MoDJ

回答

1

将YUV转换为RGB不适合您?类似:

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

然后

如果(frameData->数据[0]){ sws_scale(img_convert_ctx,frameData->数据,frameData-> LINESIZE, 0,192, picture.data,picture.linesize) ; }

+0

你有关于如何使用swscale的文档? – onmyway133