| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ | 5 #ifndef MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ |
| 6 #define MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ | 6 #define MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 // see VideoCadenceEstimator for details on this process. In cases of non- | 44 // see VideoCadenceEstimator for details on this process. In cases of non- |
| 45 // integer cadence, the algorithm will fall back to choosing the frame which | 45 // integer cadence, the algorithm will fall back to choosing the frame which |
| 46 // covers the most of the current render interval. If no frame covers the | 46 // covers the most of the current render interval. If no frame covers the |
| 47 // current interval, the least bad frame will be chosen based on its drift from | 47 // current interval, the least bad frame will be chosen based on its drift from |
| 48 // the start of the interval. | 48 // the start of the interval. |
| 49 // | 49 // |
| 50 // Combined these three approaches enforce optimal smoothness in many cases. | 50 // Combined these three approaches enforce optimal smoothness in many cases. |
| 51 class MEDIA_EXPORT VideoRendererAlgorithm { | 51 class MEDIA_EXPORT VideoRendererAlgorithm { |
| 52 public: | 52 public: |
| 53 VideoRendererAlgorithm(const TimeSource::WallClockTimeCB& wall_clock_time_cb, | 53 VideoRendererAlgorithm(const TimeSource::WallClockTimeCB& wall_clock_time_cb, |
| 54 scoped_refptr<MediaLog> media_log); | 54 MediaLog* media_log); |
| 55 ~VideoRendererAlgorithm(); | 55 ~VideoRendererAlgorithm(); |
| 56 | 56 |
| 57 // Chooses the best frame for the interval [deadline_min, deadline_max] based | 57 // Chooses the best frame for the interval [deadline_min, deadline_max] based |
| 58 // on available and previously rendered frames. | 58 // on available and previously rendered frames. |
| 59 // | 59 // |
| 60 // Under ideal circumstances the deadline interval provided to a Render() call | 60 // Under ideal circumstances the deadline interval provided to a Render() call |
| 61 // should be directly adjacent to the deadline given to the previous Render() | 61 // should be directly adjacent to the deadline given to the previous Render() |
| 62 // call with no overlap or gaps. In practice, |deadline_max| is an estimated | 62 // call with no overlap or gaps. In practice, |deadline_max| is an estimated |
| 63 // value, which means the next |deadline_min| may overlap it slightly or have | 63 // value, which means the next |deadline_min| may overlap it slightly or have |
| 64 // a slight gap. Gaps which exceed the length of the deadline interval are | 64 // a slight gap. Gaps which exceed the length of the deadline interval are |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 // Updates |effective_frames_queued_| which is typically called far more | 260 // Updates |effective_frames_queued_| which is typically called far more |
| 261 // frequently (~4x) than the value changes. This must be called whenever | 261 // frequently (~4x) than the value changes. This must be called whenever |
| 262 // frames are added or removed from the queue or when any property of a | 262 // frames are added or removed from the queue or when any property of a |
| 263 // ReadyFrame within the queue changes. | 263 // ReadyFrame within the queue changes. |
| 264 void UpdateEffectiveFramesQueued(); | 264 void UpdateEffectiveFramesQueued(); |
| 265 | 265 |
| 266 // Computes the unclamped count of effective frames. Used by | 266 // Computes the unclamped count of effective frames. Used by |
| 267 // UpdateEffectiveFramesQueued(). | 267 // UpdateEffectiveFramesQueued(). |
| 268 size_t CountEffectiveFramesQueued() const; | 268 size_t CountEffectiveFramesQueued() const; |
| 269 | 269 |
| 270 scoped_refptr<MediaLog> media_log_; | 270 MediaLog* media_log_; |
| 271 int out_of_order_frame_logs_ = 0; | 271 int out_of_order_frame_logs_ = 0; |
| 272 | 272 |
| 273 // Queue of incoming frames waiting for rendering. | 273 // Queue of incoming frames waiting for rendering. |
| 274 using VideoFrameQueue = std::deque<ReadyFrame>; | 274 using VideoFrameQueue = std::deque<ReadyFrame>; |
| 275 VideoFrameQueue frame_queue_; | 275 VideoFrameQueue frame_queue_; |
| 276 | 276 |
| 277 // Handles cadence detection and frame cadence assignments. | 277 // Handles cadence detection and frame cadence assignments. |
| 278 VideoCadenceEstimator cadence_estimator_; | 278 VideoCadenceEstimator cadence_estimator_; |
| 279 | 279 |
| 280 // Indicates if any calls to Render() have successfully yielded a frame yet. | 280 // Indicates if any calls to Render() have successfully yielded a frame yet. |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 // Current number of effective frames in the |frame_queue_|. Updated by calls | 336 // Current number of effective frames in the |frame_queue_|. Updated by calls |
| 337 // to UpdateEffectiveFramesQueued() whenever the |frame_queue_| is changed. | 337 // to UpdateEffectiveFramesQueued() whenever the |frame_queue_| is changed. |
| 338 size_t effective_frames_queued_; | 338 size_t effective_frames_queued_; |
| 339 | 339 |
| 340 DISALLOW_COPY_AND_ASSIGN(VideoRendererAlgorithm); | 340 DISALLOW_COPY_AND_ASSIGN(VideoRendererAlgorithm); |
| 341 }; | 341 }; |
| 342 | 342 |
| 343 } // namespace media | 343 } // namespace media |
| 344 | 344 |
| 345 #endif // MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ | 345 #endif // MEDIA_FILTERS_VIDEO_RENDERER_ALGORITHM_H_ |
| OLD | NEW |