Russian Qt Forum
Февраль 05, 2012, 21:13
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Мультимедиа
(Модератор:
Sergeich
) >
Показ видео средствами Qt
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Показ видео средствами Qt (Прочитано 6876 раз)
ERO-X
Гость
Показ видео средствами Qt
«
:
Август 12, 2006, 08:37 »
У меня вот такая задача: нужно средствами Qt-3.3.2 выводить на экран живое видео, т.е. показывать 25 картинок в секунду размером 352x288.
Пробовал в QCanvasView поставить QCanvas, и методом setBackgroundPixmap ставить ему мои кадры - работает, но при этом на экране сильное мерцание, смотреть невозможно. Потом пробовал ставить кадры методом setTile. Мерцания нет, но обрабатываться успевает не более 5 кадров в секунду.
Не подскажете как это правильно сделать?
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #1 :
Август 12, 2006, 10:51 »
про мерцание читай на тему Double buffering
Записан
ERO-X
Гость
Показ видео средствами Qt
«
Ответ #2 :
Август 12, 2006, 12:18 »
Пробовал при помощи функции setDoubleBuffering. Но по-умолчанию двойная буферизация уже включена, тройной и четверной не предусмотрено :-)
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #3 :
Август 12, 2006, 16:16 »
я видео показываю так:
в QLabel изменяю Pixmap, функцией setPixmap
мерцаний нет, правда у меня FPS примерно 15
PS: насколько я знаю вроде в QT3 ее надо включать, а в QT4 она по умолчанию
Записан
ERO-X
Гость
Показ видео средствами Qt
«
Ответ #4 :
Август 12, 2006, 18:50 »
По поводу двойной буферизации в HELP по Qt версии 3.3.2 сказано что она включена по умолчанию, но я не на всякий случай включаю ещё раз в программе.
setPixmap попробую, надеюсь что поможет. А всё остальное у тебя стандартно там? Никаких специфических функций? И у тебя это видео в 3 или в 4 версии работает?
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #5 :
Август 12, 2006, 22:07 »
я работаю в 4, хотя в тройке была картинка в 24 бита, меньше было преобразований!
а так все стандартно!
Записан
ERO-X
Гость
Показ видео средствами Qt
«
Ответ #6 :
Август 12, 2006, 23:09 »
А в 4-й версии 32 бита? Сколько работаю с видео так и не смог воспользоваться этим лишним четвёртым байтом с пользой, который вроде как за прозрачность отвечает. Всегда лишний цикл в коде - то ставить этот лишний ноль, то наоборот убирать.
Спасибо за помощь - буду пробовать!
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #7 :
Август 13, 2006, 17:20 »
ага этот канал сильно напрягает
лишнее преобразование
Записан
alex0303
Гость
Показ видео средствами Qt
«
Ответ #8 :
Август 13, 2006, 19:22 »
В 3-ке QImage 32-х разрядный. (8 и 1 бит не в счёт)
Внутренности QPixmap - не известно и не гарантируются. Может зависить от видеорежима и т.д. Т.е.
Для показа видео (и именно видео в его бытовом понимании YUV 422 и прочие) практически все плейеры используют оверлеи (в терминах видеокарты).
В винде черех директшоу. В линуксе через либы расширений Иксов.
Записан
SLiDER
Программист
Offline
Сообщений: 529
Показ видео средствами Qt
«
Ответ #9 :
Август 13, 2006, 20:49 »
Цитата: "alex0303"
Для показа видео (и именно видео в его бытовом понимании YUV 422 и прочие) практически все плейеры используют оверлеи (в терминах видеокарты).
В винде черех директшоу. В линуксе через либы расширений Иксов.
Я недавно, в теме про mp3, уже говорил и тут осмелюсь предложить, если в проекте на Qt требуется работа с мультимедиа (звук, видео и даже OpenGL), имет смыл обратить внимание на SDL (
http://www.libsdl.org
), особенно если нужна (или может понадобиться впоследствии) кроссплатформенность. Библиотека весьма мощная и шустрая, с очень неплохо продуманой архитектурой. И лицензия LGPL. Так что рекомендую.
Записан
Пусть это будет просто: просто, как только можно, но не проще. (Альберт Эйнштейн)
ERO-X
Гость
Показ видео средствами Qt
«
Ответ #10 :
Август 14, 2006, 18:11 »
Цитата: "alex0303"
В линуксе через либы расширений Иксов.
У меня как раз Линукс, работаю в нём недолго, раньше в Виндовз средствами DirectX пользовался для показа видео. Нельзя ли поподробнее про расширения Х? Нет ли у тебя какого-нибудь примера с с использованием Х для видео?
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #11 :
Август 14, 2006, 20:49 »
SDL хороша как либа, только пример бы к ней внятный с QT
я в свое время ее пользовал
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #12 :
Август 16, 2006, 00:28 »
подразобрался с темой
SDL как либа хороша, но все пользуют связку QT+SDL+Linux
связка QT+SDL+Win32 как НЛО, все болтают, никто не видел
DirectX для меня сложноват
реализовал классик под Windows, загрузка проца упала с 60% до 30%. Так как камер у меня 3, то что и требовалос.
вот код:
1. Массив должен быть в BGR, а не в RGB
2. Картинка будет перевернута, особнености BMP
3. Работает ХОРОШО под qt4.1.4 или qt3, в старых баг был
Код:
CFastImage::CFastImage(QWidget* parent)
: QWidget(parent)
{
m_data=NULL;
setAttribute( Qt::WA_PaintOnScreen, true);
startTimer( 20);
}
CFastImage::~CFastImage()
{
if(m_data!=NULL) delete[] m_data;
}
void CFastImage::timerEvent(QTimerEvent*)
{
update();
}
void CFastImage::paintEvent(QPaintEvent* p)
{
// just for illustration purposes. You get the same effect if you leave the paint event completely empty, too.
QWidget::paintEvent(p);
BITMAPINFO
BMP;
BMP.bmiHeader.biWidth=width;
BMP.bmiHeader.biHeight=height;
BMP.bmiHeader.biBitCount=24;
BMP.bmiHeader.biSize
= sizeof (BITMAPINFOHEADER);
BMP.bmiHeader.biPlanes
= 1;
BMP.bmiHeader.biCompression
= BI_RGB;
BMP.bmiHeader.biSizeImage = ( ( BMP.bmiHeader.biWidth * ( BMP.bmiHeader.biBitCount >> 3 ) + 3 ) & - 4 ) * BMP.bmiHeader.biHeight;
HDC hdc = GetDC(winId());
SetStretchBltMode( hdc, COLORONCOLOR );
StretchDIBits ( hdc , 0 , 0 , width , height , 0 , 0 , width , height , m_data , &BMP , DIB_RGB_COLORS , SRCCOPY );
ReleaseDC(winId(), hdc);
}
QPaintEngine* CFastImage::paintEngine() const
{
return 0;
}
Код:
#ifndef _FAST_IMAGE_H_
#define _FAST_IMAGE_H_
class CFastImage : public QWidget
{
public:
CFastImage(QWidget* parent = NULL);
~CFastImage();
public:
virtual void timerEvent(QTimerEvent*);
void paintEvent(QPaintEvent* p);
QPaintEngine *paintEngine() const;
public:
unsigned char* m_data;
int width;
int height;
};
#endif //_FAST_IMAGE_H_
Записан
ERO-X
Гость
Показ видео средствами Qt
«
Ответ #13 :
Август 16, 2006, 07:30 »
А мне дали умную и книгу и я сделал, чтоб картинка в label не мерцала при показе. Тут 3 момента:
1) Установить флаг WNoAutoErase
2) Вызвать метод setBackgroundMode и передать ему флаг NoBackground
3) Включить двойную буферизацию
Всё действительно отлично работает после этого!!
Камер в проекте у меня вообще до 16 может быть. Конечно если захотят все сразу смотреть....
Записан
Admin
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1964
Показ видео средствами Qt
«
Ответ #14 :
Август 16, 2006, 10:55 »
ну я вот щас с 3 работаю! они 3 выжирают весь CPU!
попробуй тоже!
мне понравилось что я у себя избавился от QImage! не надо теперь в нее конвертить
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...