Esempio n. 1
0
        public void ResizeWindowToVideo()
        {
            IVideoWindow pVW = m_pRenderGraph as IVideoWindow;
            IBasicVideo  pBV = m_pRenderGraph as IBasicVideo;

            if ((pVW != null) && (pBV != null))
            {
                // size of new video
                int cx, cy;
                pBV.GetVideoSize(out cx, out cy);
                DsRect rcVideo = new DsRect(0, 0, cx, cy);

                // adjust from client size to window size
                WindowStyle style;
                pVW.get_WindowStyle(out style);
                //AdjustWindowRect(rcVideo, style, false);

                // get current window top/left
                int    cxWindow, cyWindow;
                DsRect rc = new DsRect();
                pVW.GetWindowPosition(out rc.left, out rc.top, out cxWindow, out cyWindow);

                // reposition video window with old top/left position and new size
                pVW.SetWindowPosition(rc.left, rc.top, rcVideo.right - rcVideo.left, rcVideo.bottom - rcVideo.top);
            }
        }
Esempio n. 2
0
 private void ResizeMoveHandler(object sender, EventArgs e)
 {
     if (_videoRender != null)
     {
         _vmrWindowlessControl.SetVideoPosition(null, DsRect.FromRectangle(_hostControl.ClientRectangle));
     }
 }
Esempio n. 3
0
 private void MainForm_ResizeMove(object sender, EventArgs e)
 {
     if (windowlessCtrl != null)
     {
         int hr = windowlessCtrl.SetVideoPosition(null, DsRect.FromRectangle(this.ClientRectangle));
     }
 }
Esempio n. 4
0
        /// <summary>
        /// 指定时间来截取视频中的图片
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="ImgFormat"></param>
        /// <param name="lTime"></param>
        public Image GetImage(double lTime)
        {
            Image img      = null;
            int   MaxCount = lTime <= 0 ? DESConsts.BitCount : (int)lTime * DESConsts.BitCount;

            try
            {
                Panel pnl = new Panel();
                pVideo     = new DESVideoCallBack();
                pnl.Width  = this.hWin.Width;
                pnl.Height = this.hWin.Height;
                des.RenderToFrame(pnl, pVideo, null, DynamicTextDS, DsRect.FromRectangle(hWin.ClientRectangle), 0, ds.PlayLength);
                des.StartRendering();
                des.put_CurrentPosition(lTime);
                while (pVideo.m_FrameCount < MaxCount)
                {
                    Thread.Sleep(100);
                }
                des.Pause();
                img = des.GetImage();
                des.Cancel();
            }
            catch
            {
                des.Cancel();
                des = null;
            }
            return(img);
        }
Esempio n. 5
0
        private void TestSetDrawRegion()
        {
            int    hr;
            DsRect r1 = new DsRect(1, 1, 2, 2);
            DsRect r2 = new DsRect(0, 0, 319, 239);

            hr = m_mo.SetDrawRegion(IntPtr.Zero, r1, r2);
            DsError.ThrowExceptionForHR(hr);
        }
    private void SetSize()
    {
        var srcRect = new DsRect();
        var dstRect = new DsRect(ClientRectangle);
        int arWidth, arHeight;

        _windowlessControl.GetNativeVideoSize(out srcRect.right, out srcRect.bottom, out arWidth, out arHeight);
        _windowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
        _windowlessControl.SetVideoPosition(srcRect, dstRect);
    }
Esempio n. 7
0
        public void TestOnDraw()
        {
            int hr;

            //Graphics g;
            //IntPtr hdc = g.GetHdc();
            DsRect r = new DsRect(0, 0, 640, 480);

            hr = m_mo.OnDraw(IntPtr.Zero, r);
            DsError.ThrowExceptionForHR(hr);
        }
Esempio n. 8
0
 /// <summary>
 /// Handler of Resize and Move events of HostingControl.
 /// </summary>
 private void HostingControl_ResizeMove
 (
     object sender,
     EventArgs e
 )
 {
     if (_bGraphIsBuilt)
     {
         WindowlessCtrl.SetVideoPosition(null, DsRect.FromRectangle(_DisplayPanel.ClientRectangle));
     }
     return;
 }
        public int InitializeDevice(System.IntPtr dwUserID, ref VMR9AllocationInfo lpAllocInfo, ref int lpNumBuffers)
        {
            int hr     = 0;
            int width  = 1;
            int height = 1;

            Debug.Assert(dwUserID == cookie, "IVMRSurfaceAllocatorEx9.InitializeDevice");

            InitializeDeviceCount++;

            dstRect = new DsRect(0, 0, lpAllocInfo.dwWidth, lpAllocInfo.dwHeight);

            try
            {
                if (device.DeviceCaps.TextureCaps.SupportsPower2)
                {
                    while (width < lpAllocInfo.dwWidth)
                    {
                        width = width << 1;
                    }
                    while (height < lpAllocInfo.dwHeight)
                    {
                        height = height << 1;
                    }

                    lpAllocInfo.dwWidth  = width;
                    lpAllocInfo.dwHeight = height;
                }

                lpAllocInfo.dwFlags |= VMR9SurfaceAllocationFlags.TextureSurface;

                unmanagedSurfaces = new IntPtr[lpNumBuffers];

                hr = surfaceAllocatorNotify.AllocateSurfaceHelper(ref lpAllocInfo, ref lpNumBuffers, unmanagedSurfaces);
                DsError.ThrowExceptionForHR(hr);
                // Assume this call works (ie Hardware new enough to create a TextureSurface : dx7 video board or better)
                // This test also doesn't support YUV surfaces creation
            }
            //catch (DirectXException dxe)
            //{
            //  return dxe.ErrorCode;
            //}
            catch (COMException e)
            {
                return(e.ErrorCode);
            }

            return(0);
        }
Esempio n. 10
0
 private void HostingControl_ResizeMove(object sender, EventArgs e)
 {
     if ((this.DX.WindowlessCtrl != null) && (this._HostingControl != null))
     {
         this.DX.WindowlessCtrl.SetVideoPosition(null, DsRect.FromRectangle(this._HostingControl.ClientRectangle));
         if (this._bGraphIsBuilt)
         {
             this.UpdateOutputVideoSize();
             if (this.OutputVideoSizeChanged != null)
             {
                 this.OutputVideoSizeChanged(sender, e);
             }
         }
     }
 }
