glPixelZoom((double) width / capture_device->video_width, (double) height / capture_device->video_height);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDrawPixels(capture_device->video_width, capture_device->video_height, GL_RGB, GL_UNSIGNED_BYTE, video_buffer);
Вывод картинки через OpenGL
Код:
Где video_buffer - буфер с картинкой.
Ресурсоёмкость вывода заметно уменьшилась - 0% даже в полноэкранном режиме. Однако возникла проблема: изображение выводится начиная с левого нижнего угла окна и перевёрнутое. Как заставить изображение выводиться нормально? Ну ведь не переворотом в буфере до вывода же!
И за одно как средствами OpenGL выводить изображение не RGB, а YUYV? А то драйвер как то неправильно конвертирует из YUYV в RGB, да и все программы используют входной формат YUYV. Вполне возможно и потому, что драйвер плохо преобразует в RGB.
Код:
glRasterPos2d(-1.0, 1.0);
glPixelZoom((gdouble) width / capture_device->video_width, -((gdouble) height / capture_device->video_height));
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDrawPixels(capture_device->video_width, capture_device->video_height, GL_RGB, GL_UNSIGNED_BYTE, video_buffer);
glPixelZoom((gdouble) width / capture_device->video_width, -((gdouble) height / capture_device->video_height));
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glDrawPixels(capture_device->video_width, capture_device->video_height, GL_RGB, GL_UNSIGNED_BYTE, video_buffer);
Вопрос про вывод YUYV остаётся в силе. Мне бы подошёл и способ быстро сконвертировать из YUYV в RGB в буфере в памяти до вывода. Делать это ручками - думаю будет медленно => надо опять использовать OpenGL или ещё кого-то там. Главное, чтобы под Linux эта библиотека была (если не OpenGL, который уж точно тут есть).