/* * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_MODULES_UTILITY_SOURCE_VIDEO_FRAMES_QUEUE_H_ #define WEBRTC_MODULES_UTILITY_SOURCE_VIDEO_FRAMES_QUEUE_H_ #ifdef WEBRTC_MODULE_UTILITY_VIDEO #include "engine_configurations.h" #include "list_wrapper.h" #include "typedefs.h" namespace webrtc { class VideoFrame; class VideoFramesQueue { public: VideoFramesQueue(); ~VideoFramesQueue(); // Put newFrame (last) in the queue. WebRtc_Word32 AddFrame(const VideoFrame& newFrame); // Return the most current frame. I.e. the frame with the highest // VideoFrame::RenderTimeMs() that is lower than // TickTime::MillisecondTimestamp(). VideoFrame* FrameToRecord(); // Set the render delay estimate to renderDelay ms. WebRtc_Word32 SetRenderDelay(WebRtc_UWord32 renderDelay); protected: // Make ptrOldFrame available for re-use. I.e. put it in the empty frames // queue. WebRtc_Word32 ReturnFrame(VideoFrame* ptrOldFrame); private: // Don't allow the buffer to expand beyond KMaxNumberOfFrames VideoFrames. // 300 frames correspond to 10 seconds worth of frames at 30 fps. enum {KMaxNumberOfFrames = 300}; // List of VideoFrame pointers. The list is sorted in the order of when the // VideoFrame was inserted into the list. The first VideoFrame in the list // was inserted first. ListWrapper _incomingFrames; // A list of frames that are free to be re-used. ListWrapper _emptyFrames; // Estimated render delay. WebRtc_UWord32 _renderDelayMs; }; } // namespace webrtc #endif // WEBRTC_MODULE_UTILITY_VIDEO #endif // WEBRTC_MODULES_UTILITY_SOURCE_VIDEO_FRAMES_QUEUE_H_