Esempio n. 11
0
        private void SetupRenderWindow(IVMRFilterConfig9 renderer, Control target)
        {
            IVMRFilterConfig9 config = renderer;

            // Not really needed for VMR9 but don't forget calling it with VMR7
            config.SetNumberOfStreams(1);
            // Change VMR9 mode to Windowless
            config.SetRenderingMode(VMR9Mode.Windowless);
            IVMRWindowlessControl9 winless_ctrl = (IVMRWindowlessControl9)renderer;

            // Set "Parent" window
            winless_ctrl.SetVideoClippingWindow(target.Handle);
            // Set Aspect-Ratio
            winless_ctrl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
            winless_ctrl.SetVideoPosition(null, DsRect.FromRectangle(target.ClientRectangle));
            winless_ctrl = null;
        }
Esempio n. 12
0
 private void ResizeMoveHandler(object sender, EventArgs e)
 {
     try
     {
         lock (instanceMutex)
         {
             Log("ResizeMoveHandler");
             if (_windowlessControl != null)
             {
                 _windowlessControl.SetVideoPosition(null, DsRect.FromRectangle(_hostControl.ClientRectangle));
             }
         }
     }
     catch (Exception ex)
     {
         ErrorLogger.DumpToDebug(ex);
     }
 }
Esempio n. 13
0
 private void MainForm_ResizeMove(object sender, EventArgs e)
 {
     try
     {
         if (windowlessCtrl != null)
         {
             FilterState fs;// wait for pause to complete
             mediaControl.GetState(2000, out fs);
             //      if (fs == FilterState.Running)
             {
                 int hr = windowlessCtrl.SetVideoPosition(null, DsRect.FromRectangle(this.m_ParentPanel.ClientRectangle));
             }
         }
     }
     catch (Exception ex)
     {
         m_Log.Log("sourceVideoFile MainForm_ResizeMove: ex: " + ex.Message, ErrorLog.LOG_TYPE.FATAL);
     }
 }
Esempio n. 14
0
        void TestButton()
        {
            int     hr;
            int     pulButtonIndex;
            IDvdCmd ppCmd = null;

            hr = m_idc2.ShowMenu(DvdMenuId.Title, DvdCmdFlags.Flush, out ppCmd);
            DsError.ThrowExceptionForHR(hr);

            DsRect pRect = new DsRect();

            hr = m_idi2.GetButtonRect(1, pRect);
            //ThrowExceptionForHR(hr);

            hr = m_idi2.GetButtonAtPosition(new Point(130, 130), out pulButtonIndex);
            DsError.ThrowExceptionForHR(hr);

            Debug.Assert(pulButtonIndex == 1, "TestButton");
        }
        private void IVMRWindowlessControl9Test_Resize(object sender, EventArgs e)
        {
            int    hr  = 0;
            DsRect src = new DsRect();
            DsRect dst = new DsRect();

            if (isPlaying)
            {
                if (this.vmrWndConfig != null)
                {
                    hr = this.vmrWndConfig.GetVideoPosition(src, dst);
                    Debug.Assert(hr == 0, "GetVideoPosition");

                    dst.right  = this.ClientSize.Width;
                    dst.bottom = this.ClientSize.Height;

                    hr = this.vmrWndConfig.SetVideoPosition(src, dst);
                    Debug.Assert(hr == 0, "SetVideoPosition");
                }
            }
        }
