C, GTK: отображать поток изображений RGB со скоростью <60 кадров в секунду

Я разрабатываю приложение, которое должно получать изображения с камеры и отображать их в окне GTK.

Камера передает необработанные изображения RGB (3 байта на пиксель, без альфа-канала, фиксированный размер) с различной частотой кадров (1–50 кадров в секунду).

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

Какой самый простой, но достаточно быстрый способ отобразить эти изображения в моем окне?

Вот что я уже пробовал:

  • с помощью gdk_draw_rgb_image () в области рисования gtk: в основном работает, но рендеринг был настолько медленным, что процессы рисования накладывались друг на друга, и приложение падало после первых нескольких кадров даже при скорости захвата 1 кадр / с.

  • выделение GdkPixbuf для каждого нового кадра и вызов gtk_image_set_from_pixbuf () в виджете изображения gtk: отображает только первый кадр, тогда я не вижу изменений в окне. Может быть ошибка в моем коде, но не знаю, будет ли это достаточно быстро.

  • с использованием Cairo ( cairo_set_source_surface () , затем cairo_paint () ): показалось довольно быстрым, но изображение выглядело полосатым, не знаю, формат изображения совместим.

В настоящее время я думаю о том, чтобы попробовать что-то вроде gstreamer и обрабатывать эти изображения как видеопоток, но я не уверен, является ли это излишним для моего простого механизма.

Заранее благодарим за любой совет!

6
задан lynix 13 January 2012 в 10:31
поделиться