#define __STDC_LIMIT_MACROS\r
#include <libavformat/avformat.h>\r
#include <libswscale/swscale.h>\r
+ #include <libavutil/avutil.h>\r
+ #include <libavfilter/avfilter.h>\r
}\r
\r
namespace caspar {\r
return str.str();\r
}\r
\r
+std::wstring get_avutil_version()\r
+{\r
+ std::wstringstream str;\r
+ str << ((avutil_version() >> 16) & 0xFF) << L"." << ((avutil_version() >> 8) & 0xFF) << L"." << ((avutil_version() >> 0) & 0xFF);\r
+ return str.str();\r
+}\r
+\r
+std::wstring get_avfilter_version()\r
+{\r
+ std::wstringstream str;\r
+ str << ((avfilter_version() >> 16) & 0xFF) << L"." << ((avfilter_version() >> 8) & 0xFF) << L"." << ((avfilter_version() >> 0) & 0xFF);\r
+ return str.str();\r
+}\r
+\r
std::wstring get_swscale_version()\r
{\r
std::wstringstream str;\r
\r
std::wstring get_avcodec_version();\r
std::wstring get_avformat_version();\r
+std::wstring get_avutil_version();\r
+std::wstring get_avfilter_version();\r
std::wstring get_swscale_version();\r
\r
}
\ No newline at end of file
if(loop_)\r
{\r
seek_frame(start_, AVSEEK_FLAG_BACKWARD);\r
- // AVCodecContext.frame_number is not reset. Increase the target frame_number.\r
- eof_count_ += length_; \r
- graph_->add_tag("seek"); \r
+ eof_count_ += length_; // AVCodecContext.frame_number is not reset. Increase the target frame_number.\r
+ graph_->add_tag("seek"); \r
+ CASPAR_LOG(info) << print() << " Received EOF. Looping."; \r
} \r
else\r
+ {\r
stop();\r
+ CASPAR_LOG(info) << print() << " Received EOF. Stopping.";\r
+ }\r
}\r
else if(errn < 0)\r
{\r
BOOST_THROW_EXCEPTION(\r
- invalid_operation() <<\r
+ file_read_error() <<\r
msg_info(av_error_str(errn)) <<\r
source_info(narrow(print())) << \r
boost::errinfo_api_function("av_read_frame") <<\r
if(length_ != -1)\r
return get_default_context()->frame_number > eof_count_; \r
\r
- return errn == AVERROR_EOF;\r
+ if(-errn == EIO)\r
+ CASPAR_LOG(warning) << print() << " Received EIO, assuming EOF";\r
+\r
+ return errn == AVERROR_EOF || -errn == EIO; // av_read_frame doesn't always correctly return AVERROR_EOF;\r
}\r
\r
packet get_packet(tbb::concurrent_bounded_queue<packet>& buffer)\r
CASPAR_LOG(info) << device;\r
\r
CASPAR_LOG(info) << L"FFMPEG-avcodec " << caspar::get_avcodec_version();\r
- CASPAR_LOG(info) << L"FFMPEG-swscale " << caspar::get_avformat_version();\r
- CASPAR_LOG(info) << L"FFMPEG-avformat " << caspar::get_swscale_version();\r
+ CASPAR_LOG(info) << L"FFMPEG-avformat " << caspar::get_avformat_version();\r
+ CASPAR_LOG(info) << L"FFMPEG-avformat " << caspar::get_avfilter_version();\r
+ CASPAR_LOG(info) << L"FFMPEG-avformat " << caspar::get_avutil_version();\r
+ CASPAR_LOG(info) << L"FFMPEG-swscale " << caspar::get_swscale_version();\r
CASPAR_LOG(info) << L"OpenGL " << caspar::core::ogl_device::get_version() << "\n\n";\r
}\r
\r