]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/util/util.cpp
2.0.2: - Updated get_param.
[casparcg] / modules / ffmpeg / producer / util / util.cpp
index 43e48d9ccdb56646faf8fb028c39ce7c3198b129..6c5bb324ac9cf58166146143233b517e43d8d370 100644 (file)
@@ -194,6 +194,10 @@ safe_ptr<core::write_frame> make_write_frame(const void* tag, const safe_ptr<AVF
 \r
                if(pix_fmt == PIX_FMT_UYVY422)\r
                        target_pix_fmt = PIX_FMT_YUV422P;\r
+               else if(pix_fmt == PIX_FMT_YUYV422)\r
+                       target_pix_fmt = PIX_FMT_YUV422P;\r
+               else if(pix_fmt == PIX_FMT_UYYVYY411)\r
+                       target_pix_fmt = PIX_FMT_YUV411P;\r
                else if(pix_fmt == PIX_FMT_YUV420P10)\r
                        target_pix_fmt = PIX_FMT_YUV420P;\r
                else if(pix_fmt == PIX_FMT_YUV422P10)\r
@@ -455,6 +459,40 @@ std::wstring print_mode(size_t width, size_t height, double fps, bool interlaced
 \r
        return boost::lexical_cast<std::wstring>(width) + L"x" + boost::lexical_cast<std::wstring>(height) + (!interlaced ? L"p" : L"i") + fps_ss.str();\r
 }\r
+\r
+bool is_valid_file(const std::wstring filename)\r
+{                      \r
+       auto filename2 = narrow(filename);\r
+\r
+       std::ifstream file(filename2);\r
+\r
+       std::vector<unsigned char> buf;\r
+       for(auto file_it = std::istreambuf_iterator<char>(file); file_it != std::istreambuf_iterator<char>() && buf.size() < 2048; ++file_it)\r
+               buf.push_back(*file_it);\r
+\r
+       if(buf.empty())\r
+               return nullptr;\r
+\r
+       AVProbeData pb;\r
+       pb.filename = filename2.c_str();\r
+       pb.buf          = buf.data();\r
+       pb.buf_size = buf.size();\r
+\r
+       int score = 0;\r
+       return av_probe_input_format2(&pb, true, &score) != nullptr;\r
+}\r
+\r
+std::wstring probe_stem(const std::wstring stem)\r
+{\r
+       auto stem2 = boost::filesystem2::wpath(stem);\r
+       auto dir = stem2.parent_path();\r
+       for(auto it = boost::filesystem2::wdirectory_iterator(dir); it != boost::filesystem2::wdirectory_iterator(); ++it)\r
+       {\r
+               if(boost::iequals(it->path().stem(), stem2.filename()) && is_valid_file(it->path().file_string()))\r
+                       return it->path().file_string();\r
+       }\r
+       return L"";\r
+}\r
 //\r
 //void av_dup_frame(AVFrame* frame)\r
 //{\r