Esempio n. 16
0
        /// <summary> create the used COM components and get the interfaces. </summary>
        protected bool GetInterfaces()
        {
            VMR9Util.g_vmr9 = null;
            if (IsRadio == false)
            {
                Vmr9 = VMR9Util.g_vmr9 = new VMR9Util();

                // switch back to directx fullscreen mode
                Log.Info("RTSPPlayer: Enabling DX9 exclusive mode");
                GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SWITCH_FULL_WINDOWED, 0, 0, 0, 1, 0, null);
                GUIWindowManager.SendMessage(msg);
            }
            //Type comtype = null;
            //object comobj = null;

            DsRect rect = new DsRect();

            rect.top    = 0;
            rect.bottom = GUIGraphicsContext.form.Height;
            rect.left   = 0;
            rect.right  = GUIGraphicsContext.form.Width;


            try
            {
                graphBuilder = (IGraphBuilder) new FilterGraph();

                Log.Info("RTSPPlayer: add source filter");
                if (IsRadio == false)
                {
                    bool AddVMR9 = VMR9Util.g_vmr9 != null && VMR9Util.g_vmr9.AddVMR9(graphBuilder);
                    if (!AddVMR9)
                    {
                        Log.Error("RTSPPlayer:Failed to add VMR9 to graph");
                        return(false);
                    }
                    VMR9Util.g_vmr9.Enable(false);
                }

                _mpegDemux = (IBaseFilter) new MPEG2Demultiplexer();
                graphBuilder.AddFilter(_mpegDemux, "MPEG-2 Demultiplexer");

                _rtspSource = (IBaseFilter) new RtpSourceFilter();
                int hr = graphBuilder.AddFilter((IBaseFilter)_rtspSource, "RTSP Source Filter");
                if (hr != 0)
                {
                    Log.Error("RTSPPlayer:unable to add RTSP source filter:{0:X}", hr);
                    return(false);
                }

                // add preferred video & audio codecs
                Log.Info("RTSPPlayer: add video/audio codecs");
                string strVideoCodec               = "";
                string strAudioCodec               = "";
                string strAudiorenderer            = "";
                int    intFilters                  = 0;  // FlipGer: count custom filters
                string strFilters                  = ""; // FlipGer: collect custom filters
                string postProcessingFilterSection = "mytv";
                using (Settings xmlreader = new MPSettings())
                {
                    if (_mediaType == g_Player.MediaType.Video)
                    {
                        strVideoCodec               = xmlreader.GetValueAsString("movieplayer", "mpeg2videocodec", "");
                        strAudioCodec               = xmlreader.GetValueAsString("movieplayer", "mpeg2audiocodec", "");
                        strAudiorenderer            = xmlreader.GetValueAsString("movieplayer", "audiorenderer", "Default DirectSound Device");
                        postProcessingFilterSection = "movieplayer";
                    }
                    else
                    {
                        strVideoCodec               = xmlreader.GetValueAsString("mytv", "videocodec", "");
                        strAudioCodec               = xmlreader.GetValueAsString("mytv", "audiocodec", "");
                        strAudiorenderer            = xmlreader.GetValueAsString("mytv", "audiorenderer", "Default DirectSound Device");
                        postProcessingFilterSection = "mytv";
                    }
                    enableDvbSubtitles = xmlreader.GetValueAsBool("tvservice", "dvbsubtitles", false);
                    // FlipGer: load infos for custom filters
                    int intCount = 0;
                    while (xmlreader.GetValueAsString(postProcessingFilterSection, "filter" + intCount.ToString(), "undefined") !=
                           "undefined")
                    {
                        if (xmlreader.GetValueAsBool(postProcessingFilterSection, "usefilter" + intCount.ToString(), false))
                        {
                            strFilters +=
                                xmlreader.GetValueAsString(postProcessingFilterSection, "filter" + intCount.ToString(), "undefined") +
                                ";";
                            intFilters++;
                        }
                        intCount++;
                    }
                }
                string extension = Path.GetExtension(m_strCurrentFile).ToLowerInvariant();
                if (IsRadio == false)
                {
                    if (strVideoCodec.Length > 0)
                    {
                        DirectShowUtil.AddFilterToGraph(graphBuilder, strVideoCodec);
                    }
                }
                if (strAudioCodec.Length > 0)
                {
                    DirectShowUtil.AddFilterToGraph(graphBuilder, strAudioCodec);
                }

                if (enableDvbSubtitles == true)
                {
                    try
                    {
                        _subtitleFilter = SubtitleRenderer.GetInstance().AddSubtitleFilter(graphBuilder);
                        SubtitleRenderer.GetInstance().SetPlayer(this);
                        dvbSubRenderer = SubtitleRenderer.GetInstance();
                    }
                    catch (Exception e)
                    {
                        Log.Error(e);
                    }
                }

                Log.Debug("Is subtitle fitler null? {0}", (_subtitleFilter == null));
                // FlipGer: add custom filters to graph
                string[] arrFilters = strFilters.Split(';');
                for (int i = 0; i < intFilters; i++)
                {
                    DirectShowUtil.AddFilterToGraph(graphBuilder, arrFilters[i]);
                }
                if (strAudiorenderer.Length > 0)
                {
                    audioRendererFilter = DirectShowUtil.AddAudioRendererToGraph(graphBuilder, strAudiorenderer, false);
                }

                Log.Info("RTSPPlayer: load:{0}", m_strCurrentFile);
                IFileSourceFilter interfaceFile = (IFileSourceFilter)_rtspSource;
                if (interfaceFile == null)
                {
                    Log.Error("RTSPPlayer:Failed to get IFileSourceFilter");
                    return(false);
                }

                //Log.Info("RTSPPlayer: open file:{0}",filename);
                hr = interfaceFile.Load(m_strCurrentFile, null);
                if (hr != 0)
                {
                    Log.Error("RTSPPlayer:Failed to open file:{0} :0x{1:x}", m_strCurrentFile, hr);
                    return(false);
                }

                #region connect rtspsource->demux

                Log.Info("RTSPPlayer:connect rtspsource->mpeg2 demux");
                IPin pinTsOut = DsFindPin.ByDirection((IBaseFilter)_rtspSource, PinDirection.Output, 0);
                if (pinTsOut == null)
                {
                    Log.Info("RTSPPlayer:failed to find output pin of tsfilesource");
                    return(false);
                }
                IPin pinDemuxIn = DsFindPin.ByDirection(_mpegDemux, PinDirection.Input, 0);
                if (pinDemuxIn == null)
                {
                    Log.Info("RTSPPlayer:failed to find output pin of tsfilesource");
                    return(false);
                }

                hr = graphBuilder.Connect(pinTsOut, pinDemuxIn);
                if (hr != 0)
                {
                    Log.Info("RTSPPlayer:failed to connect rtspsource->mpeg2 demux:{0:X}", hr);
                    return(false);
                }
                DirectShowUtil.ReleaseComObject(pinTsOut);
                DirectShowUtil.ReleaseComObject(pinDemuxIn);

                #endregion

                #region render demux output pins

                if (IsRadio)
                {
                    Log.Info("RTSPPlayer:render audio demux outputs");
                    IEnumPins enumPins;
                    _mpegDemux.EnumPins(out enumPins);
                    IPin[] pins    = new IPin[2];
                    int    fetched = 0;
                    while (enumPins.Next(1, pins, out fetched) == 0)
                    {
                        if (fetched != 1)
                        {
                            break;
                        }
                        PinDirection direction;
                        pins[0].QueryDirection(out direction);
                        if (direction == PinDirection.Input)
                        {
                            continue;
                        }
                        IEnumMediaTypes enumMediaTypes;
                        pins[0].EnumMediaTypes(out enumMediaTypes);
                        AMMediaType[] mediaTypes = new AMMediaType[20];
                        int           fetchedTypes;
                        enumMediaTypes.Next(20, mediaTypes, out fetchedTypes);
                        for (int i = 0; i < fetchedTypes; ++i)
                        {
                            if (mediaTypes[i].majorType == MediaType.Audio)
                            {
                                graphBuilder.Render(pins[0]);
                                break;
                            }
                        }
                    }
                }
                else
                {
                    Log.Info("RTSPPlayer:render audio/video demux outputs");
                    IEnumPins enumPins;
                    _mpegDemux.EnumPins(out enumPins);
                    IPin[] pins    = new IPin[2];
                    int    fetched = 0;
                    while (enumPins.Next(1, pins, out fetched) == 0)
                    {
                        if (fetched != 1)
                        {
                            break;
                        }
                        PinDirection direction;
                        pins[0].QueryDirection(out direction);
                        if (direction == PinDirection.Input)
                        {
                            continue;
                        }
                        graphBuilder.Render(pins[0]);
                    }
                }

                #endregion

                // Connect DVB subtitle filter pins in the graph
                if (_mpegDemux != null && enableDvbSubtitles == true)
                {
                    IMpeg2Demultiplexer demuxer = _mpegDemux as IMpeg2Demultiplexer;
                    hr = demuxer.CreateOutputPin(GetTSMedia(), "Pcr", out _pinPcr);

                    if (hr == 0)
                    {
                        Log.Info("RTSPPlayer:_pinPcr OK");

                        IPin pDemuxerPcr  = DsFindPin.ByName(_mpegDemux, "Pcr");
                        IPin pSubtitlePcr = DsFindPin.ByName(_subtitleFilter, "Pcr");
                        hr = graphBuilder.Connect(pDemuxerPcr, pSubtitlePcr);
                    }
                    else
                    {
                        Log.Info("RTSPPlayer:Failed to create _pinPcr in demuxer:{0:X}", hr);
                    }

                    hr = demuxer.CreateOutputPin(GetTSMedia(), "Subtitle", out _pinSubtitle);
                    if (hr == 0)
                    {
                        Log.Info("RTSPPlayer:_pinSubtitle OK");

                        IPin pDemuxerSubtitle = DsFindPin.ByName(_mpegDemux, "Subtitle");
                        IPin pSubtitle        = DsFindPin.ByName(_subtitleFilter, "In");
                        hr = graphBuilder.Connect(pDemuxerSubtitle, pSubtitle);
                    }
                    else
                    {
                        Log.Info("RTSPPlayer:Failed to create _pinSubtitle in demuxer:{0:X}", hr);
                    }

                    hr = demuxer.CreateOutputPin(GetTSMedia(), "PMT", out _pinPMT);
                    if (hr == 0)
                    {
                        Log.Info("RTSPPlayer:_pinPMT OK");

                        IPin pDemuxerSubtitle = DsFindPin.ByName(_mpegDemux, "PMT");
                        IPin pSubtitle        = DsFindPin.ByName(_subtitleFilter, "PMT");
                        hr = graphBuilder.Connect(pDemuxerSubtitle, pSubtitle);
                    }
                    else
                    {
                        Log.Info("RTSPPlayer:Failed to create _pinPMT in demuxer:{0:X}", hr);
                    }
                }


                if (IsRadio == false)
                {
                    if (!VMR9Util.g_vmr9.IsVMR9Connected)
                    {
                        //VMR9 is not supported, switch to overlay
                        Log.Info("RTSPPlayer: vmr9 not connected");
                        _mediaCtrl = null;
                        Cleanup();
                        return(false);
                    }
                    VMR9Util.g_vmr9.SetDeinterlaceMode();
                }

                _mediaCtrl    = (IMediaControl)graphBuilder;
                mediaEvt      = (IMediaEventEx)graphBuilder;
                _mediaSeeking = (IMediaSeeking)graphBuilder;
                mediaPos      = (IMediaPosition)graphBuilder;
                basicAudio    = graphBuilder as IBasicAudio;
                //DirectShowUtil.SetARMode(graphBuilder,AspectRatioMode.Stretched);
                DirectShowUtil.EnableDeInterlace(graphBuilder);
                if (VMR9Util.g_vmr9 != null)
                {
                    m_iVideoWidth  = VMR9Util.g_vmr9.VideoWidth;
                    m_iVideoHeight = VMR9Util.g_vmr9.VideoHeight;
                }
                if (audioRendererFilter != null)
                {
                    Log.Info("RTSPPlayer9:set reference clock");
                    IMediaFilter    mp    = graphBuilder as IMediaFilter;
                    IReferenceClock clock = audioRendererFilter as IReferenceClock;
                    hr = mp.SetSyncSource(null);
                    hr = mp.SetSyncSource(clock);
                    Log.Info("RTSPPlayer9:set reference clock:{0:X}", hr);
                }
                Log.Info("RTSPPlayer: graph build successfull");
                return(true);
            }
            catch (Exception ex)
            {
                Error.SetError("Unable to play movie", "Unable build graph for VMR9");
                Log.Error("RTSPPlayer:exception while creating DShow graph {0} {1}", ex.Message, ex.StackTrace);
                CloseInterfaces();
                return(false);
            }
        }
