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

Unified Diff: media/base/pipeline.cc

Issue 10836167: Move VideoDecoder initialization into VideoRendererBase. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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 side-by-side diff with in-line comments
Download patch
Index: media/base/pipeline.cc
diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
index 462c44dd57d04e027f6b589554f16d9d5d39724d..de94d0be0677ab76c97b0affa2a9559fa4f233d1 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -63,7 +63,6 @@ media::PipelineStatus PipelineStatusNotification::status() {
struct Pipeline::PipelineInitState {
scoped_refptr<AudioDecoder> audio_decoder;
- scoped_refptr<VideoDecoder> video_decoder;
};
Pipeline::Pipeline(MessageLoop* message_loop, MediaLog* media_log)
@@ -584,14 +583,8 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
DCHECK(message_loop_->BelongsToCurrentThread());
if (last_stage_status != PIPELINE_OK) {
- // Currently only VideoDecoders have a recoverable error code.
- if (state_ == kInitVideoDecoder &&
- last_stage_status == DECODER_ERROR_NOT_SUPPORTED) {
- state_ = kInitAudioRenderer;
- } else {
- SetError(last_stage_status);
- return;
- }
+ SetError(last_stage_status);
+ return;
}
// If we have received the stop or error signal, return immediately.
@@ -601,7 +594,6 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
DCHECK(state_ == kInitDemuxer ||
state_ == kInitAudioDecoder ||
state_ == kInitAudioRenderer ||
- state_ == kInitVideoDecoder ||
state_ == kInitVideoRenderer);
// Demuxer created, create audio decoder.
@@ -624,18 +616,10 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
}
}
- // Assuming audio renderer was created, create video decoder.
+ // Assuming audio renderer was created, create video renderer.
if (state_ == kInitAudioRenderer) {
- // Then perform the stage of initialization, i.e. initialize video decoder.
- SetState(kInitVideoDecoder);
- if (InitializeVideoDecoder(demuxer_))
- return;
- }
-
- // Assuming video decoder was created, create video renderer.
- if (state_ == kInitVideoDecoder) {
SetState(kInitVideoRenderer);
- if (InitializeVideoRenderer(pipeline_init_state_->video_decoder)) {
+ if (InitializeVideoRenderer(demuxer_->GetStream(DemuxerStream::VIDEO))) {
base::AutoLock auto_lock(lock_);
has_video_ = true;
return;
@@ -683,10 +667,8 @@ void Pipeline::StopTask(const base::Closure& stop_cb) {
return;
}
- if (video_decoder_) {
- video_decoder_->PrepareForShutdownHack();
- video_decoder_ = NULL;
- }
+ if (video_renderer_)
+ video_renderer_->PrepareForShutdownHack();
if (tearing_down_ && status_ != PIPELINE_OK) {
// If we are stopping due to SetError(), stop normally instead of
@@ -970,7 +952,6 @@ void Pipeline::TeardownStateTransitionTask() {
case kInitDemuxer:
case kInitAudioDecoder:
case kInitAudioRenderer:
- case kInitVideoDecoder:
case kInitVideoRenderer:
case kSeeking:
case kStarting:
@@ -1064,34 +1045,6 @@ bool Pipeline::InitializeAudioDecoder(
return true;
}
-bool Pipeline::InitializeVideoDecoder(
- const scoped_refptr<Demuxer>& demuxer) {
- DCHECK(message_loop_->BelongsToCurrentThread());
- DCHECK(IsPipelineOk());
- DCHECK(demuxer);
-
- scoped_refptr<DemuxerStream> stream =
- demuxer->GetStream(DemuxerStream::VIDEO);
-
- if (!stream)
- return false;
-
- filter_collection_->SelectVideoDecoder(&pipeline_init_state_->video_decoder);
-
- if (!pipeline_init_state_->video_decoder) {
- SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING);
- return false;
- }
-
- pipeline_init_state_->video_decoder->Initialize(
- stream,
- base::Bind(&Pipeline::OnFilterInitialize, this),
- base::Bind(&Pipeline::OnUpdateStatistics, this));
-
- video_decoder_ = pipeline_init_state_->video_decoder;
- return true;
-}
-
bool Pipeline::InitializeAudioRenderer(
const scoped_refptr<AudioDecoder>& decoder) {
DCHECK(message_loop_->BelongsToCurrentThread());
@@ -1118,11 +1071,11 @@ bool Pipeline::InitializeAudioRenderer(
}
bool Pipeline::InitializeVideoRenderer(
- const scoped_refptr<VideoDecoder>& decoder) {
+ const scoped_refptr<DemuxerStream>& stream) {
DCHECK(message_loop_->BelongsToCurrentThread());
DCHECK(IsPipelineOk());
- if (!decoder)
+ if (!stream)
return false;
filter_collection_->SelectVideoRenderer(&video_renderer_);
@@ -1132,7 +1085,8 @@ bool Pipeline::InitializeVideoRenderer(
}
video_renderer_->Initialize(
- decoder,
+ stream,
+ *filter_collection_->GetVideoDecoders(),
base::Bind(&Pipeline::OnFilterInitialize, this),
base::Bind(&Pipeline::OnUpdateStatistics, this),
base::Bind(&Pipeline::OnVideoTimeUpdate, this),
@@ -1141,6 +1095,7 @@ bool Pipeline::InitializeVideoRenderer(
base::Bind(&Pipeline::SetError, this),
base::Bind(&Pipeline::GetMediaTime, this),
base::Bind(&Pipeline::GetMediaDuration, this));
+ filter_collection_->GetVideoDecoders()->clear();
return true;
}
@@ -1174,7 +1129,6 @@ void Pipeline::TearDownPipeline() {
case kInitDemuxer:
case kInitAudioDecoder:
case kInitAudioRenderer:
- case kInitVideoDecoder:
case kInitVideoRenderer:
// Make it look like initialization was successful.
filter_collection_.reset();

Powered by Google App Engine
This is Rietveld 408576698