|  | /* | 
|  | *  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_ |