[] (char c) { return !std::isspace(static_cast<unsigned char>(c)); });
if (length % 4 != 0)
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(
"The length of a base64 sequence must be a multiple of 4"));
int padding = 0;
try
{
if (!boost::filesystem::is_directory(folder))
- BOOST_THROW_EXCEPTION(directory_not_found());
+ CASPAR_THROW_EXCEPTION(directory_not_found());
auto file_sink = boost::make_shared<file_sink_type>(
boost::log::keywords::file_name = (folder + L"caspar_%Y-%m-%d.log"),
{
sf::Font font;
if (!font.loadFromFile("LiberationSans-Regular.ttf"))
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("LiberationSans-Regular.ttf not found"));
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info("LiberationSans-Regular.ttf not found"));
return font;
}();
return rec.second.info_extractor(*found);
}
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(L"No meta info extractor for " + filename));
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(L"No meta info extractor for " + filename));
}
bool is_cg_extension(const std::wstring& extension) const
{
uint32_t value = 0;
if(!try_get_color(str, value))
- BOOST_THROW_EXCEPTION(invalid_argument() << arg_name_info("color") << arg_value_info(str) << msg_info("Invalid color."));
+ CASPAR_THROW_EXCEPTION(invalid_argument() << arg_name_info("color") << arg_value_info(str) << msg_info("Invalid color."));
return create_color_frame(tag, frame_factory, value);
}
return std::shared_ptr<AVStream>(st, [](AVStream* st)
{
LOG_ON_ERROR2(tbb_avcodec_close(st->codec), "[ffmpeg_consumer]");
- av_freep(&st->codec);
- av_freep(&st);
});
}
return std::shared_ptr<AVStream>(st, [](AVStream* st)
{
LOG_ON_ERROR2(avcodec_close(st->codec), "[ffmpeg_consumer]");
- av_freep(&st->codec);
- av_freep(&st);
});
}
while(audio_buffer_.size() >= frame_size)
{
- std::shared_ptr<AVFrame> av_frame(avcodec_alloc_frame(), av_free);
+ std::shared_ptr<AVFrame> av_frame(av_frame_alloc(), [=](AVFrame* p) { av_frame_free(&p); });
avcodec_get_frame_defaults(av_frame.get());
av_frame->nb_samples = frame_size / (enc->channels * av_get_bytes_per_sample(enc->sample_fmt));
{
auto space = boost::filesystem::space(boost::filesystem::path(filename_).parent_path());
if(space.available < 512*1000000)
- BOOST_THROW_EXCEPTION(file_write_error() << msg_info("out of space"));
+ CASPAR_THROW_EXCEPTION(file_write_error() << msg_info("out of space"));
}
void encode(const core::const_frame& frame)
void initialize(const core::video_format_desc& format_desc, int) override
{
if(consumer_)
- BOOST_THROW_EXCEPTION(invalid_operation() << msg_info("Cannot reinitialize ffmpeg-consumer."));
+ CASPAR_THROW_EXCEPTION(invalid_operation() << msg_info("Cannot reinitialize ffmpeg-consumer."));
consumer_.reset(new ffmpeg_consumer(u8(filename_), format_desc, options_, false));
: avcodec_find_encoder(oc_->oformat->audio_codec);
if (!video_codec)
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(
"Failed to find video codec " + (video_codec_name
? *video_codec_name
: "with id " + boost::lexical_cast<std::string>(
oc_->oformat->video_codec))));
if (!audio_codec)
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(
"Failed to find audio codec " + (audio_codec_name
? *audio_codec_name
: "with id " + boost::lexical_cast<std::string>(
virtual boost::property_tree::wptree info() const override
{
- return boost::property_tree::wptree();
+ boost::property_tree::wptree info;
+ info.add(L"type", L"stream");
+ info.add(L"path", path_.wstring());
+ return info;
}
bool has_synchronization_clock() const override
&codec);
if (!st)
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info("Could not allocate video-stream.") << boost::errinfo_api_function("av_new_stream"));
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info("Could not allocate video-stream.") << boost::errinfo_api_function("av_new_stream"));
auto enc = st->codec;
auto ret = uncompress(reinterpret_cast<Bytef*>(data.data()), &file_size, reinterpret_cast<const Bytef*>(file_data.data()), static_cast<uLong>(file_data.size()));
if (ret == Z_DATA_ERROR)
- BOOST_THROW_EXCEPTION(io_error());
+ CASPAR_THROW_EXCEPTION(io_error());
// http://thenobody.blog.matfyz.sk/p13084-how-to-get-dimensions-of-a-swf-file
auto ret = uncompress(reinterpret_cast<Bytef*>(this->data.data()), &file_size, reinterpret_cast<const Bytef*>(file_data.data()), static_cast<uLong>(file_data.size()));
if (ret != Z_OK)
- BOOST_THROW_EXCEPTION(io_error());
+ CASPAR_THROW_EXCEPTION(io_error());
}
}}
if (CefPostTask(TID_UI, task.get()))
return task->future();
else
- BOOST_THROW_EXCEPTION(caspar_exception()
+ CASPAR_THROW_EXCEPTION(caspar_exception()
<< msg_info("[cef_executor] Could not post task"));
}
if (!try_pop(frame))
{
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(u8(print()) + " No frame in buffer"));
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(u8(print()) + " No frame in buffer"));
}
return frame;
bool horizontal = height_ == format_desc_.height;
if (!vertical && !horizontal)
- BOOST_THROW_EXCEPTION(
+ CASPAR_THROW_EXCEPTION(
caspar::invalid_argument() << msg_info("Neither width nor height matched the video resolution"));
if (vertical)
bitmap = std::shared_ptr<FIBITMAP>(FreeImage_ConvertTo32Bits(bitmap.get()), FreeImage_Unload);
if (!bitmap)
- BOOST_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));
+ CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Unsupported image format."));
}
return bitmap;
: executor_(print())
{
if (!airsend::is_available())
- BOOST_THROW_EXCEPTION(caspar_exception() << msg_info(airsend::dll_name() + L" not available"));
+ CASPAR_THROW_EXCEPTION(caspar_exception() << msg_info(airsend::dll_name() + L" not available"));
connected_ = false;
return L"202 CG OK\r\n";
}
+spl::shared_ptr<core::cg_proxy> get_expected_cg_proxy(command_context& ctx)
+{
+ auto proxy = ctx.cg_registry->get_proxy(spl::make_shared_ptr(ctx.channel.channel), ctx.layer_index(core::cg_proxy::DEFAULT_LAYER));
+
+ if (proxy == cg_proxy::empty())
+ CASPAR_THROW_EXCEPTION(file_not_found() << msg_info(L"No CG proxy running on layer"));
+
+ return proxy;
+}
+
void cg_stop_describer(core::help_sink& sink, const core::help_repository& repo)
{
sink.short_description(L"Stop and remove a template.");
std::wstring cg_stop_command(command_context& ctx)
{
int layer = get_and_validate_layer(ctx.parameters.at(0));
- ctx.cg_registry->get_proxy(spl::make_shared_ptr(ctx.channel.channel), ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))->stop(layer, 0);
+ get_expected_cg_proxy(ctx)->stop(layer, 0);
return L"202 CG OK\r\n";
}
std::wstring cg_next_command(command_context& ctx)
{
int layer = get_and_validate_layer(ctx.parameters.at(0));
- ctx.cg_registry->get_proxy(spl::make_shared_ptr(ctx.channel.channel), ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))->next(layer);
+ get_expected_cg_proxy(ctx)->next(layer);
return L"202 CG OK\r\n";
}
std::wstring cg_remove_command(command_context& ctx)
{
int layer = get_and_validate_layer(ctx.parameters.at(0));
- ctx.cg_registry->get_proxy(spl::make_shared_ptr(ctx.channel.channel), ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))->remove(layer);
+ get_expected_cg_proxy(ctx)->remove(layer);
return L"202 CG OK\r\n";
}
dataString = read_file(boost::filesystem::path(filename));
}
- ctx.cg_registry->get_proxy(
- spl::make_shared_ptr(ctx.channel.channel),
- ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))
- ->update(layer, dataString);
+ get_expected_cg_proxy(ctx)->update(layer, dataString);
return L"202 CG OK\r\n";
}
std::wstringstream replyString;
replyString << L"201 CG OK\r\n";
int layer = get_and_validate_layer(ctx.parameters.at(0));
- auto result = ctx.cg_registry->get_proxy(
- spl::make_shared_ptr(ctx.channel.channel),
- ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))
- ->invoke(layer, ctx.parameters.at(1));
+ auto result = get_expected_cg_proxy(ctx)->invoke(layer, ctx.parameters.at(1));
replyString << result << L"\r\n";
return replyString.str();
if (ctx.parameters.empty())
{
- auto info = ctx.cg_registry->get_proxy(
- spl::make_shared_ptr(ctx.channel.channel),
- ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))
- ->template_host_info();
+ auto info = get_expected_cg_proxy(ctx)->template_host_info();
replyString << info << L"\r\n";
}
else
{
int layer = get_and_validate_layer(ctx.parameters.at(0));
- auto desc = ctx.cg_registry->get_proxy(
- spl::make_shared_ptr(ctx.channel.channel),
- ctx.layer_index(core::cg_proxy::DEFAULT_LAYER))
- ->description(layer);
+ auto desc = get_expected_cg_proxy(ctx)->description(layer);
replyString << desc << L"\r\n";
}