УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

Реализация Phonon бекенда для Media виджета


Автор Сообщение
Сообщение создано: 29. 02. 2012 [16:30]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
Пробую реализовать бекенд Media виджета для проигрывания мультимедиа ресурсов (в идеале потока с IP-камеры).
Решил использовать Qt/KDE фреймворк Phonon.

Начата реализация api в VCAEngine и отоброжение через UI.Vision (WebVision пока не трогал, да и еще не решил как быть с ним).

В VCAEngine добавлены новые свойства:
"Phonon" для атрибута "Type" виджета "Media";
Свойства "brightness", "contrast" ,"hue", "saturation" для него (пока не обрабатываются в Vision’е ;-) )

Phonon отключается в скрипте ./configure опцией --disable-Phonon (правда autotools я не очень знаю, так что там есть что улучшить). Возможно не везде проставил корректно ifdef HAVE_PHONON, так как пока тестировал только на работоспособность с включенным Phonon.

В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)

Так же попытался добавить включение фуллскрина по двойному клику на media-виджете. Теперь не пойму куда добавить обработку выхода из фулл скрина ;-).

Прилагаю тестовый проект, патч на версию 0.7.2 ( svn1669 ) и скриншот с наблюдаемым багом.

проект на дропбоксе: http://dl.dropbox.com/u/6985606/phonon.tar.xz

Под Debian Squeeze необходимы пакеты: libphonon-dev для сборки и libphonon4 для работы.
В качестве бекендов могут быть phonon-backend-xine, phonon-backend-vlc и phonon-backend-gstreamer (на последнем наблюдаю еще один баг: при завершении видео потока, не происходит перезапуск проигрования с начала, хотя соответсвующий coonect между сигналам finished() и слотом play() установлен).

P.S.: еще раз прошу о помощи в первую очередь с восстановлением нормального функционала media::image, чтоб можно было продолжать двигаться дальше.

[Сообщение редактировалось 1 раз(а), в последний раз 29.02.2012 в 16:53.]
Вложенный файл

test.png (Тип файла: image/png, Размер: 279.44 килобайт) — 1911 загрузок
phonon_p1.patch (Тип файла: text/x-patch, Размер: 10.27 килобайт) — 1608 загрузок
Сообщение создано: 29. 02. 2012 [17:02]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

Начата реализация api в VCAEngine и отоброжение через UI.Vision (WebVision пока не трогал, да и еще не решил как быть с ним).

HTML5 тег "media", "video", наверное.

"aleax" wrote:

В VCAEngine добавлены новые свойства:
"Phonon" для атрибута "Type" виджета "Media";
Свойства "brightness", "contrast" ,"hue", "saturation" для него (пока не обрабатываются в Vision’е ;-) )

А вот это нехорошо! Модель данных (VCAEngine) не должна содержать информации о деталях и способах реализации, хотя-бы потому, что это-же в WebVision будет определённо реализовываться не с помощью Phonon!

Добавляйте более абстрактный тип "Video" или используйте существующий "Movie", в котором, при доступности Phonon, использовать для проигрывания в Vision его иначе старое.

И свойства контрастности, яркости и т.д., что фактически является фильтром лучше оформить одним параметром "фильтр" с записью отдельных частей через разделитель.

"aleax" wrote:

В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)

При каком типе? Нужно условно инициировать объект Phonon, а не всегда.

"aleax" wrote:

Так же попытался добавить включение фуллскрина по двойному клику на media-виджете. Теперь не пойму куда добавить обработку выхода из фулл скрина ;-).

Разбираться с событиями, которые слушает объект Phonon и фильтровать их.

"aleax" wrote:

P.S.: еще раз прошу о помощи в первую очередь с восстановлением нормального функционала media::image, чтоб можно было продолжать двигаться дальше.

Примите к сведению мои замечания, а пока я погляжу на патч.

Learn, learn and learn better than work, work and work.
Сообщение создано: 29. 02. 2012 [17:13]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"roman" wrote:

