653 / 589 / 171
Регистрация: 17.07.2012
Сообщений: 1,670
Записей в блоге: 1
1

DirectShow: VMR9 Windowless Mode

04.02.2014, 08:19. Показов 1824. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, господа.
Я в отчаянии. Не могу проиграть видео в Windowless режиме. Причем в Windowed и в Renderless всё прекрасно воспроизводится. Находил в гугле множество примеров, ничего не помогает. Я даже не знаю какой код из нескольких попыток можно вставить...
Использую DirectShow.NET.

Собственно выставляю Windowless:
C#
1
2
3
var filterConfig = (IVMRFilterConfig9)vmr9;
filterConfig.SetRenderingMode(VMR9Mode.Windowless);
filterConfig.SetNumberOfStreams(2);
Привязываю к контролу:
C#
1
2
var c = (IVMRWindowlessControl9)vmr9;
c.SetVideoClippingWindow(control.Handle);
И никакой реакции.

С SetVideoPosition тоже успел поиграться - без изменений.

Может кто неплохо знаком с DirectShow?

Добавлено через 15 часов 7 минут
Разобрался.
Рабочий код для воспроизведения ниже.

C#
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
public void Start(MediaPlayerControl control)
{
        mediaPlayer = control;
        int hr = 0;
 
        var graph = (IFilterGraph2)new FilterGraph();
        graphBuilder = (IGraphBuilder)graph;
 
        mediaEventEx = (IMediaEventEx)graphBuilder;
        hr = mediaEventEx.SetNotifyWindow(control.Handle, WMGraphNotify, IntPtr.Zero);
 
        ICaptureGraphBuilder2 icgb2 = new CaptureGraphBuilder2() as ICaptureGraphBuilder2;
 
        var vmr9 = (IBaseFilter)new VideoMixingRenderer9();
 
        var filterConfig = (IVMRFilterConfig9)vmr9;
 
        hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
        DsError.ThrowExceptionForHR(hr);
 
        hr = filterConfig.SetNumberOfStreams(2);
        DsError.ThrowExceptionForHR(hr);
 
        var mixerCtrl = (IVMRMixerControl9)vmr9;
 
        NormalizedRect r1 = new NormalizedRect(0, 0, 0.33f, 0.33f);
        NormalizedRect r2 = new NormalizedRect(0.33f, 0, 0.66f, 0.33f);
 
        mixerCtrl.SetOutputRect(0, ref r1);
        mixerCtrl.SetOutputRect(1, ref r2);
 
        windowlessControl = (IVMRWindowlessControl9)vmr9;
        hr = windowlessControl.SetVideoClippingWindow(control.Handle);
        DsError.ThrowExceptionForHR(hr);
 
        hr = windowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.None);
        DsError.ThrowExceptionForHR(hr);
 
        hr = windowlessControl.SetVideoPosition(null,new DsRect(control.DisplayRectangle));
        DsError.ThrowExceptionForHR(hr);
 
        hr = graphBuilder.AddFilter(vmr9, "Video Mixing Renderer 9");
        DsError.ThrowExceptionForHR(hr);
 
        IBaseFilter source1;
        hr = graphBuilder.AddSourceFilter(@"C:\Test\2.avi", "Source1", out source1);
        DsError.ThrowExceptionForHR(hr);
        IBaseFilter source2;
        hr = graphBuilder.AddSourceFilter(@"C:\Test\1.avi", "Source2", out source2);
        DsError.ThrowExceptionForHR(hr);
 
        hr = icgb2.SetFiltergraph(graphBuilder);
        DsError.ThrowExceptionForHR(hr);
 
        hr = icgb2.RenderStream(null, null, source1, null, vmr9);
        DsError.ThrowExceptionForHR(hr);
 
        hr = icgb2.RenderStream(null, null, source2, null, vmr9);
        DsError.ThrowExceptionForHR(hr);
 
        mediaControl = (IMediaControl)graphBuilder;
 
        hr = mediaControl.Run();
        DsError.ThrowExceptionForHR(hr);
}
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2014, 08:19
Ответы с готовыми решениями:

АЦП в Auto Trigger mode от таймера в CTC mode (atmega644)
Задача: прочитать данные с АЦП когда счетчик таймера совпадет со значением в регистре сравнения....

IIS Cache - Kernel mode and User mode - чем отличаются, что представляют из себя?
Не могу найти толкового описания Kernel mode and User mode cache. Во-первых, чтобы лучше...

Послать сообщение kernel mode -> user mode
Здравствуйте. В процессе разработки драйвера столкнулся с необходимостью посылать события/сообщения...

Not optimum mode. Recommended Mode: 1280х1024 60Hz
Недавно помер старый монитор. Сегодня притарабанил новый поставил картинка появилась с эти все...

0
04.02.2014, 08:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.02.2014, 08:19
Помогаю со студенческими работами здесь

Как отключить ac mode\battery mode?
Думаю, многие сталкивались с этим мигающим синим окошком (хоть бы в углу оно мигало - нет, по...

Fullscreen mode to Windowed Mode
Приветствую! Нужна функция с помощью которой можно перевести приложение из режима Fullscreen в...

DirectShow
Перевел программу из Delphi в C++ воспроизведения видео, источник:...

DirectShow из C++ в C#
Пишу программу на C# (там в WPF интерфейсы красивые получаются). Нужен захват камеры. Делаю на C++...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru