| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |