]> git.sesse.net Git - casparcg/commitdiff
2.0. decklink_producer: Reduced frame latency.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 22 Jun 2011 09:30:30 +0000 (09:30 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Wed, 22 Jun 2011 09:30:30 +0000 (09:30 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@939 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/decklink/interop/DeckLinkAPI_h.h
modules/decklink/interop/DeckLinkAPI_i.c
modules/decklink/producer/decklink_producer.cpp

index bcf70e2d4a0fe597bffefc96f78e5e82fd3e5a2d..9218a2e6544ba7b64bb9213ef839e0caa66aaf33 100644 (file)
@@ -4,7 +4,7 @@
 \r
 \r
  /* File created by MIDL compiler version 7.00.0555 */\r
-/* at Tue Jun 21 10:00:55 2011\r
+/* at Tue Jun 21 16:03:08 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 55db3f13253ee8ec9d24fad51fc826c9c27390f7..d1fba2e09753764066805b14c4ef56d2c9d47475 100644 (file)
@@ -6,7 +6,7 @@
 \r
 \r
  /* File created by MIDL compiler version 7.00.0555 */\r
-/* at Tue Jun 21 10:00:55 2011\r
+/* at Tue Jun 21 16:03:08 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 f1933b7f928cdfa4a8b8e619b5a113ab9cf40647..f9c8be8df30cce8923cd7b7c17b435c653edf8c8 100644 (file)
@@ -39,7 +39,6 @@
 \r
 #include <tbb/concurrent_queue.h>\r
 #include <tbb/atomic.h>\r
-#include <tbb/task_group.h>\r
 \r
 #include <boost/algorithm/string.hpp>\r
 #include <boost/timer.hpp>\r
@@ -77,7 +76,6 @@ class frame_filter
        std::unique_ptr<filter>                                 filter_;\r
        safe_ptr<core::frame_factory>                   frame_factory_;\r
        std::deque<std::vector<int16_t>>                audio_buffer_;\r
-       tbb::task_group                                                 task_group_;\r
 \r
        std::vector<safe_ptr<AVFrame>>                  buffer_;\r
 \r
@@ -103,18 +101,10 @@ public:
 \r
                audio_buffer_.push_back(std::move(input_frame->audio_data()));\r
                \r
-               task_group_.wait();\r
-\r
-               filter_->push(av_frame);                \r
+               filter_->push(av_frame);        \r
+               buffer_ = filter_->poll();      \r
                \r
-               bool result = try_pop(output_frame);\r
-\r
-               task_group_.run([this]\r
-               {\r
-                       buffer_ = filter_->poll();\r
-               });\r
-\r
-               return result;  \r
+               return try_pop(output_frame);\r
        }\r
 \r
 private:               \r
@@ -237,7 +227,7 @@ public:
 \r
        virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived(IDeckLinkVideoInputFrame* video, IDeckLinkAudioInputPacket* audio)\r
        {       \r
-               if(!video || video->GetWidth() != static_cast<int>(format_desc_.width) || video->GetHeight() != static_cast<int>(format_desc_.height))\r
+               if(!video)\r
                        return S_OK;\r
 \r
                try\r
@@ -251,9 +241,9 @@ public:
                                                \r
                        core::pixel_format_desc desc;\r
                        desc.pix_fmt = core::pixel_format::ycbcr;\r
-                       desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width,   format_desc_.height, 1));\r
-                       desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1));\r
-                       desc.planes.push_back(core::pixel_format_desc::plane(format_desc_.width/2, format_desc_.height, 1));                    \r
+                       desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth(),   video->GetHeight(), 1));\r
+                       desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth()/2, video->GetHeight(), 1));\r
+                       desc.planes.push_back(core::pixel_format_desc::plane(video->GetWidth()/2, video->GetHeight(), 1));                      \r
                        auto frame = frame_factory_->create_frame(this, desc);\r
                                                \r
                        void* bytes = nullptr;\r