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 to_double(std::vector<char> bytes, bool readInReverse)
\r
17 if(bytes.size() != 8)
\r
18 BOOST_THROW_EXCEPTION(caspar_exception());
\r
21 std::reverse(bytes.begin(), bytes.end());
\r
23 static_assert(sizeof(double) == 8, "");
\r
25 double* tmp = (double*)bytes.data();
\r
31 double next_double(std::fstream& fileStream)
\r
33 std::vector<char> bytes(8);
\r
34 fileStream.read(bytes.data(), bytes.size());
\r
35 fileStream.seekg(1, std::ios::cur);
\r
36 return to_double(bytes, true);
\r
39 bool next_bool(std::fstream& fileStream)
\r
41 std::vector<char> bytes(1);
\r
42 fileStream.read(bytes.data(), bytes.size());
\r
43 fileStream.seekg(1, std::ios::cur);
\r
44 return bytes[0] != 0;
\r
47 std::string next_string(std::fstream& fileStream)
\r
49 std::vector<char> bytes(256, 0);
\r
50 fileStream.seekg(2, std::ios::cur);
\r
51 fileStream.getline(bytes.data(), bytes.size(), 0);
\r
52 return std::string(bytes.begin(), bytes.end());
\r
55 std::map<std::string, std::string> read_flv_meta_info(const std::string& filename)
\r
57 std::map<std::string, std::string> values;
\r
59 if(boost::filesystem2::path(filename).extension() != ".flv")
\r
64 if(!boost::filesystem2::exists(filename))
\r
65 BOOST_THROW_EXCEPTION(caspar_exception());
\r
67 std::fstream fileStream = std::fstream(filename, std::fstream::in);
\r
68 fileStream.seekg(27, std::ios::beg);
\r
70 std::vector<char> bytes(10);
\r
71 fileStream.read(bytes.data(), bytes.size());
\r
73 if(std::string(bytes.begin(), bytes.end()) == "onMetaData")
\r
75 fileStream.seekg(6, std::ios::cur);
\r
77 for(int n = 0; n < 16; ++n)
\r
80 fileStream.read(&name_size, 1);
\r
85 std::vector<char> name(name_size);
\r
86 fileStream.read(name.data(), name.size());
\r
87 auto name_str = std::string(name.begin(), name.end());
\r
90 fileStream.read(&data_type, 1);
\r
95 values[name_str] = boost::lexical_cast<std::string>(next_double(fileStream));
\r
98 values[name_str] = boost::lexical_cast<std::string>(next_bool(fileStream));
\r
101 values[name_str] = next_string(fileStream);
\r
109 CASPAR_LOG_CURRENT_EXCEPTION();
\r