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

Unified Diff: media/renderers/renderer_impl.cc

Issue 2667283002: Refactor MediaResource to be multi-stream capable (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « media/remoting/fake_media_resource.cc ('k') | media/renderers/renderer_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/renderers/renderer_impl.cc
diff --git a/media/renderers/renderer_impl.cc b/media/renderers/renderer_impl.cc
index b10dbd05bfe3b86a56e10e79873ba40c0567087f..0d7d2aaf6763890b66da12f33452868469bf6a2e 100644
--- a/media/renderers/renderer_impl.cc
+++ b/media/renderers/renderer_impl.cc
@@ -350,15 +350,16 @@ bool RendererImpl::GetWallClockTimes(
}
bool RendererImpl::HasEncryptedStream() {
- DemuxerStream* audio_stream =
- media_resource_->GetStream(DemuxerStream::AUDIO);
- if (audio_stream && audio_stream->audio_decoder_config().is_encrypted())
- return true;
+ std::vector<DemuxerStream*> demuxer_streams = media_resource_->GetStreams();
- DemuxerStream* video_stream =
- media_resource_->GetStream(DemuxerStream::VIDEO);
- if (video_stream && video_stream->video_decoder_config().is_encrypted())
- return true;
+ for (const auto& stream : demuxer_streams) {
+ if (stream->type() == DemuxerStream::AUDIO &&
+ stream->audio_decoder_config().is_encrypted())
+ return true;
+ if (stream->type() == DemuxerStream::VIDEO &&
+ stream->video_decoder_config().is_encrypted())
+ return true;
+ }
return false;
}
@@ -381,17 +382,22 @@ void RendererImpl::InitializeAudioRenderer() {
PipelineStatusCB done_cb =
base::Bind(&RendererImpl::OnAudioRendererInitializeDone, weak_this_);
- DemuxerStream* audio_stream =
- media_resource_->GetStream(DemuxerStream::AUDIO);
+ // TODO(servolk): Implement proper support for multiple streams. But for now
+ // pick the first enabled stream to preserve the existing behavior.
+ std::vector<DemuxerStream*> streams = media_resource_->GetStreams();
+ DemuxerStream* audio_stream = nullptr;
+ for (const auto& stream : streams) {
+ if (stream->type() == DemuxerStream::AUDIO && stream->enabled()) {
+ audio_stream = stream;
+ break;
+ }
+ }
if (!audio_stream) {
audio_renderer_.reset();
task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK));
return;
}
- audio_stream->SetStreamStatusChangeCB(base::Bind(
- &RendererImpl::OnStreamStatusChanged, weak_this_, audio_stream));
-
audio_renderer_client_.reset(
new RendererClientInternal(DemuxerStream::AUDIO, this));
// Note: After the initialization of a renderer, error events from it may
@@ -430,17 +436,22 @@ void RendererImpl::InitializeVideoRenderer() {
PipelineStatusCB done_cb =
base::Bind(&RendererImpl::OnVideoRendererInitializeDone, weak_this_);
- DemuxerStream* video_stream =
- media_resource_->GetStream(DemuxerStream::VIDEO);
+ // TODO(servolk): Implement proper support for multiple streams. But for now
+ // pick the first enabled stream to preserve the existing behavior.
+ std::vector<DemuxerStream*> streams = media_resource_->GetStreams();
+ DemuxerStream* video_stream = nullptr;
+ for (const auto& stream : streams) {
+ if (stream->type() == DemuxerStream::VIDEO && stream->enabled()) {
+ video_stream = stream;
+ break;
+ }
+ }
if (!video_stream) {
video_renderer_.reset();
task_runner_->PostTask(FROM_HERE, base::Bind(done_cb, PIPELINE_OK));
return;
}
- video_stream->SetStreamStatusChangeCB(base::Bind(
- &RendererImpl::OnStreamStatusChanged, weak_this_, video_stream));
-
video_renderer_client_.reset(
new RendererClientInternal(DemuxerStream::VIDEO, this));
video_renderer_->Initialize(
@@ -469,6 +480,9 @@ void RendererImpl::OnVideoRendererInitializeDone(PipelineStatus status) {
return;
}
+ media_resource_->SetStreamStatusChangeCB(
+ base::Bind(&RendererImpl::OnStreamStatusChanged, weak_this_));
+
if (audio_renderer_) {
time_source_ = audio_renderer_->GetTimeSource();
} else if (!time_source_) {
« no previous file with comments | « media/remoting/fake_media_resource.cc ('k') | media/renderers/renderer_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698