Необходимо визуализировать YUV-кадр (AVFrame из ffmpeg), используя QT QOpenGLWidget - PullRequest
0 голосов
/ 06 октября 2018

У меня есть AVFrame от FFMPEG в формате YUV.Я хотел бы отобразить его, используя производный от qt класс из QOpenGLWidget и QOpenGLFunctions.

Я новичок в qt и OpenGL.

Может кто-нибудь помочь с этим?

Спасибо Асвин

1 Ответ

0 голосов
/ 31 октября 2018

Ну, на самом деле, если вам нужно реализовать действительно проигрыватель с быстрым рендерингом, вам придется возиться с оптимизацией буфера, закадровым рендерингом, потоковой передачей буфера - что-то из этого.Но поскольку вы новичок в Qt, есть простые, но работающие решения:

  1. Попробуйте формат пикселей AV_PIX_FMT_RGBA, рендеринг простой текстуры в некоторый прямоугольник поверхности рисования достаточно прост.
  2. Когда я сам захотел попробовать то же самое, я нашел этого замечательного парня, который реализовал полный рабочий пример здесь .

Класс QFFmpegGLWidget по ссылке выше достаточен для того, чтобы вы получилиидея.Преобразование в RGB выполняется с помощью фрагментного шейдера, там работает старый добрый трюк с 3 текстурами, примененными с GL_LUMINANCE.

Я боролся со своим собственным, почти аналогичным решением, тем не менее получил изображение с камеры (rtsp) с неправильными, испорченными цветами.Итак, убедитесь, что вы получаете кадры в YUV420p .В случае, если другой формат пикселя вам подходит, просмотрите эти китайские ресурсы, чтобы углубить его (перевод Google делает их читабельными):

  1. YUV-шейдерные преобразования
  2. YUV 2 RGB математика

Удачи!

...