OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "chromecast/media/cma/base/buffering_frame_provider.h" | 5 #include "chromecast/media/cma/base/buffering_frame_provider.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_to_current_loop.h" |
8 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
9 #include "chromecast/media/cma/base/buffering_state.h" | 10 #include "chromecast/media/cma/base/buffering_state.h" |
10 #include "chromecast/media/cma/base/decoder_buffer_base.h" | 11 #include "chromecast/media/cma/base/decoder_buffer_base.h" |
11 #include "media/base/bind_to_current_loop.h" | |
12 #include "media/base/buffers.h" | 12 #include "media/base/buffers.h" |
13 | 13 |
14 namespace chromecast { | 14 namespace chromecast { |
15 namespace media { | 15 namespace media { |
16 | 16 |
17 BufferingFrameProvider::BufferWithConfig::BufferWithConfig( | 17 BufferingFrameProvider::BufferWithConfig::BufferWithConfig( |
18 const scoped_refptr<DecoderBufferBase>& buffer, | 18 const scoped_refptr<DecoderBufferBase>& buffer, |
19 const ::media::AudioDecoderConfig& audio_config, | 19 const ::media::AudioDecoderConfig& audio_config, |
20 const ::media::VideoDecoderConfig& video_config) | 20 const ::media::VideoDecoderConfig& video_config) |
21 : buffer_(buffer), | 21 : buffer_(buffer), |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 } | 107 } |
108 | 108 |
109 void BufferingFrameProvider::RequestBufferIfNeeded() { | 109 void BufferingFrameProvider::RequestBufferIfNeeded() { |
110 if (is_pending_request_) | 110 if (is_pending_request_) |
111 return; | 111 return; |
112 | 112 |
113 if (is_eos_ || total_buffer_size_ >= max_buffer_size_) | 113 if (is_eos_ || total_buffer_size_ >= max_buffer_size_) |
114 return; | 114 return; |
115 | 115 |
116 is_pending_request_ = true; | 116 is_pending_request_ = true; |
117 coded_frame_provider_->Read(BindToCurrentLoop( | 117 coded_frame_provider_->Read(base::BindToCurrentLoop( |
118 base::Bind(&BufferingFrameProvider::OnNewBuffer, weak_this_))); | 118 base::Bind(&BufferingFrameProvider::OnNewBuffer, weak_this_))); |
119 } | 119 } |
120 | 120 |
121 void BufferingFrameProvider::CompleteReadIfNeeded() { | 121 void BufferingFrameProvider::CompleteReadIfNeeded() { |
122 if (read_cb_.is_null()) | 122 if (read_cb_.is_null()) |
123 return; | 123 return; |
124 | 124 |
125 if (buffer_list_.empty()) | 125 if (buffer_list_.empty()) |
126 return; | 126 return; |
127 | 127 |
128 BufferWithConfig buffer_with_config(buffer_list_.front()); | 128 BufferWithConfig buffer_with_config(buffer_list_.front()); |
129 buffer_list_.pop_front(); | 129 buffer_list_.pop_front(); |
130 if (!buffer_with_config.buffer()->end_of_stream()) | 130 if (!buffer_with_config.buffer()->end_of_stream()) |
131 total_buffer_size_ -= buffer_with_config.buffer()->data_size(); | 131 total_buffer_size_ -= buffer_with_config.buffer()->data_size(); |
132 | 132 |
133 base::ResetAndReturn(&read_cb_).Run( | 133 base::ResetAndReturn(&read_cb_).Run( |
134 buffer_with_config.buffer(), | 134 buffer_with_config.buffer(), |
135 buffer_with_config.audio_config(), | 135 buffer_with_config.audio_config(), |
136 buffer_with_config.video_config()); | 136 buffer_with_config.video_config()); |
137 } | 137 } |
138 | 138 |
139 } // namespace media | 139 } // namespace media |
140 } // namespace chromecast | 140 } // namespace chromecast |
OLD | NEW |