2011-04-07 4 views
1

DirectShow.Net + VMR9를 사용하여 재생중인 이미지 또는 비디오 소스에서 작동하는 PixelShader 컴파일러/테스터를 코딩했습니다.VMR9 vs EVR : EVR에서 ImageCompositor를 사용하는 방법은 무엇입니까?

실제 비디오 플레이어로 사용하기로 결정하기 전까지는 모든 것이 좋았으며, 타이틀 (제목 등)이 제대로 작동하도록 모든 비트를 조정하기 시작했습니다.

그런 다음 비디오가 ATI gpus가 포함 된 Windows7에서 매우 픽셀 화 (잘못 삽입) 된 것으로 나타났습니다. 해결책은 EVR과 함께하는 것이 었습니다. 그리고 나는 그것을했다. 배경이 깜빡이고 속도가 느려지는 등의 결함을 제외하고는 맞춤형 발표자로 해결하려고 노력할 것입니다. 모두 좋았습니다.

하지만 ...

나는 EVR FilterConfig 인터페이스에는 SetImageCompositor 방법이 없기 때문에 출력 비디오에 픽셀 쉐이딩을 적용 할 수있는 능력을 잃어 버렸다.

[SuppressUnmanagedCodeSecurity] 
[Guid("83E91E85-82C1-4ea7-801D-85DC50B75086")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IEVRFilterConfig 
{ 
    void GetNumberOfStreams(out int pdwMaxStreams); 
    void SetNumberOfStreams(int dwMaxStreams); 
} 

이것은 VMR9 인터페이스입니다 :

IVMRFilterConfig9 filterConfig = (IVMRFilterConfig9)vmr9; 
    // frameManager is my custom class implementing IVMRImageCompositor9 
    hr = filterConfig.SetImageCompositor(frameManager); 
    DsError.ThrowExceptionForHR(hr); 
: 나는 픽셀 쉐이더를 적용 할 사용자 정의 이미지 컴포 지터에이 방법을 사용하고있다

[Guid("5a804648-4f66-4867-9c43-4f5c822cf1b8")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
[SuppressUnmanagedCodeSecurity] 
public interface IVMRFilterConfig9 
{ 
    int GetNumberOfStreams(out int pdwMaxStreams); 
    int GetRenderingMode(out VMR9Mode Mode); 
    int GetRenderingPrefs(out VMR9RenderPrefs pdwRenderFlags); 
    int SetImageCompositor(IVMRImageCompositor9 lpVMRImgCompositor); 
    int SetNumberOfStreams(int dwMaxStreams); 
    int SetRenderingMode(VMR9Mode Mode); 
    int SetRenderingPrefs(VMR9RenderPrefs dwRenderFlags); 
} 

은 EVR 인터페이스입니다

이제는 ...

사용 : VS2010, C#, DirectShow.NET, Mediafoundation.NET, 관리되는 DX9.

이 문제의 해결책은 무엇입니까? EVR로하는 방법에 대한 지침?

대단히 감사합니다! 아무도 제안을했다 없기 때문에

답변

4

나는 조금 발굴 내가 해결책이 될 수있는 것을 발견했다 생각 :

http://msdn.microsoft.com/en-us/library/bb530107(v=vs.85).aspx

이 이제 사용자 지정 발표자에 수행해야합니다 ...

+1

Upvoted 답을 얻지 못하고, 자신을 찾고, 나머지 사람들과 그것을 공유하는 사람은 upvote를받을 자격이 있습니다. –