Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2010, 23:35   #1
KIV_95
 
Регистрация: 02.02.2010
Сообщений: 5
По умолчанию Вывод картинки через OpenGL

Пишу приложение под Linux, которое выводит картинку с веб-камеры на экран. Для создания интерфейса (у меня не только окно с видео, но и окно настроек) использую GTK. Сначала для вывода картинки выводил её из буфера средствами GtkImage, но после того как я добавил ресайзинг картинки (например, для вывода на весь экран) приложение стало жрать 20 процентов ресурсов 4-х ядерного процессора. Тогда я решил выводить и ресайзить изображение через OpenGL. Если отбросить все тонкости GTK и gtkglext (там ничего интересного - просто создаю контекст OpenGL. никаких дополнительных настроек не произвожу), то выводит картинку вот такой код (это фрагмент функции перерисовки окна):
Код:
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);
Где video_buffer - буфер с картинкой.
Ресурсоёмкость вывода заметно уменьшилась - 0% даже в полноэкранном режиме. Однако возникла проблема: изображение выводится начиная с левого нижнего угла окна и перевёрнутое. Как заставить изображение выводиться нормально? Ну ведь не переворотом в буфере до вывода же!

И за одно как средствами OpenGL выводить изображение не RGB, а YUYV? А то драйвер как то неправильно конвертирует из YUYV в RGB, да и все программы используют входной формат YUYV. Вполне возможно и потому, что драйвер плохо преобразует в RGB.

Последний раз редактировалось KIV_95; 14.08.2010 в 23:41.
KIV_95 вне форума Ответить с цитированием
Старый 15.08.2010, 12:18   #2
KIV_95
 
Регистрация: 02.02.2010
Сообщений: 5
По умолчанию

Проблему с поворотом решил. Надо было написать:
Код:
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);
Вопрос про вывод YUYV остаётся в силе. Мне бы подошёл и способ быстро сконвертировать из YUYV в RGB в буфере в памяти до вывода. Делать это ручками - думаю будет медленно => надо опять использовать OpenGL или ещё кого-то там. Главное, чтобы под Linux эта библиотека была (если не OpenGL, который уж точно тут есть).
KIV_95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод картинки попиксельно SmilingBull Мультимедиа в Delphi 6 11.01.2011 02:01
вывод картинки на экран RakovEV Win Api 7 09.05.2010 12:30
вывод картинки на экран в winapi RakovEV Помощь студентам 1 29.04.2010 18:27
Вывод картинки с рамкой Syltan PHP 6 10.03.2010 02:18
вывод картинки на экран Olejik Общие вопросы C/C++ 6 15.09.2009 20:43