]> git.sesse.net Git - casparcg/blobdiff - protocol/cii/CIIProtocolStrategy.h
[streaming_consumer] Implemented support for separating audio channels into separate...
[casparcg] / protocol / cii / CIIProtocolStrategy.h
index c44ddfda39be4ae3f48c4ea4839f4a9e6057a821..46e2fc9e1f1f765c82a71973610c86f98cf25953 100644 (file)
 #include "CIICommand.h"
 
 #include <core/producer/stage.h>
+#include <core/producer/cg_proxy.h>
 
 #include <common/executor.h>
+#include <common/memory.h>
 
 #include <string>
 
@@ -38,14 +40,20 @@ namespace caspar { namespace protocol { namespace cii {
 class CIIProtocolStrategy : public IO::IProtocolStrategy
 {
 public:
-       CIIProtocolStrategy(const std::vector<spl::shared_ptr<core::video_channel>>& channels);
+       CIIProtocolStrategy(
+                       const std::vector<spl::shared_ptr<core::video_channel>>& channels,
+                       const spl::shared_ptr<core::cg_producer_registry>& cg_registry,
+                       const spl::shared_ptr<const core::frame_producer_registry>& producer_registry);
 
        void Parse(const std::wstring& message, IO::ClientInfoPtr pClientInfo);
-       std::string GetCodepage() {return "ISO-8859-1";}        //ISO 8859-1
+       std::string GetCodepage() const { return "ISO-8859-1"; }        //ISO 8859-1
 
        void SetProfile(const std::wstring& profile) {currentProfile_ = profile;}
 
-       spl::shared_ptr<core::video_channel> GetChannel() const{return this->pChannel_;}
+       spl::shared_ptr<core::video_channel> GetChannel() const { return pChannel_; }
+       spl::shared_ptr<core::cg_producer_registry> get_cg_registry() const { return cg_registry_; }
+       spl::shared_ptr<const core::frame_producer_registry> get_producer_registry() const { return producer_registry_; }
+       core::frame_producer_dependencies get_dependencies() const { return core::frame_producer_dependencies(GetChannel()->frame_factory(), channels_, GetChannel()->video_format_desc(), producer_registry_); }
 
        void DisplayMediaFile(const std::wstring& filename);
        void DisplayTemplate(const std::wstring& titleName);
@@ -57,10 +65,12 @@ public:
                TitleHolder() : titleName(L""), pframe_producer(core::frame_producer::empty())  {}
                TitleHolder(const std::wstring& name, spl::shared_ptr<core::frame_producer> pFP) : titleName(name), pframe_producer(pFP) {}
                TitleHolder(const TitleHolder& th) : titleName(th.titleName), pframe_producer(th.pframe_producer) {}
-               const TitleHolder& operator=(const TitleHolder& th) 
+               TitleHolder& operator=(const TitleHolder& th) 
                {
                        titleName = th.titleName;
                        pframe_producer = th.pframe_producer;
+
+                       return *this;
                }
                bool operator==(const TitleHolder& rhs) 
                {
@@ -76,7 +86,7 @@ private:
        typedef std::list<TitleHolder> TitleList;
        TitleList titles_;
        spl::shared_ptr<core::frame_producer> GetPreparedTemplate(const std::wstring& name);
-       void PutPreparedTemplate(const std::wstring& name, spl::shared_ptr<core::frame_producer>& pframe_producer);
+       void PutPreparedTemplate(const std::wstring& name, const spl::shared_ptr<core::frame_producer>& pframe_producer);
 
        static const wchar_t TokenDelimiter;
        static const std::wstring MessageDelimiter;
@@ -90,6 +100,9 @@ private:
 
        std::wstring currentProfile_;
        spl::shared_ptr<core::video_channel> pChannel_;
+       spl::shared_ptr<core::cg_producer_registry> cg_registry_;
+       spl::shared_ptr<const core::frame_producer_registry> producer_registry_;
+       std::vector<spl::shared_ptr<core::video_channel>> channels_;
 };
 
-}}}
\ No newline at end of file
+}}}