Appspotdemo.Mono.Droid.FramePool.returnFrame C# (CSharp) Method

returnFrame() public method

public returnFrame ( VideoRenderer frame ) : void
frame VideoRenderer
return void
        public virtual void returnFrame(VideoRenderer.I420Frame frame)
        {
            long desc = summarizeFrameDimensions(frame);
            lock (availableFrames)
            {
                LinkedList<VideoRenderer.I420Frame> frames = availableFrames[desc];
                if (frames == null)
                {
                    throw new System.ArgumentException("Unexpected frame dimensions");
                }
                frames.AddFirst(frame);
            }
        }

Usage Example

コード例 #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);
            }
        }