Esempio n. 17
0
    /// <summary> create the used COM components and get the interfaces. </summary>
    protected bool GetInterfaces()
    {
      VMR9Util.g_vmr9 = null;
      if (IsRadio == false)
      {
        Vmr9 = VMR9Util.g_vmr9 = new VMR9Util();

        // switch back to directx fullscreen mode
        Log.Info("RTSPPlayer: Enabling DX9 exclusive mode");
        GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SWITCH_FULL_WINDOWED, 0, 0, 0, 1, 0, null);
        GUIWindowManager.SendMessage(msg);
      }
      //Type comtype = null;
      //object comobj = null;

      DsRect rect = new DsRect();
      rect.top = 0;
      rect.bottom = GUIGraphicsContext.form.Height;
      rect.left = 0;
      rect.right = GUIGraphicsContext.form.Width;


      try
      {
        graphBuilder = (IGraphBuilder)new FilterGraph();

        Log.Info("RTSPPlayer: add source filter");
        if (IsRadio == false)
        {
          bool AddVMR9 = VMR9Util.g_vmr9 != null && VMR9Util.g_vmr9.AddVMR9(graphBuilder);
          if (!AddVMR9)
          {
            Log.Error("RTSPPlayer:Failed to add VMR9 to graph");
            return false;
          }
          VMR9Util.g_vmr9.Enable(false);
        }

        _mpegDemux = (IBaseFilter)new MPEG2Demultiplexer();
        graphBuilder.AddFilter(_mpegDemux, "MPEG-2 Demultiplexer");

        _rtspSource = (IBaseFilter)new RtpSourceFilter();
        int hr = graphBuilder.AddFilter((IBaseFilter)_rtspSource, "RTSP Source Filter");
        if (hr != 0)
        {
          Log.Error("RTSPPlayer:unable to add RTSP source filter:{0:X}", hr);
          return false;
        }

        // add preferred video & audio codecs
        Log.Info("RTSPPlayer: add video/audio codecs");
        string strVideoCodec = "";
        string strAudioCodec = "";
        string strAudiorenderer = "";
        int intFilters = 0; // FlipGer: count custom filters
        string strFilters = ""; // FlipGer: collect custom filters
        string postProcessingFilterSection = "mytv";
        using (Settings xmlreader = new MPSettings())
        {
          if (_mediaType == g_Player.MediaType.Video)
          {
            strVideoCodec = xmlreader.GetValueAsString("movieplayer", "mpeg2videocodec", "");
            strAudioCodec = xmlreader.GetValueAsString("movieplayer", "mpeg2audiocodec", "");
            strAudiorenderer = xmlreader.GetValueAsString("movieplayer", "audiorenderer", "Default DirectSound Device");
            postProcessingFilterSection = "movieplayer";
          }
          else
          {
            strVideoCodec = xmlreader.GetValueAsString("mytv", "videocodec", "");
            strAudioCodec = xmlreader.GetValueAsString("mytv", "audiocodec", "");
            strAudiorenderer = xmlreader.GetValueAsString("mytv", "audiorenderer", "Default DirectSound Device");
            postProcessingFilterSection = "mytv";
          }
          enableDvbSubtitles = xmlreader.GetValueAsBool("tvservice", "dvbsubtitles", false);
          // FlipGer: load infos for custom filters
          int intCount = 0;
          while (xmlreader.GetValueAsString(postProcessingFilterSection, "filter" + intCount.ToString(), "undefined") !=
                 "undefined")
          {
            if (xmlreader.GetValueAsBool(postProcessingFilterSection, "usefilter" + intCount.ToString(), false))
            {
              strFilters +=
                xmlreader.GetValueAsString(postProcessingFilterSection, "filter" + intCount.ToString(), "undefined") +
                ";";
              intFilters++;
            }
            intCount++;
          }
        }
        string extension = Path.GetExtension(m_strCurrentFile).ToLowerInvariant();
        if (IsRadio == false)
        {
          if (strVideoCodec.Length > 0)
          {
            DirectShowUtil.AddFilterToGraph(graphBuilder, strVideoCodec);
          }
        }
        if (strAudioCodec.Length > 0)
        {
          DirectShowUtil.AddFilterToGraph(graphBuilder, strAudioCodec);
        }

        if (enableDvbSubtitles == true)
        {
          try
          {
            _subtitleFilter = SubtitleRenderer.GetInstance().AddSubtitleFilter(graphBuilder);
            SubtitleRenderer.GetInstance().SetPlayer(this);
            dvbSubRenderer = SubtitleRenderer.GetInstance();
          }
          catch (Exception e)
          {
            Log.Error(e);
          }
        }

        Log.Debug("Is subtitle fitler null? {0}", (_subtitleFilter == null));
        // FlipGer: add custom filters to graph
        string[] arrFilters = strFilters.Split(';');
        for (int i = 0; i < intFilters; i++)
        {
          DirectShowUtil.AddFilterToGraph(graphBuilder, arrFilters[i]);
        }
        if (strAudiorenderer.Length > 0)
        {
          audioRendererFilter = DirectShowUtil.AddAudioRendererToGraph(graphBuilder, strAudiorenderer, false);
        }

        Log.Info("RTSPPlayer: load:{0}", m_strCurrentFile);
        IFileSourceFilter interfaceFile = (IFileSourceFilter)_rtspSource;
        if (interfaceFile == null)
        {
          Log.Error("RTSPPlayer:Failed to get IFileSourceFilter");
          return false;
        }

        //Log.Info("RTSPPlayer: open file:{0}",filename);
        hr = interfaceFile.Load(m_strCurrentFile, null);
        if (hr != 0)
        {
          Log.Error("RTSPPlayer:Failed to open file:{0} :0x{1:x}", m_strCurrentFile, hr);
          return false;
        }

        #region connect rtspsource->demux

        Log.Info("RTSPPlayer:connect rtspsource->mpeg2 demux");
        IPin pinTsOut = DsFindPin.ByDirection((IBaseFilter)_rtspSource, PinDirection.Output, 0);
        if (pinTsOut == null)
        {
          Log.Info("RTSPPlayer:failed to find output pin of tsfilesource");
          return false;
        }
        IPin pinDemuxIn = DsFindPin.ByDirection(_mpegDemux, PinDirection.Input, 0);
        if (pinDemuxIn == null)
        {
          Log.Info("RTSPPlayer:failed to find output pin of tsfilesource");
          return false;
        }

        hr = graphBuilder.Connect(pinTsOut, pinDemuxIn);
        if (hr != 0)
        {
          Log.Info("RTSPPlayer:failed to connect rtspsource->mpeg2 demux:{0:X}", hr);
          return false;
        }
        DirectShowUtil.ReleaseComObject(pinTsOut);
        DirectShowUtil.ReleaseComObject(pinDemuxIn);

        #endregion

        #region render demux output pins

        if (IsRadio)
        {
          Log.Info("RTSPPlayer:render audio demux outputs");
          IEnumPins enumPins;
          _mpegDemux.EnumPins(out enumPins);
          IPin[] pins = new IPin[2];
          int fetched = 0;
          while (enumPins.Next(1, pins, out fetched) == 0)
          {
            if (fetched != 1)
            {
              break;
            }
            PinDirection direction;
            pins[0].QueryDirection(out direction);
            if (direction == PinDirection.Input)
            {
              continue;
            }
            IEnumMediaTypes enumMediaTypes;
            pins[0].EnumMediaTypes(out enumMediaTypes);
            AMMediaType[] mediaTypes = new AMMediaType[20];
            int fetchedTypes;
            enumMediaTypes.Next(20, mediaTypes, out fetchedTypes);
            for (int i = 0; i < fetchedTypes; ++i)
            {
              if (mediaTypes[i].majorType == MediaType.Audio)
              {
                graphBuilder.Render(pins[0]);
                break;
              }
            }
          }
        }
        else
        {
          Log.Info("RTSPPlayer:render audio/video demux outputs");
          IEnumPins enumPins;
          _mpegDemux.EnumPins(out enumPins);
          IPin[] pins = new IPin[2];
          int fetched = 0;
          while (enumPins.Next(1, pins, out fetched) == 0)
          {
            if (fetched != 1)
            {
              break;
            }
            PinDirection direction;
            pins[0].QueryDirection(out direction);
            if (direction == PinDirection.Input)
            {
              continue;
            }
            graphBuilder.Render(pins[0]);
          }
        }

        #endregion

        // Connect DVB subtitle filter pins in the graph
        if (_mpegDemux != null && enableDvbSubtitles == true)
        {
          IMpeg2Demultiplexer demuxer = _mpegDemux as IMpeg2Demultiplexer;
          hr = demuxer.CreateOutputPin(GetTSMedia(), "Pcr", out _pinPcr);

          if (hr == 0)
          {
            Log.Info("RTSPPlayer:_pinPcr OK");

            IPin pDemuxerPcr = DsFindPin.ByName(_mpegDemux, "Pcr");
            IPin pSubtitlePcr = DsFindPin.ByName(_subtitleFilter, "Pcr");
            hr = graphBuilder.Connect(pDemuxerPcr, pSubtitlePcr);
          }
          else
          {
            Log.Info("RTSPPlayer:Failed to create _pinPcr in demuxer:{0:X}", hr);
          }

          hr = demuxer.CreateOutputPin(GetTSMedia(), "Subtitle", out _pinSubtitle);
          if (hr == 0)
          {
            Log.Info("RTSPPlayer:_pinSubtitle OK");

            IPin pDemuxerSubtitle = DsFindPin.ByName(_mpegDemux, "Subtitle");
            IPin pSubtitle = DsFindPin.ByName(_subtitleFilter, "In");
            hr = graphBuilder.Connect(pDemuxerSubtitle, pSubtitle);
          }
          else
          {
            Log.Info("RTSPPlayer:Failed to create _pinSubtitle in demuxer:{0:X}", hr);
          }

          hr = demuxer.CreateOutputPin(GetTSMedia(), "PMT", out _pinPMT);
          if (hr == 0)
          {
            Log.Info("RTSPPlayer:_pinPMT OK");

            IPin pDemuxerSubtitle = DsFindPin.ByName(_mpegDemux, "PMT");
            IPin pSubtitle = DsFindPin.ByName(_subtitleFilter, "PMT");
            hr = graphBuilder.Connect(pDemuxerSubtitle, pSubtitle);
          }
          else
          {
            Log.Info("RTSPPlayer:Failed to create _pinPMT in demuxer:{0:X}", hr);
          }
        }


        if (IsRadio == false)
        {
          if (!VMR9Util.g_vmr9.IsVMR9Connected)
          {
            //VMR9 is not supported, switch to overlay
            Log.Info("RTSPPlayer: vmr9 not connected");
            _mediaCtrl = null;
            Cleanup();
            return false;
          }
          VMR9Util.g_vmr9.SetDeinterlaceMode();
        }

        _mediaCtrl = (IMediaControl)graphBuilder;
        mediaEvt = (IMediaEventEx)graphBuilder;
        _mediaSeeking = (IMediaSeeking)graphBuilder;
        mediaPos = (IMediaPosition)graphBuilder;
        basicAudio = graphBuilder as IBasicAudio;
        //DirectShowUtil.SetARMode(graphBuilder,AspectRatioMode.Stretched);
        DirectShowUtil.EnableDeInterlace(graphBuilder);
        if (VMR9Util.g_vmr9 != null)
        {
          m_iVideoWidth = VMR9Util.g_vmr9.VideoWidth;
          m_iVideoHeight = VMR9Util.g_vmr9.VideoHeight;
        }
        if (audioRendererFilter != null)
        {
          Log.Info("RTSPPlayer9:set reference clock");
          IMediaFilter mp = graphBuilder as IMediaFilter;
          IReferenceClock clock = audioRendererFilter as IReferenceClock;
          hr = mp.SetSyncSource(null);
          hr = mp.SetSyncSource(clock);
          Log.Info("RTSPPlayer9:set reference clock:{0:X}", hr);
        }
        Log.Info("RTSPPlayer: graph build successfull");
        return true;
      }
      catch (Exception ex)
      {
        Error.SetError("Unable to play movie", "Unable build graph for VMR9");
        Log.Error("RTSPPlayer:exception while creating DShow graph {0} {1}", ex.Message, ex.StackTrace);
        CloseInterfaces();
        return false;
      }
    }
