1 #include "../../stdafx.h"
\r
5 #include <common/exception/exceptions.h>
\r
7 #include <boost/filesystem.hpp>
\r
11 #include <unordered_map>
\r
15 double next_double(std::fstream& fileStream)
\r
17 std::vector<char> bytes(8);
\r
18 fileStream.read(bytes.data(), bytes.size());
\r
19 fileStream.seekg(1, std::ios::cur);
\r
21 std::reverse(bytes.begin(), bytes.end());
\r
22 double* tmp = (double*)bytes.data();
\r
27 bool next_bool(std::fstream& fileStream)
\r
29 std::vector<char> bytes(1);
\r
30 fileStream.read(bytes.data(), bytes.size());
\r
31 fileStream.seekg(1, std::ios::cur);
\r
32 return bytes[0] != 0;
\r
35 std::map<std::string, std::string> read_flv_meta_info(const std::string& filename)
\r
37 std::map<std::string, std::string> values;
\r
39 if(boost::filesystem2::path(filename).extension() != ".flv")
\r
44 if(!boost::filesystem2::exists(filename))
\r
45 BOOST_THROW_EXCEPTION(caspar_exception());
\r
47 std::fstream fileStream = std::fstream(filename, std::fstream::in);
\r
48 fileStream.seekg(27, std::ios::beg);
\r
50 std::vector<char> bytes(10);
\r
51 fileStream.read(bytes.data(), bytes.size());
\r
53 if(std::string(bytes.begin(), bytes.end()) == "onMetaData")
\r
55 fileStream.seekg(6, std::ios::cur);
\r
57 for(int n = 0; n < 16; ++n)
\r
60 fileStream.read(&name_size, 1);
\r
65 std::vector<char> name(name_size);
\r
66 fileStream.read(name.data(), name.size());
\r
67 auto name_str = std::string(name.begin(), name.end());
\r
70 fileStream.read(&data_type, 1);
\r
75 values[name_str] = boost::lexical_cast<std::string>(next_double(fileStream));
\r
78 values[name_str] = boost::lexical_cast<std::string>(next_bool(fileStream));
\r
86 CASPAR_LOG_CURRENT_EXCEPTION();
\r