Index: chromecast/media/cma/pipeline/video_pipeline_impl.cc |
diff --git a/chromecast/media/cma/pipeline/video_pipeline_impl.cc b/chromecast/media/cma/pipeline/video_pipeline_impl.cc |
index c1328af39f1b7155cdaf7b9341ed5e7711477db0..38335318bd3a4892df3252196dd07943dbb5d766 100644 |
--- a/chromecast/media/cma/pipeline/video_pipeline_impl.cc |
+++ b/chromecast/media/cma/pipeline/video_pipeline_impl.cc |
@@ -101,11 +101,10 @@ void VideoPipelineImpl::SetClient(const VideoPipelineClient& client) { |
} |
void VideoPipelineImpl::Initialize( |
- const ::media::VideoDecoderConfig& video_config, |
+ const std::vector<::media::VideoDecoderConfig>& configs, |
scoped_ptr<CodedFrameProvider> frame_provider, |
const ::media::PipelineStatusCB& status_cb) { |
- CMALOG(kLogControl) << "VideoPipelineImpl::Initialize " |
- << video_config.AsHumanReadableString(); |
+ CMALOG(kLogControl) << __FUNCTION__ << " config (" << configs.size() << ")"; |
VideoPipelineDevice::VideoClient client; |
client.natural_size_changed_cb = |
base::Bind(&VideoPipelineImpl::OnNaturalSizeChanged, weak_this_); |
@@ -113,8 +112,23 @@ void VideoPipelineImpl::Initialize( |
if (frame_provider) |
SetCodedFrameProvider(frame_provider.Pass()); |
- if (!video_device_->SetConfig( |
- DecoderConfigAdapter::ToCastVideoConfig(kPrimary, video_config)) || |
+ if (configs.empty()) { |
+ status_cb.Run(::media::PIPELINE_ERROR_INITIALIZATION_FAILED); |
+ return; |
+ } |
+ DCHECK(configs.size() <= 2); |
+ DCHECK(configs[0].IsValidConfig()); |
+ VideoConfig video_config = |
+ DecoderConfigAdapter::ToCastVideoConfig(kPrimary, configs[0]); |
+ VideoConfig secondary_config; |
+ if (configs.size() == 2) { |
+ DCHECK(configs[1].IsValidConfig()); |
+ secondary_config = DecoderConfigAdapter::ToCastVideoConfig(kSecondary, |
+ configs[1]); |
+ video_config.additional_config = &secondary_config; |
+ } |
+ |
+ if (!video_device_->SetConfig(video_config) || |
!av_pipeline_impl_->Initialize()) { |
status_cb.Run(::media::PIPELINE_ERROR_INITIALIZATION_FAILED); |
return; |