Пример #1
0
 private void OverlayInitialize()
 {
     OverlayDestroy();
     mOverlay           = new OverlayRender(new Point((int)Properties.Settings.Default.OverlayX, (int)Properties.Settings.Default.OverlayY), new Size(280, 30), 1000);
     mOverlay.TimerTick = Overlay_TimerTick;
     mOverlay.OnRender  = Overlay_OnRender;
 }
Пример #2
0
        public OverlayContext(OverlayRender render, YUVPlanes plane)
        {
            Plane = plane;
            Mode  = render.Mode;

            Static = render.Invert
                ? new StaticContext(render.Overlay, render.Source, render.OverlayMask, render.SourceMask, plane)
                : new StaticContext(render.Source, render.Overlay, render.SourceMask, render.OverlayMask, plane);

            Source  = Static.Source.Dynamic();
            Overlay = Static.Overlay.Dynamic();

            SourceInfo  = Static.Source.GetVideoInfo();
            OverlayInfo = Static.Overlay.GetVideoInfo();

            TargetInfo = render.GetVideoInfo();

            SourceMask  = PrepareMask(Static.SourceMask, render.Source.GetVideoInfo());
            OverlayMask = PrepareMask(Static.OverlayMask, render.Overlay.GetVideoInfo());

            disposables.Add(render.Source);
            disposables.Add(render.Overlay);
            disposables.Add(render.SourceMask);
            disposables.Add(render.OverlayMask);
            disposables.Add(Static.Source);
            disposables.Add(Static.Overlay);
            disposables.Add(Static.SourceMask);
            disposables.Add(Static.OverlayMask);


            if (plane.IsChroma())
            {
                TargetInfo = TargetInfo.Chroma;
            }

            DefaultColor = Plane.IsChroma() ? 0x808080 : TargetInfo.Info.IsRGB() ? 0 : 0x008080;
            BlankColor   = render.BlankColor >= 0 ? render.BlankColor : TargetInfo.Info.IsRGB() ? 0 : 0x008080;
            if (Plane == YUVPlanes.PLANAR_U)
            {
                BlankColor <<= 8;
            }
            else if (Plane == YUVPlanes.PLANAR_V)
            {
                BlankColor <<= 16;
            }
            BlankColor &= 0xFFFFFF;

            dynamic PrepareMask(Clip mask, ExtraVideoInfo target)
            {
                if (mask != null)
                {
                    if (!target.Info.IsRGB() && mask.IsRealPlanar())
                    {
                        mask = mask.Dynamic().ExtractY();
                    }
                    if (plane.IsChroma() && !target.ColorSpace.WithoutSubSample())
                    {
                        mask = mask.Dynamic().BilinearResize(target.Chroma.Size);
                    }
                    disposables.Add(mask);
                }

                return(mask?.Dynamic());
            }

            int Round(double val) => (int)Math.Round(val);
        }