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

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

Issue 6969026: Convert Filter::Seek() to use new callback system. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More CR fixes Created 9 years, 7 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/base/pipeline_impl.h ('k') | media/base/pipeline_impl_unittest.cc » ('j') | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // TODO(scherkus): clean up PipelineImpl... too many crazy function names, 5 // TODO(scherkus): clean up PipelineImpl... too many crazy function names,
6 // potential deadlocks, etc... 6 // potential deadlocks, etc...
7 7
8 #include "media/base/pipeline_impl.h" 8 #include "media/base/pipeline_impl.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
11 11
12 #include "base/bind.h"
12 #include "base/callback.h" 13 #include "base/callback.h"
13 #include "base/compiler_specific.h" 14 #include "base/compiler_specific.h"
14 #include "base/stl_util-inl.h" 15 #include "base/stl_util-inl.h"
15 #include "base/synchronization/condition_variable.h" 16 #include "base/synchronization/condition_variable.h"
16 #include "media/filters/rtc_video_decoder.h" 17 #include "media/filters/rtc_video_decoder.h"
17 #include "media/base/clock.h" 18 #include "media/base/clock.h"
18 #include "media/base/filter_collection.h" 19 #include "media/base/filter_collection.h"
19 #include "media/base/media_format.h" 20 #include "media/base/media_format.h"
20 21
21 namespace media { 22 namespace media {
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 message_loop_->PostTask(FROM_HERE, 569 message_loop_->PostTask(FROM_HERE,
569 NewRunnableMethod(this, &PipelineImpl::InitializeTask)); 570 NewRunnableMethod(this, &PipelineImpl::InitializeTask));
570 } 571 }
571 572
572 // Called from any thread. 573 // Called from any thread.
573 void PipelineImpl::OnFilterStateTransition() { 574 void PipelineImpl::OnFilterStateTransition() {
574 message_loop_->PostTask(FROM_HERE, 575 message_loop_->PostTask(FROM_HERE,
575 NewRunnableMethod(this, &PipelineImpl::FilterStateTransitionTask)); 576 NewRunnableMethod(this, &PipelineImpl::FilterStateTransitionTask));
576 } 577 }
577 578
579 // Called from any thread.
580 // This method makes the FilterStatusCB behave like a FilterCallback. It
581 // makes it look like a host()->SetError() call followed by a call to
582 // OnFilterStateTransition() when errors occur.
583 //
584 // TODO: Revisit this code when SetError() is removed from FilterHost and
585 // all the FilterCallbacks are converted to FilterStatusCB.
586 void PipelineImpl::OnFilterStateTransitionWithStatus(PipelineStatus status) {
587 if (status != PIPELINE_OK)
588 SetError(status);
589 OnFilterStateTransition();
590 }
591
578 void PipelineImpl::OnTeardownStateTransition() { 592 void PipelineImpl::OnTeardownStateTransition() {
579 message_loop_->PostTask(FROM_HERE, 593 message_loop_->PostTask(FROM_HERE,
580 NewRunnableMethod(this, &PipelineImpl::TeardownStateTransitionTask)); 594 NewRunnableMethod(this, &PipelineImpl::TeardownStateTransitionTask));
581 } 595 }
582 596
583 // Called from any thread. 597 // Called from any thread.
584 void PipelineImpl::OnUpdateStatistics(const PipelineStatistics& stats) { 598 void PipelineImpl::OnUpdateStatistics(const PipelineStatistics& stats) {
585 base::AutoLock auto_lock(lock_); 599 base::AutoLock auto_lock(lock_);
586 statistics_.audio_bytes_decoded += stats.audio_bytes_decoded; 600 statistics_.audio_bytes_decoded += stats.audio_bytes_decoded;
587 statistics_.video_bytes_decoded += stats.video_bytes_decoded; 601 statistics_.video_bytes_decoded += stats.video_bytes_decoded;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 // Initialization was successful, we are now considered paused, so it's safe 717 // Initialization was successful, we are now considered paused, so it's safe
704 // to set the initial playback rate and volume. 718 // to set the initial playback rate and volume.
705 PreloadChangedTask(GetPreload()); 719 PreloadChangedTask(GetPreload());
706 PlaybackRateChangedTask(GetPlaybackRate()); 720 PlaybackRateChangedTask(GetPlaybackRate());
707 VolumeChangedTask(GetVolume()); 721 VolumeChangedTask(GetVolume());
708 722
709 // Fire the seek request to get the filters to preroll. 723 // Fire the seek request to get the filters to preroll.
710 seek_pending_ = true; 724 seek_pending_ = true;
711 set_state(kSeeking); 725 set_state(kSeeking);
712 seek_timestamp_ = base::TimeDelta(); 726 seek_timestamp_ = base::TimeDelta();
713 pipeline_filter_->Seek(seek_timestamp_, 727 pipeline_filter_->Seek(
714 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 728 seek_timestamp_,
729 base::Bind(&PipelineImpl::OnFilterStateTransitionWithStatus, this));
715 } 730 }
716 } 731 }
717 732
718 // This method is called as a result of the client calling Pipeline::Stop() or 733 // This method is called as a result of the client calling Pipeline::Stop() or
719 // as the result of an error condition. 734 // as the result of an error condition.
720 // We stop the filters in the reverse order. 735 // We stop the filters in the reverse order.
721 // 736 //
722 // TODO(scherkus): beware! this can get posted multiple times since we post 737 // TODO(scherkus): beware! this can get posted multiple times since we post
723 // Stop() tasks even if we've already stopped. Perhaps this should no-op for 738 // Stop() tasks even if we've already stopped. Perhaps this should no-op for
724 // additional calls, however most of this logic will be changing. 739 // additional calls, however most of this logic will be changing.
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 // Carry out the action for the current state. 960 // Carry out the action for the current state.
946 if (TransientState(state_)) { 961 if (TransientState(state_)) {
947 if (state_ == kPausing) { 962 if (state_ == kPausing) {
948 pipeline_filter_->Pause( 963 pipeline_filter_->Pause(
949 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 964 NewCallback(this, &PipelineImpl::OnFilterStateTransition));
950 } else if (state_ == kFlushing) { 965 } else if (state_ == kFlushing) {
951 pipeline_filter_->Flush( 966 pipeline_filter_->Flush(
952 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 967 NewCallback(this, &PipelineImpl::OnFilterStateTransition));
953 } else if (state_ == kSeeking) { 968 } else if (state_ == kSeeking) {
954 pipeline_filter_->Seek(seek_timestamp_, 969 pipeline_filter_->Seek(seek_timestamp_,
955 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 970 base::Bind(&PipelineImpl::OnFilterStateTransitionWithStatus, this));
956 } else if (state_ == kStarting) { 971 } else if (state_ == kStarting) {
957 pipeline_filter_->Play( 972 pipeline_filter_->Play(
958 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 973 NewCallback(this, &PipelineImpl::OnFilterStateTransition));
959 } else if (state_ == kStopping) { 974 } else if (state_ == kStopping) {
960 pipeline_filter_->Stop( 975 pipeline_filter_->Stop(
961 NewCallback(this, &PipelineImpl::OnFilterStateTransition)); 976 NewCallback(this, &PipelineImpl::OnFilterStateTransition));
962 } else { 977 } else {
963 NOTREACHED() << "Unexpected state: " << state_; 978 NOTREACHED() << "Unexpected state: " << state_;
964 } 979 }
965 } else if (state_ == kStarted) { 980 } else if (state_ == kStarted) {
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1273 case kStopping: 1288 case kStopping:
1274 case kStopped: 1289 case kStopped:
1275 NOTREACHED() << "Unexpected state for teardown: " << state_; 1290 NOTREACHED() << "Unexpected state for teardown: " << state_;
1276 break; 1291 break;
1277 // default: intentionally left out to force new states to cause compiler 1292 // default: intentionally left out to force new states to cause compiler
1278 // errors. 1293 // errors.
1279 }; 1294 };
1280 } 1295 }
1281 1296
1282 } // namespace media 1297 } // namespace media
OLDNEW
« no previous file with comments | « media/base/pipeline_impl.h ('k') | media/base/pipeline_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698