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::string next_string(std::fstream& fileStream)
\r
37 std::vector<char> bytes(256, 0);
\r
38 fileStream.seekg(2, std::ios::cur);
\r
39 fileStream.getline(bytes.data(), bytes.size(), 0);
\r
40 return std::string(bytes.begin(), bytes.end());
\r
43 std::map<std::string, std::string> read_flv_meta_info(const std::string& filename)
\r
45 std::map<std::string, std::string> values;
\r
47 if(boost::filesystem2::path(filename).extension() != ".flv")
\r
52 if(!boost::filesystem2::exists(filename))
\r
53 BOOST_THROW_EXCEPTION(caspar_exception());
\r
55 std::fstream fileStream = std::fstream(filename, std::fstream::in);
\r
56 fileStream.seekg(27, std::ios::beg);
\r
58 std::vector<char> bytes(10);
\r
59 fileStream.read(bytes.data(), bytes.size());
\r
61 if(std::string(bytes.begin(), bytes.end()) == "onMetaData")
\r
63 fileStream.seekg(6, std::ios::cur);
\r
65 for(int n = 0; n < 16; ++n)
\r
68 fileStream.read(&name_size, 1);
\r
73 std::vector<char> name(name_size);
\r
74 fileStream.read(name.data(), name.size());
\r
75 auto name_str = std::string(name.begin(), name.end());
\r
78 fileStream.read(&data_type, 1);
\r
83 values[name_str] = boost::lexical_cast<std::string>(next_double(fileStream));
\r
86 values[name_str] = boost::lexical_cast<std::string>(next_bool(fileStream));
\r
89 values[name_str] = next_string(fileStream);
\r
97 CASPAR_LOG_CURRENT_EXCEPTION();
\r