]> git.sesse.net Git - casparcg/blobdiff - modules/ffmpeg/producer/format/flv.cpp
2.0. Updated namespaces.
[casparcg] / modules / ffmpeg / producer / format / flv.cpp
index c38c96e19f4e0f6405bf2c8e89c2d6da7e475871..37b1977172e9c04366480777b56c89d9f5111afe 100644 (file)
 \r
 #include <unordered_map>\r
 \r
-namespace caspar {\r
+namespace caspar { namespace ffmpeg {\r
        \r
-double next_double(std::fstream& fileStream)\r
-{\r
-       std::vector<char> bytes(8);\r
-    fileStream.read(bytes.data(), bytes.size());\r
-       fileStream.seekg(1, std::ios::cur);\r
-\r
-       std::reverse(bytes.begin(), bytes.end());\r
-       double* tmp = (double*)bytes.data();\r
-\r
-    return *tmp;\r
-} \r
-\r
-bool next_bool(std::fstream& fileStream)\r
-{\r
-       std::vector<char> bytes(1);\r
-    fileStream.read(bytes.data(), bytes.size());\r
-       fileStream.seekg(1, std::ios::cur);\r
-    return bytes[0] != 0;\r
-}\r
-\r
-std::string next_string(std::fstream& fileStream)\r
-{\r
-       std::vector<char> bytes(256, 0);\r
-       fileStream.seekg(2, std::ios::cur);\r
-    fileStream.getline(bytes.data(), bytes.size(), 0);\r
-    return std::string(bytes.begin(), bytes.end());\r
-}\r
-\r
 std::map<std::string, std::string> read_flv_meta_info(const std::string& filename)\r
 {\r
        std::map<std::string, std::string>  values;\r
@@ -53,41 +25,47 @@ std::map<std::string, std::string> read_flv_meta_info(const std::string& filenam
                        BOOST_THROW_EXCEPTION(caspar_exception());\r
        \r
                std::fstream fileStream = std::fstream(filename, std::fstream::in);\r
-               fileStream.seekg(27, std::ios::beg);\r
-       \r
-               std::vector<char> bytes(10);\r
-               fileStream.read(bytes.data(), bytes.size());\r
                \r
-               if(std::string(bytes.begin(), bytes.end()) == "onMetaData")\r
+               std::vector<char> bytes2(256);\r
+               fileStream.read(bytes2.data(), bytes2.size());\r
+\r
+               auto ptr = bytes2.data();\r
+               \r
+               ptr += 27;\r
+                                               \r
+               if(std::string(ptr, ptr+10) == "onMetaData")\r
                {\r
-                       fileStream.seekg(6, std::ios::cur);\r
+                       ptr += 16;\r
 \r
                        for(int n = 0; n < 16; ++n)\r
                        {\r
-                               char name_size = 0;\r
-                               fileStream.read(&name_size, 1);\r
+                               char name_size = *ptr++;\r
 \r
                                if(name_size == 0)\r
                                        break;\r
 \r
-                               std::vector<char> name(name_size);\r
-                               fileStream.read(name.data(), name.size());\r
-                               auto name_str = std::string(name.begin(), name.end());\r
-\r
-                               char data_type = 0;\r
-                               fileStream.read(&data_type, 1);\r
+                               auto name = std::string(ptr, ptr + name_size);\r
+                               ptr += name_size;\r
 \r
+                               char data_type = *ptr++;\r
                                switch(data_type)\r
                                {\r
-                               case 0:\r
-                                       values[name_str] = boost::lexical_cast<std::string>(next_double(fileStream));\r
-                                       break;\r
-                               case 1:\r
-                                       values[name_str] = boost::lexical_cast<std::string>(next_bool(fileStream));\r
-                                       break;\r
-                               case 2:\r
-                                       values[name_str] = next_string(fileStream);\r
-                                       break;\r
+                               case 0: // double\r
+                                       {\r
+                                               static_assert(sizeof(double) == 8, "");\r
+                                               std::reverse(ptr, ptr+8);\r
+                                               values[name] = boost::lexical_cast<std::string>(*(double*)(ptr));\r
+                                               ptr += 9;\r
+\r
+                                               break;\r
+                                       }\r
+                               case 1: // bool\r
+                                       {\r
+                                               values[name] = boost::lexical_cast<std::string>(*ptr != 0);\r
+                                               ptr += 2;\r
+\r
+                                               break;\r
+                                       }\r
                                }\r
                        }\r
                }\r
@@ -100,4 +78,4 @@ std::map<std::string, std::string> read_flv_meta_info(const std::string& filenam
     return values;\r
 }\r
 \r
-}
\ No newline at end of file
+}}
\ No newline at end of file