| 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_FILTERS_VIDEO_RENDERER_IMPL_H_ | 5 #ifndef MEDIA_FILTERS_VIDEO_RENDERER_IMPL_H_ |
| 6 #define MEDIA_FILTERS_VIDEO_RENDERER_IMPL_H_ | 6 #define MEDIA_FILTERS_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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 const StatisticsCB& statistics_cb, | 62 const StatisticsCB& statistics_cb, |
| 63 const TimeCB& max_time_cb, | 63 const TimeCB& max_time_cb, |
| 64 const BufferingStateCB& buffering_state_cb, | 64 const BufferingStateCB& buffering_state_cb, |
| 65 const base::Closure& ended_cb, | 65 const base::Closure& ended_cb, |
| 66 const PipelineStatusCB& error_cb, | 66 const PipelineStatusCB& error_cb, |
| 67 const TimeDeltaCB& get_time_cb, | 67 const TimeDeltaCB& get_time_cb, |
| 68 const TimeDeltaCB& get_duration_cb) OVERRIDE; | 68 const TimeDeltaCB& get_duration_cb) OVERRIDE; |
| 69 virtual void Flush(const base::Closure& callback) OVERRIDE; | 69 virtual void Flush(const base::Closure& callback) OVERRIDE; |
| 70 virtual void StartPlayingFrom(base::TimeDelta timestamp) OVERRIDE; | 70 virtual void StartPlayingFrom(base::TimeDelta timestamp) OVERRIDE; |
| 71 virtual void Stop(const base::Closure& callback) OVERRIDE; | 71 virtual void Stop(const base::Closure& callback) OVERRIDE; |
| 72 virtual void SetPlaybackRate(float playback_rate) OVERRIDE; | |
| 73 | 72 |
| 74 // PlatformThread::Delegate implementation. | 73 // PlatformThread::Delegate implementation. |
| 75 virtual void ThreadMain() OVERRIDE; | 74 virtual void ThreadMain() OVERRIDE; |
| 76 | 75 |
| 77 private: | 76 private: |
| 78 // Callback for |video_frame_stream_| initialization. | 77 // Callback for |video_frame_stream_| initialization. |
| 79 void OnVideoFrameStreamInitialized(bool success); | 78 void OnVideoFrameStreamInitialized(bool success); |
| 80 | 79 |
| 81 // Callback for |video_frame_stream_| to deliver decoded video frames and | 80 // Callback for |video_frame_stream_| to deliver decoded video frames and |
| 82 // report video decoding status. | 81 // report video decoding status. |
| 83 void FrameReady(VideoFrameStream::Status status, | 82 void FrameReady(VideoFrameStream::Status status, |
| 84 const scoped_refptr<VideoFrame>& frame); | 83 const scoped_refptr<VideoFrame>& frame); |
| 85 | 84 |
| 86 // Helper method for adding a frame to |ready_frames_|. | 85 // Helper method for adding a frame to |ready_frames_|. |
| 87 void AddReadyFrame_Locked(const scoped_refptr<VideoFrame>& frame); | 86 void AddReadyFrame_Locked(const scoped_refptr<VideoFrame>& frame); |
| 88 | 87 |
| 89 // Helper method that schedules an asynchronous read from the | 88 // Helper method that schedules an asynchronous read from the |
| 90 // |video_frame_stream_| as long as there isn't a pending read and we have | 89 // |video_frame_stream_| as long as there isn't a pending read and we have |
| 91 // capacity. | 90 // capacity. |
| 92 void AttemptRead(); | 91 void AttemptRead(); |
| 93 void AttemptRead_Locked(); | 92 void AttemptRead_Locked(); |
| 94 | 93 |
| 95 // Called when VideoFrameStream::Reset() completes. | 94 // Called when VideoFrameStream::Reset() completes. |
| 96 void OnVideoFrameStreamResetDone(); | 95 void OnVideoFrameStreamResetDone(); |
| 97 | 96 |
| 98 // Calculates the duration to sleep for based on |last_timestamp_|, | |
| 99 // the next frame timestamp (may be NULL), and the provided playback rate. | |
| 100 // | |
| 101 // We don't use |playback_rate_| to avoid locking. | |
| 102 base::TimeDelta CalculateSleepDuration( | |
| 103 const scoped_refptr<VideoFrame>& next_frame, | |
| 104 float playback_rate); | |
| 105 | |
| 106 // Helper function that flushes the buffers when a Stop() or error occurs. | 97 // Helper function that flushes the buffers when a Stop() or error occurs. |
| 107 void DoStopOrError_Locked(); | 98 void DoStopOrError_Locked(); |
| 108 | 99 |
| 109 // Runs |paint_cb_| with the next frame from |ready_frames_|. | 100 // Runs |paint_cb_| with the next frame from |ready_frames_|. |
| 110 // | 101 // |
| 111 // A read is scheduled to replace the frame. | 102 // A read is scheduled to replace the frame. |
| 112 void PaintNextReadyFrame_Locked(); | 103 void PaintNextReadyFrame_Locked(); |
| 113 | 104 |
| 114 // Drops the next frame from |ready_frames_| and runs |statistics_cb_|. | 105 // Drops the next frame from |ready_frames_| and runs |statistics_cb_|. |
| 115 // | 106 // |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 | 170 |
| 180 // Video thread handle. | 171 // Video thread handle. |
| 181 base::PlatformThreadHandle thread_; | 172 base::PlatformThreadHandle thread_; |
| 182 | 173 |
| 183 // Keep track of the outstanding read on the VideoFrameStream. Flushing can | 174 // Keep track of the outstanding read on the VideoFrameStream. Flushing can |
| 184 // only complete once the read has completed. | 175 // only complete once the read has completed. |
| 185 bool pending_read_; | 176 bool pending_read_; |
| 186 | 177 |
| 187 bool drop_frames_; | 178 bool drop_frames_; |
| 188 | 179 |
| 189 float playback_rate_; | |
| 190 | |
| 191 BufferingState buffering_state_; | 180 BufferingState buffering_state_; |
| 192 | 181 |
| 193 // Playback operation callbacks. | 182 // Playback operation callbacks. |
| 194 base::Closure flush_cb_; | 183 base::Closure flush_cb_; |
| 195 | 184 |
| 196 // Event callbacks. | 185 // Event callbacks. |
| 197 PipelineStatusCB init_cb_; | 186 PipelineStatusCB init_cb_; |
| 198 StatisticsCB statistics_cb_; | 187 StatisticsCB statistics_cb_; |
| 199 TimeCB max_time_cb_; | 188 TimeCB max_time_cb_; |
| 200 BufferingStateCB buffering_state_cb_; | 189 BufferingStateCB buffering_state_cb_; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 220 | 209 |
| 221 // NOTE: Weak pointers must be invalidated before all other member variables. | 210 // NOTE: Weak pointers must be invalidated before all other member variables. |
| 222 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; | 211 base::WeakPtrFactory<VideoRendererImpl> weak_factory_; |
| 223 | 212 |
| 224 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); | 213 DISALLOW_COPY_AND_ASSIGN(VideoRendererImpl); |
| 225 }; | 214 }; |
| 226 | 215 |
| 227 } // namespace media | 216 } // namespace media |
| 228 | 217 |
| 229 #endif // MEDIA_FILTERS_VIDEO_RENDERER_IMPL_H_ | 218 #endif // MEDIA_FILTERS_VIDEO_RENDERER_IMPL_H_ |
| OLD | NEW |