tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

h264_sprop_parameter_sets.cc (1783B)


      1 /*
      2 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
      3 *
      4 *  Use of this source code is governed by a BSD-style license
      5 *  that can be found in the LICENSE file in the root of the source
      6 *  tree. An additional intellectual property rights grant can be found
      7 *  in the file PATENTS.  All contributing project authors may
      8 *  be found in the AUTHORS file in the root of the source tree.
      9 */
     10 
     11 #include "modules/video_coding/h264_sprop_parameter_sets.h"
     12 
     13 #include <cstddef>
     14 #include <cstdint>
     15 #include <optional>
     16 #include <string>
     17 #include <vector>
     18 
     19 #include "rtc_base/base64.h"
     20 #include "rtc_base/logging.h"
     21 
     22 namespace webrtc {
     23 
     24 namespace {
     25 
     26 bool DecodeAndConvert(const std::string& base64, std::vector<uint8_t>* binary) {
     27  std::optional<std::string> decoded = Base64Decode(base64);
     28  if (!decoded.has_value()) {
     29    return false;
     30  }
     31  binary->assign(decoded->begin(), decoded->end());
     32  return true;
     33 }
     34 
     35 }  // namespace
     36 
     37 bool H264SpropParameterSets::DecodeSprop(const std::string& sprop) {
     38  size_t separator_pos = sprop.find(',');
     39  RTC_LOG(LS_INFO) << "Parsing sprop \"" << sprop << "\"";
     40  if ((separator_pos <= 0) || (separator_pos >= sprop.length() - 1)) {
     41    RTC_LOG(LS_WARNING) << "Invalid seperator position " << separator_pos
     42                        << " *" << sprop << "*";
     43    return false;
     44  }
     45  std::string sps_str = sprop.substr(0, separator_pos);
     46  std::string pps_str = sprop.substr(separator_pos + 1, std::string::npos);
     47  if (!DecodeAndConvert(sps_str, &sps_)) {
     48    RTC_LOG(LS_WARNING) << "Failed to decode sprop/sps *" << sprop << "*";
     49    return false;
     50  }
     51  if (!DecodeAndConvert(pps_str, &pps_)) {
     52    RTC_LOG(LS_WARNING) << "Failed to decode sprop/pps *" << sprop << "*";
     53    return false;
     54  }
     55  return true;
     56 }
     57 
     58 }  // namespace webrtc