Esempio n. 18
0
        public void Generate()
        {
            Check.Require(Layers, "Layers", Check.NotNull);
            Check.Require(Layers.Count, "Layers.Count", Check.GreaterThan <int>(0));
            Check.Require(Tick, "Tick", Check.GreaterThanOrEqual <int>(0));

            ILog _log = LogManager.GetLogger(typeof(IOHelper));

            Layers.Sort(new SortComparer <Layer>("Level", false));
            var DynamicTextDS = Layers.FindAll(item => item.LayerType == LayerType.DynamicText);

            if (Layers.Count == 0)
            {
                //TODO:
                var img = new Bitmap(Layers.VideoSize.Width, Layers.VideoSize.Height);
                using (var g = Graphics.FromImage(img))
                {
                    g.Clear(Layers.BackColor);
                }
                NailImage = img;
                return;
            }

            var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, Layers.VideoSize.Width, Layers.VideoSize.Height, Layers);
            {
                int MaxCount             = Tick <= 0 ? DESConsts.BitCount : (int)Tick * DESConsts.BitCount;
                ManualResetEvent mre     = new ManualResetEvent(false);
                bool             hasSign = false;
                try
                {
                    Control.CheckForIllegalCrossThreadCalls = false;
                    Panel pnl      = new Panel();
                    var   callback = new DESVideoCallBack();

                    EventHandler onCompleted = delegate
                    {
                        if (des != null)
                        {
                            des.Dispose();
                        }
                        Control.CheckForIllegalCrossThreadCalls = true;
                        if (!hasSign)
                        {
                            hasSign = true;
                            mre.Set();
                        }
                    };

                    callback.OnCallBack = () =>
                    {
                        try
                        {
                            if (callback.m_FrameCount == 5)
                            {
                                des.Pause();
                                hasSign = true;
                                mre.Set();
                            }
                        }
                        catch (Exception e)
                        {
                            _log.Error("Generale ThumNail Exception on callBack.", e);
                            _log.Error(e);
                        }
                    };
                    des.Completed += onCompleted;
                    pnl.Width      = Layers.VideoSize.Width;
                    pnl.Height     = Layers.VideoSize.Height;
                    des.RenderToFrame(pnl, callback, null, DynamicTextDS, DsRect.FromRectangle(ClientRectangle), 0, Layers.PlayLength);
                    des.StartRendering();
                    des.put_CurrentPosition(Tick);

                    mre.WaitOne();
                    mre.Close();

                    if (des != null && !des.IsDisposed)
                    {
                        NailImage = des.GetImage();
                        des.Cancel();
                    }
                }
                catch (Exception e)
                {
                    _log.Error("Generale ThumNail Exception on general.", e);
                    _log.Error(e);
                    des.Cancel();
                }
            }
        }
