| 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_) {
|
|
|