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 |