Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интерфейс на основе DirectX / 15 сообщений из 15, страница 1 из 1
22.05.2019, 17:41
    #39816688
LeoAm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Здравствуйте.

Хотелось бы услышать Ваше мнение по решению нижеописанной задачи.

Исходные данные
Имеется интерфейс программы:
- TImage - Фоновая картинка
- TLabel - Текстовая информация
- TButton - Кнопки управления

Вопрос
Есть ли возможность использовать вместо статической картинки видео ролик?

Если использовать форму программы для отображения DirectX (использую интерфейс IID_IVideoWindow), то перетираются кнопки и текстовая информация.
Если через DirectX брать каждый фрейм и рисовать через GDI - то тормозит и прерывается ролик.

Буду признателен за совет или похожие решения.
...
Рейтинг: 0 / 0
23.05.2019, 01:58
    #39816849
errorsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
LeoAm,

1) поиграться с регионами — но это не даст альфа прозрачности
2) FireMonkey
3) возможно как-то не оптимально рисование происходит? Попробуйте использовать TEsImageLayout из https://github.com/errorcalc/FreeEsVclComponents
...
Рейтинг: 0 / 0
23.05.2019, 03:12
    #39816856
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Видео на одно окно рендерить а интерфейс на другое, прозрачное, расположенное поверх окна с видео.
...
Рейтинг: 0 / 0
24.05.2019, 10:02
    #39817515
LeoAm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Спасибо за советы

errorsoft,

Как я понял, Ваши советы касаются прорисовки изображения, а не ролика в целом.
На счет FireMonkey - не работал ранее. Посмотрю что он может предложить...

rgreat,

Ваш совет относительно двух окон я уже реализовывал.
Окно делал прозрачным используя TransparentColor. Получается все почти идеально... но есть нюанс! Компоненты ТLabel выглядят искаженно! Картинку прилагаю
...
Рейтинг: 0 / 0
24.05.2019, 11:13
    #39817609
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
LeoAm,
Какого размера кадр видео и какая частота?
...
Рейтинг: 0 / 0
24.05.2019, 13:09
    #39817731
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
LeoAmОкно делал прозрачным используя TransparentColor. Получается все почти идеально... но есть нюанс! Компоненты ТLabel выглядят искаженно! Попробуй в настройках винды отключить сглаживание шрифтов, оно в такой схеме нормально работать не может.
...
Рейтинг: 0 / 0
24.05.2019, 15:11
    #39817824
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
LeoAm
Если использовать форму программы для отображения DirectX (использую интерфейс IID_IVideoWindow), то перетираются кнопки и текстовая информация.

Вот рендеринг не через IID_IVideoWindow, а через IVMRWindowlessControl. Кнопка видна, TLabel не виден, TStaticText виден, но цвет шрифта почему-то не меняется (может стилю Виндовс соответствует).
...
Рейтинг: 0 / 0
24.05.2019, 15:12
    #39817825
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
s62,
...
Рейтинг: 0 / 0
24.05.2019, 15:13
    #39817827
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Но некрасиво)
...
Рейтинг: 0 / 0
24.05.2019, 16:09
    #39817867
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
s62,

другие контролы нужны, которые в альфа канал нормально умеют.
...
Рейтинг: 0 / 0
24.05.2019, 16:36
    #39817897
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Или ручками рисовать.
...
Рейтинг: 0 / 0
24.05.2019, 16:50
    #39817910
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
Мне вообще трудно представить чтобы отрисовка через GDI тормозила.
FullHD bitmap на соответствующем по размеру экране с самой дешевой видеокартой рисуется ~10 мс, без нее ~2 раза дольше.
Чтобы видео не успевало отрисовываться, у него bitrate должен быть раз в 50 больше. Не уверен, что в природе существуют записывающие устройства с такими параметрами.
...
Рейтинг: 0 / 0
13.06.2019, 10:41
    #39826009
