Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1406)

Side by Side Diff: media/filters/ffmpeg_demuxer.cc

Issue 10829108: Cap sourceBuffered() on duration and truncate duration on EoS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase ToT Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/ffmpeg_demuxer.h" 5 #include "media/filters/ffmpeg_demuxer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 base::AutoLock auto_lock(lock_); 230 base::AutoLock auto_lock(lock_);
231 DCHECK(stopped_); 231 DCHECK(stopped_);
232 DCHECK(read_queue_.empty()); 232 DCHECK(read_queue_.empty());
233 DCHECK(buffer_queue_.empty()); 233 DCHECK(buffer_queue_.empty());
234 } 234 }
235 235
236 base::TimeDelta FFmpegDemuxerStream::GetElapsedTime() const { 236 base::TimeDelta FFmpegDemuxerStream::GetElapsedTime() const {
237 return ConvertStreamTimestamp(stream_->time_base, stream_->cur_dts); 237 return ConvertStreamTimestamp(stream_->time_base, stream_->cur_dts);
238 } 238 }
239 239
240 Ranges<base::TimeDelta> FFmpegDemuxerStream::GetBufferedRanges() { 240 Ranges<base::TimeDelta> FFmpegDemuxerStream::GetBufferedRanges() const {
241 base::AutoLock auto_lock(lock_); 241 base::AutoLock auto_lock(lock_);
242 return buffered_ranges_; 242 return buffered_ranges_;
243 } 243 }
244 244
245 // static 245 // static
246 base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp( 246 base::TimeDelta FFmpegDemuxerStream::ConvertStreamTimestamp(
247 const AVRational& time_base, int64 timestamp) { 247 const AVRational& time_base, int64 timestamp) {
248 if (timestamp == static_cast<int64>(AV_NOPTS_VALUE)) 248 if (timestamp == static_cast<int64>(AV_NOPTS_VALUE))
249 return kNoTimestamp(); 249 return kNoTimestamp();
250 250
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 } 316 }
317 317
318 void FFmpegDemuxer::Initialize(DemuxerHost* host, 318 void FFmpegDemuxer::Initialize(DemuxerHost* host,
319 const PipelineStatusCB& status_cb) { 319 const PipelineStatusCB& status_cb) {
320 message_loop_->PostTask(FROM_HERE, base::Bind( 320 message_loop_->PostTask(FROM_HERE, base::Bind(
321 &FFmpegDemuxer::InitializeTask, this, host, status_cb)); 321 &FFmpegDemuxer::InitializeTask, this, host, status_cb));
322 } 322 }
323 323
324 scoped_refptr<DemuxerStream> FFmpegDemuxer::GetStream( 324 scoped_refptr<DemuxerStream> FFmpegDemuxer::GetStream(
325 DemuxerStream::Type type) { 325 DemuxerStream::Type type) {
326 StreamVector::iterator iter; 326 return GetFFmpegStream(type);
327 }
328
329 scoped_refptr<FFmpegDemuxerStream> FFmpegDemuxer::GetFFmpegStream(
330 DemuxerStream::Type type) const {
331 StreamVector::const_iterator iter;
327 for (iter = streams_.begin(); iter != streams_.end(); ++iter) { 332 for (iter = streams_.begin(); iter != streams_.end(); ++iter) {
328 if (*iter && (*iter)->type() == type) { 333 if (*iter && (*iter)->type() == type) {
329 return *iter; 334 return *iter;
330 } 335 }
331 } 336 }
332 return NULL; 337 return NULL;
333 } 338 }
334 339
335 base::TimeDelta FFmpegDemuxer::GetStartTime() const { 340 base::TimeDelta FFmpegDemuxer::GetStartTime() const {
336 return start_time_; 341 return start_time_;
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 715 }
711 716
712 void FFmpegDemuxer::SignalReadCompleted(int size) { 717 void FFmpegDemuxer::SignalReadCompleted(int size) {
713 last_read_bytes_ = size; 718 last_read_bytes_ = size;
714 read_event_.Signal(); 719 read_event_.Signal();
715 } 720 }
716 721
717 void FFmpegDemuxer::NotifyBufferingChanged() { 722 void FFmpegDemuxer::NotifyBufferingChanged() {
718 DCHECK_EQ(MessageLoop::current(), message_loop_); 723 DCHECK_EQ(MessageLoop::current(), message_loop_);
719 Ranges<base::TimeDelta> buffered; 724 Ranges<base::TimeDelta> buffered;
720 scoped_refptr<DemuxerStream> audio = 725 scoped_refptr<FFmpegDemuxerStream> audio =
721 audio_disabled_ ? NULL : GetStream(DemuxerStream::AUDIO); 726 audio_disabled_ ? NULL : GetFFmpegStream(DemuxerStream::AUDIO);
722 scoped_refptr<DemuxerStream> video = GetStream(DemuxerStream::VIDEO); 727 scoped_refptr<FFmpegDemuxerStream> video =
728 GetFFmpegStream(DemuxerStream::VIDEO);
723 if (audio && video) { 729 if (audio && video) {
724 buffered = audio->GetBufferedRanges().IntersectionWith( 730 buffered = audio->GetBufferedRanges().IntersectionWith(
725 video->GetBufferedRanges()); 731 video->GetBufferedRanges());
726 } else if (audio) { 732 } else if (audio) {
727 buffered = audio->GetBufferedRanges(); 733 buffered = audio->GetBufferedRanges();
728 } else if (video) { 734 } else if (video) {
729 buffered = video->GetBufferedRanges(); 735 buffered = video->GetBufferedRanges();
730 } 736 }
731 for (size_t i = 0; i < buffered.size(); ++i) 737 for (size_t i = 0; i < buffered.size(); ++i)
732 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i)); 738 host_->AddBufferedTimeRange(buffered.start(i), buffered.end(i));
733 } 739 }
734 740
735 } // namespace media 741 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/ffmpeg_demuxer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698