Home | History | Annotate | Download | only in common_video
      1 /*
      2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_COMMON_VIDEO_VIDEO_RENDER_FRAMES_H_
     12 #define WEBRTC_COMMON_VIDEO_VIDEO_RENDER_FRAMES_H_
     13 
     14 #include <stdint.h>
     15 
     16 #include <list>
     17 
     18 #include "webrtc/video_frame.h"
     19 
     20 namespace webrtc {
     21 
     22 // Class definitions
     23 class VideoRenderFrames {
     24  public:
     25   VideoRenderFrames();
     26 
     27   // Add a frame to the render queue
     28   int32_t AddFrame(const VideoFrame& new_frame);
     29 
     30   // Get a frame for rendering, or a zero-size frame if it's not time to render.
     31   VideoFrame FrameToRender();
     32 
     33   // Releases all frames
     34   int32_t ReleaseAllFrames();
     35 
     36   // Returns the number of ms to next frame to render
     37   uint32_t TimeToNextFrameRelease();
     38 
     39   // Sets estimates delay in renderer
     40   int32_t SetRenderDelay(const uint32_t render_delay);
     41 
     42  private:
     43   // 10 seconds for 30 fps.
     44   enum { KMaxNumberOfFrames = 300 };
     45   // Don't render frames with timestamp older than 500ms from now.
     46   enum { KOldRenderTimestampMS = 500 };
     47   // Don't render frames with timestamp more than 10s into the future.
     48   enum { KFutureRenderTimestampMS = 10000 };
     49 
     50   // Sorted list with framed to be rendered, oldest first.
     51   std::list<VideoFrame> incoming_frames_;
     52 
     53   // Estimated delay from a frame is released until it's rendered.
     54   uint32_t render_delay_ms_;
     55 };
     56 
     57 }  // namespace webrtc
     58 
     59 #endif  // WEBRTC_COMMON_VIDEO_VIDEO_RENDER_FRAMES_H_
     60