Контекста
Я успешно загрузил 32 битную ezrgb24 COM (скомпилировано из образцов)Как подключить EZrgb24 фильтр к моей графе
Видео играет просто отлично с DirectShow.NET и C#.
Однако я не знаю, как подключить фильтр ezrgb24, который я создал к моему графику.
Добавлено в самого начало моего класса
[ComImport,
System.Security.SuppressUnmanagedCodeSecurity,
Guid("fd5010a3-8ebe-11ce-8183-00aa00577da1"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IIPEffect
{
[PreserveSig]
void get_IPEffect([Out] out int effectNum, [Out] out double StartTime, [Out] out double Length);
[PreserveSig]
void put_IPEffect([In] int effectNum, [In] double StartTime, [In] double Length);
}
internal enum CLSCTX
{
Inproc = 0x03,
Server = 0x15,
All = 0x17,
}
[ComImport]
[Guid("8B498501-1218-11CF-ADC4-00A0D100041B")]
public class EZRGB24
{
}
Соответствующий код
IBaseFilter ibfRenderer = null;
ISampleGrabber sampGrabber = null;
IBaseFilter capFilter = null;
IPin iPinInFilter = null;
IPin iPinOutFilter = null;
IPin iPinInDest = null;
Type comType = null;
object comObj = null;
m_FilterGraph = new FilterGraph() as IFilterGraph2;
try
{
// Get the SampleGrabber interface
sampGrabber = new SampleGrabber() as ISampleGrabber;
// Add the video source
hr = m_FilterGraph.AddSourceFilter(_videoPath, "Ds.NET FileFilter", out capFilter);
DsError.ThrowExceptionForHR(hr);
// Hopefully this will be the video pin
IPin iPinOutSource = DsFindPin.ByDirection(capFilter, PinDirection.Output, 0);
IBaseFilter baseGrabFlt = sampGrabber as IBaseFilter;
ConfigureSampleGrabber(sampGrabber);
iPinInFilter = DsFindPin.ByDirection(baseGrabFlt, PinDirection.Input, 0);
iPinOutFilter = DsFindPin.ByDirection(baseGrabFlt, PinDirection.Output, 0);
// Add the frame grabber to the graph
hr = m_FilterGraph.AddFilter(baseGrabFlt, "Ds.NET Grabber");
DsError.ThrowExceptionForHR(hr);
hr = m_FilterGraph.Connect(iPinOutSource, iPinInFilter);
DsError.ThrowExceptionForHR(hr);
// Get the default video renderer
ibfRenderer = (IBaseFilter)new VideoRendererDefault();
// Add it to the graph
hr = m_FilterGraph.AddFilter(ibfRenderer, "Ds.NET VideoRendererDefault");
DsError.ThrowExceptionForHR(hr);
iPinInDest = DsFindPin.ByDirection(ibfRenderer, PinDirection.Input, 0);
// Connect the graph. Many other filters automatically get added here
hr = m_FilterGraph.Connect(iPinOutFilter, iPinInDest);
DsError.ThrowExceptionForHR(hr);
SaveSizeInfo(sampGrabber);
----- everything works fine up to here.
IIPEffect myClass = (IIPEffect)(new EZRGB24());
myClass.put_IPEffect(1008, 0, 100000);
hr = m_FilterGraph.AddFilter((IBaseFilter)myClass, "EZRGB24");
IPin inPinx = DsFindPin.ByDirection((IBaseFilter)myClass, PinDirection.Input, 0);
m_FilterGraph.Connect(iPinOutSource, inPinx);
DsError.ThrowExceptionForHR(hr);
Когда я мыши над MyClass, я могу видеть, что это не пустой.
Кроме того, я попытался подключить свой график с графическим редактированием, но моя программа не указана. Кроме того, hr равно 0 после этой строки hr = m_FilterGraph.AddFilter ((IBaseFilter) myClass, "EZRGB24");
Я использую directshow.net, однако это также помечено как directshow, так как я считаю, что решение будет работать либо для C#, либо для C++.
Это является продолжением моего предыдущего вопроса How to use EZrgb24 filter
Вам необходимо прочитать о добавлении графика в ROT для проверки с помощью внешнего инструмента. Вам нужно понять, какой у вас график, поскольку он может отличаться от того, что вы ожидаете. Возможно, вы захотите использовать [DirectShowSpy] (http://alax.info/blog/1460) + GraphEdit/[GraphStudioNext] (https://code.google.com/p/graph-studio-next/) в качестве инструментов устранения неполадок , Выделите окно сообщения из своего кода в определенных точках и просмотрите графики, чтобы узнать, что вы получаете. –
@RomanR. Спасибо Роман, я установлю эти инструменты. Но остается вопрос, как подключить фильтр к графику. В этом нет никакого примера. – Dave
Методы в вашем фрагменте кода примерно правы: 'AddFilter',' Connect'. Я не вижу необходимости угадывать, что происходит не так, потому что информации слишком мало, а мощные инструменты еще не используются против этой проблемы. –