2013-07-31 3 views
2

Я пишу видеоплеер, где мой код декодирует видео на необработанные кадры YCbCr. Что было бы самым быстрым способом вывода данных через фреймворк Qt? Я хочу, чтобы не копировал данные слишком много, поскольку изображения находятся в формате HD.Высокопроизводительный видео выход с Qt

Я боюсь, что преобразование цвета программного обеспечения в QImage будет медленным, и что позже QImage будет снова скопирован при рисовании в графический интерфейс.

Я имел взгляд на QAbstractVideoSurface и даже работает код, , но не может понять, как это происходит быстрее, так как в примере VideoWidget (http://idlebox.net/2010/apidocs/qt-everywhere-opensource-4.7.0.zip/multimedia-videowidget.html), рендеринг по-прежнему делается путем вызова QPainter :: DrawImage с QImage , который должен быть в RGB.

Предпочитаемое решение кажется мне доступным для аппаратной поверхности напрямую , в которое я мог бы декодировать YCbCr или, по крайней мере, напрямую преобразовывать RGB (с libswscale) в. Но я не вижу, как я мог это сделать (без использования OpenGL, что дало бы мне тоже бесплатное масштабирование).

+0

Меня это интересует. Вот лучший способ, который я нашел до сих пор, но я хотел бы знать, есть ли какие-то лучшие способы. http://stackoverflow.com/questions/1242005/what-is-the-most-efficient-way-to-display-decoded-video-frames-in-qt –

+0

Какая платформа? Вы декодируете в GPU? –

+0

Phonon? - https://qt-project.org/doc/qt-4.8/phonon-overview.html –

ответ

0

Одним из распространенных решений является использование виджета QGL с отображением текстур. Приложение распределяет буфер текстуры на первом кадре, а затем вызывает обновление текстуры в оставшихся кадрах. Это чистый вызов GL, Qt не поддерживает манипуляции текстурой. Но QGLwidget может использоваться как контейнер.

Расшифровка осуществлен используя SSE2. Надеюсь это поможет.

Смежные вопросы