Esempio n. 19
0
 private void ResizeMoveHandler(object sender, EventArgs e)
 {
     if (this.videoRenderer != null)
     {
         int hr = (this.videoRenderer as IVMRWindowlessControl9).SetVideoPosition(null, DsRect.FromRectangle(this.hostingControl.ClientRectangle));
     }
 }
Esempio n. 20
0
        void initGraph(Rectangle rect, IntPtr hwnd)
        {
            log.writeLog("Init Graph");
            pGB           = (IGraphBuilder) new FilterGraph();
            pVmr          = (IBaseFilter) new VideoMixingRenderer9();
            compressVideo = CreateFilter(FilterCategory.VideoCompressorCategory, lstCompressor[3]);
            pGB.AddFilter(pVmr, "Video");
            pGB.AddFilter(captureVideo, "VideoCapture");
            //pGB.AddFilter(compressVideo, "Encoder");

            pConfig = (IVMRFilterConfig9)pVmr;
            pConfig.SetRenderingMode(VMR9Mode.Windowless);
            pWC = (IVMRWindowlessControl9)pVmr;

            pWC.SetVideoPosition(null, DsRect.FromRectangle(rect));
            pWC.SetVideoClippingWindow(hwnd);

            pMix = (IVMRMixerControl9)pVmr;
            pMs  = (IMediaSeeking)pGB;
            pMC  = (IMediaControl)pGB;

            ICaptureGraphBuilder2 cc = (ICaptureGraphBuilder2) new CaptureGraphBuilder2();

            cc.SetFiltergraph(pGB);
            pGB.AddFilter(devices[0], "Camera-1");
            if (devices[1] != null)
            {
                pGB.AddFilter(devices[1], "Camera-2");
            }
            pGB.AddFilter(audioCapture, "Audio Capture");

            Rectangle win = rect;
            float     _w  = win.Width;
            float     _H  = win.Height;

            NormalizedRect _0rect = new NormalizedRect();

            _0rect.top    = win.Top;
            _0rect.left   = win.Left;
            _0rect.right  = (win.Left + win.Width / 2) / _w;
            _0rect.bottom = (win.Bottom / _H);

            NormalizedRect _1rect = new NormalizedRect();

            _1rect.top    = win.Top;
            _1rect.left   = (win.Left + win.Width / 2) / _w;;
            _1rect.right  = win.Right / _w;
            _1rect.bottom = win.Bottom / _H;

            pMix.SetOutputRect(0, _0rect);
            pMix.SetOutputRect(1, _1rect);

            int             hr   = 0;
            IFileSinkFilter sink = null;

            log.writeLog("SetOutputFileName create");
            hr = cc.SetOutputFileName(MediaSubType.Avi, "VideoCaptured.avi", out captureVideo, out sink);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("SetOutputFileName success");
            log.writeLog("Start create cam-1 to preview");
            hr = cc.RenderStream(PinCategory.Preview, MediaType.Video, devices[0], null, pVmr);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("Start cam-1 to preview success");
            if (devices[1] != null)
            {
                log.writeLog("Start create cam-2 to preview");
                hr = cc.RenderStream(PinCategory.Preview, MediaType.Video, devices[1], null, pVmr);
                DsError.ThrowExceptionForHR(hr);
                log.writeLog("Create cam-2 to preview success");
            }
            log.writeLog("Start capture video from cam-1");
            hr = cc.RenderStream(PinCategory.Capture, MediaType.Video, devices[0], null, captureVideo);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("success create capture from cam-1");
            log.writeLog("Start capture audio");
            hr = cc.RenderStream(PinCategory.Capture, MediaType.Audio, audioCapture, null, captureVideo);
            DsError.ThrowExceptionForHR(hr);
            log.writeLog("Success to capture audio");

            Marshal.ReleaseComObject(cc);
        }
