X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fffmpeg%2Fproducer%2Fformat%2Fflv.cpp;h=37b1977172e9c04366480777b56c89d9f5111afe;hb=ac7b3acb915f90de6b224e54a2240023fc221e5a;hp=3a4b4c27d3ab06b0d4c8445e4fc1bcdd8d5bbd38;hpb=435f4808e4c8bcdeeab2ccf3d5403a3443c44b7d;p=casparcg diff --git a/modules/ffmpeg/producer/format/flv.cpp b/modules/ffmpeg/producer/format/flv.cpp index 3a4b4c27d..37b197717 100644 --- a/modules/ffmpeg/producer/format/flv.cpp +++ b/modules/ffmpeg/producer/format/flv.cpp @@ -10,48 +10,8 @@ #include -namespace caspar { +namespace caspar { namespace ffmpeg { -double to_double(std::vector bytes, bool readInReverse) -{ - if(bytes.size() != 8) - BOOST_THROW_EXCEPTION(caspar_exception()); - - if (readInReverse) - std::reverse(bytes.begin(), bytes.end()); - - static_assert(sizeof(double) == 8, ""); - - double* tmp = (double*)bytes.data(); - - double val = *tmp; - return val; -} - -double next_double(std::fstream& fileStream) -{ - std::vector bytes(8); - fileStream.read(bytes.data(), bytes.size()); - fileStream.seekg(1, std::ios::cur); - return to_double(bytes, true); -} - -bool next_bool(std::fstream& fileStream) -{ - std::vector bytes(1); - fileStream.read(bytes.data(), bytes.size()); - fileStream.seekg(1, std::ios::cur); - return bytes[0] != 0; -} - -std::string next_string(std::fstream& fileStream) -{ - std::vector bytes(256, 0); - fileStream.seekg(2, std::ios::cur); - fileStream.getline(bytes.data(), bytes.size(), 0); - return std::string(bytes.begin(), bytes.end()); -} - std::map read_flv_meta_info(const std::string& filename) { std::map values; @@ -65,41 +25,47 @@ std::map read_flv_meta_info(const std::string& filenam BOOST_THROW_EXCEPTION(caspar_exception()); std::fstream fileStream = std::fstream(filename, std::fstream::in); - fileStream.seekg(27, std::ios::beg); - - std::vector bytes(10); - fileStream.read(bytes.data(), bytes.size()); - if(std::string(bytes.begin(), bytes.end()) == "onMetaData") + std::vector bytes2(256); + fileStream.read(bytes2.data(), bytes2.size()); + + auto ptr = bytes2.data(); + + ptr += 27; + + if(std::string(ptr, ptr+10) == "onMetaData") { - fileStream.seekg(6, std::ios::cur); + ptr += 16; for(int n = 0; n < 16; ++n) { - char name_size = 0; - fileStream.read(&name_size, 1); + char name_size = *ptr++; if(name_size == 0) break; - std::vector name(name_size); - fileStream.read(name.data(), name.size()); - auto name_str = std::string(name.begin(), name.end()); - - char data_type = 0; - fileStream.read(&data_type, 1); + auto name = std::string(ptr, ptr + name_size); + ptr += name_size; + char data_type = *ptr++; switch(data_type) { - case 0: - values[name_str] = boost::lexical_cast(next_double(fileStream)); - break; - case 1: - values[name_str] = boost::lexical_cast(next_bool(fileStream)); - break; - case 2: - values[name_str] = next_string(fileStream); - break; + case 0: // double + { + static_assert(sizeof(double) == 8, ""); + std::reverse(ptr, ptr+8); + values[name] = boost::lexical_cast(*(double*)(ptr)); + ptr += 9; + + break; + } + case 1: // bool + { + values[name] = boost::lexical_cast(*ptr != 0); + ptr += 2; + + break; + } } } } @@ -112,4 +78,4 @@ std::map read_flv_meta_info(const std::string& filenam return values; } -} \ No newline at end of file +}} \ No newline at end of file