LeoAm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
s62,

Спасибо за отзыв.
Не имею опыта работы с этим интерфейсом. Если Ваш проект не представляет ценности, можете поделиться?
...
Рейтинг: 0 / 0
13.06.2019, 17:40
    #39826285
s62
s62
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
LeoAm,

Ну, граф строится так же, как и в случае с IVideoWindow.

Только вместо кода для IVideoWindow, что-то вот примерно такое (из учебно-практического :) примера, тут еще текст накладывался, смотрел, как это делается)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var
  GraphBuilder: IGraphBuilder; //сам граф
  MediaControl: IMediaControl; //управление графом
//  MediaEvent: IMediaEvent; //обработчик событий
  MediaPosition: IMediaPosition; //позиция проигрывания
  BasicAudio: IBasicAudio; //управление звуком
  AudioRenderer : IBaseFilter;
  VideoRenderer: IBaseFilter;
  VideoPreview: IBaseFilter;

  RenderConfig:  IVMRFilterConfig;
  WindowslessControl: IVMRWindowlessControl;

  SrcRect, DestRect: TRect;
  X, Y, Z, T: integer;



Код: pascal
1.
2.
3.
4.
5.
procedure TMainForm.TryFunc(aResult: HResult; Msg: string);
begin
  if aResult <> S_OK
  then raise Exception.Create(Msg);
end;




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
   // создаем объект для фильтра вывода видео FVideoRender он же будет микшировать
   // наше видео с изображением текста
    TryFunc(CoCreateInstance(CLSID_VideoMixingRenderer, nil, CLSCTX_INPROC,
      IID_IBaseFilter, VideoPreview), 'Не удается создать VMR');

    //добавляем его в граф
    TryFunc(GraphBuilder.AddFilter(VideoPreview, 'Video Renderer'),
      'Не удается add Video preview');

    TryFunc(VideoPreview.QueryInterface(IID_IVMRFilterConfig, RenderConfig),
      'Не удается get RenderConfig');

    TryFunc(RenderConfig.SetRenderingMode(VMRMode_Windowless),
      'Не удается setrenderingmode');

    TryFunc(RenderConfig.SetNumberOfStreams(1), 'Не удалось задать кол-во потоков');

//    TryFunc(VideoPreview.QueryInterface(IID_IVMRMixerBitmap, ScreenBitmap),
//      'Не удалось получить битмап для наложения картинки');

    TryFunc(GraphBuilder.RenderFile(PChar(FileName), nil),
      'ошибка рендеринга файла');

    TryFunc(VideoPreview.QueryInterface(IVMRWindowlessControl, WindowslessControl),
      'Не удается get WindowlessControl');

    TryFunc(WindowslessControl.SetVideoClippingWindow(pnlTop.Handle),
      'Не удается SetVideoClippingWindow');

  //
    WindowslessControl.GetNativeVideoSize(X, Y, Z, T);
    SrcRect.Left := 0;
    SrcRect.Top := 0;
    SrcRect.Right := X;
    SRcRect.Bottom := Y;
    DestRect := pnlTop.ClientRect;
    TryFunc(WindowslessControl.SetVideoPosition(@SrcRect, @DestRect),
      'Не удается SetVideoPosition');


Вывод сообщений тут - для меня самого, в процессе разработки.

Ещё
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TMainForm.pnlTopResize(Sender: TObject);
begin
  if FPlaying then
  begin
    DestRect := pnlTop.ClientRect;
    WindowslessControl.SetVideoPosition(@SrcRect, @DestRect);
  end;
end;
...
Рейтинг: 0 / 0
14.06.2019, 10:28
    #39826454
LeoAm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Интерфейс на основе DirectX
s62,

Спасибо за пример, все заработало, кнопка действительно не исчезает. Так что теперь проблема как оставить видимыми TLabel, TImage... в общем наследников от TGraphicControl
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Интерфейс на основе DirectX / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]