Esempio n. 21
0
        //protected virtual Rectangle GetInnerRectangle(Rectangle outerRectangle, double innerRatio)
        //{
        //    Rectangle innerRectangle = outerRectangle;
        //    double outerRatio = (double)outerRectangle.Width / (double)outerRectangle.Height;
        //    if (outerRatio >= innerRatio)
        //    {
        //        innerRectangle.Width = (int)((double)outerRectangle.Height * innerRatio);
        //        innerRectangle.X = (int)((outerRectangle.Width - innerRectangle.Width) / 2.0);
        //    }
        //    else
        //    {
        //        innerRectangle.Height = (int)((double)outerRectangle.Width / innerRatio);
        //        innerRectangle.Y = (int)((outerRectangle.Height - innerRectangle.Height) / 2.0);
        //    }
        //    return innerRectangle;
        //}
        protected Rectangle[] GetBlackBands()
        {
            Rectangle outerRectangle = this.hostingControl.ClientRectangle;
            DsRect innerDsRect = new DsRect();
            int hr;
            if (useEVR)
            {
                MFVideoNormalizedRect pnrcSource = new MFVideoNormalizedRect();
                MediaFoundation.Misc.MFRect prcDest = new MediaFoundation.Misc.MFRect();
                hr = evrVideoDisplayControl.GetVideoPosition(pnrcSource, prcDest);
                innerDsRect = DsRect.FromRectangle((Rectangle)prcDest);
            }
            else
            {
                IVMRWindowlessControl9 vmrWindowlessControl9 = this.videoRenderer as IVMRWindowlessControl9;
                hr = vmrWindowlessControl9.GetVideoPosition(null, innerDsRect);
            }
            Rectangle innerRectangle = innerDsRect.ToRectangle();

            //Trace.WriteLineIf(trace.TraceVerbose, string.Format(("\tvideoRenderer.GetVideoPosition({0})"), innerRectangle.ToString()));
            //Trace.WriteLineIf(trace.TraceVerbose, string.Format(("\thostingControl.ClientRectangle({0})"), outerRectangle.ToString()));

            List<Rectangle> alRectangles = new List<Rectangle>();

            if (innerRectangle.Top > outerRectangle.Top)
                alRectangles.Add(new Rectangle(outerRectangle.Left, outerRectangle.Top, outerRectangle.Width - 1, innerRectangle.Top - 1));

            if (innerRectangle.Bottom < outerRectangle.Bottom)
                alRectangles.Add(new Rectangle(outerRectangle.Left, innerRectangle.Bottom, outerRectangle.Width - 1, outerRectangle.Height - (innerRectangle.Bottom + 1)));

            if (innerRectangle.Left > outerRectangle.Left)
            {
                Rectangle rectangleLeft = new Rectangle(outerRectangle.Left, innerRectangle.Top, innerRectangle.Left - 1, innerRectangle.Height - 1);
                rectangleLeft.Intersect(outerRectangle);
                alRectangles.Add(rectangleLeft);
            }

            if (innerRectangle.Right < outerRectangle.Right)
            {
                Rectangle rectangleLeft = new Rectangle(innerRectangle.Right, innerRectangle.Top, outerRectangle.Width - (innerRectangle.Right + 1), innerRectangle.Height - 1);
                rectangleLeft.Intersect(outerRectangle);
                alRectangles.Add(rectangleLeft);
            }
            return alRectangles.ToArray();
        }
