]> git.sesse.net Git - casparcg/blobdiff - core/producer/channel/channel_producer.cpp
Fixed bug in channel_producer
[casparcg] / core / producer / channel / channel_producer.cpp
index 2c52d88bfe414a05fd15c154c4d9904c977e3bf5..98d845ca0880f5986a5199cfe5138e79ac26418c 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-* Copyright (c) 2011 Sveriges Television AB <info@casparcg.com>\r
+* Copyright 2013 Sveriges Television AB http://casparcg.com/\r
 *\r
 * This file is part of CasparCG (www.casparcg.com).\r
 *\r
@@ -47,11 +47,13 @@ class channel_consumer : public frame_consumer
        core::video_format_desc                                                                         format_desc_;\r
        int                                                                                                                     channel_index_;\r
        tbb::atomic<bool>                                                                                       is_running_;\r
+       tbb::atomic<int64_t>                                                                            current_age_;\r
 \r
 public:\r
        channel_consumer() \r
        {\r
                is_running_ = true;\r
+               current_age_ = 0;\r
                frame_buffer_.set_capacity(3);\r
        }\r
 \r
@@ -74,6 +76,11 @@ public:
                channel_index_  = channel_index;\r
        }\r
 \r
+       virtual int64_t presentation_frame_age_millis() const override\r
+       {\r
+               return current_age_;\r
+       }\r
+\r
        virtual std::wstring print() const override\r
        {\r
                return L"[channel-consumer|" + boost::lexical_cast<std::wstring>(channel_index_) + L"]";\r
@@ -120,7 +127,10 @@ public:
                if(!is_running_)\r
                        return make_safe<read_frame>();\r
                std::shared_ptr<read_frame> frame;\r
-               frame_buffer_.try_pop(frame);\r
+               \r
+               if (frame_buffer_.try_pop(frame))\r
+                       current_age_ = frame->get_age_millis();\r
+\r
                return frame;\r
        }\r
 };\r