private void FillWindow() { if (pDisplay == null) { return; } IMFVideoDisplayControl mfVideoDisplayControl = pDisplay; Rectangle r = panel.ClientRectangle; MediaFoundation.Misc.MFRect rc = new MediaFoundation.Misc.MFRect(r.Left, r.Top, r.Right, r.Bottom); mfVideoDisplayControl.SetVideoPosition(null, rc); }
private void InitializeEVR(IBaseFilter pEVR, int dwStreams, out IMFVideoDisplayControl ppDisplay) { IMFVideoRenderer pRenderer; IEVRFilterConfig pConfig; IMFVideoPresenter pPresenter; pPresenter = new EVRCustomPresenter(); pRenderer = (IMFVideoRenderer)pEVR; pRenderer.InitializeRenderer(null, pPresenter); object o; MediaFoundation.IMFGetService pGetService; pGetService = (MediaFoundation.IMFGetService)pEVR; pGetService.GetService(MediaFoundation.MFServices.MR_VIDEO_RENDER_SERVICE, typeof(IMFVideoDisplayControl).GUID, out o); try { pDisplay = (IMFVideoDisplayControl)o; } catch { Marshal.ReleaseComObject(o); throw; } pDisplay.SetVideoWindow(panel.Handle); if (dwStreams > 1) { pConfig = (IEVRFilterConfig)pEVR; pConfig.SetNumberOfStreams(dwStreams); } Rectangle r = ClientRectangle; MediaFoundation.Misc.MFRect rc = new MediaFoundation.Misc.MFRect(r.Left, r.Top, r.Right, r.Bottom); pDisplay.SetVideoPosition(null, rc); ppDisplay = pDisplay; }
//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(); }
private void MoveVideoWindow() { //int hr = 0; // Track the movement of the container window and resize as needed if (this.evrDisplay != null) { MFVideoNormalizedRect sRect = new MFVideoNormalizedRect(); sRect.top = 0; sRect.left = 0; sRect.right = 1; sRect.bottom = 1; MediaFoundation.Misc.MFRect dRect = new MediaFoundation.Misc.MFRect(); //dRect.top = 0; //dRect.left = 0; //dRect.right = ClientRectangle.Width;//this.Width; //dRect.bottom = ClientRectangle.Height;//this.Height; dRect.top = 0 - (ps.OverscanHeight / 2); dRect.left = 0 - (ps.OverscanWidth / 2); dRect.right = container.ClientRectangle.Width + (ps.OverscanWidth / 2);//this.Width; dRect.bottom = container.ClientRectangle.Height + (ps.OverscanHeight / 2);//this.Height; this.evrDisplay.SetVideoPosition(sRect, dRect); } }