]> 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>
Sat, 22 Oct 2011 22:28:29 +0000 (22:28 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 22 Oct 2011 22:28:29 +0000 (22:28 +0000)
modules/ffmpeg/ffmpeg.vcxproj
modules/ffmpeg/ffmpeg.vcxproj.filters
modules/ffmpeg/producer/frame_muxer.cpp
modules/ffmpeg/producer/input.cpp
modules/ffmpeg/producer/video/video_decoder.cpp

index a2329cae5b10e377ff7f0a6c61cafb6aa936d038..31cf449500b8992e63cd09a864dc5b3f6142bba9 100644 (file)
     <Lib />\r
   </ItemDefinitionGroup>\r
   <ItemGroup>\r
-    <ClCompile Include="consumer\ffmpeg_consumer.cpp">\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">../StdAfx.h</PrecompiledHeaderFile>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Develop|Win32'">true</ExcludedFromBuild>\r
-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>\r
-    </ClCompile>\r
     <ClCompile Include="ffmpeg.cpp">\r
       <ShowIncludes Condition="'$(Configuration)|$(Platform)'=='Profile|Win32'">false</ShowIncludes>\r
     </ClCompile>\r
     </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
-    <ClInclude Include="consumer\ffmpeg_consumer.h" />\r
     <ClInclude Include="ffmpeg.h" />\r
     <ClInclude Include="ffmpeg_error.h" />\r
     <ClInclude Include="producer\audio\audio_decoder.h" />\r
index a1f226e14351134c71c2089cd6b2dbb907eac42e..57a965fbbca8213f513268764249afd885779f4d 100644 (file)
@@ -4,9 +4,6 @@
     <Filter Include="source">\r
       <UniqueIdentifier>{c9454245-e85a-45ba-960f-203b00d18454}</UniqueIdentifier>\r
     </Filter>\r
-    <Filter Include="source\consumer">\r
-      <UniqueIdentifier>{4db7d9c3-08ea-4423-a303-f18737629268}</UniqueIdentifier>\r
-    </Filter>\r
     <Filter Include="source\producer">\r
       <UniqueIdentifier>{c5a94fd1-4552-4f6d-97cd-24e44e662e0f}</UniqueIdentifier>\r
     </Filter>\r
@@ -33,9 +30,6 @@
     <ClCompile Include="producer\audio\audio_decoder.cpp">\r
       <Filter>source\producer\audio</Filter>\r
     </ClCompile>\r
-    <ClCompile Include="consumer\ffmpeg_consumer.cpp">\r
-      <Filter>source\consumer</Filter>\r
-    </ClCompile>\r
     <ClCompile Include="StdAfx.cpp" />\r
     <ClCompile Include="ffmpeg.cpp">\r
       <Filter>source</Filter>\r
@@ -72,9 +66,6 @@
     <ClInclude Include="producer\audio\audio_decoder.h">\r
       <Filter>source\producer\audio</Filter>\r
     </ClInclude>\r
-    <ClInclude Include="consumer\ffmpeg_consumer.h">\r
-      <Filter>source\consumer</Filter>\r
-    </ClInclude>\r
     <ClInclude Include="StdAfx.h" />\r
     <ClInclude Include="ffmpeg_error.h">\r
       <Filter>source</Filter>\r
index 0f66206c149f1c73daea1ccc9fce3e6db75efbd7..adb8f74f0a4ad910feba2d1d21f804f886489e01 100644 (file)
@@ -8,8 +8,6 @@
 \r
 #include <core/producer/frame_producer.h>\r
 #include <core/producer/frame/basic_frame.h>\r
-#include <core/producer/frame/frame_transform.h>\r
-#include <core/producer/frame/pixel_format.h>\r
 #include <core/producer/frame/frame_factory.h>\r
 #include <core/mixer/write_frame.h>\r
 \r
@@ -33,16 +31,9 @@ extern "C"
 #endif\r
 \r
 #include <boost/foreach.hpp>\r
-#include <boost/range/algorithm_ext/push_back.hpp>\r
-#include <boost/assign.hpp>\r
 \r
 #include <agents_extras.h>\r
 \r
-#include <deque>\r
-#include <tuple>\r
-#include <queue>\r
-#include <vector>\r
-\r
 using namespace caspar::core;\r
 \r
 using namespace Concurrency;\r
@@ -131,7 +122,6 @@ display_mode::type get_display_mode(const core::field_mode::type in_mode, double
        return display_mode::invalid;\r
 }\r
 \r
-\r
 struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopyable\r
 {              \r
        ITarget<safe_ptr<core::basic_frame>>&                   target_;\r
@@ -153,8 +143,6 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
 \r
        Concurrency::overwrite_buffer<bool>                             is_running_;\r
 \r
-       safe_ptr<semaphore> semaphore_;\r
-                                                       \r
        implementation(frame_muxer2::video_source_t* video_source,\r
                                   frame_muxer2::audio_source_t* audio_source,\r
                                   frame_muxer2::target_t& target,\r
@@ -168,7 +156,6 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
                , frame_factory_(make_safe<core::concrt_frame_factory>(frame_factory))\r
                , push_video_(std::bind(&implementation::push_video, this, std::placeholders::_1))\r
                , push_audio_(std::bind(&implementation::push_audio, this, std::placeholders::_1))\r
-               , semaphore_(make_safe<semaphore>(8))\r
        {\r
                if(video_source)\r
                        video_source->link_target(&push_video_);\r
@@ -319,10 +306,14 @@ struct frame_muxer2::implementation : public Concurrency::agent, boost::noncopya
 \r
                filter_.push(video_frame);\r
 \r
-               BOOST_FOREACH(auto av_frame, filter_.poll_all())\r
-               {               \r
-                       av_frame->format = format;                      \r
-                       send(video_, av_frame);\r
+               while(true)\r
+               {\r
+                       auto frame = filter_.poll();\r
+                       if(!frame)\r
+                               break;  \r
+\r
+                       frame->format = format;\r
+                       send(video_, make_safe_ptr(frame));\r
                }\r
        }\r
 \r
index 740748ea12594e101fa2b4290bd2e5a7bb531ced..62fe7090d0a7e9bb84fa8396691953f2b5f9a70e 100644 (file)
@@ -81,6 +81,8 @@ struct input::implementation : public Concurrency::agent, boost::noncopyable
        tbb::atomic<size_t>                                             packets_size_;\r
 \r
        bool                                                                    stop_;\r
+\r
+       safe_ptr<semaphore>                                             semaphore_;\r
                \r
 public:\r
        explicit implementation(input::target_t& target,\r
@@ -100,6 +102,7 @@ public:
                , length_(length)\r
                , frame_number_(0)\r
                , stop_(false)\r
+               , semaphore_(make_safe<semaphore>(8))\r
        {               \r
                packets_count_  = 0;\r
                packets_size_   = 0;\r
@@ -131,7 +134,6 @@ public:
                                        break;\r
 \r
                                Concurrency::asend(target_, make_safe_ptr(packet));\r
-                               Concurrency::wait(20);\r
                        }\r
                }\r
                catch(...)\r
@@ -193,7 +195,9 @@ public:
                        packet->size = size;\r
                        packet->data = data;\r
                        --packets_count_;\r
+                       semaphore_->release();\r
                });\r
+               semaphore_->acquire();\r
 \r
                ++packets_count_;\r
                                                        \r
index cb57090d7265737095a1cb1fc3159a66d36a0c33..5f3e58064a2336401860c6a164fedb22b5930603 100644 (file)
@@ -51,13 +51,12 @@ namespace caspar { namespace ffmpeg {
 struct video_decoder::implementation : public Concurrency::agent, boost::noncopyable\r
 {      \r
        int                                                                             index_;\r
-       std::shared_ptr<AVCodecContext>                 codec_context_;\r
-       \r
-       double                                                                  fps_;\r
-       int64_t                                                                 nb_frames_;\r
+       safe_ptr<AVCodecContext>                                codec_context_; \r
+       const double                                                    fps_;\r
+       const int64_t                                                   nb_frames_;\r
+       const size_t                                                    width_;\r
+       const size_t                                                    height_;\r
 \r
-       size_t                                                                  width_;\r
-       size_t                                                                  height_;\r
        bool                                                                    is_progressive_;\r
        \r
        overwrite_buffer<bool>                                  is_running_;\r
@@ -74,18 +73,12 @@ public:
                , width_(codec_context_->width)\r
                , height_(codec_context_->height)\r
                , is_progressive_(true)\r
-               , source_([this](const safe_ptr<AVPacket>& packet)\r
-                       {\r
-                               return packet->stream_index == index_;\r
-                       })\r
+               , source_([this](const safe_ptr<AVPacket>& packet){return packet->stream_index == index_;})\r
                , target_(target)\r
                , semaphore_(make_safe<Concurrency::semaphore>(1))\r
        {               \r
                CASPAR_LOG(debug) << "[video_decoder] " << context.streams[index_]->codec->codec->long_name;\r
                \r
-               CASPAR_VERIFY(width_ > 0, ffmpeg_error());\r
-               CASPAR_VERIFY(height_ > 0, ffmpeg_error());\r
-\r
                Concurrency::connect(source, source_);\r
 \r
                start();\r