"aleax" wrote:

В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)

При каком типе? Нужно условно инициировать объект Phonon, а не всегда.

Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.

Learn, learn and learn better than work, work and work.
Сообщение создано: 29. 02. 2012 [17:23]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
"roman" wrote:

Добавляйте более абстрактный тип "Video" или используйте существующий "Movie", в котором, при доступности Phonon, использовать для проигрывания в Vision его иначе старое.

"aleax" wrote:

В Vision своим вмешательством внес баг — на Media виджете, который содержит просто изображение, рисуется черный прямоугольник, источник которого не могу никак найти (помогите, кто может!!!)

При каком типе? Нужно условно инициировать объект Phonon, а не всегда.


Оригинально в ините создается layout в который добавляется QLabel, и уже в зависимости от типа заполняется либо как QPixmap, либо как QMovie.

Я пошел путем создания виджета VideoPlayer, и соответственно добавления в layout либо QLabel (с удалением VideoPlayer), либо наоборот.
Сообщение создано: 29. 02. 2012 [17:27]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
"roman" wrote:

Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.

Изначально так и пытался сделать, но споткнулся о наличие в layout’е QLabe`а, соответственно встал вопрос к чему привязать QWidget видеоплеера.
Сообщение создано: 29. 02. 2012 [17:37]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

"roman" wrote:

Ну да. Нужно сделать условное создание удаление объекта Phonon в зависимости от значения атрибута "Тип", т.е. фактически вынести его создание из ShapeMedia::init() в ShapeMedia::attrSet(), так как в примитиве "FormEl", выше в этом-же файле.

Изначально так и пытался сделать, но споткнулся о наличие в layout’е QLabe`а, соответственно встал вопрос к чему привязать QWidget видеоплеера.

Привязывать к тому к чему QLabel привязывается.
То что у Вас происходит как раз и объясняется этим:
w->layout()->removeWidget( shD->player );
w->layout()->addWidget( shD->labWdg );

Удаление виджета из лайоута не удаляет его физически, а значит он остаётся принадлежать корневому виджету и будет отображаться, разве что не будет контролироваться размещением.

Делайте так как в FormEl.

Learn, learn and learn better than work, work and work.
Сообщение создано: 29. 02. 2012 [22:20]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
Что-то не пойму как быть.
В FormEl определяется указатель на "базовый" виджет addrWdg, который и кастуется к необходимым виджетам.
Переделывать на данный вариант Media —> наделать новых багов в рабочем коде, ну и отделаться малой кровью не получится.
В общем попробую пойти таким путем, а там посмотрим.
Сообщение создано: 01. 03. 2012 [09:37]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
"aleax" wrote:

Что-то не пойму как быть.
В FormEl определяется указатель на "базовый" виджет addrWdg, который и кастуется к необходимым виджетам.
Переделывать на данный вариант Media —> наделать новых багов в рабочем коде, ну и отделаться малой кровью не получится.
В общем попробую пойти таким путем, а там посмотрим.


Что-то я перемудрил. Утро вечера мудренее — вынес из инита, и вроде все стало работать нормально. Приду на работу выложу новый патч.
Сообщение создано: 01. 03. 2012 [11:29]
aleax
Alexey Bondarchuk
Создатель темы
Зарегистрирован(а) с: 27.01.2010
Сообщения: 73
Второй вариант, с инициализацией в attrSet.
Вложенный файл

phonon_p2.patch (Тип файла: text/x-patch, Размер: 10.42 килобайт) — 1560 загрузок
Сообщение создано: 01. 03. 2012 [12:57]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"aleax" wrote:

Второй вариант, с инициализацией в attrSet.

Замена так и не реализована. Просто выполняется подмена в лайоуте, что неэффективно в отношении потребления памяти.
Реализация проигрывания видео с помощью Phonon не внесена в существующий тип "Movie".

Learn, learn and learn better than work, work and work.



2452