]> git.sesse.net Git - casparcg/commitdiff
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 27 Oct 2011 22:27:55 +0000 (22:27 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Thu, 27 Oct 2011 22:27:55 +0000 (22:27 +0000)
14 files changed:
core/producer/frame_producer.cpp
core/producer/frame_producer.h
core/producer/transition/transition_producer.cpp
modules/decklink/interop/DeckLinkAPI_h.h
modules/decklink/interop/DeckLinkAPI_i.c
modules/ffmpeg/StdAfx.h
modules/ffmpeg/producer/audio/audio_decoder.cpp
modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ffmpeg/producer/filter/filter.h
modules/ffmpeg/producer/input/input.cpp
modules/ffmpeg/producer/muxer/frame_muxer.cpp
modules/ffmpeg/producer/video/video_decoder.cpp
modules/flash/producer/flash_producer.cpp
protocol/amcp/AMCPCommandsImpl.cpp

index 67df9d615da7078e3647a40162d2d24a718a38a7..987a72ec70c804a67409f690828e24eb13e20acf 100644 (file)
@@ -106,7 +106,7 @@ public:
        virtual safe_ptr<basic_frame>           receive(int hints)                                                                                              {return producer_->receive(hints);}\r
        virtual safe_ptr<basic_frame>           last_frame() const                                                                                              {return producer_->last_frame();}\r
        virtual std::wstring                            print() const                                                                                                   {return producer_->print();}\r
-       virtual void                                            param(const std::wstring& str)                                                                  {producer_->param(str);}\r
+       virtual bool                                            param(const std::wstring& str)                                                                  {return producer_->param(str);}\r
        virtual safe_ptr<frame_producer>        get_following_producer() const                                                                  {return producer_->get_following_producer();}\r
        virtual void                                            set_leading_producer(const safe_ptr<frame_producer>& producer)  {producer_->set_leading_producer(producer);}\r
        virtual int64_t                                         nb_frames() const                                                                                               {return producer_->nb_frames();}\r
index c19fec2118cc0df1ffcf3f5635c85c0f202cb414..19a8a6cdd28130b0b3a6aef257465d1f820470af 100644 (file)
@@ -52,7 +52,7 @@ public:
 \r
        virtual std::wstring print() const = 0; // nothrow\r
 \r
-       virtual void param(const std::wstring&){}\r
+       virtual bool param(const std::wstring&){return false;}\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
index c0bd9b1662ce9d13f77da79c5d0481d6672c97b7..dc491ec5f53b8b5ec4940a780a6abec68e999831 100644 (file)
@@ -106,6 +106,11 @@ struct transition_producer : public frame_producer
                return L"transition[" + source_producer_->print() + L"|" + dest_producer_->print() + L"]";\r
        }\r
        \r
+       virtual bool param(const std::wstring& str)\r
+       {\r
+               return get_following_producer()->param(str);\r
+       }\r
+       \r
        // transition_producer\r
                                                \r
        safe_ptr<basic_frame> compose(const safe_ptr<basic_frame>& dest_frame, const safe_ptr<basic_frame>& src_frame) \r
index 7ed6b0ae601041f995bf301343615eb037ef2d2a..59828dc95f61570804e013045fa396c0ed27de1d 100644 (file)
@@ -4,7 +4,7 @@
 \r
 \r
  /* File created by MIDL compiler version 7.00.0555 */\r
-/* at Wed Oct 26 20:20:42 2011\r
+/* at Thu Oct 27 23:11:42 2011\r
  */\r
 /* Compiler settings for interop\DeckLinkAPI.idl:\r
     Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
index 84261f4cc12bde261edf920d2b97a585bb1464dd..b4f30def5bc5888e93ff8b74d8fc3ae32117fbab 100644 (file)
@@ -6,7 +6,7 @@
 \r
 \r
  /* File created by MIDL compiler version 7.00.0555 */\r
