public VideoBlenderContext(VideoBlenderSetup setup, PayloadPool <Frame> framePool, IStreamerBase streamer, OverloadController overloadController, Action pushPipeline)
        {
            _name               = new NodeName("VE", null, "BL", 1);
            _fps                = setup.Fps;
            _framePool          = framePool;
            _streamer           = streamer;
            _overloadController = overloadController;
            _pushPipeline       = pushPipeline;
            _delayFromRuntime   = ToTime(setup.DelayFromRuntimeFrames);  // 3 frames in client
            _pushPipelineDelay  = ToTime(setup.PushPipelineDelayFrames); // 3 frames

            Reconfigure(setup);

            _timer = _streamer.Subscribe(15, OnTimer);
            if (setup.Dx != null)
            {
                if (setup.BlendingType == BlendingType.Smart)
                {
                    _directXPipeline       = LoadPipline(BlendingType.Linear, setup.Dx);
                    _directXPipelineLowRes = LoadPipline(BlendingType.BilinearLowRes, setup.Dx);
                }
                else
                {
                    _directXPipeline = LoadPipline(setup.BlendingType, setup.Dx);
                }
            }

            _currentFpsTicks = ToTicks(Core.GetCurrentTime() - 600_000); // -60ms
        }
        public VideoEncoderTrunk(IStreamerBase streamer, OverloadController overloadController)
        {
            BlenderQueue = new UnorderedStreamQueue <Frame>(new NodeName("VE", null, "BLq", 1), streamer.FramePool);
            Blender      = new VideoBlenderNode(new NodeName("VE", null, "BL", 1), streamer, overloadController);

            PreEncoderFilterQueue = new UnorderedStreamQueue <Frame>(new NodeName("VE", null, "FPreq", 3), streamer.FramePool);
            PreEncoderFilterPool  = new NodePool <IFilterContext, FilterSetup, Frame, Frame>(new NodeName("VE", null, "FPre", 3), streamer, i => new FilterNode(new NodeName("VE", null, "FPre", 3, i), streamer));

            EncoderQueue = new OrderedStreamQueue <Frame>(new NodeName("VE", null, "Eq", 4), streamer.FramePool);
            EncoderNode  = new EncoderNode(new NodeName("VE", null, "E", 4), streamer);


            EncoderAndUiFilterDuplicateQueue = new DuplicateQueue <Frame>(streamer.FramePool);
            UiFilterQueue = new UnorderedStreamQueue <Frame>(new NodeName("VE", null, "FUIq", 9), streamer.FramePool, 2);

            BackgroundFrame = new FixedFrame();
        }
Esempio n. 3
0
        public FpsQueue(NodeName name, ITargetQueue <TPayload> next, IStreamerBase streamerBase, PayloadPool <TPayload> payloadPool, int fps, int maxDeviation, AVRational timeBase,
                        OverloadController overloadController, int version)
        {
            Name                = name;
            _next               = next;
            _payloadPool        = payloadPool;
            Fps                 = fps;
            _maxDeviation       = maxDeviation;
            _overloadController = overloadController;
            _version            = version;
            _statisticKeeper    = new StatisticKeeper <StatisticDataOfFpsQueue>(name);

            if (timeBase.den != 10_000_000)
            {
                throw new InvalidOperationException($"FpsQueue {name} requires correct timeBase (not {timeBase.num}/{timeBase.den})");
            }
        }
Esempio n. 4
0
 private void Awake()
 {
     m_Rigidbody          = GetComponent <Rigidbody>();
     m_OverloadController = GetComponent <OverloadController>();
     m_Source             = GetComponent <AudioSource>();
 }
Esempio n. 5
0
 public VideoBlenderNode(NodeName name, IStreamerBase streamer, OverloadController overloadController) : base(name, streamer)
 {
     _statisticKeeper2   = new StatisticKeeper <StatisticDataOfBlenderNode>(name);
     _overloadController = overloadController;
 }