#pragma once\r
\r
+#include <common/exception/exceptions.h>\r
+\r
#include <string>\r
\r
#pragma warning(push, 1)\r
\r
#pragma warning(pop)\r
\r
-namespace caspar {\r
+namespace caspar { namespace ffmpeg {\r
+\r
+struct ffmpeg_error : virtual caspar_exception{};\r
\r
static std::string av_error_str(int errn)\r
{\r
return std::string(buf);\r
}\r
\r
-}
\ No newline at end of file
+#define THROW_ON_ERROR(ret, source, func) \\r
+ if(ret < 0) \\r
+ { \\r
+ BOOST_THROW_EXCEPTION( \\r
+ ffmpeg_error() << \\r
+ msg_info(av_error_str(ret)) << \\r
+ source_info(narrow(source)) << \\r
+ boost::errinfo_api_function(func) << \\r
+ boost::errinfo_errno(AVUNERROR(ret))); \\r
+ }\r
+\r
+#define THROW_ON_ERROR_STR_(call) #call\r
+#define THROW_ON_ERROR_STR(call) THROW_ON_ERROR_STR_(call)\r
+\r
+#define THROW_ON_ERROR2(call, source) \\r
+ [&]() -> int \\r
+ { \\r
+ int ret = call; \\r
+ if(ret < 0) \\r
+ { \\r
+ BOOST_THROW_EXCEPTION( \\r
+ ffmpeg_error() << \\r
+ msg_info(av_error_str(ret)) << \\r
+ source_info(narrow(source)) << \\r
+ boost::errinfo_api_function(THROW_ON_ERROR_STR(call)) << \\r
+ boost::errinfo_errno(AVUNERROR(ret))); \\r
+ } \\r
+ return ret; \\r
+ }();\r
+\r
+}}
\ No newline at end of file