Chromium Code Reviews| Index: media/base/pipeline_impl.cc |
| diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc |
| index 0590d00cc550f21be7bc6842bbac941a4d516cde..aef974df42e396f078503339c90b8a67f49af3ee 100644 |
| --- a/media/base/pipeline_impl.cc |
| +++ b/media/base/pipeline_impl.cc |
| @@ -17,6 +17,7 @@ |
| #include "base/synchronization/lock.h" |
| #include "base/synchronization/waitable_event.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| +#include "media/base/audio_decoder_config.h" |
| #include "media/base/bind_to_current_loop.h" |
| #include "media/base/demuxer.h" |
| #include "media/base/media_log.h" |
| @@ -66,6 +67,10 @@ class PipelineImpl::RendererWrapper : public DemuxerHost, |
| void OnSelectedVideoTrackChanged( |
| const std::vector<MediaTrack::Id>& selectedTrackId); |
| + // Get current video/audio configure. |
| + VideoDecoderConfig GetVideoDecoderConfig() const; |
| + AudioDecoderConfig GetAudioDecoderConfig() const; |
| + |
| private: |
| // Contains state shared between main and media thread. |
| // Main thread can only read. Media thread can both - read and write. |
| @@ -170,6 +175,10 @@ class PipelineImpl::RendererWrapper : public DemuxerHost, |
| // Series of tasks to Start(), Seek(), and Resume(). |
| std::unique_ptr<SerialRunner> pending_callbacks_; |
| + // Current audio/video decoder config. |
| + AudioDecoderConfig audio_decoder_config_; |
| + VideoDecoderConfig video_decoder_config_; |
| + |
| base::WeakPtr<RendererWrapper> weak_this_; |
| base::WeakPtrFactory<RendererWrapper> weak_factory_; |
| DISALLOW_COPY_AND_ASSIGN(RendererWrapper); |
| @@ -552,6 +561,16 @@ void PipelineImpl::RendererWrapper::OnEnded() { |
| CheckPlaybackEnded(); |
| } |
| +VideoDecoderConfig PipelineImpl::RendererWrapper::GetVideoDecoderConfig() |
| + const { |
| + return video_decoder_config_; |
| +} |
| + |
| +AudioDecoderConfig PipelineImpl::RendererWrapper::GetAudioDecoderConfig() |
|
miu
2016/09/14 20:59:27
base::Optional<AudioDecoderConfig> PipelineImpl::R
|
| + const { |
| + return audio_decoder_config_; |
| +} |
| + |
| void PipelineImpl::OnEnabledAudioTracksChanged( |
| const std::vector<MediaTrack::Id>& enabledTrackIds) { |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| @@ -824,6 +843,13 @@ void PipelineImpl::RendererWrapper::InitializeRenderer( |
| return; |
| } |
| + DemuxerStream* stream = demuxer_->GetStream(DemuxerStream::AUDIO); |
| + if (stream) |
| + audio_decoder_config_ = stream->audio_decoder_config(); |
| + stream = demuxer_->GetStream(DemuxerStream::VIDEO); |
| + if (stream) |
| + video_decoder_config_ = stream->video_decoder_config(); |
| + |
| if (cdm_context_) |
| shared_state_.renderer->SetCdm(cdm_context_, |
| base::Bind(&IgnoreCdmAttached)); |
| @@ -1259,4 +1285,16 @@ void PipelineImpl::OnSuspendDone() { |
| base::ResetAndReturn(&suspend_cb_).Run(PIPELINE_OK); |
| } |
| +VideoDecoderConfig PipelineImpl::GetVideoDecoderConfig() const { |
| + if (!renderer_wrapper_) |
| + return VideoDecoderConfig(); |
| + return renderer_wrapper_->GetVideoDecoderConfig(); |
| +} |
| + |
| +AudioDecoderConfig PipelineImpl::GetAudioDecoderConfig() const { |
| + if (!renderer_wrapper_) |
| + return AudioDecoderConfig(); |
| + return renderer_wrapper_->GetAudioDecoderConfig(); |
| +} |
| + |
| } // namespace media |