DirectShow.NET을 사용하여 웹캠 컨트롤을 만들고 있습니다. 카메라의 비디오를 WPF 창으로 렌더링하려고합니다. 현재 일어나고있는 것은 IVMRWindowlessControl9
이 창없는 모드로 들어가는 것 같지 않고 적절한 방법을 호출하고 있음에도 불구하고 내가 지정한 창에 종속되어 있지 않다는 것입니다.IVMRWindowlessControl9가 상위 WPF 창으로 렌더링되지 않습니다.
왜 이러한 메소드가 호출되지 않습니까? 내가하지 않는 다른 것이 있습니까? 여기
IGraphBuilder graphBuilder = (IGraphBuilder) new FilterGraph();
ICaptureGraphBuilder2 captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
IMediaControl mediaControl = (IMediaControl) this.graphBuilder;
IBaseFilter renderFilter = (IBaseFilter) new VideoMixingRenderer9();
hr = this.captureGraphBuilder.SetFiltergraph(this.graphBuilder);
DsError.ThrowExceptionForHR(hr);
IBaseFilter sourceFilter = FindCaptureDevice();
hr = this.graphBuilder.AddFilter(sourceFilter, "Video Capture");
DsError.ThrowExceptionForHR(hr);
SetCaptureResolution();
IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)renderFilter;
hr = filterConfig.SetNumberOfStreams(1);
DsError.ThrowExceptionForHR(hr);
hr = filterConfig.SetRenderingMode(VMR9Mode.Windowless);
DsError.ThrowExceptionForHR(hr);
windowlessControl = (IVMRWindowlessControl9)renderFilter;
hr = this.graphBuilder.AddFilter(renderFilter, "Video Capture");
DsError.ThrowExceptionForHR(hr);
Window window = Window.GetWindow(this);
var wih = new WindowInteropHelper(window);
IntPtr hWnd = wih.Handle;
hr = windowlessControl.SetVideoClippingWindow(hWnd);
DsError.ThrowExceptionForHR(hr);
hr = windowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
DsError.ThrowExceptionForHR(hr);
hr = this.captureGraphBuilder.RenderStream(PinCategory.Capture, MediaType.Video, sourceFilter, null, null);
DsError.ThrowExceptionForHR(hr);
Marshal.ReleaseComObject(sourceFilter);
hr = this.mediaControl.Run();
DsError.ThrowExceptionForHR(hr);
은 (쉽게를 볼 수 있도록 내가 배경 녹색을 만든
) 무슨 일이 일어나고 있는지의 이미지입니다 : 아래
는 관련 코드의 조각이다 다음은 필터 그래프의 다이어그램입니다.잠재적 인 질문에 답하려면 (이 문제가 있었으므로 p reviously), yes, hWnd
이 설정 중이며/값이 있습니다. 따라서 windowlessControl에 창에 대한 포인터가 있습니다.
'SetNumberOfStreams'가 너무 빠르거나,'SetRenderingMode'가 [go go]해야합니다 (https://msdn.microsoft.com/en-us/library/windows/desktop/dd407299). ActiveMovie Window는 비디오 렌더러가 설정되지 않았 음을 나타냅니다. 효과적인 필터 그래프는 예상했던 것과 다를 수도 있습니다. [DirectShow 필터 그래프 이해하기] (http://alax.info/blog/1678)를 참조하십시오. 특히, 효과적인 그래프에는 두 개의 렌더러가있을 수 있습니다. –
@RomanR. http://imgur.com/a/wjjm5 - 다음은 애플리케이션 실행 중에 캡처 한 필터 그래프 이미지에 대한 링크입니다. 이게 정상적으로 보이나요? –