]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/video/video_decoder.cpp
2.0. ffmpeg_producer: Refactored meta data fix.
[casparcg] / modules / ffmpeg / producer / video / video_decoder.cpp
index 4b3e2bcd4229525abedc79820886973ee53e5356..5dba7c2f7a98d9cd2e49dd333bbc9801a84740de 100644 (file)
@@ -21,7 +21,6 @@
 \r
 #include "video_decoder.h"\r
 \r
-#include "../format/flv.h"\r
 #include "../util.h"\r
 #include "../filter/filter.h"\r
 \r
@@ -50,7 +49,7 @@ extern "C"
 #endif\r
 \r
 namespace caspar {\r
-               \r
+       \r
 struct video_decoder::implementation : boost::noncopyable\r
 {\r
        const safe_ptr<core::frame_factory>             frame_factory_;\r
@@ -88,26 +87,11 @@ public:
                        CASPAR_LOG(debug) << "[video_decoder] " << context->streams[index_]->codec->codec->long_name;\r
 \r
                        // Some files give an invalid time_base numerator, try to fix it.\r
-                       if(codec_context_ && codec_context_->time_base.num == 1)\r
-                               codec_context_->time_base.num = static_cast<int>(std::pow(10.0, static_cast<int>(std::log10(static_cast<float>(codec_context_->time_base.den)))-1));    \r
-                                       \r
-                       if(boost::filesystem2::path(context->filename).extension() == ".flv")\r
-                       {\r
-                               try\r
-                               {\r
-                                       auto meta = read_flv_meta_info(context->filename);\r
-                                       fps_ = boost::lexical_cast<double>(meta["framerate"]);\r
-                                       nb_frames_ = static_cast<int64_t>(boost::lexical_cast<double>(meta["duration"])*fps_);\r
-                               }\r
-                               catch(...){}\r
-                       }\r
-                       else\r
-                       {\r
-                               fps_ = static_cast<double>(codec_context_->time_base.den) / static_cast<double>(codec_context_->time_base.num);\r
-                               nb_frames_ = context->streams[index_]->nb_frames;\r
-                               if(nb_frames_ == 0)\r
-                                       nb_frames_ = context->streams[index_]->duration;// * context->streams[index_]->time_base.den;\r
-                       }\r
+\r
+                       fix_meta_data(*context);\r
+                       \r
+                       fps_ = static_cast<double>(codec_context_->time_base.den) / static_cast<double>(codec_context_->time_base.num);\r
+                       nb_frames_ = context->streams[index_]->nb_frames;\r
 \r
                        if(double_rate(filter))\r
                                fps_ *= 2;\r