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

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: 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 94817aa9ed1033ce8515a05c5b15dd8b9d9fe4b6..331bc66ea7e83a3346dac550522bfa7648bc079e 100644
--- a/media/base/pipeline.cc
+++ b/media/base/pipeline.cc
@@ -63,7 +63,6 @@ media::PipelineStatus PipelineStatusNotification::status() {
struct Pipeline::PipelineInitState {
Ami GONE FROM CHROMIUM 2012/08/09 20:30:18 drop this struct now (and bind the audio decoder i
acolwell GONE FROM CHROMIUM 2012/08/09 22:23:32 I can't really do this w/o moving the kInitAudioDe
scoped_refptr<AudioDecoder> audio_decoder;
- scoped_refptr<VideoDecoder> video_decoder;
};
Pipeline::Pipeline(MessageLoop* message_loop, MediaLog* media_log)
@@ -609,14 +608,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.
@@ -626,7 +619,6 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
DCHECK(state_ == kInitDemuxer ||
state_ == kInitAudioDecoder ||
state_ == kInitAudioRenderer ||
- state_ == kInitVideoDecoder ||
state_ == kInitVideoRenderer);
// Demuxer created, create audio decoder.
@@ -651,16 +643,8 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
// Assuming audio renderer was created, create video decoder.
Ami GONE FROM CHROMIUM 2012/08/09 20:30:18 s/decoder/renderer/
acolwell GONE FROM CHROMIUM 2012/08/09 22:23:32 Done.
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;
@@ -704,10 +688,8 @@ void Pipeline::StopTask(const base::Closure& stop_cb) {
DCHECK(!IsPipelineStopPending());
DCHECK_NE(state_, kStopped);
- if (video_decoder_) {
- video_decoder_->PrepareForShutdownHack();
- video_decoder_ = NULL;
- }
+ if (video_renderer_)
+ video_renderer_->PrepareForShutdownHack();
if (IsPipelineTearingDown() && error_caused_teardown_) {
// If we are stopping due to SetError(), stop normally instead of
@@ -985,7 +967,6 @@ void Pipeline::TeardownStateTransitionTask() {
case kInitDemuxer:
case kInitAudioDecoder:
case kInitAudioRenderer:
- case kInitVideoDecoder:
case kInitVideoRenderer:
case kSeeking:
case kStarting:
@@ -1086,34 +1067,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());
@@ -1140,11 +1093,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_);
@@ -1154,7 +1107,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),
@@ -1163,6 +1117,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;
}
@@ -1193,7 +1148,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