]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: ffmpeg-producer: Double rate video is interlaced when running in interlaced...
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 18 Mar 2011 22:00:56 +0000 (22:00 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 18 Mar 2011 22:00:56 +0000 (22:00 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@568 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/flash/producer/flash_producer.cpp
shell/caspar.config

index de14220969eb0ff641378e650c5048d213a7ebb7..419a9d29dca752781dfbb576a78e2fbaa2642221 100644 (file)
@@ -16,6 +16,7 @@
 \r
 #include <common/env.h>\r
 #include <common/utility/timer.h>\r
+#include <common/utility/assert.h>\r
 \r
 #include <tbb/parallel_invoke.h>\r
 \r
@@ -67,7 +68,7 @@ public:
                double frame_time = 1.0f/input_->fps();\r
                double format_frame_time = 1.0/frame_factory->get_video_format_desc().fps;\r
                if(abs(frame_time - format_frame_time) > 0.0001)\r
-                       CASPAR_LOG(warning) << print() << L" Invalid framerate detected. This may cause distorted audio during playback.";\r
+                       CASPAR_LOG(warning) << print() << L" Invalid framerate detected. This may cause distorted audio during playback. frame-time: " << frame_time;\r
 \r
        }\r
                \r
@@ -80,7 +81,7 @@ public:
        {\r
                perf_timer_.reset();\r
 \r
-               while(ouput_channel_.empty() && !input_->is_eof())\r
+               while(ouput_channel_.size() < 2 && !input_->is_eof())\r
                {       \r
                        aligned_buffer video_packet;\r
                        if(video_frame_channel_.size() < 3 && video_decoder_)   \r
@@ -161,14 +162,25 @@ public:
                auto result = last_frame_;\r
                if(!ouput_channel_.empty())\r
                {\r
-                       result = std::move(ouput_channel_.front());\r
-                       last_frame_ = core::basic_frame(result);\r
-                       last_frame_->get_audio_transform().set_gain(0.0); // last_frame should not have audio\r
-                       ouput_channel_.pop();\r
+                       result = get_frame();\r
+\r
+                       bool interlace = abs(input_->fps()/2.0 - frame_factory_->get_video_format_desc().fps) < 0.001;\r
+                       if(interlace && !ouput_channel_.empty())\r
+                               result = core::basic_frame::interlace(result, get_frame(), frame_factory_->get_video_format_desc().mode);\r
                }\r
                else if(input_->is_eof())\r
-                       return core::basic_frame::eof();\r
+                       result = core::basic_frame::eof();\r
+               \r
+               return result;\r
+       }\r
 \r
+       core::basic_frame get_frame()\r
+       {\r
+               CASPAR_ASSERT(!ouput_channel_.empty());\r
+               auto result = std::move(ouput_channel_.front());\r
+               last_frame_ = core::basic_frame(result);\r
+               last_frame_->get_audio_transform().set_gain(0.0); // last_frame should not have audio\r
+               ouput_channel_.pop();\r
                return result;\r
        }\r
 \r
index f09e5cb08d7086113ec7a3bd5d455d8af445365e..033a5d9ced15f04530bee6f0e7687a0008b80e74 100644 (file)
@@ -177,7 +177,7 @@ private:
                        graph_->add_tag("underflow");\r
 \r
                double frame_time = 1.0/ax_->GetFPS()*(underflow ? 0.90 : 1.0); // Reduce sync-time if in underflow.\r
-               //timer_.tick(frame_time); // Tick doesnt work on nested timelines, force an actual sync\r
+               timer_.tick(frame_time); // Tick doesnt work on nested timelines, force an actual sync\r
 \r
                perf_timer_.reset();\r
                ax_->Tick();\r
index f66871e147e2943b99a6937d7ccadec394bad9e6..b518723582a00351950636de759cdaf1279e36ce 100644 (file)
     <channel>\r
       <videomode>PAL</videomode>\r
       <consumers>\r
-        <!--ogl>\r
+        <ogl>\r
           <device>0</device>\r
           <stretch>uniform</stretch>\r
           <windowed>true</windowed>\r
-        </ogl-->\r
+        </ogl>\r
         <audio/>\r
         <!--decklink>\r
           <device>1</device>\r
           <embedded-audio>true</embedded-audio>\r
           <internal-key>false</internal-key>\r
         </decklink-->\r
-        <bluefish>\r
+        <!--<bluefish>\r
           <device>1</device>\r
           <embedded-audio>false</embedded-audio>\r
-        </bluefish>\r
+        </bluefish>-->\r
       </consumers>\r
     </channel>\r
 </channels>\r