LINUX.ORG.RU

Libvlc, модуль VMem. Получить кадр


0

1

Нужно поверх видео что то рисовать и/или брать кусок из этого видео. Я использую Qt и libvlc. Насколько я понял задача требует вывод фрейма в память, а уже после взяких там шаманий над этим фреймом выводить его на экран. Проблема получить этот кадр. Сразу же после завершения работы lock функции программа вылетает (

За пример было взято это и это

Вот выноски из моего кода


struct ctx
{
uchar* pixels;
QMutex* mutex;
};

ctx cx;

void* lock( void *data, void **pixels)
{
qDebug() << «lock»;
return NULL;
}

void unlock(void *data, void *id, void *const *pixels)
{
qDebug() << «unlock»;
}

void play()
{
...
libvlc_video_set_format(m_vlcMediaplayer, «RV32», VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH*4);

qDebug() << «libvlc_video_set_callbacks»;

libvlc_video_set_callbacks(m_vlcMediaplayer, lock, unlock, NULL, &cx);
...
}


После «lock» программа вылетает. Так как функции ничего не делают, то скорее всего я что то не правильно передаю в libvlc_video_set_callbacks(). Подскажите что делать. Как положить фрейм видео в QImage??

Вот полный исходник http://zalil.ru/32449274. Там много лишнего кода, но думаю разобраться можно. Помогите плз, 3 день бьюсь уже(



Последнее исправление: dakuenjery (всего исправлений: 2)

В теле функции lock нужно назначить буфер достаточного размера, куда будет выведен кадр:

*pixels = адрес выделенного буфера.

anonymous
()
24 ноября 2012 г.
Ответ на: комментарий от anonymous

не подскажете как проверить правильность указания адреса? в доках написано что при ошибках возвращается null из функций libvlc_media_new_path и libvlc_media_player_new_from_media, но при попытке открытия несуществующего адреса vlc это выводит в консоль

[0x7f58000010c8] v4l2 demux error: cannot open device '/dev/video1': No such file or directory

а проверка на null не приносит желаемого результата

        m = libvlc_media_new_path( libvlc, path );
        mp = libvlc_media_player_new_from_media( m );
        if( m == NULL || mp == NULL ) return;

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