3

我正在教程的帮助下编写一些代码,并使用 ffmpeg 和 SDL 的最新开发库。我被困在必须在屏幕上显示解码帧(AVFrame)的地方。我倾向于执行上述任务,即使用 SDL 2.0 的最新 API在屏幕上显示 AVFrame(在使用 SDL_Window 的同时使用渲染器和纹理)。坦率地说,我不是SDL_RendererSDL_Texture 以及与它们相关的功能方面的专家。但我正在阅读 SDL 2.0 官方网站上的文档并逐步完成它们。

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

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

    (或者)

  • 如果可能,显示框架,而无需将其从原生格式转换。

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

谁能指导我完成上述任务的步骤?

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

格式之间的转换由 sws_scale() 完成

4

1 回答 1

2

尝试SDL2 的一种 YUV 像素格式

它们有几个平面和打包的变体:

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架飞机)

于 2013-09-18T18:17:56.933 回答