| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "media/base/pipeline.h" | 5 #include "media/base/pipeline.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1013 | 1013 |
| 1014 base::AutoLock auto_lock(lock_); | 1014 base::AutoLock auto_lock(lock_); |
| 1015 // We use audio stream to update the clock. So if there is such a stream, | 1015 // We use audio stream to update the clock. So if there is such a stream, |
| 1016 // we pause the clock until we receive a valid timestamp. | 1016 // we pause the clock until we receive a valid timestamp. |
| 1017 waiting_for_clock_update_ = true; | 1017 waiting_for_clock_update_ = true; |
| 1018 if (!has_audio_) | 1018 if (!has_audio_) |
| 1019 StartClockIfWaitingForTimeUpdate_Locked(); | 1019 StartClockIfWaitingForTimeUpdate_Locked(); |
| 1020 | 1020 |
| 1021 // Start monitoring rate of downloading. | 1021 // Start monitoring rate of downloading. |
| 1022 int bitrate = 0; | 1022 int bitrate = 0; |
| 1023 if (demuxer_.get()) | 1023 if (demuxer_.get()) { |
| 1024 bitrate = demuxer_->GetBitrate(); | 1024 bitrate = demuxer_->GetBitrate(); |
| 1025 local_source_ = demuxer_->IsLocalSource(); |
| 1026 streaming_ = !demuxer_->IsSeekable(); |
| 1027 } |
| 1025 // Needs to be locked because most other calls to |download_rate_monitor_| | 1028 // Needs to be locked because most other calls to |download_rate_monitor_| |
| 1026 // occur on the renderer thread. | 1029 // occur on the renderer thread. |
| 1027 download_rate_monitor_.Start( | 1030 download_rate_monitor_.Start( |
| 1028 base::Bind(&Pipeline::OnCanPlayThrough, this), | 1031 base::Bind(&Pipeline::OnCanPlayThrough, this), |
| 1029 bitrate, streaming_, local_source_); | 1032 bitrate, streaming_, local_source_); |
| 1030 download_rate_monitor_.SetBufferedBytes(buffered_bytes_, base::Time::Now()); | 1033 download_rate_monitor_.SetBufferedBytes(buffered_bytes_, base::Time::Now()); |
| 1031 | 1034 |
| 1032 if (IsPipelineStopPending()) { | 1035 if (IsPipelineStopPending()) { |
| 1033 // We had a pending stop request need to be honored right now. | 1036 // We had a pending stop request need to be honored right now. |
| 1034 TearDownPipeline(); | 1037 TearDownPipeline(); |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1129 SetError(status); | 1132 SetError(status); |
| 1130 return; | 1133 return; |
| 1131 } | 1134 } |
| 1132 | 1135 |
| 1133 if (!demuxer) { | 1136 if (!demuxer) { |
| 1134 SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); | 1137 SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
| 1135 return; | 1138 return; |
| 1136 } | 1139 } |
| 1137 | 1140 |
| 1138 demuxer_ = demuxer; | 1141 demuxer_ = demuxer; |
| 1139 // Set fields obtained from demuxer. | |
| 1140 local_source_ = demuxer_->IsLocalSource(); | |
| 1141 streaming_ = !demuxer_->IsSeekable(); | |
| 1142 demuxer_->set_host(this); | 1142 demuxer_->set_host(this); |
| 1143 | 1143 |
| 1144 { | 1144 { |
| 1145 base::AutoLock auto_lock(lock_); | 1145 base::AutoLock auto_lock(lock_); |
| 1146 // We do not want to start the clock running. We only want to set the base | 1146 // We do not want to start the clock running. We only want to set the base |
| 1147 // media time so our timestamp calculations will be correct. | 1147 // media time so our timestamp calculations will be correct. |
| 1148 clock_->SetTime(demuxer_->GetStartTime()); | 1148 clock_->SetTime(demuxer_->GetStartTime()); |
| 1149 } | 1149 } |
| 1150 | 1150 |
| 1151 OnFilterInitialize(PIPELINE_OK); | 1151 OnFilterInitialize(PIPELINE_OK); |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1413 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { | 1413 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { |
| 1414 lock_.AssertAcquired(); | 1414 lock_.AssertAcquired(); |
| 1415 if (!waiting_for_clock_update_) | 1415 if (!waiting_for_clock_update_) |
| 1416 return; | 1416 return; |
| 1417 | 1417 |
| 1418 waiting_for_clock_update_ = false; | 1418 waiting_for_clock_update_ = false; |
| 1419 clock_->Play(); | 1419 clock_->Play(); |
| 1420 } | 1420 } |
| 1421 | 1421 |
| 1422 } // namespace media | 1422 } // namespace media |
| OLD | NEW |