]> git.sesse.net Git - casparcg/commitdiff
2.0. ffmpeg_producer: Fixed FLV meta-data reading.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 19 Aug 2011 10:31:20 +0000 (10:31 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Fri, 19 Aug 2011 10:31:20 +0000 (10:31 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.0.2@1226 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

modules/ffmpeg/producer/format/flv.cpp

index e1574f5f3d9a34fcc8506155726567a0e824ea9c..0e87dcbeaef36befb0a7c978a128ebf46fb91f09 100644 (file)
@@ -15,12 +15,26 @@ namespace caspar {
 double next_double(std::fstream& fileStream)\r
 {\r
        std::vector<char> bytes(8);\r
-    fileStream.read(bytes.data(), bytes.size());\r
+\r
+       auto tmp2 = fileStream.tellg();\r
+       tmp2;\r
+\r
+    fileStream.read(bytes.data(), 8);\r
+       \r
+       auto tmp3 = fileStream.gcount();\r
+       tmp3;\r
+\r
+       tmp2 = fileStream.tellg();\r
+       tmp2;\r
+\r
        fileStream.seekg(1, std::ios::cur);\r
+       \r
+       tmp2 = fileStream.tellg();\r
+       tmp2;\r
 \r
        std::reverse(bytes.begin(), bytes.end());\r
        double* tmp = (double*)bytes.data();\r
-\r
+       \r
     return *tmp;\r
 } \r
 \r
@@ -45,38 +59,46 @@ 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
+               \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
+                                       {\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:\r
-                                       values[name_str] = boost::lexical_cast<std::string>(next_bool(fileStream));\r
-                                       break;\r
+                                       {\r
+                                               values[name] = boost::lexical_cast<std::string>(*ptr != 0);\r
+                                               ptr += 2;\r
+\r
+                                               break;\r
+                                       }\r
                                }\r
                        }\r
                }\r