LINUX.ORG.RU

программирование под video4linux


0

0

Помогите разобратся как программить под Video4Linux. С настройками вродибы разобрался.

Вот только не могу понять как сделать окно (под Х-сами) в котором будет "живое" выдео.

Т.е. что нужно сказать ioctl(fbttv,VIDIOC??? чтобы в окне появилось "живое" видео.

Мне бы саму идею как оно работает. А то копаюсь в разных исходниках и просто балдею от непонимания.

Роман Бондаренко. bondlab@mail.ru


Ну вкратце так:

int device = open("/dev/video", O_RDWR);
struct video_window vidwin;
/*
инициализируешь vid_win как надо
*/

if( ioctl(device, VIDIOCSWIN ,&vid_win)==-1)
{
//че-то ты не то передал :(
exit(1)

}
int one = 1;

/*Ну понеслась!*/
ioctl(device, VIDIOCCAPTURE,&one );

Таким макаром можно делать overlay в любое место экрана поверх всех окон. Недостатки - надо самому отслеживать, что окно переместили, ресайзили или сверху чем накрыли. Да, надо убедится, что device overlay поддерживает.

Другой способ - это получать битмапки и самому их в окошко рисовать.
Скачай сырцы xawtv там есть Programing-FAQ, в нем описано как.

Но это повозиться хорошо надо.

anonymous
()
Ответ на: комментарий от anonymous

Меня второй способ интересует. А FAQ написан криво

xawtv ковыряю! только понять не могу как они делают grabdisplay. С overlay мне все понятно оно уже работает( можно не только в окошко но и на десктоп).

bondlab
() автор топика

Да так как в FAQ и делают. Т.e пытаются сделать то, что называется
Advanced Grabbing - mmap + double buffer, если не выходит - обычный read кажется пробуют, а может и не пробуют, не помню.

Затем то, что захватили, рисуют через MIT SHMEM для скорости.
Можно конечно и обычным XPutImage, но тормозить будет. Хотя 15 FPS получалось и так.

Как он там процессы синхронизовал и данные передавал - я не вникал.

Я делал в 2 потока - один в бесконечном цикле захватывает в 2 буффера,
другой рисует. Основной гемор - отрисовка, чтоб для всех видеорежимов,
и быстро. Так что если есть возможность какой нибудь gtk использовать для этого - самому лучше не страдать.

White Eagle

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.