Проблема захвата видео в OpenGL - PullRequest
0 голосов
/ 14 сентября 2011

Возможно, это очень легко, но я не могу найти подходящих слов для Google, чтобы выкладывать то, что мне нужно. У меня есть пользовательский QGLWidget, и я хочу сделать несколько снимков видео, чтобы показать его другим.

Захват работает хорошо для всех других виджетов (Кнопки, Флажки, ...), но мой GLWidget остается пустым (для обычного пользователя он полностью отзывчив). Когда я наведу на него курсор мыши, прямоугольная область мыши перерисовывается на виджете.

Как мне сказать моему виджету / системе Windows обновить всю область при захвате движения?

Возможно, это связано с той же проблемой: однажды я провел сеанс в TeamViewer, где возникла та же проблема.

EDIT

Когда я использую Qt Demo Hello GL и записываю его, возникает та же проблема.

EDIT2

Я попробовал одну из моих демонстраций GLUT, и они тоже не работали, Также я читал о проблемах записи вывода OpenGL, но это было на компьютерах с Windows. Может быть, есть также проблемы на Linux?

Btw. Я использую xvidcap для захвата.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Btw. Я использую xvidcap для захвата.

Я не уверен, но IIRC xvidcap использует расширение Xdamage только для того, чтобы получить, какие программы сообщают, что они отображаются как новые. Операции OpenGL не устанавливают флаг повреждения.

Лично я использую ffmpeg для захвата экрана под X11. Нечто подобное

ffmpeg -f x11grab -r $FRAMERATE -s $WIDTHx$HEIGHT -i $DISPLAY+$XOFFSET,$YOFFSET -vcodec ... -b -y output_file

Например

ffmpeg -f x11grab -r 18 -s 800x600 -i :0+0,0 -vcodec mjpeg out.avi

Я нашел кодеки mjpeg, ljpeg или x264 / fast lossless, хорошо подходящие для этой задачи.

0 голосов
/ 14 сентября 2011

Это немного догадка, так как у меня мало опыта конкретно с виджетом GL, но в первую очередь я бы попытался установить флажок непрозрачного события рисования на вашем виджете:

setAttribute( Qt::WA_OpaquePaintEvent )
...