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 |