Esempio n. 22
0
        public void Generate()
        {
            Check.Require(Layers, "Layers", Check.NotNull);
            Check.Require(Layers.Length, "Layers.Length", Check.GreaterThan <int>(0));
            Check.Require(HWnd, "HWnd", Check.NotNull);
            Check.Require(Tick, "Tick", Check.GreaterThanOrEqual <int>(0));

            var layers = helper.PopulateDataBatchLoad(Layers);

            layers.BackColor = HWnd.BackColor;
            //layers.VideoSize = new Size(ControlService.SignCombo.Current.Width, ControlService.SignCombo.Current.Height);
            layers.VideoSize = HWnd.Size;
            layers.Sort(new SortComparer <Layer>("Level", false));
            var DynamicTextDS = layers.FindAll(item => { return(item.LayerType == LayerType.DynamicText); });

            if (layers.Count == 0)
            {
                //TODO:
                var img = new Bitmap(HWnd.Width, HWnd.Height);
                using (var g = Graphics.FromImage(img))
                {
                    g.Clear(HWnd.BackColor);
                }
                NailImage = img;
                return;
            }

            //using (var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, HWnd.Width, HWnd.Height, layers))
            var des = new DESCombine(DESConsts.FPS, DESConsts.BitCount, layers.VideoSize.Width, layers.VideoSize.Height, layers);
            {
                int MaxCount             = Tick <= 0 ? DESConsts.BitCount : (int)Tick * DESConsts.BitCount;
                ManualResetEvent mre     = new ManualResetEvent(false);
                bool             hasSign = false;
                try
                {
                    Control.CheckForIllegalCrossThreadCalls = false;
                    Panel pnl      = new Panel();
                    var   callback = new DESVideoCallBack();

                    EventHandler onCompleted = delegate
                    {
                        if (des != null)
                        {
                            des.Dispose();
                        }
                        Control.CheckForIllegalCrossThreadCalls = true;
                        if (!hasSign)
                        {
                            hasSign = true;
                            mre.Set();
                        }
                    };

                    callback.OnCallBack = () =>
                    {
                        try
                        {
                            if (callback.m_FrameCount == 5)
                            {
                                des.Pause();
                                hasSign = true;
                                mre.Set();
                            }
                        }
                        catch
                        {
                        }
                    };
                    des.Completed += onCompleted;
                    pnl.Width      = layers.VideoSize.Width;
                    pnl.Height     = layers.VideoSize.Height;
                    des.RenderToFrame(pnl, callback, null, DynamicTextDS, DsRect.FromRectangle(HWnd.ClientRectangle), 0, layers.PlayLength);
                    des.StartRendering();
                    des.put_CurrentPosition(Tick);

                    mre.WaitOne();
                    mre.Close();

                    if (des != null && !des.IsDisposed)
                    {
                        NailImage = des.GetImage();
                        des.Cancel();
                    }
                }
                catch
                {
                    des.Cancel();
                }
            }
        }
Esempio n. 23
0
        /// <summary>
        ///  Start PlayList
        /// </summary>
        private void StartPlay()
        {
            EventArgs ca      = new EventArgs();
            int       RunTime = 0;

            curNum    = 0;
            PlayState = PlayState.Next;
            while (curNum >= 0 && curNum < dsArr.Length)
            {
                if (PlayState == PlayState.Stop)
                {
                    if (des != null)
                    {
                        des.Cancel();
                    }
                    break;
                }

                if (PlayState == PlayState.Next)
                {
                    dsArr[curNum].Sort(new SortComparer <Layer>("Level", false));
                    des            = new DESCombine(DESConsts.FPS, DESConsts.BitCount, hWin.Width, hWin.Height, dsArr[curNum]);
                    DynamicTextDS  = dsArr[curNum].FindAll(DynamicTextLayer);
                    des.Completed += new EventHandler(Completed);
                    pVideo         = new DESVideoCallBack(RunTime, m_PlayBar, m_MediaTime);
                    des.RenderToFrame(hWin, pVideo, null, DynamicTextDS, DsRect.FromRectangle(hWin.ClientRectangle), 0, dsArr[curNum].PlayLength);
                    des.StartRendering();
                    PlayState  = PlayState.Run;
                    PlayLength = DESHelper.FormatTime(dsArr[curNum].PlayLength);
                }
                else
                {
                    if (PlayState == PlayState.Run)
                    {
                        curLength += 1000000;
                    }
                    if (curLength >= PlayLength)
                    {
                        RunTime += (int)dsArr[curNum].PlayLength;
                        curNum++;
                        curLength = 0;
                        PlayState = PlayState.Next;
                        if (curNum == dsArr.Length)
                        {
                            PlayState = PlayState.Stop;
                        }
                        if (des != null)
                        {
                            des.Stop();
                        }
                    }
                    Thread.Sleep(100);
                }
            }

            if (des != null)
            {
                des.Cancel();
            }
            hWin.Refresh();
            if (PlayListCompleted != null)
            {
                PlayListCompleted(this, ca);
            }
        }
Esempio n. 24
0
 public int OnInvalidateRect(DsRect lpcRect)
 {
     m_ir = true;
     return(0);
 }
        // return the surface created in InitializeDevice and a dsRect with the video size
        public int GetSurfaceEx(System.IntPtr dwUserID, int SurfaceIndex, int SurfaceFlags, out System.IntPtr lplpSurface, out DsRect lprcDst)
        {
            Debug.Assert(dwUserID == cookie, "IVMRSurfaceAllocatorEx9.GetSurfaceEx");

            GetSurfaceExCount++;
            lplpSurface = unmanagedSurfaces[SurfaceIndex];
            lprcDst     = dstRect;
            return(0);
        }
Esempio n. 26
0
        public void ResizeWindowToVideo()
        {
            IVideoWindow pVW = m_pRenderGraph as IVideoWindow;
            IBasicVideo pBV = m_pRenderGraph as IBasicVideo;
            if ((pVW != null) && (pBV != null))
            {
                // size of new video
                int cx, cy;
                pBV.GetVideoSize(out cx, out cy);
                DsRect rcVideo = new DsRect(0, 0, cx, cy);

                // adjust from client size to window size
                WindowStyle style;
                pVW.get_WindowStyle(out style);
                //AdjustWindowRect(rcVideo, style, false);

                // get current window top/left
                int cxWindow, cyWindow;
                DsRect rc = new DsRect();
                pVW.GetWindowPosition(out rc.left, out rc.top, out cxWindow, out cyWindow);

                // reposition video window with old top/left position and new size
                pVW.SetWindowPosition(rc.left, rc.top, rcVideo.right - rcVideo.left, rcVideo.bottom - rcVideo.top);
            }
        }