| 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/filters/chunk_demuxer.h" | 5 #include "media/filters/chunk_demuxer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <limits> | 9 #include <limits> |
| 10 | 10 |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 | 144 |
| 145 void SourceState::AdjustBufferTimestamps( | 145 void SourceState::AdjustBufferTimestamps( |
| 146 const StreamParser::BufferQueue& buffers) { | 146 const StreamParser::BufferQueue& buffers) { |
| 147 if (timestamp_offset_ == TimeDelta()) | 147 if (timestamp_offset_ == TimeDelta()) |
| 148 return; | 148 return; |
| 149 | 149 |
| 150 for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); | 150 for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); |
| 151 itr != buffers.end(); ++itr) { | 151 itr != buffers.end(); ++itr) { |
| 152 (*itr)->SetDecodeTimestamp( | 152 (*itr)->SetDecodeTimestamp( |
| 153 (*itr)->GetDecodeTimestamp() + timestamp_offset_); | 153 (*itr)->GetDecodeTimestamp() + timestamp_offset_); |
| 154 (*itr)->SetTimestamp((*itr)->GetTimestamp() + timestamp_offset_); | 154 (*itr)->set_timestamp((*itr)->timestamp() + timestamp_offset_); |
| 155 } | 155 } |
| 156 } | 156 } |
| 157 | 157 |
| 158 void SourceState::OnNewMediaSegment( | 158 void SourceState::OnNewMediaSegment( |
| 159 const StreamParser::NewMediaSegmentCB& new_segment_cb, | 159 const StreamParser::NewMediaSegmentCB& new_segment_cb, |
| 160 TimeDelta timestamp) { | 160 TimeDelta timestamp) { |
| 161 DCHECK(timestamp != kNoTimestamp()); | 161 DCHECK(timestamp != kNoTimestamp()); |
| 162 DVLOG(2) << "OnNewMediaSegment(" << timestamp.InSecondsF() << ")"; | 162 DVLOG(2) << "OnNewMediaSegment(" << timestamp.InSecondsF() << ")"; |
| 163 | 163 |
| 164 can_update_offset_ = false; | 164 can_update_offset_ = false; |
| (...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1209 TextTrack* text_track, | 1209 TextTrack* text_track, |
| 1210 const StreamParser::BufferQueue& buffers) { | 1210 const StreamParser::BufferQueue& buffers) { |
| 1211 lock_.AssertAcquired(); | 1211 lock_.AssertAcquired(); |
| 1212 DCHECK_NE(state_, SHUTDOWN); | 1212 DCHECK_NE(state_, SHUTDOWN); |
| 1213 | 1213 |
| 1214 // TODO(matthewjheaney): IncreaseDurationIfNecessary | 1214 // TODO(matthewjheaney): IncreaseDurationIfNecessary |
| 1215 | 1215 |
| 1216 for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); | 1216 for (StreamParser::BufferQueue::const_iterator itr = buffers.begin(); |
| 1217 itr != buffers.end(); ++itr) { | 1217 itr != buffers.end(); ++itr) { |
| 1218 const StreamParserBuffer* const buffer = itr->get(); | 1218 const StreamParserBuffer* const buffer = itr->get(); |
| 1219 const base::TimeDelta start = buffer->GetTimestamp(); | 1219 const base::TimeDelta start = buffer->timestamp(); |
| 1220 const base::TimeDelta end = start + buffer->GetDuration(); | 1220 const base::TimeDelta end = start + buffer->duration(); |
| 1221 | 1221 |
| 1222 std::string id, settings, content; | 1222 std::string id, settings, content; |
| 1223 | 1223 |
| 1224 WebMWebVTTParser::Parse(buffer->GetData(), | 1224 WebMWebVTTParser::Parse(buffer->data(), |
| 1225 buffer->GetDataSize(), | 1225 buffer->data_size(), |
| 1226 &id, &settings, &content); | 1226 &id, &settings, &content); |
| 1227 | 1227 |
| 1228 text_track->addWebVTTCue(start, end, id, content, settings); | 1228 text_track->addWebVTTCue(start, end, id, content, settings); |
| 1229 } | 1229 } |
| 1230 | 1230 |
| 1231 return true; | 1231 return true; |
| 1232 } | 1232 } |
| 1233 | 1233 |
| 1234 // TODO(acolwell): Remove bool from StreamParser::NeedKeyCB so that | 1234 // TODO(acolwell): Remove bool from StreamParser::NeedKeyCB so that |
| 1235 // this method can be removed and need_key_cb_ can be passed directly | 1235 // this method can be removed and need_key_cb_ can be passed directly |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1265 DCHECK(duration_ != new_duration); | 1265 DCHECK(duration_ != new_duration); |
| 1266 user_specified_duration_ = -1; | 1266 user_specified_duration_ = -1; |
| 1267 duration_ = new_duration; | 1267 duration_ = new_duration; |
| 1268 host_->SetDuration(new_duration); | 1268 host_->SetDuration(new_duration); |
| 1269 } | 1269 } |
| 1270 | 1270 |
| 1271 void ChunkDemuxer::IncreaseDurationIfNecessary( | 1271 void ChunkDemuxer::IncreaseDurationIfNecessary( |
| 1272 const StreamParser::BufferQueue& buffers, | 1272 const StreamParser::BufferQueue& buffers, |
| 1273 ChunkDemuxerStream* stream) { | 1273 ChunkDemuxerStream* stream) { |
| 1274 DCHECK(!buffers.empty()); | 1274 DCHECK(!buffers.empty()); |
| 1275 if (buffers.back()->GetTimestamp() <= duration_) | 1275 if (buffers.back()->timestamp() <= duration_) |
| 1276 return; | 1276 return; |
| 1277 | 1277 |
| 1278 Ranges<TimeDelta> ranges = stream->GetBufferedRanges(kInfiniteDuration()); | 1278 Ranges<TimeDelta> ranges = stream->GetBufferedRanges(kInfiniteDuration()); |
| 1279 DCHECK_GT(ranges.size(), 0u); | 1279 DCHECK_GT(ranges.size(), 0u); |
| 1280 | 1280 |
| 1281 base::TimeDelta last_timestamp_buffered = ranges.end(ranges.size() - 1); | 1281 base::TimeDelta last_timestamp_buffered = ranges.end(ranges.size() - 1); |
| 1282 if (last_timestamp_buffered > duration_) | 1282 if (last_timestamp_buffered > duration_) |
| 1283 UpdateDuration(last_timestamp_buffered); | 1283 UpdateDuration(last_timestamp_buffered); |
| 1284 } | 1284 } |
| 1285 | 1285 |
| 1286 void ChunkDemuxer::DecreaseDurationIfNecessary() { | 1286 void ChunkDemuxer::DecreaseDurationIfNecessary() { |
| 1287 Ranges<TimeDelta> ranges = GetBufferedRanges(); | 1287 Ranges<TimeDelta> ranges = GetBufferedRanges(); |
| 1288 if (ranges.size() == 0u) | 1288 if (ranges.size() == 0u) |
| 1289 return; | 1289 return; |
| 1290 | 1290 |
| 1291 base::TimeDelta last_timestamp_buffered = ranges.end(ranges.size() - 1); | 1291 base::TimeDelta last_timestamp_buffered = ranges.end(ranges.size() - 1); |
| 1292 if (last_timestamp_buffered < duration_) | 1292 if (last_timestamp_buffered < duration_) |
| 1293 UpdateDuration(last_timestamp_buffered); | 1293 UpdateDuration(last_timestamp_buffered); |
| 1294 } | 1294 } |
| 1295 | 1295 |
| 1296 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges() const { | 1296 Ranges<TimeDelta> ChunkDemuxer::GetBufferedRanges() const { |
| 1297 if (audio_ && !video_) | 1297 if (audio_ && !video_) |
| 1298 return audio_->GetBufferedRanges(duration_); | 1298 return audio_->GetBufferedRanges(duration_); |
| 1299 else if (!audio_ && video_) | 1299 else if (!audio_ && video_) |
| 1300 return video_->GetBufferedRanges(duration_); | 1300 return video_->GetBufferedRanges(duration_); |
| 1301 return ComputeIntersection(); | 1301 return ComputeIntersection(); |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 } // namespace media | 1304 } // namespace media |
| OLD | NEW |