Reland of Loosening the coupling between WebRTC and //third_party/protobuf (patchset #1 id:1 of https://codereview.webrtc.org/2786363002/ )

Reason for revert:
Trying to re-land after solving some related issues.

There are no changes compared to the original CL.

Original issue's description:
> Revert of Loosening the coupling between WebRTC and //third_party/protobuf (patchset #16 id:300001 of https://codereview.webrtc.org/2747863003/ )
>
> Reason for revert:
> I will try to reland next week because it is causing some problems.
>
> Original issue's description:
> > To accommodate some downstream WebRTC users we need to loosen
> > the coupling between our code and the //third_party/protobuf.
> >
> > This includes using typedefs to define strings instead of
> > assuming std::string.
> >
> > After this refactoring it will be possible to link with other
> > protobuf implementations than the current one.
> >
> > We moved the PRESUBMIT check to another CL [1]. The goal of this
> > presubmit is to avoid the direct usage of google::protobuf outside
> > of the webrtc/base/protobuf_utils.h header file.
> >
> > [1] - https://codereview.webrtc.org/2753823003/
> >
> > BUG=webrtc:7340
> > NOTRY=True
> >
> > Review-Url: https://codereview.webrtc.org/2747863003
> > Cr-Commit-Position: refs/heads/master@{#17466}
> > Committed: 16ab93b952
>
> TBR=kjellander@webrtc.org,henrik.lundin@webrtc.org,kwiberg@webrtc.org,michaelt@webrtc.org,peah@webrtc.org
> # Not skipping CQ checks because original CL landed more than 1 days ago.
> BUG=webrtc:7340
>
> Review-Url: https://codereview.webrtc.org/2786363002
> Cr-Commit-Position: refs/heads/master@{#17483}
> Committed: d00aad5eb2

TBR=kjellander@webrtc.org,henrik.lundin@webrtc.org,kwiberg@webrtc.org,michaelt@webrtc.org,peah@webrtc.org
# Not skipping CQ checks because original CL landed more than 1 days ago.
BUG=webrtc:7340
NOTRY=True

Review-Url: https://codereview.webrtc.org/2791963003
Cr-Commit-Position: refs/heads/master@{#17584}
This commit is contained in:
mbonadei
2017-04-07 00:59:12 -07:00
committed by Commit bot
parent 0944a80f3e
commit 7c2c8438f1
23 changed files with 115 additions and 33 deletions

View File

@ -100,6 +100,12 @@ config("common_config") {
cflags_cc = []
defines = []
if (rtc_enable_protobuf) {
defines += [ "WEBRTC_ENABLE_PROTOBUF=1" ]
} else {
defines += [ "WEBRTC_ENABLE_PROTOBUF=0" ]
}
if (rtc_restrict_logging) {
defines += [ "WEBRTC_RESTRICT_LOGGING" ]
}

View File

@ -79,6 +79,17 @@ if (!rtc_build_ssl) {
}
}
source_set("protobuf_utils") {
sources = [
"protobuf_utils.h",
]
if (rtc_enable_protobuf) {
public_deps = [
"//third_party/protobuf:protobuf_lite",
]
}
}
# The subset of rtc_base approved for use outside of libjingle.
rtc_static_library("rtc_base_approved") {
defines = []

View File

@ -9,4 +9,7 @@ specific_include_rules = {
"gunit_prod.h": [
"+gtest",
],
"protobuf_utils.h": [
"+third_party/protobuf",
],
}

View File

@ -0,0 +1,36 @@
/*
* Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include <string>
#ifndef WEBRTC_BASE_PROTOBUF_UTILS_H_
#define WEBRTC_BASE_PROTOBUF_UTILS_H_
namespace webrtc {
using ProtoString = std::string;
} // namespace webrtc
#if WEBRTC_ENABLE_PROTOBUF
#include "third_party/protobuf/src/google/protobuf/message_lite.h"
#include "third_party/protobuf/src/google/protobuf/repeated_field.h"
namespace webrtc {
using google::protobuf::MessageLite;
using google::protobuf::RepeatedPtrField;
} // namespace webrtc
#endif // WEBRTC_ENABLE_PROTOBUF
#endif // WEBRTC_BASE_PROTOBUF_UTILS_H_

View File

@ -51,6 +51,7 @@ rtc_static_library("rtc_event_log_impl") {
deps = [
":rtc_event_log_api",
"..:webrtc_common",
"../base:protobuf_utils",
"../base:rtc_base_approved",
"../call:call_interfaces",
"../modules/audio_coding:audio_network_adaptor",
@ -97,6 +98,7 @@ if (rtc_enable_protobuf) {
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
}
deps = [
"../base:protobuf_utils",
"../base:rtc_base_approved",
]
}

View File

@ -17,6 +17,7 @@
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/event.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/base/swap_queue.h"
#include "webrtc/base/thread_checker.h"
#include "webrtc/base/timeutils.h"
@ -38,7 +39,7 @@
#include "webrtc/system_wrappers/include/file_wrapper.h"
#ifdef ENABLE_RTC_EVENT_LOG
// Files generated at build-time by the protobuf compiler.
// *.pb.h files are generated at build-time by the protobuf compiler.
#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
#else
@ -584,7 +585,7 @@ bool RtcEventLog::ParseRtcEventLog(const std::string& file_name,
if (!dump_file->OpenFile(file_name.c_str(), true)) {
return false;
}
std::string dump_buffer;
ProtoString dump_buffer;
while ((bytes_read = dump_file->Read(tmp_buffer, sizeof(tmp_buffer))) > 0) {
dump_buffer.append(tmp_buffer, bytes_read);
}

View File

@ -13,7 +13,6 @@
#include <limits>
#include <memory>
#include <string>
#include <utility>
#include <vector>
@ -21,12 +20,13 @@
#include "webrtc/base/event.h"
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/platform_thread.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/base/swap_queue.h"
#include "webrtc/logging/rtc_event_log/ringbuffer.h"
#include "webrtc/system_wrappers/include/file_wrapper.h"
#ifdef ENABLE_RTC_EVENT_LOG
// Files generated at build-time by the protobuf compiler.
// *.ph.h files are generated at build-time by the protobuf compiler.
RTC_PUSH_IGNORING_WUNDEF()
#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
#include "external/webrtc/webrtc/logging/rtc_event_log/rtc_event_log.pb.h"
@ -112,7 +112,7 @@ class RtcEventLogHelperThread final {
std::unique_ptr<rtclog::Event> most_recent_event_;
// Temporary space for serializing profobuf data.
std::string output_string_;
ProtoString output_string_;
rtc::Event wake_periodically_;
rtc::Event wake_from_hibernation_;

View File

@ -20,6 +20,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/call/call.h"
#include "webrtc/logging/rtc_event_log/rtc_event_log.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
@ -128,7 +129,7 @@ std::pair<uint64_t, bool> ParseVarInt(std::istream& stream) {
void GetHeaderExtensions(
std::vector<RtpExtension>* header_extensions,
const google::protobuf::RepeatedPtrField<rtclog::RtpHeaderExtension>&
const RepeatedPtrField<rtclog::RtpHeaderExtension>&
proto_header_extensions) {
header_extensions->clear();
for (auto& p : proto_header_extensions) {

View File

@ -72,6 +72,7 @@ rtc_static_library("builtin_audio_encoder_factory") {
]
deps = [
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
":audio_encoder_factory_interface",
] + audio_codec_deps
@ -101,6 +102,7 @@ rtc_static_library("rent_a_codec") {
deps = [
"../../api/audio_codecs:audio_codecs_api",
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../system_wrappers",
":audio_coding_module_typedefs",
@ -109,6 +111,7 @@ rtc_static_library("rent_a_codec") {
":isac_fix_c",
":neteq_decoder_enum",
] + audio_codec_deps
defines = audio_codec_defines
}
@ -856,6 +859,7 @@ rtc_static_library("webrtc_opus") {
":audio_network_adaptor",
"../..:webrtc_common",
"../../api/audio_codecs:audio_codecs_api",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../base:rtc_numerics",
"../../common_audio",
@ -949,6 +953,7 @@ rtc_static_library("audio_network_adaptor") {
deps = [
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../common_audio",
"../../logging:rtc_event_log_api",
@ -1216,10 +1221,12 @@ if (rtc_include_tests) {
":neteq_unittest_tools",
":webrtc_opus",
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../system_wrappers:system_wrappers",
"../../test:test_support",
]
if (!build_with_chromium && is_clang) {
# Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
@ -1354,6 +1361,7 @@ if (rtc_include_tests) {
":neteq",
":neteq_unittest_tools",
"../../api/audio_codecs:audio_codecs_api",
"../../base:protobuf_utils",
"../../common_audio",
"../../test:test_main",
"//testing/gtest",
@ -2112,6 +2120,7 @@ if (rtc_include_tests) {
"../..:webrtc_common",
"../../api/audio_codecs:audio_codecs_api",
"../../api/audio_codecs:builtin_audio_decoder_factory",
"../../base:protobuf_utils",
"../../base:rtc_base",
"../../base:rtc_base_approved",
"../../base:rtc_base_tests_utils",

View File

@ -195,7 +195,7 @@ ControllerManagerImpl::Config::Config(int min_reordering_time_ms,
ControllerManagerImpl::Config::~Config() = default;
std::unique_ptr<ControllerManager> ControllerManagerImpl::Create(
const std::string& config_string,
const ProtoString& config_string,
size_t num_encoder_channels,
rtc::ArrayView<const int> encoder_frame_lengths_ms,
int min_encoder_bitrate_bps,

View File

@ -16,6 +16,7 @@
#include <vector>
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/controller.h"
namespace webrtc {
@ -49,7 +50,7 @@ class ControllerManagerImpl final : public ControllerManager {
};
static std::unique_ptr<ControllerManager> Create(
const std::string& config_string,
const ProtoString& config_string,
size_t num_encoder_channels,
rtc::ArrayView<const int> encoder_frame_lengths_ms,
int min_encoder_bitrate_bps,

View File

@ -11,6 +11,7 @@
#include <utility>
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/controller_manager.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/mock/mock_controller.h"
#include "webrtc/system_wrappers/include/clock.h"
@ -273,7 +274,7 @@ constexpr int kInitialFrameLengthMs = 60;
constexpr int kMinBitrateBps = 6000;
ControllerManagerStates CreateControllerManager(
const std::string& config_string) {
const ProtoString& config_string) {
ControllerManagerStates states;
states.simulated_clock.reset(new SimulatedClock(kClockInitialTime));
constexpr size_t kNumEncoderChannels = 2;
@ -345,7 +346,7 @@ TEST(ControllerManagerTest, CreateFromConfigStringAndCheckDefaultOrder) {
AddFrameLengthControllerConfig(&config);
AddBitrateControllerConfig(&config);
std::string config_string;
ProtoString config_string;
config.SerializeToString(&config_string);
auto states = CreateControllerManager(config_string);
@ -376,7 +377,7 @@ TEST(ControllerManagerTest, CreateFromConfigStringAndCheckReordering) {
AddBitrateControllerConfig(&config);
std::string config_string;
ProtoString config_string;
config.SerializeToString(&config_string);
auto states = CreateControllerManager(config_string);

View File

@ -12,6 +12,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/protobuf_utils.h"
#ifdef WEBRTC_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP
RTC_PUSH_IGNORING_WUNDEF()
@ -34,7 +35,7 @@ using audio_network_adaptor::debug_dump::EncoderRuntimeConfig;
void DumpEventToFile(const Event& event, FileWrapper* dump_file) {
RTC_CHECK(dump_file->is_open());
std::string dump_data;
ProtoString dump_data;
event.SerializeToString(&dump_data);
int32_t size = event.ByteSize();
dump_file->Write(&size, sizeof(size));

View File

@ -12,7 +12,6 @@
#define WEBRTC_MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_DEBUG_DUMP_WRITER_H_
#include <memory>
#include <string>
#include "webrtc/base/constructormagic.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/controller.h"

View File

@ -18,6 +18,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/logging.h"
#include "webrtc/base/numerics/exp_filter.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/base/safe_conversions.h"
#include "webrtc/base/string_to_number.h"
#include "webrtc/base/timeutils.h"
@ -370,7 +371,7 @@ AudioEncoderOpus::AudioEncoderOpus(
audio_network_adaptor_creator_(
audio_network_adaptor_creator
? std::move(audio_network_adaptor_creator)
: [this](const std::string& config_string,
: [this](const ProtoString& config_string,
RtcEventLog* event_log,
const Clock* clock) {
return DefaultAudioNetworkAdaptorCreator(config_string,
@ -721,7 +722,7 @@ void AudioEncoderOpus::ApplyAudioNetworkAdaptor() {
std::unique_ptr<AudioNetworkAdaptor>
AudioEncoderOpus::DefaultAudioNetworkAdaptorCreator(
const std::string& config_string,
const ProtoString& config_string,
RtcEventLog* event_log,
const Clock* clock) const {
AudioNetworkAdaptorImpl::Config config;

View File

@ -19,6 +19,7 @@
#include "webrtc/api/audio_codecs/audio_format.h"
#include "webrtc/base/constructormagic.h"
#include "webrtc/base/optional.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/common_audio/smoothing_filter.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/include/audio_network_adaptor.h"
#include "webrtc/modules/audio_coding/codecs/audio_encoder.h"
@ -167,7 +168,7 @@ class AudioEncoderOpus final : public AudioEncoder {
void ApplyAudioNetworkAdaptor();
std::unique_ptr<AudioNetworkAdaptor> DefaultAudioNetworkAdaptorCreator(
const std::string& config_string,
const ProtoString& config_string,
RtcEventLog* event_log,
const Clock* clock) const;

View File

@ -25,6 +25,7 @@
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/sha1digest.h"
#include "webrtc/base/stringencode.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.h"
#include "webrtc/modules/audio_coding/neteq/tools/audio_loop.h"
#include "webrtc/modules/audio_coding/neteq/tools/rtp_file_source.h"
@ -194,7 +195,7 @@ void ResultSink::AddResult(const NetEqNetworkStatistics& stats_raw) {
neteq_unittest::NetEqNetworkStatistics stats;
Convert(stats_raw, &stats);
std::string stats_string;
ProtoString stats_string;
ASSERT_TRUE(stats.SerializeToString(&stats_string));
AddMessage(output_fp_, digest_.get(), stats_string);
#else
@ -207,7 +208,7 @@ void ResultSink::AddResult(const RtcpStatistics& stats_raw) {
neteq_unittest::RtcpStatistics stats;
Convert(stats_raw, &stats);
std::string stats_string;
ProtoString stats_string;
ASSERT_TRUE(stats.SerializeToString(&stats_string));
AddMessage(output_fp_, digest_.get(), stats_string);
#else

View File

@ -232,6 +232,7 @@ rtc_static_library("audio_processing") {
"../..:webrtc_common",
"../../audio/utility:audio_frame_operations",
"../../base:gtest_prod",
"../../base:protobuf_utils",
"../audio_coding:isac",
]
public_deps = [
@ -524,6 +525,7 @@ if (rtc_include_tests) {
":audioproc_test_utils",
"../..:webrtc_common",
"../../base:gtest_prod",
"../../base:protobuf_utils",
"../../base:rtc_base",
"../../base:rtc_base_approved",
"../../common_audio:common_audio",
@ -655,8 +657,10 @@ if (rtc_include_tests) {
deps = [
":audio_processing",
":audioproc_test_utils",
"../../base:protobuf_utils",
"//testing/gtest",
]
if (rtc_enable_intelligibility_enhancer) {
defines = [ "WEBRTC_INTELLIGIBILITY_ENHANCER=1" ]
} else {
@ -677,6 +681,7 @@ if (rtc_include_tests) {
":audioproc_protobuf_utils",
":audioproc_test_utils",
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../common_audio",
"../../system_wrappers:system_wrappers_default",
@ -701,6 +706,7 @@ if (rtc_include_tests) {
":audioproc_debug_proto",
":audioproc_protobuf_utils",
":audioproc_test_utils",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
"../../common_audio:common_audio",
"../../system_wrappers",
@ -816,6 +822,7 @@ if (rtc_include_tests) {
deps = [
":audioproc_debug_proto",
"../..:webrtc_common",
"../../base:protobuf_utils",
"../../base:rtc_base_approved",
]
}

View File

@ -1878,11 +1878,11 @@ int AudioProcessingImpl::WriteInitMessage() {
audioproc::Init* msg = debug_dump_.capture.event_msg->mutable_init();
msg->set_sample_rate(formats_.api_format.input_stream().sample_rate_hz());
msg->set_num_input_channels(static_cast<google::protobuf::int32>(
msg->set_num_input_channels(static_cast<int32_t>(
formats_.api_format.input_stream().num_channels()));
msg->set_num_output_channels(static_cast<google::protobuf::int32>(
msg->set_num_output_channels(static_cast<int32_t>(
formats_.api_format.output_stream().num_channels()));
msg->set_num_reverse_channels(static_cast<google::protobuf::int32>(
msg->set_num_reverse_channels(static_cast<int32_t>(
formats_.api_format.reverse_input_stream().num_channels()));
msg->set_reverse_sample_rate(
formats_.api_format.reverse_input_stream().sample_rate_hz());
@ -1952,7 +1952,7 @@ int AudioProcessingImpl::WriteConfigMessage(bool forced) {
}
config.set_experiments_description(experiments_description);
std::string serialized_config = config.SerializeAsString();
ProtoString serialized_config = config.SerializeAsString();
if (!forced &&
debug_dump_.capture.last_serialized_config == serialized_config) {
return kNoError;

View File

@ -13,13 +13,13 @@
#include <list>
#include <memory>
#include <string>
#include <vector>
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/function_view.h"
#include "webrtc/base/gtest_prod_util.h"
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/base/swap_queue.h"
#include "webrtc/base/thread_annotations.h"
#include "webrtc/modules/audio_processing/audio_buffer.h"
@ -29,7 +29,7 @@
#include "webrtc/system_wrappers/include/file_wrapper.h"
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
// Files generated at build-time by the protobuf compiler.
// *.pb.h files are generated at build-time by the protobuf compiler.
RTC_PUSH_IGNORING_WUNDEF()
#ifdef WEBRTC_ANDROID_PLATFORM_BUILD
#include "external/webrtc/webrtc/modules/audio_processing/debug.pb.h"
@ -200,10 +200,10 @@ class AudioProcessingImpl : public AudioProcessing {
ApmDebugDumpThreadState();
~ApmDebugDumpThreadState();
std::unique_ptr<audioproc::Event> event_msg; // Protobuf message.
std::string event_str; // Memory for protobuf serialization.
ProtoString event_str; // Memory for protobuf serialization.
// Serialized string of last saved APM configuration.
std::string last_serialized_config;
ProtoString last_serialized_config;
};
struct ApmDebugDumpState {

View File

@ -20,6 +20,7 @@
#include "webrtc/base/checks.h"
#include "webrtc/base/gtest_prod_util.h"
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/protobuf_utils.h"
#include "webrtc/common_audio/include/audio_util.h"
#include "webrtc/common_audio/resampler/include/push_resampler.h"
#include "webrtc/common_audio/resampler/push_sinc_resampler.h"
@ -58,7 +59,7 @@ namespace {
// file. This is the typical case. When the file should be updated, it can
// be set to true with the command-line switch --write_ref_data.
bool write_ref_data = false;
const google::protobuf::int32 kChannels[] = {1, 2};
const int32_t kChannels[] = {1, 2};
const int kSampleRates[] = {8000, 16000, 32000, 48000};
#if defined(WEBRTC_AUDIOPROC_FIXED_PROFILE)
@ -230,7 +231,7 @@ void WriteStatsMessage(const AudioProcessing::Statistic& output,
#endif
void OpenFileAndWriteMessage(const std::string filename,
const ::google::protobuf::MessageLite& msg) {
const MessageLite& msg) {
FILE* file = fopen(filename.c_str(), "wb");
ASSERT_TRUE(file != NULL);
@ -299,8 +300,7 @@ void ClearTempFiles() {
remove(kv.second.c_str());
}
void OpenFileAndReadMessage(std::string filename,
::google::protobuf::MessageLite* msg) {
void OpenFileAndReadMessage(std::string filename, MessageLite* msg) {
FILE* file = fopen(filename.c_str(), "rb");
ASSERT_TRUE(file != NULL);
ReadMessageFromFile(file, msg);

View File

@ -30,7 +30,7 @@ size_t ReadMessageBytesFromFile(FILE* file, std::unique_ptr<uint8_t[]>* bytes) {
}
// Returns true on success, false on error or end-of-file.
bool ReadMessageFromFile(FILE* file, ::google::protobuf::MessageLite* msg) {
bool ReadMessageFromFile(FILE* file, MessageLite* msg) {
std::unique_ptr<uint8_t[]> bytes;
size_t size = ReadMessageBytesFromFile(file, &bytes);
if (!size)

View File

@ -14,6 +14,7 @@
#include <memory>
#include "webrtc/base/ignore_wundef.h"
#include "webrtc/base/protobuf_utils.h"
RTC_PUSH_IGNORING_WUNDEF()
#include "webrtc/modules/audio_processing/debug.pb.h"
@ -26,7 +27,7 @@ namespace webrtc {
size_t ReadMessageBytesFromFile(FILE* file, std::unique_ptr<uint8_t[]>* bytes);
// Returns true on success, false on error or end-of-file.
bool ReadMessageFromFile(FILE* file, ::google::protobuf::MessageLite* msg);
bool ReadMessageFromFile(FILE* file, MessageLite* msg);
} // namespace webrtc