| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_RENDERERS_VIDEO_RENDERER_IMPL_H_ | 5 #ifndef MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ |
| 6 #define MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ | 6 #define MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 | 9 |
| 10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 | 140 |
| 141 // Returns true if there is no more room for additional buffered frames. | 141 // Returns true if there is no more room for additional buffered frames. |
| 142 bool HaveReachedBufferingCap(); | 142 bool HaveReachedBufferingCap(); |
| 143 | 143 |
| 144 // Starts or stops |sink_| respectively. Do not call while |lock_| is held. | 144 // Starts or stops |sink_| respectively. Do not call while |lock_| is held. |
| 145 void StartSink(); | 145 void StartSink(); |
| 146 void StopSink(); | 146 void StopSink(); |
| 147 | 147 |
| 148 // Fires |ended_cb_| if there are no remaining usable frames and | 148 // Fires |ended_cb_| if there are no remaining usable frames and |
| 149 // |received_end_of_stream_| is true. Sets |rendered_end_of_stream_| if it | 149 // |received_end_of_stream_| is true. Sets |rendered_end_of_stream_| if it |
| 150 // does so. Returns algorithm_->EffectiveFramesQueued(). | 150 // does so. |
| 151 size_t MaybeFireEndedCallback(); | 151 // |
| 152 // When called from the media thread, |time_progressing| should reflect the |
| 153 // value of |time_progressing_|. When called from Render() on the sink |
| 154 // callback thread, the inverse of |render_first_frame_and_stop_| should be |
| 155 // used as a proxy for |time_progressing_|. |
| 156 // |
| 157 // Returns algorithm_->EffectiveFramesQueued(). |
| 158 size_t MaybeFireEndedCallback_Locked(bool time_progressing); |
| 152 | 159 |
| 153 // Helper method for converting a single media timestamp to wall clock time. | 160 // Helper method for converting a single media timestamp to wall clock time. |
| 154 base::TimeTicks ConvertMediaTimestamp(base::TimeDelta media_timestamp); | 161 base::TimeTicks ConvertMediaTimestamp(base::TimeDelta media_timestamp); |
| 155 | 162 |
| 156 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; | 163 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| 157 | 164 |
| 158 // Enables the use of VideoRendererAlgorithm and VideoRendererSink for frame | 165 // Enables the use of VideoRendererAlgorithm and VideoRendererSink for frame |
| 159 // rendering instead of using a thread in a sleep-loop. Set via the command | 166 // rendering instead of using a thread in a sleep-loop. Set via the command |
| 160 // line flag kEnableNewVideoRenderer or via test methods. | 167 // line flag kEnableNewVideoRenderer or via test methods. |
| 161 bool use_new_video_renderering_path_; | 168 bool use_new_video_renderering_path_; |
| 162 | 169 |
| 163 // Sink which calls into VideoRendererImpl via Render() for video frames. Do | 170 // Sink which calls into VideoRendererImpl via Render() for video frames. Do |
| 164 // not call any methods on the sink while |lock_| is held or the two threads | 171 // not call any methods on the sink while |lock_| is held or the two threads |
| 165 // might deadlock. Do not call Start() or Stop() on the sink directly, use | 172 // might deadlock. Do not call Start() or Stop() on the sink directly, use |
| 166 // StartSink() and StopSink() to ensure background rendering is started. | 173 // StartSink() and StopSink() to ensure background rendering is started. Only |
| 174 // access these values on |task_runner_|. |
| 167 VideoRendererSink* const sink_; | 175 VideoRendererSink* const sink_; |
| 168 bool sink_started_; | 176 bool sink_started_; |
| 169 | 177 |
| 170 // Used for accessing data members. | 178 // Used for accessing data members. |
| 171 base::Lock lock_; | 179 base::Lock lock_; |
| 172 | 180 |
| 173 // Provides video frames to VideoRendererImpl. | 181 // Provides video frames to VideoRendererImpl. |
| 174 scoped_ptr<VideoFrameStream> video_frame_stream_; | 182 scoped_ptr<VideoFrameStream> video_frame_stream_; |
| 175 | 183 |
| 176 // Pool of GpuMemoryBuffers and resources used to create hardware frames. | 184 // Pool of GpuMemoryBuffers and resources used to create hardware frames. |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 | 272 |
| 265 // Algorithm for selecting which frame to render; manages frames and all | 273 // Algorithm for selecting which frame to render; manages frames and all |
| 266 // timing related information. | 274 // timing related information. |
| 267 scoped_ptr<VideoRendererAlgorithm> algorithm_; | 275 scoped_ptr<VideoRendererAlgorithm> algorithm_; |
| 268 | 276 |
| 269 // Indicates that Render() was called with |background_rendering| set to true, | 277 // Indicates that Render() was called with |background_rendering| set to true, |
| 270 // so we've entered a background rendering mode where dropped frames are not | 278 // so we've entered a background rendering mode where dropped frames are not |
| 271 // counted. Must be accessed under |lock_| once |sink_| is started. | 279 // counted. Must be accessed under |lock_| once |sink_| is started. |
| 272 bool was_background_rendering_; | 280 bool was_background_rendering_; |
| 273 | 281 |
| 274 // Indicates whether or not media time is currently progressing or not. | 282 // Indicates whether or not media time is currently progressing or not. Must |
| 283 // only be accessed from |task_runner_|. |
| 275 bool time_progressing_; | 284 bool time_progressing_; |
| 276 | 285 |
| 277 // Indicates that Render() should only render the first frame and then request | 286 // Indicates that Render() should only render the first frame and then request |
| 278 // that the sink be stopped. |posted_maybe_stop_after_first_paint_| is used | 287 // that the sink be stopped. |posted_maybe_stop_after_first_paint_| is used |
| 279 // to avoid repeated task posts. | 288 // to avoid repeated task posts. |
| 280 bool render_first_frame_and_stop_; | 289 bool render_first_frame_and_stop_; |
| 281 bool posted_maybe_stop_after_first_paint_; | 290 bool posted_maybe_stop_after_first_paint_; |
| 282 | 291 |
| 283 // NOTE: Weak pointers must be invalidated before all other member variables. | 292 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 284 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; | 293 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; |
| 285 | 294 |
| 286 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); | 295 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); |
| 287 }; | 296 }; |
| 288 | 297 |
| 289 } // namespace media | 298 } // namespace media |
| 290 | 299 |
| 291 #endif // MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ | 300 #endif // MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ |
| OLD | NEW |