]> git.sesse.net Git - casparcg/commitdiff
2.0.0.2: Improved interface consistency of decoders.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 14 May 2011 12:35:10 +0000 (12:35 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sat, 14 May 2011 12:35:10 +0000 (12:35 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@741 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/ffmpeg_producer.cpp
modules/ffmpeg/producer/video/video_decoder.cpp
modules/ffmpeg/producer/video/video_decoder.h

index db7e0060254ca9f06f32d56f848b804b5d7d7ee9..90d0d20322d3c47af246f915760c2e8be4f1629a 100644 (file)
@@ -152,9 +152,8 @@ public:
                {\r
                        try\r
                        {\r
-                               auto frame = video_decoder_->execute(this, video_packet);\r
-                               if(frame)\r
-                                       video_frame_buffer_.push_back(make_safe(std::move(frame)));\r
+                               auto frames = video_decoder_->execute(this, video_packet);\r
+                               video_frame_buffer_.insert(video_frame_buffer_.end(), frames.begin(), frames.end());\r
                        }\r
                        catch(...)\r
                        {\r
index 50487bf52ceb4ef2bcf504ae652101cf74b4b962..e88fa67ccfc5959cf6342d9bf84cc896ef09b9fc 100644 (file)
@@ -145,15 +145,17 @@ public:
                }\r
        }\r
        \r
-       std::shared_ptr<core::write_frame> execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet)\r
+       std::vector<safe_ptr<core::write_frame>> execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet)\r
        {                               \r
+               std::vector<safe_ptr<core::write_frame>> result;\r
+\r
                if(!video_packet)\r
-                       return nullptr;\r
+                       return result;\r
 \r
                if(video_packet->empty()) // Need to flush\r
                {\r
                        avcodec_flush_buffers(codec_context_);\r
-                       return nullptr;\r
+                       return result;\r
                }\r
 \r
                safe_ptr<AVFrame> decoded_frame(avcodec_alloc_frame(), av_free);\r
@@ -171,8 +173,15 @@ public:
                }\r
                \r
                if(frame_finished == 0)\r
-                       return nullptr;\r
+                       return result;\r
+               \r
+               result.push_back(make_write_frame(tag, decoded_frame));\r
+\r
+               return result;\r
+       }\r
 \r
+       safe_ptr<core::write_frame> make_write_frame(void* tag, safe_ptr<AVFrame> decoded_frame)\r
+       {               \r
                auto write = frame_factory_->create_frame(tag, desc_);\r
                if(sws_context_ == nullptr)\r
                {\r
@@ -209,6 +218,6 @@ public:
 };\r
 \r
 video_decoder::video_decoder(AVCodecContext* codec_context, const safe_ptr<core::frame_factory>& frame_factory) : impl_(new implementation(codec_context, frame_factory)){}\r
-std::shared_ptr<core::write_frame> video_decoder::execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet){return impl_->execute(tag, video_packet);}\r
+std::vector<safe_ptr<core::write_frame>> video_decoder::execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet){return impl_->execute(tag, video_packet);}\r
 \r
 }
\ No newline at end of file
index 6a2c5bdb75f151281b5b703829c662cc8dd800ee..346d64f823ef5deeb24113cd235cb4aa7d406612 100644 (file)
@@ -33,7 +33,7 @@ class video_decoder : boost::noncopyable
 {\r
 public:\r
        explicit video_decoder(AVCodecContext* codec_context, const safe_ptr<core::frame_factory>& frame_factory);\r
-       std::shared_ptr<core::write_frame> execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet);     \r
+       std::vector<safe_ptr<core::write_frame>> execute(void* tag, const std::shared_ptr<aligned_buffer>& video_packet);       \r
 private:\r
        struct implementation;\r
        safe_ptr<implementation> impl_;\r