Я хотел бы отобразить поток необработанных изображений RGB (фиксированный размер, без альфа-канала, <60fps) в окне GTK. Мне <a href="https://stackoverflow.com/questions/8849105/c-gtk-display-stream-of-rgb-images-at-60-fps"> сказали использовать здесь Каир.
Мой код отлично работает с одиночными изображениями и все еще для потока изображений со скоростью около 1 FPS.
Выше 2 FPS мое приложение вылетает с ошибками Xorg, поэтому я считаю, что мой механик cairo неверен.
Это выглядит примерно так:
unsigned char *image_data;
cairo_surface_t *image;
GtkWidget *main_window;
void init_window()
{
// (...) all the GTK initialization stuff
image_data = malloc(IMAGE_BYTES);
image = cairo_image_surface_create_for_data(image_data,
CAIRO_FORMAT_RGB24,
IMAGE_W, IMAGE_H,
cairo_format_stride_for_width(CAIRO_FORMAT_RGB24, IMAGE_W));
}
void update_image()
{
cairo_t *cr;
cr = gdk_cairo_create(main_window->window);
cairo_set_source_surface(cr, image, 10, 10);
cairo_paint(cr);
cairo_destroy(cr);
}
int main()
{
// (...)
init_window();
while ((image_data = receive_image()) != NULL)
update_image();
}
Как правильно отображать серии изображений в Каире?
Какие структуры должны быть повторно использованы, какие должны быть воссозданы?