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 <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <deque> | 11 #include <deque> |
| 12 #include <memory> |
12 | 13 |
13 #include "base/macros.h" | 14 #include "base/macros.h" |
14 #include "base/memory/ref_counted.h" | 15 #include "base/memory/ref_counted.h" |
15 #include "base/memory/scoped_ptr.h" | |
16 #include "base/memory/scoped_vector.h" | 16 #include "base/memory/scoped_vector.h" |
17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
18 #include "base/synchronization/condition_variable.h" | 18 #include "base/synchronization/condition_variable.h" |
19 #include "base/synchronization/lock.h" | 19 #include "base/synchronization/lock.h" |
20 #include "base/timer/timer.h" | 20 #include "base/timer/timer.h" |
21 #include "media/base/decryptor.h" | 21 #include "media/base/decryptor.h" |
22 #include "media/base/demuxer_stream.h" | 22 #include "media/base/demuxer_stream.h" |
23 #include "media/base/media_log.h" | 23 #include "media/base/media_log.h" |
24 #include "media/base/pipeline_status.h" | 24 #include "media/base/pipeline_status.h" |
25 #include "media/base/video_decoder.h" | 25 #include "media/base/video_decoder.h" |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 const StatisticsCB& statistics_cb, | 69 const StatisticsCB& statistics_cb, |
70 const BufferingStateCB& buffering_state_cb, | 70 const BufferingStateCB& buffering_state_cb, |
71 const base::Closure& ended_cb, | 71 const base::Closure& ended_cb, |
72 const PipelineStatusCB& error_cb, | 72 const PipelineStatusCB& error_cb, |
73 const TimeSource::WallClockTimeCB& wall_clock_time_cb, | 73 const TimeSource::WallClockTimeCB& wall_clock_time_cb, |
74 const base::Closure& waiting_for_decryption_key_cb) override; | 74 const base::Closure& waiting_for_decryption_key_cb) override; |
75 void Flush(const base::Closure& callback) override; | 75 void Flush(const base::Closure& callback) override; |
76 void StartPlayingFrom(base::TimeDelta timestamp) override; | 76 void StartPlayingFrom(base::TimeDelta timestamp) override; |
77 void OnTimeStateChanged(bool time_progressing) override; | 77 void OnTimeStateChanged(bool time_progressing) override; |
78 | 78 |
79 void SetTickClockForTesting(scoped_ptr<base::TickClock> tick_clock); | 79 void SetTickClockForTesting(std::unique_ptr<base::TickClock> tick_clock); |
80 void SetGpuMemoryBufferVideoForTesting( | 80 void SetGpuMemoryBufferVideoForTesting( |
81 scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool); | 81 std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool); |
82 size_t frames_queued_for_testing() const { | 82 size_t frames_queued_for_testing() const { |
83 return algorithm_->frames_queued(); | 83 return algorithm_->frames_queued(); |
84 } | 84 } |
85 | 85 |
86 // VideoRendererSink::RenderCallback implementation. | 86 // VideoRendererSink::RenderCallback implementation. |
87 scoped_refptr<VideoFrame> Render(base::TimeTicks deadline_min, | 87 scoped_refptr<VideoFrame> Render(base::TimeTicks deadline_min, |
88 base::TimeTicks deadline_max, | 88 base::TimeTicks deadline_max, |
89 bool background_rendering) override; | 89 bool background_rendering) override; |
90 void OnFrameDropped() override; | 90 void OnFrameDropped() override; |
91 | 91 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 // might deadlock. Do not call Start() or Stop() on the sink directly, use | 181 // might deadlock. Do not call Start() or Stop() on the sink directly, use |
182 // StartSink() and StopSink() to ensure background rendering is started. Only | 182 // StartSink() and StopSink() to ensure background rendering is started. Only |
183 // access these values on |task_runner_|. | 183 // access these values on |task_runner_|. |
184 VideoRendererSink* const sink_; | 184 VideoRendererSink* const sink_; |
185 bool sink_started_; | 185 bool sink_started_; |
186 | 186 |
187 // Used for accessing data members. | 187 // Used for accessing data members. |
188 base::Lock lock_; | 188 base::Lock lock_; |
189 | 189 |
190 // Provides video frames to VideoRendererImpl. | 190 // Provides video frames to VideoRendererImpl. |
191 scoped_ptr<VideoFrameStream> video_frame_stream_; | 191 std::unique_ptr<VideoFrameStream> video_frame_stream_; |
192 | 192 |
193 // Pool of GpuMemoryBuffers and resources used to create hardware frames. | 193 // Pool of GpuMemoryBuffers and resources used to create hardware frames. |
194 scoped_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; | 194 std::unique_ptr<GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; |
195 | 195 |
196 scoped_refptr<MediaLog> media_log_; | 196 scoped_refptr<MediaLog> media_log_; |
197 | 197 |
198 // Flag indicating low-delay mode. | 198 // Flag indicating low-delay mode. |
199 bool low_delay_; | 199 bool low_delay_; |
200 | 200 |
201 // Keeps track of whether we received the end of stream buffer and finished | 201 // Keeps track of whether we received the end of stream buffer and finished |
202 // rendering. | 202 // rendering. |
203 bool received_end_of_stream_; | 203 bool received_end_of_stream_; |
204 bool rendered_end_of_stream_; | 204 bool rendered_end_of_stream_; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 PipelineStatusCB error_cb_; | 254 PipelineStatusCB error_cb_; |
255 TimeSource::WallClockTimeCB wall_clock_time_cb_; | 255 TimeSource::WallClockTimeCB wall_clock_time_cb_; |
256 | 256 |
257 base::TimeDelta start_timestamp_; | 257 base::TimeDelta start_timestamp_; |
258 | 258 |
259 // Keeps track of the number of frames decoded and dropped since the | 259 // Keeps track of the number of frames decoded and dropped since the |
260 // last call to |statistics_cb_|. These must be accessed under lock. | 260 // last call to |statistics_cb_|. These must be accessed under lock. |
261 int frames_decoded_; | 261 int frames_decoded_; |
262 int frames_dropped_; | 262 int frames_dropped_; |
263 | 263 |
264 scoped_ptr<base::TickClock> tick_clock_; | 264 std::unique_ptr<base::TickClock> tick_clock_; |
265 | 265 |
266 // Algorithm for selecting which frame to render; manages frames and all | 266 // Algorithm for selecting which frame to render; manages frames and all |
267 // timing related information. | 267 // timing related information. |
268 scoped_ptr<VideoRendererAlgorithm> algorithm_; | 268 std::unique_ptr<VideoRendererAlgorithm> algorithm_; |
269 | 269 |
270 // Indicates that Render() was called with |background_rendering| set to true, | 270 // Indicates that Render() was called with |background_rendering| set to true, |
271 // so we've entered a background rendering mode where dropped frames are not | 271 // so we've entered a background rendering mode where dropped frames are not |
272 // counted. Must be accessed under |lock_| once |sink_| is started. | 272 // counted. Must be accessed under |lock_| once |sink_| is started. |
273 bool was_background_rendering_; | 273 bool was_background_rendering_; |
274 | 274 |
275 // Indicates whether or not media time is currently progressing or not. Must | 275 // Indicates whether or not media time is currently progressing or not. Must |
276 // only be accessed from |task_runner_|. | 276 // only be accessed from |task_runner_|. |
277 bool time_progressing_; | 277 bool time_progressing_; |
278 | 278 |
279 // Indicates that Render() should only render the first frame and then request | 279 // Indicates that Render() should only render the first frame and then request |
280 // that the sink be stopped. |posted_maybe_stop_after_first_paint_| is used | 280 // that the sink be stopped. |posted_maybe_stop_after_first_paint_| is used |
281 // to avoid repeated task posts. | 281 // to avoid repeated task posts. |
282 bool render_first_frame_and_stop_; | 282 bool render_first_frame_and_stop_; |
283 bool posted_maybe_stop_after_first_paint_; | 283 bool posted_maybe_stop_after_first_paint_; |
284 | 284 |
285 // Memory usage of |algorithm_| recorded during the last UpdateStats_Locked() | 285 // Memory usage of |algorithm_| recorded during the last UpdateStats_Locked() |
286 // call. | 286 // call. |
287 int64_t last_video_memory_usage_; | 287 int64_t last_video_memory_usage_; |
288 | 288 |
289 // NOTE: Weak pointers must be invalidated before all other member variables. | 289 // NOTE: Weak pointers must be invalidated before all other member variables. |
290 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; | 290 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; |
291 | 291 |
292 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); | 292 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); |
293 }; | 293 }; |
294 | 294 |
295 } // namespace media | 295 } // namespace media |
296 | 296 |
297 #endif // MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ | 297 #endif // MEDIA_RENDERERS_VIDEO_RENDERER_IMPL_H_ |
OLD | NEW |