summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
eb90366)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1732
362d55ac-95cf-4e76-9f9a-
cbaa9c17b72d
14 files changed:
{ \r
return image_mixer_.create_frame(tag, desc);\r
}\r
{ \r
return image_mixer_.create_frame(tag, desc);\r
}\r
- \r
- safe_ptr<core::write_frame> create_frame(const void* tag, size_t width, size_t height, core::pixel_format::type pix_fmt)\r
- {\r
- // Create bgra frame\r
- core::pixel_format_desc desc;\r
- desc.pix_fmt = pix_fmt;\r
- desc.planes.push_back(core::pixel_format_desc::plane(width, height, 4));\r
- return create_frame(tag, desc);\r
- }\r
- \r
void set_transform(int index, const frame_transform& transform, unsigned int mix_duration, const std::wstring& tween)\r
{\r
void set_transform(int index, const frame_transform& transform, unsigned int mix_duration, const std::wstring& tween)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
auto src = transforms_[index].fetch();\r
auto dst = transform;\r
{\r
auto src = transforms_[index].fetch();\r
auto dst = transform;\r
\r
void apply_transform(int index, const std::function<frame_transform(frame_transform)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
{\r
\r
void apply_transform(int index, const std::function<frame_transform(frame_transform)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
auto src = transforms_[index].fetch();\r
auto dst = transform(src);\r
{\r
auto src = transforms_[index].fetch();\r
auto dst = transform(src);\r
\r
void clear_transforms(int index)\r
{\r
\r
void clear_transforms(int index)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
transforms_.erase(index);\r
blend_modes_.erase(index);\r
{\r
transforms_.erase(index);\r
blend_modes_.erase(index);\r
\r
void clear_transforms()\r
{\r
\r
void clear_transforms()\r
{\r
+ executor_.begin_invoke([=]\r
{\r
transforms_.clear();\r
blend_modes_.clear();\r
{\r
transforms_.clear();\r
blend_modes_.clear();\r
\r
void set_blend_mode(int index, blend_mode::type value)\r
{\r
\r
void set_blend_mode(int index, blend_mode::type value)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
blend_modes_[index] = value;\r
}, high_priority);\r
{\r
blend_modes_[index] = value;\r
}, high_priority);\r
void mixer::send(const std::pair<std::map<int, safe_ptr<core::basic_frame>>, std::shared_ptr<void>>& frames){ impl_->send(frames);}\r
core::video_format_desc mixer::get_video_format_desc() const { return impl_->get_video_format_desc(); }\r
safe_ptr<core::write_frame> mixer::create_frame(const void* tag, const core::pixel_format_desc& desc){ return impl_->create_frame(tag, desc); } \r
void mixer::send(const std::pair<std::map<int, safe_ptr<core::basic_frame>>, std::shared_ptr<void>>& frames){ impl_->send(frames);}\r
core::video_format_desc mixer::get_video_format_desc() const { return impl_->get_video_format_desc(); }\r
safe_ptr<core::write_frame> mixer::create_frame(const void* tag, const core::pixel_format_desc& desc){ return impl_->create_frame(tag, desc); } \r
-safe_ptr<core::write_frame> mixer::create_frame(const void* tag, size_t width, size_t height, core::pixel_format::type pix_fmt)\r
-{\r
- // Create bgra frame\r
- core::pixel_format_desc desc;\r
- desc.pix_fmt = pix_fmt;\r
- desc.planes.push_back(core::pixel_format_desc::plane(width, height, 4));\r
- return create_frame(tag, desc);\r
-}\r
void mixer::set_frame_transform(int index, const core::frame_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform(index, transform, mix_duration, tween);}\r
void mixer::apply_frame_transform(int index, const std::function<core::frame_transform(core::frame_transform)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
{impl_->apply_transform(index, transform, mix_duration, tween);}\r
void mixer::set_frame_transform(int index, const core::frame_transform& transform, unsigned int mix_duration, const std::wstring& tween){impl_->set_transform(index, transform, mix_duration, tween);}\r
void mixer::apply_frame_transform(int index, const std::function<core::frame_transform(core::frame_transform)>& transform, unsigned int mix_duration, const std::wstring& tween)\r
{impl_->apply_transform(index, transform, mix_duration, tween);}\r
// mixer\r
\r
safe_ptr<core::write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc); \r
// mixer\r
\r
safe_ptr<core::write_frame> create_frame(const void* tag, const core::pixel_format_desc& desc); \r
- safe_ptr<core::write_frame> create_frame(const void* tag, size_t width, size_t height, pixel_format::type pix_fmt = pixel_format::bgra); \r
\r
core::video_format_desc get_video_format_desc() const; // nothrow\r
void set_video_format_desc(const video_format_desc& format_desc);\r
\r
core::video_format_desc get_video_format_desc() const; // nothrow\r
void set_video_format_desc(const video_format_desc& format_desc);\r
auto color2 = get_hex_color(color);\r
if(color2.length() != 9 || color2[0] != '#')\r
BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("color") << arg_value_info(narrow(color2)) << msg_info("Invalid color."));\r
auto color2 = get_hex_color(color);\r
if(color2.length() != 9 || color2[0] != '#')\r
BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("color") << arg_value_info(narrow(color2)) << msg_info("Invalid color."));\r
-\r
- auto frame = frame_factory->create_frame(tag, 1, 1, pixel_format::bgra);\r
+ \r
+ core::pixel_format_desc desc;\r
+ desc.pix_fmt = pixel_format::bgra;\r
+ desc.planes.push_back(core::pixel_format_desc::plane(1, 1, 4));\r
+ auto frame = frame_factory->create_frame(tag, desc);\r
\r
// Read color from hex-string and write to frame pixel.\r
\r
\r
// Read color from hex-string and write to frame pixel.\r
\r
\r
struct frame_factory : boost::noncopyable\r
{\r
\r
struct frame_factory : boost::noncopyable\r
{\r
- virtual safe_ptr<write_frame> create_frame(const void* video_stream_tag, const pixel_format_desc& desc) = 0;\r
- virtual safe_ptr<write_frame> create_frame(const void* video_stream_tag, size_t width, size_t height, pixel_format::type pix_fmt = pixel_format::bgra) = 0; \r
+ virtual safe_ptr<write_frame> create_frame(const void* video_stream_tag, const pixel_format_desc& desc) = 0; \r
\r
virtual video_format_desc get_video_format_desc() const = 0; // nothrow\r
};\r
\r
virtual video_format_desc get_video_format_desc() const = 0; // nothrow\r
};\r
\r
void load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta)\r
{\r
\r
void load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
layers_[index].load(producer, preview, auto_play_delta);\r
}, high_priority);\r
{\r
layers_[index].load(producer, preview, auto_play_delta);\r
}, high_priority);\r
\r
void pause(int index)\r
{ \r
\r
void pause(int index)\r
{ \r
+ executor_.begin_invoke([=]\r
{\r
layers_[index].pause();\r
}, high_priority);\r
{\r
layers_[index].pause();\r
}, high_priority);\r
\r
void play(int index)\r
{ \r
\r
void play(int index)\r
{ \r
+ executor_.begin_invoke([=]\r
{\r
layers_[index].play();\r
}, high_priority);\r
{\r
layers_[index].play();\r
}, high_priority);\r
\r
void stop(int index)\r
{ \r
\r
void stop(int index)\r
{ \r
+ executor_.begin_invoke([=]\r
{\r
layers_[index].stop();\r
}, high_priority);\r
{\r
layers_[index].stop();\r
}, high_priority);\r
\r
void clear(int index)\r
{\r
\r
void clear(int index)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
layers_.erase(index);\r
}, high_priority);\r
{\r
layers_.erase(index);\r
}, high_priority);\r
+ executor_.begin_invoke([=]\r
{\r
layers_.clear();\r
}, high_priority);\r
{\r
layers_.clear();\r
}, high_priority);\r
\r
boost::unique_future<std::wstring> call(int index, bool foreground, const std::wstring& param)\r
{\r
\r
boost::unique_future<std::wstring> call(int index, bool foreground, const std::wstring& param)\r
{\r
- return std::move(*executor_.invoke([&]\r
+ return std::move(*executor_.invoke([=]\r
{\r
return std::make_shared<boost::unique_future<std::wstring>>(std::move(layers_[index].call(foreground, param)));\r
}, high_priority));\r
}\r
{\r
return std::make_shared<boost::unique_future<std::wstring>>(std::move(layers_[index].call(foreground, param)));\r
}, high_priority));\r
}\r
+ \r
+ void swap_layers(const safe_ptr<stage>& other)\r
+ {\r
+ if(other->impl_.get() == this)\r
+ return;\r
+ \r
+ auto func = [=]\r
+ {\r
+ std::swap(layers_, other->impl_->layers_);\r
+ }; \r
+ executor_.begin_invoke([=]\r
+ {\r
+ other->impl_->executor_.invoke(func, high_priority);\r
+ }, high_priority);\r
+ }\r
\r
void swap_layer(int index, size_t other_index)\r
{\r
\r
void swap_layer(int index, size_t other_index)\r
{\r
+ executor_.begin_invoke([=]\r
{\r
std::swap(layers_[index], layers_[other_index]);\r
}, high_priority);\r
}\r
\r
{\r
std::swap(layers_[index], layers_[other_index]);\r
}, high_priority);\r
}\r
\r
- void swap_layer(int index, size_t other_index, stage& other)\r
+ void swap_layer(int index, size_t other_index, const safe_ptr<stage>& other)\r
- if(other.impl_.get() == this)\r
+ if(other->impl_.get() == this)\r
swap_layer(index, other_index);\r
else\r
{\r
swap_layer(index, other_index);\r
else\r
{\r
- std::swap(layers_[index], other.impl_->layers_[other_index]);\r
+ std::swap(layers_[index], other->impl_->layers_[other_index]);\r
- executor_.invoke([&]{other.impl_->executor_.invoke(func, high_priority);}, high_priority);\r
+ executor_.begin_invoke([=]\r
+ {\r
+ other->impl_->executor_.invoke(func, high_priority);\r
+ }, high_priority);\r
- void swap(stage& other)\r
- {\r
- if(other.impl_.get() == this)\r
- return;\r
- \r
- auto func = [&]\r
- {\r
- std::swap(layers_, other.impl_->layers_);\r
- }; \r
- executor_.invoke([&]{other.impl_->executor_.invoke(func, high_priority);}, high_priority);\r
- }\r
-\r
- layer_status get_status(int index)\r
+ boost::unique_future<layer_status> get_status(int index)\r
- return executor_.invoke([&]\r
+ return executor_.begin_invoke([=]\r
{\r
return layers_[index].status();\r
}, high_priority );\r
}\r
\r
{\r
return layers_[index].status();\r
}, high_priority );\r
}\r
\r
- safe_ptr<frame_producer> foreground(int index)\r
+ boost::unique_future<safe_ptr<frame_producer>> foreground(int index)\r
- return executor_.invoke([=]{return layers_[index].foreground();}, high_priority);\r
+ return executor_.begin_invoke([=]\r
+ {\r
+ return layers_[index].foreground();\r
+ }, high_priority);\r
- safe_ptr<frame_producer> background(int index)\r
+ boost::unique_future<safe_ptr<frame_producer>> background(int index)\r
- return executor_.invoke([=]{return layers_[index].background();}, high_priority);\r
+ return executor_.begin_invoke([=]\r
+ {\r
+ return layers_[index].background();\r
+ }, high_priority);\r
}\r
\r
void set_video_format_desc(const video_format_desc& format_desc)\r
}\r
\r
void set_video_format_desc(const video_format_desc& format_desc)\r
\r
stage::stage(const safe_ptr<diagnostics::graph>& graph, const safe_ptr<target_t>& target, const video_format_desc& format_desc) : impl_(new implementation(graph, target, format_desc)){}\r
void stage::spawn_token(){impl_->spawn_token();}\r
\r
stage::stage(const safe_ptr<diagnostics::graph>& graph, const safe_ptr<target_t>& target, const video_format_desc& format_desc) : impl_(new implementation(graph, target, format_desc)){}\r
void stage::spawn_token(){impl_->spawn_token();}\r
-void stage::swap(stage& other){impl_->swap(other);}\r
void stage::load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta){impl_->load(index, producer, preview, auto_play_delta);}\r
void stage::pause(int index){impl_->pause(index);}\r
void stage::play(int index){impl_->play(index);}\r
void stage::stop(int index){impl_->stop(index);}\r
void stage::clear(int index){impl_->clear(index);}\r
void stage::clear(){impl_->clear();}\r
void stage::load(int index, const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta){impl_->load(index, producer, preview, auto_play_delta);}\r
void stage::pause(int index){impl_->pause(index);}\r
void stage::play(int index){impl_->play(index);}\r
void stage::stop(int index){impl_->stop(index);}\r
void stage::clear(int index){impl_->clear(index);}\r
void stage::clear(){impl_->clear();}\r
+void stage::swap_layers(const safe_ptr<stage>& other){impl_->swap_layers(other);}\r
void stage::swap_layer(int index, size_t other_index){impl_->swap_layer(index, other_index);}\r
void stage::swap_layer(int index, size_t other_index){impl_->swap_layer(index, other_index);}\r
-void stage::swap_layer(int index, size_t other_index, stage& other){impl_->swap_layer(index, other_index, other);}\r
-layer_status stage::get_status(int index){return impl_->get_status(index);}\r
-safe_ptr<frame_producer> stage::foreground(size_t index) {return impl_->foreground(index);}\r
-safe_ptr<frame_producer> stage::background(size_t index) {return impl_->background(index);}\r
-void stage::set_video_format_desc(const video_format_desc& format_desc){impl_->set_video_format_desc(format_desc);}\r
+void stage::swap_layer(int index, size_t other_index, const safe_ptr<stage>& other){impl_->swap_layer(index, other_index, other);}\r
+boost::unique_future<layer_status> stage::get_status(int index){return impl_->get_status(index);}\r
+boost::unique_future<safe_ptr<frame_producer>> stage::foreground(size_t index) {return impl_->foreground(index);}\r
+boost::unique_future<safe_ptr<frame_producer>> stage::background(size_t index) {return impl_->background(index);}\r
boost::unique_future<std::wstring> stage::call(int index, bool foreground, const std::wstring& param){return impl_->call(index, foreground, param);}\r
boost::unique_future<std::wstring> stage::call(int index, bool foreground, const std::wstring& param){return impl_->call(index, foreground, param);}\r
+void stage::set_video_format_desc(const video_format_desc& format_desc){impl_->set_video_format_desc(format_desc);}\r
}}
\ No newline at end of file
}}
\ No newline at end of file
\r
void spawn_token();\r
\r
\r
void spawn_token();\r
\r
- void swap(stage& other);\r
\r
void load(int index, const safe_ptr<frame_producer>& producer, bool preview = false, int auto_play_delta = -1);\r
void pause(int index);\r
\r
void load(int index, const safe_ptr<frame_producer>& producer, bool preview = false, int auto_play_delta = -1);\r
void pause(int index);\r
void stop(int index);\r
void clear(int index);\r
void clear(); \r
void stop(int index);\r
void clear(int index);\r
void clear(); \r
- boost::unique_future<std::wstring> call(int index, bool foreground, const std::wstring& param);\r
+ void swap_layers(const safe_ptr<stage>& other);\r
void swap_layer(int index, size_t other_index);\r
void swap_layer(int index, size_t other_index);\r
- void swap_layer(int index, size_t other_index, stage& other);\r
-\r
- layer_status get_status(int index);\r
- safe_ptr<frame_producer> foreground(size_t index);\r
- safe_ptr<frame_producer> background(size_t index);\r
+ void swap_layer(int index, size_t other_index, const safe_ptr<stage>& other);\r
+ \r
+ boost::unique_future<std::wstring> call(int index, bool foreground, const std::wstring& param);\r
+ boost::unique_future<layer_status> get_status(int index);\r
+ boost::unique_future<safe_ptr<frame_producer>> foreground(size_t index);\r
+ boost::unique_future<safe_ptr<frame_producer>> background(size_t index);\r
\r
void set_video_format_desc(const video_format_desc& format_desc);\r
\r
\r
void set_video_format_desc(const video_format_desc& format_desc);\r
\r
\r
\r
/* File created by MIDL compiler version 7.00.0555 */\r
\r
\r
/* File created by MIDL compiler version 7.00.0555 */\r
-/* at Mon Nov 28 22:42:59 2011\r
+/* at Wed Nov 30 19:17:46 2011\r
*/\r
/* Compiler settings for interop\DeckLinkAPI.idl:\r
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
*/\r
/* Compiler settings for interop\DeckLinkAPI.idl:\r
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
\r
\r
/* File created by MIDL compiler version 7.00.0555 */\r
\r
\r
/* File created by MIDL compiler version 7.00.0555 */\r
-/* at Mon Nov 28 22:42:59 2011\r
+/* at Wed Nov 30 19:17:46 2011\r
*/\r
/* Compiler settings for interop\DeckLinkAPI.idl:\r
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
*/\r
/* Compiler settings for interop\DeckLinkAPI.idl:\r
Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
\r
safe_ptr<cg_producer> get_default_cg_producer(const safe_ptr<core::video_channel>& video_channel, int render_layer)\r
{ \r
\r
safe_ptr<cg_producer> get_default_cg_producer(const safe_ptr<core::video_channel>& video_channel, int render_layer)\r
{ \r
- auto flash_producer = video_channel->stage()->foreground(render_layer);\r
+ auto flash_producer = video_channel->stage()->foreground(render_layer).get();\r
\r
if(flash_producer->print().find(L"flash[") == std::string::npos) // UGLY hack\r
{\r
\r
if(flash_producer->print().find(L"flash[") == std::string::npos) // UGLY hack\r
{\r
fast_memclr(bmp_.data(), width_*height_*4);\r
ax_->DrawControl(bmp_);\r
\r
fast_memclr(bmp_.data(), width_*height_*4);\r
ax_->DrawControl(bmp_);\r
\r
- auto frame = frame_factory_->create_frame(this, width_, height_);\r
+ core::pixel_format_desc desc;\r
+ desc.pix_fmt = core::pixel_format::bgra;\r
+ desc.planes.push_back(core::pixel_format_desc::plane(width_, height_, 4));\r
+ auto frame = frame_factory_->create_frame(this, desc);\r
+\r
fast_memcpy(frame->image_data().begin(), bmp_.data(), width_*height_*4);\r
frame->commit();\r
head_ = frame;\r
fast_memcpy(frame->image_data().begin(), bmp_.data(), width_*height_*4);\r
frame->commit();\r
head_ = frame;\r
{\r
auto bitmap = load_image(filename_);\r
FreeImage_FlipVertical(bitmap.get());\r
{\r
auto bitmap = load_image(filename_);\r
FreeImage_FlipVertical(bitmap.get());\r
- auto frame = frame_factory->create_frame(this, FreeImage_GetWidth(bitmap.get()), FreeImage_GetHeight(bitmap.get()), core::pixel_format::bgra);\r
+ \r
+ core::pixel_format_desc desc;\r
+ desc.pix_fmt = core::pixel_format::bgra;\r
+ desc.planes.push_back(core::pixel_format_desc::plane(FreeImage_GetWidth(bitmap.get()), FreeImage_GetHeight(bitmap.get()), 4));\r
+ auto frame = frame_factory->create_frame(this, desc);\r
+\r
std::copy_n(FreeImage_GetBits(bitmap.get()), frame->image_data().size(), frame->image_data().begin());\r
frame->commit();\r
frame_ = std::move(frame);\r
std::copy_n(FreeImage_GetBits(bitmap.get()), frame->image_data().size(), frame->image_data().begin());\r
frame->commit();\r
frame_ = std::move(frame);\r
{\r
while(count > 0)\r
{\r
{\r
while(count > 0)\r
{\r
- auto frame = frame_factory->create_frame(reinterpret_cast<void*>(rand()), width_, format_desc_.height);\r
+ core::pixel_format_desc desc;\r
+ desc.pix_fmt = core::pixel_format::bgra;\r
+ desc.planes.push_back(core::pixel_format_desc::plane(width_, format_desc_.height, 4));\r
+ auto frame = frame_factory->create_frame(reinterpret_cast<void*>(rand()), desc);\r
+\r
if(count >= frame->image_data().size())\r
{ \r
std::copy_n(bytes + count - frame->image_data().size(), frame->image_data().size(), frame->image_data().begin());\r
if(count >= frame->image_data().size())\r
{ \r
std::copy_n(bytes + count - frame->image_data().size(), frame->image_data().size(), frame->image_data().begin());\r
int i = 0;\r
while(count > 0)\r
{\r
int i = 0;\r
while(count > 0)\r
{\r
- auto frame = frame_factory->create_frame(reinterpret_cast<void*>(rand()), format_desc_.width, height_);\r
+ core::pixel_format_desc desc;\r
+ desc.pix_fmt = core::pixel_format::bgra;\r
+ desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width, height_, 4));\r
+ auto frame = frame_factory->create_frame(reinterpret_cast<void*>(rand()), desc);\r
if(count >= frame->image_data().size())\r
{ \r
for(size_t y = 0; y < height_; ++y)\r
if(count >= frame->image_data().size())\r
{ \r
for(size_t y = 0; y < height_; ++y)\r
int l1 = GetLayerIndex();\r
int l2 = boost::lexical_cast<int>(strs.at(1));\r
\r
int l1 = GetLayerIndex();\r
int l2 = boost::lexical_cast<int>(strs.at(1));\r
\r
- ch1->stage()->swap_layer(l1, l2, *ch2->stage());\r
+ ch1->stage()->swap_layer(l1, l2, ch2->stage());\r
}\r
else\r
{\r
auto ch1 = GetChannel();\r
auto ch2 = GetChannels().at(boost::lexical_cast<int>(_parameters[0])-1);\r
}\r
else\r
{\r
auto ch1 = GetChannel();\r
auto ch2 = GetChannels().at(boost::lexical_cast<int>(_parameters[0])-1);\r
- ch1->stage()->swap(*ch2->stage());\r
+ ch1->stage()->swap_layers(ch2->stage());\r
}\r
\r
CASPAR_LOG(info) << "Swapped successfully";\r
}\r
\r
CASPAR_LOG(info) << "Swapped successfully";\r
{ \r
if (GetLayerIndex() > -1)\r
{\r
{ \r
if (GetLayerIndex() > -1)\r
{\r
- auto status = GetChannel()->stage()->get_status(GetLayerIndex());\r
+ auto status = GetChannel()->stage()->get_status(GetLayerIndex()).get();\r
std::wstringstream status_text;\r
status_text\r
<< L"201 STATUS OK\r\n"\r
std::wstringstream status_text;\r
status_text\r
<< L"201 STATUS OK\r\n"\r
<?xml version="1.0" encoding="utf-8"?>\r
<configuration>\r
<paths>\r
<?xml version="1.0" encoding="utf-8"?>\r
<configuration>\r
<paths>\r
- <media-path>F:\casparcg\_media\</media-path>\r
- <log-path>F:\casparcg\_log\</log-path>\r
- <data-path>F:\casparcg\_data\</data-path>\r
- <template-path>F:\casparcg\_templates\</template-path>\r
+ <media-path>D:\casparcg\_media\</media-path>\r
+ <log-path>D:\casparcg\_log\</log-path>\r
+ <data-path>D:\casparcg\_data\</data-path>\r
+ <template-path>D:\casparcg\_templates\</template-path>\r
</paths>\r
<channels>\r
<channel>\r
<video-mode>PAL</video-mode>\r
<consumers>\r
</paths>\r
<channels>\r
<channel>\r
<video-mode>PAL</video-mode>\r
<consumers>\r
<embedded-audio>true</embedded-audio>\r
<embedded-audio>true</embedded-audio>\r
</consumers>\r
</channel>\r
</channels>\r
</consumers>\r
</channel>\r
</channels>\r