\r
#include "executor.h"\r
\r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
#include <Windows.h>\r
\r
#include <boost/noncopyable.hpp>\r
\r
#include "exceptions.h"\r
\r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
#include <windows.h>\r
\r
namespace caspar {\r
*/\r
#pragma once\r
\r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
#include <windows.h>\r
\r
#include <string>\r
*/\r
#pragma once\r
\r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
#include <windows.h>\r
\r
#include <string>\r
*/\r
#pragma once\r
\r
+#define NOMINMAX\r
+\r
#include <windows.h>\r
\r
namespace caspar {\r
virtual safe_ptr<basic_frame> receive(int){return basic_frame::empty();}\r
virtual safe_ptr<basic_frame> last_frame() const{return basic_frame::empty();}\r
virtual void set_frame_factory(const safe_ptr<frame_factory>&){}\r
+ virtual int64_t nb_frames() const {return 0;}\r
virtual std::wstring print() const { return L"empty";}\r
};\r
static safe_ptr<frame_producer> producer = make_safe<empty_frame_producer>();\r
#include <string>\r
#include <vector>\r
#include <stdint.h>\r
+#include <numeric>\r
\r
namespace caspar { namespace core {\r
\r
virtual safe_ptr<frame_producer> get_following_producer() const {return frame_producer::empty();} // nothrow\r
virtual void set_leading_producer(const safe_ptr<frame_producer>&) {} // nothrow\r
\r
- virtual int64_t nb_frames() const {return 0;}\r
+ virtual int64_t nb_frames() const {return std::numeric_limits<int64_t>::max();}\r
\r
virtual safe_ptr<basic_frame> receive(int hints) = 0;\r
virtual safe_ptr<core::basic_frame> last_frame() const = 0;\r
: foreground_(frame_producer::empty())\r
, background_(frame_producer::empty())\r
, is_paused_(false)\r
- , auto_play_delta_(-1){}\r
+ , auto_play_delta_(-1)\r
+ , frame_number_(0){}\r
\r
- void pause(){is_paused_ = true;}\r
- void resume(){is_paused_ = false;}\r
+ void pause()\r
+ {\r
+ is_paused_ = true;\r
+ }\r
+\r
+ void resume()\r
+ {\r
+ is_paused_ = false;\r
+ }\r
\r
void load(const safe_ptr<frame_producer>& producer, bool preview, int auto_play_delta)\r
{ \r
- background_ = producer;\r
-\r
- if(auto_play_delta > -1)\r
- {\r
- if(foreground_->nb_frames() > 0)\r
- auto_play_delta_ = auto_play_delta;\r
- else\r
- CASPAR_LOG(warning) << foreground_->print() << L" Producer in foreground does not support auto-play.";\r
- }\r
+ background_ = producer;\r
+ auto_play_delta_ = auto_play_delta;\r
\r
if(preview) // Play the first frame and pause.\r
{ \r
receive();\r
pause();\r
}\r
-\r
- if(auto_play_delta >= 0 && foreground_ == frame_producer::empty())\r
- play();\r
}\r
\r
void play()\r
if(frame == core::basic_frame::late())\r
return foreground_->last_frame();\r
\r
- if(auto_play_delta_ == 0)\r
- {\r
- if(frame == core::basic_frame::eof())\r
- {\r
- CASPAR_ASSERT(frames_left == 0);\r
-\r
- CASPAR_LOG(info) << L"Automatically playing next clip with " << auto_play_delta_ << " frames offset.";\r
- \r
- play();\r
- frame = receive();\r
- }\r
- }\r
- else if(auto_play_delta_ > 0)\r
+ if(auto_play_delta_ >= 0)\r
{\r
if(frames_left <= 0 || frame == core::basic_frame::eof())\r
{\r
safe_ptr<basic_frame> fill_;\r
safe_ptr<basic_frame> key_;\r
safe_ptr<basic_frame> last_frame_;\r
- int64_t nb_frames_;\r
\r
explicit separated_producer(const safe_ptr<frame_producer>& fill, const safe_ptr<frame_producer>& key) \r
: fill_producer_(fill)\r
\r
virtual std::wstring print() const\r
{\r
- return L"separated";\r
+ return L"separated[fill:" + fill_producer_->print() + L"|key:" + key_producer_->print() + L"]";\r
} \r
\r
virtual int64_t nb_frames() const \r
{\r
- return std::min(fill_producer_->nb_frames() > 0 ? fill_producer_->nb_frames() : std::numeric_limits<int64_t>::max(), \r
- key_producer_->nb_frames() > 0 ? key_producer_->nb_frames() : std::numeric_limits<int64_t>::max());\r
+ return std::min(fill_producer_->nb_frames(), key_producer_->nb_frames());\r
}\r
};\r
\r
#include <crtdbg.h>\r
#endif\r
\r
+#define NOMINMAX\r
+\r
#include <Windows.h>\r
\r
#include <memory>\r
#include <crtdbg.h>\r
#endif\r
\r
+#define NOMINMAX\r
+\r
+#include <Windows.h>\r
+\r
#include <memory>\r
#include <array>\r
#include <functional>\r
virtual int64_t nb_frames() const \r
{\r
if(loop_)\r
- return 0;\r
+ return std::numeric_limits<int64_t>::max();\r
\r
// This function estimates nb_frames until input has read all packets for one loop, at which point the count should be accurate.\r
\r
*/\r
\r
#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
\r
#include <windows.h>\r
#include <GL/glew.h>\r
#endif\r
\r
#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
\r
#include <windows.h>\r
+#include <mmsystem.h>\r
#include <atlbase.h>\r
\r
#include <protocol/amcp/AMCPProtocolStrategy.h>\r