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

Side by Side Diff: media/base/pipeline.cc

Issue 13813016: Remove reference counting from media::Demuxer and friends. (Closed) Base URL: http://git.chromium.org/chromium/src.git@vd_scoped
Patch Set: fix tools Created 7 years, 8 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
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/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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 playback_rate_(0.0f), 74 playback_rate_(0.0f),
75 clock_(new Clock(&default_clock_)), 75 clock_(new Clock(&default_clock_)),
76 waiting_for_clock_update_(false), 76 waiting_for_clock_update_(false),
77 status_(PIPELINE_OK), 77 status_(PIPELINE_OK),
78 has_audio_(false), 78 has_audio_(false),
79 has_video_(false), 79 has_video_(false),
80 state_(kCreated), 80 state_(kCreated),
81 audio_ended_(false), 81 audio_ended_(false),
82 video_ended_(false), 82 video_ended_(false),
83 audio_disabled_(false), 83 audio_disabled_(false),
84 demuxer_(NULL),
84 creation_time_(base::Time::Now()) { 85 creation_time_(base::Time::Now()) {
85 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated)); 86 media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(kCreated));
86 media_log_->AddEvent( 87 media_log_->AddEvent(
87 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED)); 88 media_log_->CreateEvent(MediaLogEvent::PIPELINE_CREATED));
88 } 89 }
89 90
90 Pipeline::~Pipeline() { 91 Pipeline::~Pipeline() {
91 // TODO(scherkus): Reenable after figuring out why this is firing, see 92 // TODO(scherkus): Reenable after figuring out why this is firing, see
92 // http://crbug.com/148405 93 // http://crbug.com/148405
93 #if 0 94 #if 0
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 bound_fns.Push(base::Bind( 578 bound_fns.Push(base::Bind(
578 &AudioRenderer::Flush, base::Unretained(audio_renderer_.get()))); 579 &AudioRenderer::Flush, base::Unretained(audio_renderer_.get())));
579 } 580 }
580 if (video_renderer_) { 581 if (video_renderer_) {
581 bound_fns.Push(base::Bind( 582 bound_fns.Push(base::Bind(
582 &VideoRenderer::Flush, base::Unretained(video_renderer_.get()))); 583 &VideoRenderer::Flush, base::Unretained(video_renderer_.get())));
583 } 584 }
584 585
585 // Seek demuxer. 586 // Seek demuxer.
586 bound_fns.Push(base::Bind( 587 bound_fns.Push(base::Bind(
587 &Demuxer::Seek, demuxer_, seek_timestamp)); 588 &Demuxer::Seek, base::Unretained(demuxer_), seek_timestamp));
588 589
589 // Preroll renderers. 590 // Preroll renderers.
590 if (audio_renderer_) { 591 if (audio_renderer_) {
591 bound_fns.Push(base::Bind( 592 bound_fns.Push(base::Bind(
592 &AudioRenderer::Preroll, base::Unretained(audio_renderer_.get()), 593 &AudioRenderer::Preroll, base::Unretained(audio_renderer_.get()),
593 seek_timestamp)); 594 seek_timestamp));
594 } 595 }
595 596
596 if (video_renderer_) { 597 if (video_renderer_) {
597 bound_fns.Push(base::Bind( 598 bound_fns.Push(base::Bind(
(...skipping 23 matching lines...) Expand all
621 } 622 }
622 623
623 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb); 624 pending_callbacks_ = SerialRunner::Run(bound_fns, done_cb);
624 } 625 }
625 626
626 void Pipeline::DoStop(const PipelineStatusCB& done_cb) { 627 void Pipeline::DoStop(const PipelineStatusCB& done_cb) {
627 DCHECK(message_loop_->BelongsToCurrentThread()); 628 DCHECK(message_loop_->BelongsToCurrentThread());
628 DCHECK(!pending_callbacks_.get()); 629 DCHECK(!pending_callbacks_.get());
629 SerialRunner::Queue bound_fns; 630 SerialRunner::Queue bound_fns;
630 631
631 if (demuxer_) 632 if (demuxer_) {
632 bound_fns.Push(base::Bind(&Demuxer::Stop, demuxer_)); 633 bound_fns.Push(base::Bind(
634 &Demuxer::Stop, base::Unretained(demuxer_)));
635 }
633 636
634 if (audio_renderer_) { 637 if (audio_renderer_) {
635 bound_fns.Push(base::Bind( 638 bound_fns.Push(base::Bind(
636 &AudioRenderer::Stop, base::Unretained(audio_renderer_.get()))); 639 &AudioRenderer::Stop, base::Unretained(audio_renderer_.get())));
637 } 640 }
638 641
639 if (video_renderer_) { 642 if (video_renderer_) {
640 bound_fns.Push(base::Bind( 643 bound_fns.Push(base::Bind(
641 &VideoRenderer::Stop, base::Unretained(video_renderer_.get()))); 644 &VideoRenderer::Stop, base::Unretained(video_renderer_.get())));
642 } 645 }
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 void Pipeline::InitializeDemuxer(const PipelineStatusCB& done_cb) { 909 void Pipeline::InitializeDemuxer(const PipelineStatusCB& done_cb) {
907 DCHECK(message_loop_->BelongsToCurrentThread()); 910 DCHECK(message_loop_->BelongsToCurrentThread());
908 911
909 demuxer_ = filter_collection_->GetDemuxer(); 912 demuxer_ = filter_collection_->GetDemuxer();
910 demuxer_->Initialize(this, done_cb); 913 demuxer_->Initialize(this, done_cb);
911 } 914 }
912 915
913 void Pipeline::InitializeAudioRenderer(const PipelineStatusCB& done_cb) { 916 void Pipeline::InitializeAudioRenderer(const PipelineStatusCB& done_cb) {
914 DCHECK(message_loop_->BelongsToCurrentThread()); 917 DCHECK(message_loop_->BelongsToCurrentThread());
915 918
916 scoped_refptr<DemuxerStream> stream =
917 demuxer_->GetStream(DemuxerStream::AUDIO);
918 DCHECK(stream);
919
920 audio_renderer_ = filter_collection_->GetAudioRenderer(); 919 audio_renderer_ = filter_collection_->GetAudioRenderer();
921 audio_renderer_->Initialize( 920 audio_renderer_->Initialize(
922 stream, 921 demuxer_->GetStream(DemuxerStream::AUDIO),
923 done_cb, 922 done_cb,
924 base::Bind(&Pipeline::OnUpdateStatistics, this), 923 base::Bind(&Pipeline::OnUpdateStatistics, this),
925 base::Bind(&Pipeline::OnAudioUnderflow, this), 924 base::Bind(&Pipeline::OnAudioUnderflow, this),
926 base::Bind(&Pipeline::OnAudioTimeUpdate, this), 925 base::Bind(&Pipeline::OnAudioTimeUpdate, this),
927 base::Bind(&Pipeline::OnAudioRendererEnded, this), 926 base::Bind(&Pipeline::OnAudioRendererEnded, this),
928 base::Bind(&Pipeline::OnAudioDisabled, this), 927 base::Bind(&Pipeline::OnAudioDisabled, this),
929 base::Bind(&Pipeline::SetError, this)); 928 base::Bind(&Pipeline::SetError, this));
930 } 929 }
931 930
932 void Pipeline::InitializeVideoRenderer(const PipelineStatusCB& done_cb) { 931 void Pipeline::InitializeVideoRenderer(const PipelineStatusCB& done_cb) {
933 DCHECK(message_loop_->BelongsToCurrentThread()); 932 DCHECK(message_loop_->BelongsToCurrentThread());
934 933
935 scoped_refptr<DemuxerStream> stream = 934 scoped_refptr<DemuxerStream> stream =
936 demuxer_->GetStream(DemuxerStream::VIDEO); 935 demuxer_->GetStream(DemuxerStream::VIDEO);
937 DCHECK(stream);
938 936
939 { 937 {
940 // Get an initial natural size so we have something when we signal 938 // Get an initial natural size so we have something when we signal
941 // the kHaveMetadata buffering state. 939 // the kHaveMetadata buffering state.
942 base::AutoLock l(lock_); 940 base::AutoLock l(lock_);
943 natural_size_ = stream->video_decoder_config().natural_size(); 941 natural_size_ = stream->video_decoder_config().natural_size();
944 } 942 }
945 943
946 video_renderer_ = filter_collection_->GetVideoRenderer(); 944 video_renderer_ = filter_collection_->GetVideoRenderer();
947 video_renderer_->Initialize( 945 video_renderer_->Initialize(
(...skipping 25 matching lines...) Expand all
973 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() { 971 void Pipeline::StartClockIfWaitingForTimeUpdate_Locked() {
974 lock_.AssertAcquired(); 972 lock_.AssertAcquired();
975 if (!waiting_for_clock_update_) 973 if (!waiting_for_clock_update_)
976 return; 974 return;
977 975
978 waiting_for_clock_update_ = false; 976 waiting_for_clock_update_ = false;
979 clock_->Play(); 977 clock_->Play();
980 } 978 }
981 979
982 } // namespace media 980 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698