takeFrame() public method

public takeFrame ( VideoRenderer source ) : VideoRenderer.I420Frame
source VideoRenderer
return VideoRenderer.I420Frame
コード例 #1
0
        /// <summary>
        /// Queue |frame| to be uploaded. </summary>
        public virtual void queueFrame(Endpoint stream, Org.Webrtc.VideoRenderer.I420Frame frame)
        {
            // Paying for the copy of the YUV data here allows CSC and painting time
            // to get spent on the render thread instead of the UI thread.
            abortUnless(FramePool.validateDimensions(frame), "Frame too large!");
            VideoRenderer.I420Frame frameCopy = framePool.takeFrame(frame).CopyFrom(frame);
            bool needToScheduleRender;

            lock (framesToRender)
            {
                // A new render needs to be scheduled (via updateFrames()) iff there isn't
                // already a render scheduled, which is true iff framesToRender is empty.
                needToScheduleRender = framesToRender.Count == 0;
                VideoRenderer.I420Frame frameToDrop;
                framesToRender.TryGetValue(stream, out frameToDrop);
                framesToRender[stream] = frameCopy;
                if (frameToDrop != null)
                {
                    framePool.returnFrame(frameToDrop);
                }
            }
            if (needToScheduleRender)
            {
                QueueEvent(updateFrames);
            }
        }