使用SDL 2.0在屏幕上显示AVFrame

时间:2013-09-18 16:43:23

标签: ffmpeg sdl yuv libavformat video-player

我正在this教程的帮助下使用ffmpeg和SDL的最新开发库来处理一些代码。我被困在必须在屏幕上显示解码帧(AVFrame)的位置。我倾向于使用SDL 2.0的最新API(使用渲染器和纹理以及SDL_Window的使用)执行上述任务在屏幕上显示AVFrame 。坦率地说,我不是 SDL_Renderer SDL_Texture 的专家以及与之相关的功能。但我正在阅读SDL 2.0官方网站上的文档,并通过它们的方式。

有没有办法使用SDL 2.0 API执行以下操作:

  • 将原生帧格式转换为 YUV 的风格并显示它。

    (OR)

  • 如果可以,则显示框架而不必将其从原生格式转换。

  

我想使用渲染器和纹理来完成上述操作。似乎没有一种简单的方法可以使用它们。

任何人都可以指导我完成上述任务的步骤吗?

PS:虽然我还没有明确尝试过,但是我通过将AVFrame格式(原生)转换为RGB来在屏幕上显示AVFrame。但我不希望原生帧格式(主要是YUV)转换为RGB,因为它的计算成本很高。

格式之间的转换由sws_scale()

完成

1 个答案:

答案 0 :(得分:2)

尝试SDL2's YUV pixel formats之一。

他们有几个平面和包装变体:

  

SDL_PIXELFORMAT_YV12:平面模式:Y + V + U(3个平面)

     

SDL_PIXELFORMAT_IYUV:平面模式:Y + U + V(3个平面)

     

SDL_PIXELFORMAT_YUY2:打包模式:Y0 + U0 + Y1 + V0(1个平面)

     

SDL_PIXELFORMAT_UYVY:打包模式:U0 + Y0 + V0 + Y1(1平面)

     

SDL_PIXELFORMAT_YVYU:打包模式:Y0 + V0 + Y1 + U0(1个平面)