-/* at Wed Oct 26 20:20:42 2011\r
+/* at Thu Oct 27 23:11:42 2011\r
  */\r
 /* Compiler settings for interop\DeckLinkAPI.idl:\r
     Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555 \r
index 958e3ccdaf73493c633dc69403ed40c51e0dbf48..812dc8524e330c56d9bc37f71e4af6051f30ea4d 100644 (file)
@@ -29,6 +29,7 @@
 #include <crtdbg.h>\r
 #endif\r
 \r
+#define _SCL_SECURE_NO_WARNINGS \r
 #define NOMINMAX\r
 \r
 #include <memory>\r
index 13d607b9c2e24e14b39fe0f6f31b560fde010959..3b217643c0be36109532d62a6e5e157ea7acf90e 100644 (file)
@@ -89,6 +89,8 @@ public:
 \r
        virtual void run()\r
        {\r
+               win32_exception::install_handler();\r
+\r
                try\r
                {\r
                        while(true)\r
index 8671ac1545bcc21dd7ffe66ef035cfc33d901bdc..1db34675b745c716e7a6e48716e72f35eff6504d 100644 (file)
@@ -44,6 +44,7 @@
 #include <boost/filesystem.hpp>\r
 #include <boost/range/algorithm/find_if.hpp>\r
 #include <boost/range/algorithm/find.hpp>\r
+#include <boost/algorithm/string/split.hpp>\r
 \r
 #include <agents.h>\r
 #include <concrt.h>\r
@@ -184,15 +185,17 @@ public:
                return nb_frames - start_;\r
        }\r
 \r
-       virtual void param(const std::wstring& param)\r
+       virtual bool param(const std::wstring& param)\r
        {\r
-               typedef std::istream_iterator<std::wstring, wchar_t, std::char_traits<wchar_t>> wistream_iterator;\r
-               std::wstringstream str(param);\r
                std::vector<std::wstring> params;\r
-               std::copy(wistream_iterator(str), wistream_iterator(), std::back_inserter(params));\r
+               boost::split(params, param, boost::is_any_of(" "), boost::token_compress_on);\r
 \r
                if(boost::iequals(params.at(0), L"LOOP"))\r
+               {\r
                        input_.loop(boost::lexical_cast<bool>(params.at(1)));\r
+                       return true;\r
+               }\r
+               return false;\r
        }\r
                                \r
        virtual std::wstring print() const\r
index 333722111607fb011618a79a408e27f3360106bd..d33f54a275bf97dcf56a1a670e031d0915a07e65 100644 (file)
@@ -3,6 +3,7 @@
 #include <common/memory/safe_ptr.h>\r
 \r
 #include <boost/noncopyable.hpp>\r
+#include <boost/algorithm/string/case_conv.hpp>\r
 \r
 #include <string>\r
 #include <vector>\r
@@ -14,10 +15,10 @@ namespace caspar { namespace ffmpeg {
                \r
 static bool is_double_rate(const std::wstring& filters)\r
 {\r
-       if(filters.find(L"YADIF=1") != std::string::npos)\r
+       if(boost::to_upper_copy(filters).find(L"YADIF=1") != std::string::npos)\r
                return true;\r
        \r
-       if(filters.find(L"YADIF=3") != std::string::npos)\r
+       if(boost::to_upper_copy(filters).find(L"YADIF=3") != std::string::npos)\r
                return true;\r
 \r
        return false;\r
@@ -25,7 +26,7 @@ static bool is_double_rate(const std::wstring& filters)
 \r
 static bool is_deinterlacing(const std::wstring& filters)\r
 {\r
-       if(filters.find(L"YADIF") != std::string::npos)\r
+       if(boost::to_upper_copy(filters).find(L"YADIF") != std::string::npos)\r
                return true;    \r
        return false;\r
 }\r
index 82f9dcf6ae5dd6c4da249183142f2cbd6b0af29f..c886bb8ef20b72a9c28378445e84e61e29be7089 100644 (file)
@@ -115,6 +115,8 @@ public:
                        seek_frame(start_);\r
                                                                \r
                graph_->set_color("seek", diagnostics::color(1.0f, 0.5f, 0.0f));\r
+               graph_->set_color("buffer-count", diagnostics::color(0.7f, 0.4f, 0.4f));\r
+               graph_->set_color("buffer-size", diagnostics::color(1.0f, 1.0f, 0.0f)); \r
                                \r
                is_running_ = true;\r
        }\r
@@ -134,9 +136,10 @@ public:
        \r
        virtual void run()\r
        {\r
+               win32_exception::install_handler();\r
+\r
                try\r
                {\r
-                       win32_exception::install_handler();\r
                        for(auto packet = read_next_packet(); packet && is_running_; packet = read_next_packet())\r
                        {                               \r
                                Concurrency::asend(target_, make_safe_ptr(packet));\r
@@ -202,6 +205,9 @@ public:
                \r
                ++packets_count_;\r
                packets_size_ += size;\r
+               \r
+               graph_->update_value("buffer-size", (packets_size_+0.001)/MAX_PACKETS_SIZE);\r
+               graph_->update_value("buffer-count", (packets_count_+0.001)/MAX_PACKETS_COUNT);\r
 \r
                auto self = shared_from_this();\r
                packet = safe_ptr<AVPacket>(packet.get(), [this, self, packet, size, data](AVPacket*)\r
@@ -211,6 +217,9 @@ public:
                        --packets_count_;\r
                        packets_size_ -= size;\r
                        event_.set();\r
+\r
+                       graph_->update_value("buffer-size", (packets_size_+0.001)/MAX_PACKETS_SIZE);\r
+                       graph_->update_value("buffer-count", (packets_count_+0.001)/MAX_PACKETS_COUNT);\r
                });\r
 \r
                if(is_running_ && (packets_count_ > MAX_PACKETS_COUNT || packets_size_ > MAX_PACKETS_SIZE))\r
index 62e402e2f88e72ea03ae2cf3c2b25356ce1099a7..2db845dc40aec98c5a78571660ee23a76da80e23 100644 (file)
@@ -114,15 +114,15 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                return receive_video();\r
        }\r
        \r
-       std::shared_ptr<core::audio_buffer> receive_audio(size_t n_samples)\r
+       std::shared_ptr<core::audio_buffer> receive_audio()\r
        {               \r
                if(!audio_source_)\r
-                       return make_safe<core::audio_buffer>(n_samples, 0);\r
+                       return make_safe<core::audio_buffer>(format_desc_.audio_samples_per_frame, 0);\r
                                        \r
-               if(audio_data_.size() >= n_samples)\r
+               if(audio_data_.size() >= format_desc_.audio_samples_per_frame)\r
                {\r
                        auto begin = audio_data_.begin(); \r
-                       auto end   = begin + n_samples;\r
+                       auto end   = begin + format_desc_.audio_samples_per_frame;\r
                        auto audio = make_safe<core::audio_buffer>(begin, end);\r
                        audio_data_.erase(begin, end);\r
                        return audio;\r
@@ -145,17 +145,18 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                audio_data_.insert(audio_data_.end(), audio->begin(), audio->end());    \r
                audio.reset();\r
                \r
-               return receive_audio(n_samples);\r
+               return receive_audio();\r
        }\r
                        \r
        virtual void run()\r
        {\r
+               win32_exception::install_handler();\r
+\r
                try\r
                {\r
                        while(display())\r
                        {       \r
-                       }\r
-                               \r
+                       }                               \r
                }\r
                catch(...)\r
                {\r
@@ -175,7 +176,7 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                if(!video)\r
                        return false;\r
 \r
-               auto audio = receive_audio(format_desc_.audio_samples_per_frame);\r
+               auto audio = receive_audio();\r
                if(!audio)\r
                        return false;\r
                                \r
@@ -196,7 +197,7 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                                send(target_, frame_muxer2::target_element_t(video, ticket));\r
                                                                \r
                                auto video2 = make_safe<core::write_frame>(*video);     \r
-                               auto audio2 = receive_audio(format_desc_.audio_samples_per_frame);\r
+                               auto audio2 = receive_audio();\r
 \r
                                if(audio2)\r
                                {\r
index 84aa73ccedb6c0edc11cdda6178bf18a9524e1fb..9aafd526ada278af97ac8848328e5969c84c57cf 100644 (file)
@@ -93,6 +93,8 @@ public:
 \r
        virtual void run()\r
        {\r
+               win32_exception::install_handler();\r
+\r
                try\r
                {\r
                        while(true)\r
index ee40bbfe1bae33db0318ddee1b34bbac9cdfec72..bee63d72a2bf3325a8b1b47f21b8dfe4eac238d0 100644 (file)
@@ -200,11 +200,14 @@ public:
                CASPAR_LOG(info) << print() << L" Thread ended.";\r
        }\r
        \r
-       void param(const std::wstring& param)\r
+       bool param(const std::wstring& param)\r
        {               \r
-               if(!ax_->FlashCall(param))\r
+               bool success = ax_->FlashCall(param); \r
+               if(!success)\r
                        CASPAR_LOG(warning) << print() << L" Flash call failed:" << param;//BOOST_THROW_EXCEPTION(invalid_operation() << msg_info("Flash function call failed.") << arg_name_info("param") << arg_value_info(narrow(param)));\r
-               graph_->add_tag("param");\r
+               else\r
+                       graph_->add_tag("param");\r
+               return success;\r
        }\r
        \r
        safe_ptr<core::basic_frame> operator()()\r
@@ -376,7 +379,7 @@ public:
                return last_frame_.value();\r
        }               \r
        \r
-       virtual void param(const std::wstring& param) \r
+       virtual bool param(const std::wstring& param) \r
        {       \r
                if(!is_running_.fetch_and_store(true))\r
                {\r
@@ -384,6 +387,7 @@ public:
                        start();\r
                }\r
                asend(params_, param);\r
+               return true;\r
        }\r
                \r
        virtual std::wstring print() const\r
index 609619931f1c6c2db81e47faf828e600a5c89e62..44e907968bf10357fd5480f6241a691460a13744 100644 (file)
@@ -206,11 +206,19 @@ bool ParamCommand::DoExecute()
                for(auto it = std::begin(_parameters2)+2; it != std::end(_parameters2); ++it)\r
                        param += L" " + *it;\r
 \r
+               bool success = false;\r
+               \r
                if(what == L"B")\r
-                       GetChannel()->stage()->background(GetLayerIndex()).get()->param(param);\r
+                       success = GetChannel()->stage()->background(GetLayerIndex()).get()->param(param);\r
                else if(what == L"F")\r
-                       GetChannel()->stage()->foreground(GetLayerIndex()).get()->param(param);\r
+                       success = GetChannel()->stage()->foreground(GetLayerIndex()).get()->param(param);\r
        \r
+               if(!success)\r
+               {\r
+                       SetReplyString(TEXT("502 PARAM FAILED\r\n"));\r
+                       return false;\r
+               }\r
+\r
                CASPAR_LOG(info) << "Executed param: " <<  _parameters[0] << TEXT(" successfully");\r
 \r
                SetReplyString(TEXT("202 PARAM OK\r\n"));\r