Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }
Esempio n. 3
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. 4
0
        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);
            }
        }