Comments 23
Перечитал 2 раза, конкретики не извлёк :(
+21
А мне было интересно почитать! Жду продолжения! :-)
Вот у нас есть картинка в памяти, мы её можем вывести в окно, а как поверх нее сделать прозрачные контролы? Стандартные контролы поддерживают прозрачность? Или тоже как картинку их делать)))
Вот у нас есть картинка в памяти, мы её можем вывести в окно, а как поверх нее сделать прозрачные контролы? Стандартные контролы поддерживают прозрачность? Или тоже как картинку их делать)))
+3
Думаю дальше автор будет писать про вывод через SDL, который на Windows использует Direct3D.
Только с заботой о красоте заказчик забыл про производительность и совместимость. Скорее всего пользователю придётся обновлять компоненты DirectX. Да ещё нужно помнить, что у 60% целевой аудитории всё ещё Windows XP, и даже у той части у кого уже Windows 7 у многих тема Basic. А в обоих этих случаях даже Windows Media Player выводит видео через оверлей и имеет непрозрачный интерфейс. Ведь в Microsoft ребята не дураки…
Короче, вывод через Direct3D создаёт гораздо большую нагрузку на CPU и видеокарту. А это самое главное и ради этого лучше пожертвовать прозрачностью.
Только с заботой о красоте заказчик забыл про производительность и совместимость. Скорее всего пользователю придётся обновлять компоненты DirectX. Да ещё нужно помнить, что у 60% целевой аудитории всё ещё Windows XP, и даже у той части у кого уже Windows 7 у многих тема Basic. А в обоих этих случаях даже Windows Media Player выводит видео через оверлей и имеет непрозрачный интерфейс. Ведь в Microsoft ребята не дураки…
Короче, вывод через Direct3D создаёт гораздо большую нагрузку на CPU и видеокарту. А это самое главное и ради этого лучше пожертвовать прозрачностью.
+1
Подозреваю, что софтина писалась для какого-то специфичного устройства. Может быть что-то типа терминала самообслуживания.
0
Уже лет 6 вывожу видео через Direct3D с прозрачностями шейдерами и т.п. О какой нагрузке речь? Уже шесть лет назад средняя машина тянула спокойно более 4-х DivX видео роликов. См. пример из DirectX 9.0 SDK — там где карусель их роликов.
+1
Имелись ввиду ролики в стандартном разрешении.
0
Также не понятно, что надо обновлять. DirectX 9.0 и все работает из коробки что под Win7, что под XP.
0
Короче, вывод через Direct3D создаёт гораздо большую нагрузку на CPU и видеокарту.
по сравнению с чем?
Нет, вывод работает через Direct3D. Система такая же как и в плагине VLC — direct3d video output плюс отрисовка примитивов в качестве ГУИ
0
Кстати, сами авторы VLC рекомендуют писать для кастомного вывода свой плагин. Лучше б об этом кто написал :-). Сам тоже пользую libvlc_video_set_callbacks. Но у меня основной способ декодирования видео все же через DirectShow. LibVLC использую на случай, когда с DirectShow сложности. Например, для потокового видео.
+1
у меня как таки только потоковое видео ну а насчет плагина были идеи, но не заладилось, ну а писать свой почему бы и нет? самое главное научиться компилять под Windows(благо и статейка соответствующая имеется)а с добавлением нового не должно быть проблем, берешь уже существующие и правишь. С плагином VMem я так и сделал, пришлось допилить его
0
я так и не понял каким же образом увязать абсолютно прозрачное окно с полупрозрачными элементамиА в чём проблема? Рисуем полупрозрачные png или svg и вперёд. Пример:
#include <QMainWindow>
#include <QApplication>
#include <QPushButton>
#include <QHBoxLayout>
class TranWin : public QMainWindow
{
public:
TranWin( QWidget* Parent = 0 );
}; // TranWin
TranWin::TranWin( QWidget* Parent ) : QMainWindow( Parent, Qt::FramelessWindowHint )
{
setAttribute( Qt::WA_TranslucentBackground );
setAttribute( Qt::WA_NoSystemBackground );
QWidget* Wid = new QWidget( this );
QHBoxLayout* Layout = new QHBoxLayout( Wid );
QPushButton* Button = new QPushButton( QIcon( "stop.png" ), "Quit", Wid );
Button->setFlat( true );
connect( Button, SIGNAL( clicked( bool ) ), qApp, SLOT( quit() ) );
Layout->addWidget( Button );
Button = new QPushButton( QIcon( "play.png" ), "About Qt", Wid );
Button->setFlat( true );
connect( Button, SIGNAL( clicked( bool ) ), qApp, SLOT( aboutQt() ) );
Layout->addWidget( Button );
Wid->setLayout( Layout );
setCentralWidget( Wid );
} // TranWin()
int main( int argc, char* argv[] )
{
QApplication App( argc, argv );
TranWin* Win = new TranWin;
Win->show();
return App.exec();
} // main( int, char*[] )
Выглядит как-то так: 
+2
угу, прям сейчас решил затестить твой код: привязал видео к главному окну, затем к виджету — итог один — ничего не рисуется при включенном transcluent. пробовал комбинировать(привязал видео к виджету, установил флаги другие) и получалось что рисуется либо элементы, либо видео. вот так вот…
0
да идея была, я писал про синхронизацию окон. но насколько я знаю в Win7 при таком подходе эти два окна будут отображаться в таскбаре запущенного приложения, и это не очень хорошо, плюс надо еще сделать чтобы окно было постоянно поверх видео окна но не topmost поверх всех окон
0
что за флаги? а как быть с topmost?
0
Only those users with full accounts are able to leave comments. Log in, please.
Видео-плеер на основе VLC. Часть 1