- CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info("Invalid video-mode."));
-
- auto channel = spl::make_shared<video_channel>(static_cast<int>(channels_.size()+1), format_desc, accelerator_.create_image_mixer());
-
- for (auto& xml_consumer : xml_channel.second.get_child(L"consumers"))
+ CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Invalid video-mode: " + format_desc_str));
+
+ auto channel_layout_str = xml_channel.second.get(L"channel-layout", L"stereo");
+ auto channel_layout = core::audio_channel_layout_repository::get_default()->get_layout(channel_layout_str);
+ if (!channel_layout)
+ CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Unknown channel-layout: " + channel_layout_str));
+
+ auto channel_id = static_cast<int>(channels_.size() + 1);
+ auto channel = spl::make_shared<video_channel>(channel_id, format_desc, *channel_layout, accelerator_.create_image_mixer(channel_id));
+
+ channel->monitor_output().attach_parent(monitor_subject_);
+ channel->mixer().set_straight_alpha_output(xml_channel.second.get(L"straight-alpha-output", false));
+ channels_.push_back(channel);
+ }
+
+ for (auto& channel : channels_)
+ {
+ core::diagnostics::scoped_call_context save;
+ core::diagnostics::call_context::for_thread().video_channel = channel->index();
+
+ for (auto& xml_consumer : xml_channels.at(channel->index() - 1) | witerate_children(L"consumers") | welement_context_iteration)