]> git.sesse.net Git - casparcg/commitdiff
2.0. auto-play: Improved and refactored.
authorRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 9 Aug 2011 19:18:07 +0000 (19:18 +0000)
committerRonag <Ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Tue, 9 Aug 2011 19:18:07 +0000 (19:18 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1114 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

14 files changed:
common/concurrency/com_context.h
common/exception/win32_exception.h
common/os/windows/current_version.h
common/os/windows/system_info.h
common/utility/timer.h
core/producer/frame_producer.cpp
core/producer/frame_producer.h
core/producer/layer.cpp
core/producer/separated/separated_producer.cpp
modules/bluefish/StdAfx.h
modules/decklink/StdAfx.h
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ogl/consumer/ogl_consumer.cpp
shell/main.cpp

index 242f165791ec4fd2cc5920416afba74b5dea8976..8717d7e5c3191a2f62036708f2dbdc1ace9b68ff 100644 (file)
@@ -2,6 +2,9 @@
 \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
index a004ea65dada65e0ee961ee50dd6a1fbbb7dc5e2..fb7425332af60290075b0f49a821b224bdd4f4ab 100644 (file)
@@ -21,6 +21,9 @@
 \r
 #include "exceptions.h"\r
 \r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
 #include <windows.h>\r
 \r
 namespace caspar {\r
index 8aa44d9a45958a8f42e9656dc8d13516384571a2..74c78fb18fdc0b03244cdac297c13d2e5305631f 100644 (file)
@@ -19,6 +19,9 @@
 */\r
 #pragma once\r
 \r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
 #include <windows.h>\r
 \r
 #include <string>\r
index a08b6fc64f1303db9a24258c3460a1556adba722..1c4f7aec270d69d883fec3fa6b4da73c1dde66ff 100644 (file)
@@ -19,6 +19,9 @@
 */\r
 #pragma once\r
 \r
+#define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
+\r
 #include <windows.h>\r
 \r
 #include <string>\r
index fe1ca592c9db2217d6a632e045ab7f89b6ce880f..122d0eaaf7033d6868ab64bd8939484ad759c943 100644 (file)
@@ -19,6 +19,8 @@
 */\r
 #pragma once\r
 \r
+#define NOMINMAX\r
+\r
 #include <windows.h>\r
 \r
 namespace caspar {\r
index a115f0dfaa6b30f558d382ba8b77ad13c3796d90..25725299ba038a3a62749cabd3af1f5d0d6d00be 100644 (file)
@@ -41,6 +41,7 @@ const safe_ptr<frame_producer>& frame_producer::empty() // nothrow
                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
index 3202d93e89a5ae97923d3e972604b8bf945b8994..584970502ab3942dfd04a3d6ed0c9210099c35eb 100644 (file)
@@ -27,6 +27,7 @@
 #include <string>\r
 #include <vector>\r
 #include <stdint.h>\r
+#include <numeric>\r
 \r
 namespace caspar { namespace core {\r
 \r
@@ -51,7 +52,7 @@ public:
        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
index 3e575cac2cd2545be9a6dc46aa8c56f73a9a9e7e..a3d67e5a1512eb8062dc3408cc51529df27f8739 100644 (file)
@@ -39,22 +39,23 @@ public:
                : 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
@@ -62,9 +63,6 @@ public:
                        receive();\r
                        pause();\r
                }\r
-\r
-               if(auto_play_delta >= 0 && foreground_ == frame_producer::empty())\r
-                       play();\r
        }\r
        \r
        void play()\r
@@ -96,19 +94,7 @@ public:
                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
index 08d41e4a3f4075d7353c030bd2b2b22b14730d4f..1dd86e00e2a25f2d7dda65c22855ed073d6b460e 100644 (file)
@@ -32,7 +32,6 @@ struct separated_producer : public frame_producer
        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
@@ -73,13 +72,12 @@ struct separated_producer : public frame_producer
 \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
index 164405c475e023d4eeaa80dcc7143c4506d8965b..a0c04774589b9d9c9beb5f4678a3edf6c5540011 100644 (file)
@@ -29,6 +29,8 @@
 #include <crtdbg.h>\r
 #endif\r
 \r
+#define NOMINMAX\r
+\r
 #include <Windows.h>\r
 \r
 #include <memory>\r
index a69c11185d5679deb90addbac580c802fc8c107f..ed0c0c00e1fd46af6f07aacba44084fd6694f40c 100644 (file)
 #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
index 103ede1efe561aa5af37641902a68e9719b8faad..115b663954a24143b4dfb260af446fb3c25beb04 100644 (file)
@@ -191,7 +191,7 @@ public:
        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
index 6a62905075e757466a3ae90341f7eee9063585f3..313991c5f7e0d6219fc3d8f06d4d8955625bebf1 100644 (file)
@@ -19,6 +19,7 @@
 */\r
 \r
 #define NOMINMAX\r
+#define WIN32_LEAN_AND_MEAN\r
 \r
 #include <windows.h>\r
 #include <GL/glew.h>\r
index 2b016d0da6a8bd2f7ba85485e85775a07a13eb76..98b8a25d777cd3fc066f5d374292f1331cc4ae7b 100644 (file)
 #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