public RtspPlayer(EDecoderType decoderType, EVideoRendererType videoRendererType)
        {
            _decoderType       = decoderType;
            _videoRendererType = videoRendererType;
            _d3dImage.IsFrontBufferAvailableChanged += IsFrontBufferAvailableChanged;
            _image.Source = _d3dImage;

            Loaded += RtspPlayer_Loaded;
            Content = _image;
        }
        public RtspPlayer(EDecoderType decoderType, EVideoRendererType videoRendererType)
        {
            _decoderType = decoderType;
            _videoRendererType = videoRendererType;
            _d3dImage.IsFrontBufferAvailableChanged += IsFrontBufferAvailableChanged;
            _image.Source = _d3dImage;

            Loaded += RtspPlayer_Loaded;
            Content = _image;
        }
 public DirectShowSession(RtspPlayer player, String rtspUrl, IntPtr hwnd, 
     EDecoderType decoderType, EVideoRendererType videoRendererType)
 {
     _player = player;
     _rtspUrl = rtspUrl;
     _hwnd = hwnd;
     _decoderType = decoderType;
     _videoRendererType = videoRendererType;
     _workerThread = new Thread(WorkerThread);
     _workerThread.Start();
 }
 public DirectShowSession(RtspPlayer player, String rtspUrl, IntPtr hwnd,
                          EDecoderType decoderType, EVideoRendererType videoRendererType)
 {
     _player            = player;
     _rtspUrl           = rtspUrl;
     _hwnd              = hwnd;
     _decoderType       = decoderType;
     _videoRendererType = videoRendererType;
     _workerThread      = new Thread(WorkerThread);
     _workerThread.Start();
 }
        private IBaseFilter GetRendererFilter(EVideoRendererType videoRendererType)
        {
            switch (videoRendererType)
            {
            case EVideoRendererType.EnhancedVideoRenderer:
                var evr       = new EnhancedVideoRenderer();
                var evrFilter = (IBaseFilter)evr;

                // Initialize the EVR renderer with our custom video presenter
                var evrPresenter = EVRPresenter.Create();
                ((IMFVideoRenderer)evr).InitializeRenderer(null, evrPresenter.VideoPresenter);

                // Configure the presenter with our hWnd
                var displayControl = (IMFVideoDisplayControl)evrPresenter.VideoPresenter;
                displayControl.SetVideoWindow(_hwnd);

                _customPresenter = evrPresenter;
                _customPresenter.NewSurfaceEvent += _player.NewSurface;
                _customPresenter.NewFrameEvent   += _player.NewFrame;

                return(evrFilter);

            case EVideoRendererType.VideoMixingRenderer:
                var vmr       = new VideoMixingRenderer9();
                var vmrFilter = (IBaseFilter)vmr;

                var vmrPresenter = VMR9Presenter.Create();

                // Initialize the VMR renderer with out custom video presenter
                var filterConfig = (IVMRFilterConfig9)vmr;
                filterConfig.SetRenderingMode(VMR9Mode.Renderless);
                filterConfig.SetNumberOfStreams(1);

                var surfaceAllocatorNotify = (IVMRSurfaceAllocatorNotify9)vmr;

                surfaceAllocatorNotify.AdviseSurfaceAllocator(IntPtr.Zero, vmrPresenter.SurfaceAllocator);
                vmrPresenter.SurfaceAllocator.AdviseNotify(surfaceAllocatorNotify);

                _customPresenter = vmrPresenter;
                _customPresenter.NewSurfaceEvent += _player.NewSurface;
                _customPresenter.NewFrameEvent   += _player.NewFrame;

                return(vmrFilter);
            }

            return(null);
        }
        private IBaseFilter GetRendererFilter(EVideoRendererType videoRendererType)
        {
            switch (videoRendererType)
            {
                case EVideoRendererType.EnhancedVideoRenderer:
                    var evr = new EnhancedVideoRenderer();
                    var evrFilter = (IBaseFilter)evr;

                    // Initialize the EVR renderer with our custom video presenter
                    var evrPresenter = EVRPresenter.Create();
                    ((IMFVideoRenderer)evr).InitializeRenderer(null, evrPresenter.VideoPresenter);

                    // Configure the presenter with our hWnd
                    var displayControl = (IMFVideoDisplayControl)evrPresenter.VideoPresenter;
                    displayControl.SetVideoWindow(_hwnd);

                    _customPresenter = evrPresenter;
                    _customPresenter.NewSurfaceEvent += _player.NewSurface;
                    _customPresenter.NewFrameEvent += _player.NewFrame;

                    return evrFilter;

                case EVideoRendererType.VideoMixingRenderer:
                    var vmr = new VideoMixingRenderer9();
                    var vmrFilter = (IBaseFilter)vmr;

                    var vmrPresenter = VMR9Presenter.Create();

                    // Initialize the VMR renderer with out custom video presenter
                    var filterConfig = (IVMRFilterConfig9)vmr;
                    filterConfig.SetRenderingMode(VMR9Mode.Renderless);
                    filterConfig.SetNumberOfStreams(1);

                    var surfaceAllocatorNotify = (IVMRSurfaceAllocatorNotify9)vmr;

                    surfaceAllocatorNotify.AdviseSurfaceAllocator(IntPtr.Zero, vmrPresenter.SurfaceAllocator);
                    vmrPresenter.SurfaceAllocator.AdviseNotify(surfaceAllocatorNotify);

                    _customPresenter = vmrPresenter;
                    _customPresenter.NewSurfaceEvent += _player.NewSurface;
                    _customPresenter.NewFrameEvent += _player.NewFrame;

                    return vmrFilter;
            }

            return null;
        }