This reverts commit bd7b461f16b53363e2c510893d8d3aade5737f3a.
Reason for revert: Broke the internal project. The issue maybe related to the apm_debug_dump configuration.
Original change's description:
> Choose between APM-AGC-Limiter and Apm-AGC2-fixed-gain_controller.
>
> The webrtc::AudioMixer uses a limiter component. This CL changes the
> APM-AGC limiter to the APM-AGC2 limiter though a Chrome field trial.
>
> The new limiter has a float interface. Since we're moving to it, we
> now mix in floats as well. After this CL the mixer will support two
> limiters. The limiters have different interfaces and need different
> processing steps. Because of that, we make (rather big) changes to the
> control flow in FrameCombiner. For a short while, we will mix in
> deinterleaved floats when using any limiter.
>
> NOTRY=true
>
> Bug: webrtc:8925
> Change-Id: Ie296c2b0d94f3f0078811a2a58f6fbf0f3e6e4a8
> Reviewed-on: https://webrtc-review.googlesource.com/56141
> Commit-Queue: Alex Loiko <aleloi@webrtc.org>
> Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22185}
TBR=gustaf@webrtc.org,aleloi@webrtc.org
Change-Id: I3dd1a2b1fca32c4dd046e6fc325744079e3ac5ca
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8925
Reviewed-on: https://webrtc-review.googlesource.com/57940
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22189}
This reverts commit 9ecdcdf2b527bdb1d097782d92817c9866d6d18b.
Reason for revert: Breaks downstream project.
Original change's description:
> Some cleanup for the logging code:
>
> * Only include 'tag' for Android. Before there was an
> extra std::string variable per log statement for all
> platforms.
> * Remove unused logging macro for Windows and 'module' ctor argument.
> * Move httpcommon code out of logging and to where it's used.
>
> Change-Id: I347805d3df2cee2840c0d2eef5bfefaff1cdbf37
> Bug: webrtc:8928
> Reviewed-on: https://webrtc-review.googlesource.com/57183
> Reviewed-by: Jonas Olsson <jonasolsson@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Commit-Queue: Tommi <tommi@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22184}
TBR=kwiberg@webrtc.org,tommi@webrtc.org,jonasolsson@webrtc.org
Change-Id: I37a13d766fbdee2adb7f45231cf8be6b2b456bec
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:8928
Reviewed-on: https://webrtc-review.googlesource.com/57720
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22187}
The webrtc::AudioMixer uses a limiter component. This CL changes the
APM-AGC limiter to the APM-AGC2 limiter though a Chrome field trial.
The new limiter has a float interface. Since we're moving to it, we
now mix in floats as well. After this CL the mixer will support two
limiters. The limiters have different interfaces and need different
processing steps. Because of that, we make (rather big) changes to the
control flow in FrameCombiner. For a short while, we will mix in
deinterleaved floats when using any limiter.
NOTRY=true
Bug: webrtc:8925
Change-Id: Ie296c2b0d94f3f0078811a2a58f6fbf0f3e6e4a8
Reviewed-on: https://webrtc-review.googlesource.com/56141
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22185}
* Only include 'tag' for Android. Before there was an
extra std::string variable per log statement for all
platforms.
* Remove unused logging macro for Windows and 'module' ctor argument.
* Move httpcommon code out of logging and to where it's used.
Change-Id: I347805d3df2cee2840c0d2eef5bfefaff1cdbf37
Bug: webrtc:8928
Reviewed-on: https://webrtc-review.googlesource.com/57183
Reviewed-by: Jonas Olsson <jonasolsson@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22184}
The length of the fuzzer input can sometimes be really long (more than
1000000 bytes), and this take a very long time to execute. Typically,
the fuzzer times out instead. This change limits the used length of
the fuzzer to 200000 bytes.
NOTRY=TRUE
Bug: chromium:802149
Change-Id: Ia9d2f080602bba8ff70c5f0575bb9ecfa99c537c
Reviewed-on: https://webrtc-review.googlesource.com/57581
Commit-Queue: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22183}
The length of the fuzzer input can sometimes be really long (more than
600000 bytes), and this take a very long time to execute. Typically,
the fuzzer times out instead. This change limits the used length of
the fuzzer to 100000 bytes.
NOTRY=TRUE
Bug: chromium:802193
Change-Id: Id32174611fadb480f4e2c6b4f553a2ba0fa5b493
Reviewed-on: https://webrtc-review.googlesource.com/57580
Commit-Queue: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22182}
The length of the fuzzer input can sometimes be really long (more than
600000 bytes), and this take a very long time to execute. Typically,
the fuzzer times out instead. This change limits the used length of
the fuzzer to 100000 bytes.
NOTRY=TRUE
Bug: chromium:802245
Change-Id: Ibe02b6de932d900408f870d9ba440b7b8e08dc0e
Reviewed-on: https://webrtc-review.googlesource.com/57180
Commit-Queue: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22181}
In rare and pathological circumstances, it could happen that the input
length to the merge function is very short. This CL will avoid one of
the problems with out-of-bounds read that could result from this.
Bug: chromium:799499
Change-Id: I6bde105ae88f9d130764b6dfb3d25443d07e214b
Reviewed-on: https://webrtc-review.googlesource.com/57582
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Commit-Queue: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22180}
There was an implementation, but it relied on SSLCertificate::GetChain,
which was never implemented. Except in the fake certificate classes
used by the stats collector tests, hence the tests were passing.
Instead of implementing GetChain, we decided (in
https://webrtc-review.googlesource.com/c/src/+/6500) to add
methods that return a SSLCertChain directly, since it results in a
somewhat cleaner object model.
So this CL switches everything to use the "chain" methods, and gets
rid of the obsolete methods and member variables.
Bug: webrtc:8920
Change-Id: Ie9d7d53654ba859535462521b54c788adec7badf
Reviewed-on: https://webrtc-review.googlesource.com/56961
Commit-Queue: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Zhi Huang <zhihuang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22177}
This CL fixes the bug that we must have some padding for H264 codec
when used in Multiplex encoder/decoder, otherwise H264 decoder will
crash.
And this CL fixes a bug that potential infinite loop exists in
MultiplexEncoderAdapter
Bug: webrtc:8921
Change-Id: I4124579c31ee69f72e29d118378aa1f8b3f05eb4
Reviewed-on: https://webrtc-review.googlesource.com/56960
Commit-Queue: Qiang Chen <qiangchen@chromium.org>
Reviewed-by: Emircan Uysaler <emircan@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22175}
Pass pointer to application_data from RtpPacketToSend arriving via RtpSender::SendToNetwork through to Transport::SendRtp, in PacketOptions.
Bug: webrtc:8906
Change-Id: Ie75013ed472710f4efcfbcc160e46a6119a1f41d
Reviewed-on: https://webrtc-review.googlesource.com/55600
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Dino Radaković <dinor@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22174}
The bit rate target for ramp down in was set equal to the simulated
capacity. Expected behavior of an estimator is to achieve an estimate
near the true value but not always the exact value. Adding a margin
allows from noise in the measurement while still testing for the desired
behavor.
Bug: webrtc:8878
Change-Id: I18fb6c9704bf08e58ee08ce6c85abee2eaa08356
Reviewed-on: https://webrtc-review.googlesource.com/57080
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22171}
FALLBACK_SOFTWARE is now treated as a critical error and results in
immediate fallback to software coding if available. If ERROR is
returned, codec reset is attempted. If that fails, software fallback
is used.
Bug: b/73498933
Change-Id: I7fe163efd09e6f27c72491e9595954ddc59b1448
Reviewed-on: https://webrtc-review.googlesource.com/54901
Reviewed-by: Alex Glaznev <glaznev@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22169}
In practice, we never want to go back to HW decoding after deciding to
start decoding with SW codecs. This allows simplifying the code in the
fallback wrapper and makes it easier to implement HW codecs.
HW decoder is also now released when software fallback is activated
because it will not be used again. This could free up some resources.
Bug: b/73498933
Change-Id: Ibea4e32fce0c605179b649c8ac2744031799f3ee
Reviewed-on: https://webrtc-review.googlesource.com/55263
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Reviewed-by: Magnus Jedvert <magjed@webrtc.org>
Reviewed-by: Alex Glaznev <glaznev@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22168}
The real_fourier_openmax.h header should only be included when
RTC_USE_OPENMAX_DL is defined.
Bug: None
Change-Id: I70a9c7745e2c24d15c7bb510d432638a2c70eef9
Reviewed-on: https://webrtc-review.googlesource.com/56841
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22167}
Moving the module process thread responsible for running the pacer
and the send side congestion controller to RtpTransportControllerSend
since it already owns the pacer and the congestion controller. They
are also moved to a common thread rather than using two separate
threads.
As part of the move, the remote bitrate estimator has been moved to the
common process thread in the Call class. Previously it was run on the
removed pacer thread.
Bug: webrtc:8415
Change-Id: I4322eef30d8b97b9611f33af7e560703b710d232
Reviewed-on: https://webrtc-review.googlesource.com/55700
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22166}
JsepTransportController process the entire SDP and handle the RTCP-mux,
SRTP setup, BUNDLE related logic internally. This will replace the current
TransportController.
JsepTransport2 is used by the JsepTransportController which processes the
transport part of SDP and owns the DtlsTransport created internally.
JsepTransport2 will replace JsepTransport and be renamed eventually.
Bug: webrtc:8587
Change-Id: Ib02dfa52fe9b7a5b8b132afcc8e4363eb8bd9cf4
Reviewed-on: https://webrtc-review.googlesource.com/48841
Commit-Queue: Zhi Huang <zhihuang@webrtc.org>
Reviewed-by: Taylor Brandstetter <deadbeef@webrtc.org>
Reviewed-by: Peter Thatcher <pthatcher@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22164}
This is a reland of c75f1e45093a8d5cc62937c7708b87aa5c5bf0b0.
Original change's description:
> Reduce locking in VideoReceiver and check the threading model.
>
> Note: This is a subset of code that was previously reviewed here:
> - https://codereview.webrtc.org/2764573002/
>
> * Added two notification methods, DecoderThreadStarting() and DecoderThreadStopped()
> * Allows us to establish a period when the decoder thread is not running and it is
> safe to modify variables such as callbacks, that are only read when the decoder
> thread is running.
> * Allows us to DCHECK thread guarantees/correctness.
> * Allows synchronizing callbacks from the module process thread and have them only
> active while the decoder thread is running.
> * The above, allows us to establish two modes for the thread,
> single-threaded-mutable and multi-threaded-const.
> * Using that knowledge, we can remove |receive_crit_| as well as locking for a
> number of member variables.
> * Removed |VCMFrameBuffer _frameFromFile| (unused).
> * Clean up several of my TODOs
>
> Bug: webrtc:7361, chromium:695438
> Change-Id: Id0048ee9624f76103c088d02825eb5c0d6c8913c
> Reviewed-on: https://webrtc-review.googlesource.com/55000
> Commit-Queue: Tommi <tommi@webrtc.org>
> Reviewed-by: Philip Eliasson <philipel@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22133}
Bug: webrtc:7361, chromium:695438
Change-Id: I32e1dc6c62cb30ad96e6366106f39fe415de49f1
Tbr: philipel@webrtc.org
Reviewed-on: https://webrtc-review.googlesource.com/56803
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22163}
Using a mock of rtp transport controller send in audio send stream unit
tests. This reduces the dependencies and makes the tests more focused
on testing the functionality of audio send stream itself.
Bug: webrtc:8415
Change-Id: Ia8d9cf47d93decc74b10ca75a6771f39df658dc2
Reviewed-on: https://webrtc-review.googlesource.com/56600
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Reviewed-by: Oskar Sundbom <ossu@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22161}
Flakiness of the test reveals this assumption doesn't hold and shouldn't be rely on.
Currently there is no code that use it. Plans to rely on it silently adjusted.
Bug: webrtc:8610
Change-Id: Id24f2a36c8fb188b518f5301c4b278836885d140
Reviewed-on: https://webrtc-review.googlesource.com/56860
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22160}
The plan is to:
1. Move FrameObject to api/video.
2. Rename FrameObject to EncodedFrame.
3. Move EncodedFrame out of the video_coding namespace.
This is the 2nd CL.
Bug: webrtc:8909
Change-Id: I5e76a0a3b306156b8bc1de67834b4adf14bebef9
Reviewed-on: https://webrtc-review.googlesource.com/56182
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Tommi <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22158}
When a receive stream is created its internal Channel defaults to a
gain of 1.0. If a gain has been set for the stream, but it needs to be
recreated internally, its volume will not carry over but reset to
1.0. This CL fixes that, for now. Ideally, we'd not recreate these
streams internally.
Bug: chromium:810848
Change-Id: Ia2ce87a39f1f4d7d3596c1b5ab256b10bdbca3c3
Reviewed-on: https://webrtc-review.googlesource.com/54402
Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org>
Commit-Queue: Oskar Sundbom <ossu@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22156}
Added dependencies used by MockRtpTransportControllerSend to its header
file. The mocked interface can't be used properly without those.
This prepares for later CLs utilizing the mock.
Bug: None
Change-Id: I5f8ca04032ad09810240f7c034cc628d700dbedb
Reviewed-on: https://webrtc-review.googlesource.com/56181
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22154}
The unit tests for AudioSendStream was generating a lot of warnings
about "Uninteresting mock function call" on mocked objects. This is due
to the default gmock implementation being NaggyMock and there was no
NiceMock override.
With this change the mocks are replaced with NiceMock implementations
which do not output warnings for unexpected calls. This makes the error
output from the test runner much easier to visually parse to find the
actual errors in failing tests.
Bug: None
Change-Id: Ic40db78159536ddeaa72a468fc2cb3ec17386d44
Reviewed-on: https://webrtc-review.googlesource.com/56220
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22152}
This prepares for a later CL providing two implementations of
SendSideCongestionController.
Bug: webrtc:8415
Change-Id: I890dbe4b88bf609921558e03aac66b42629857c8
Reviewed-on: https://webrtc-review.googlesource.com/56700
Reviewed-by: Björn Terelius <terelius@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22151}
We already did this on Windows, but elsewhere we were returning false
on success and true on failure, because close() returns 0 on success
and -1 on failure, and we were letting that value implicitly convert
to bool.
Bug: webrtc:8719
Change-Id: I417ff207db8d1fa4cf73a49f1d53762a8066da6c
Reviewed-on: https://webrtc-review.googlesource.com/56660
Reviewed-by: Niels Moller <nisse@webrtc.org>
Commit-Queue: Karl Wiberg <kwiberg@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22150}
new is an unsafe construct, while these specific cases were properly
handled it is a code smell and using unique_ptr from the start makes the
code more obviously correct.
Bug: None
Change-Id: I2554cef8d3a8432a3ced1623292fae0adff9421d
Reviewed-on: https://webrtc-review.googlesource.com/56620
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22147}
MockAudioEncoder was calling a mocked Die function on itself in its
destructor. This outputs "Uninteresting mock function call" warning if
the Die call was not expected. This is true even if a NiceMock is used
to suppress the warnings.
The purpose of testing that the destructor is called might be to protect
against memory leaks when audio encoder ownership is transferred using a
raw pointer. However, this case is already covered by msan checks.
Bug: None
Change-Id: I0603c417b4b239027859228e05ebcf83ff5aaf18
Reviewed-on: https://webrtc-review.googlesource.com/56183
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22146}
This CL moves the AEC3 API call skew estimator into a separate file.
This has the advantage that it can more easily be tested.
The CL also simplifies the code and adds unittests.
Bug: webrtc:8671
Change-Id: I19bc31ca5666cdc87a1ed14770ef20ead1b5b80d
Reviewed-on: https://webrtc-review.googlesource.com/55860
Commit-Queue: Per Åhgren <peah@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22144}
This reverts commit a4e71b9e7e59be21b98d63cf8cb676096d9c74b0.
Reason for revert: Breaking internal project
Original change's description:
> VCMGenericDecoder threading updates for all but Android.
>
> * All methods now have thread checks.
> * Variable access associated with thread checkers.
> * Remove need for |rtc::CriticalSection lock_|
>
> Since the android decoder is inherently asynchronous, and
> FrameBuffer2's decoder doesn't support posting tasks to it
> yet (for async decode completion), we need to tackle android
> separately. Once FrameBuffer2 gets changed to use a TaskQueue
> or ProcessThread, we can move Android over to delivering decoded
> frames on the right thread/queue and delete generic_decoder_android.*.
>
> Note: This is a subset of code that was previously reviewed here:
> - https://codereview.webrtc.org/2764573002/
>
> Bug: webrtc:7361, webrtc:8907, chromium:695438
> Change-Id: I118609dfa5c0f0180287d8c2b6d62987b7473c5c
> Reviewed-on: https://webrtc-review.googlesource.com/55060
> Commit-Queue: Tommi <tommi@webrtc.org>
> Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22119}
TBR=sakal@webrtc.org,tommi@webrtc.org
Change-Id: I3afe4671f9d06bb4a2b17e4f14c21d79f773e067
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:7361, webrtc:8907, chromium:695438
Reviewed-on: https://webrtc-review.googlesource.com/56282
Reviewed-by: Lu Liu <lliuu@webrtc.org>
Commit-Queue: Lu Liu <lliuu@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22143}
This reverts commit c75f1e45093a8d5cc62937c7708b87aa5c5bf0b0.
Reason for revert: Breaking internal project
Original change's description:
> Reduce locking in VideoReceiver and check the threading model.
>
> Note: This is a subset of code that was previously reviewed here:
> - https://codereview.webrtc.org/2764573002/
>
> * Added two notification methods, DecoderThreadStarting() and DecoderThreadStopped()
> * Allows us to establish a period when the decoder thread is not running and it is
> safe to modify variables such as callbacks, that are only read when the decoder
> thread is running.
> * Allows us to DCHECK thread guarantees/correctness.
> * Allows synchronizing callbacks from the module process thread and have them only
> active while the decoder thread is running.
> * The above, allows us to establish two modes for the thread,
> single-threaded-mutable and multi-threaded-const.
> * Using that knowledge, we can remove |receive_crit_| as well as locking for a
> number of member variables.
> * Removed |VCMFrameBuffer _frameFromFile| (unused).
> * Clean up several of my TODOs
>
> Bug: webrtc:7361, chromium:695438
> Change-Id: Id0048ee9624f76103c088d02825eb5c0d6c8913c
> Reviewed-on: https://webrtc-review.googlesource.com/55000
> Commit-Queue: Tommi <tommi@webrtc.org>
> Reviewed-by: Philip Eliasson <philipel@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22133}
TBR=tommi@webrtc.org,philipel@webrtc.org
Change-Id: I4d78e8b2c05b36e1a3f64cb38d652579b3a23f22
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:7361, chromium:695438
Reviewed-on: https://webrtc-review.googlesource.com/56280
Reviewed-by: Lu Liu <lliuu@webrtc.org>
Commit-Queue: Lu Liu <lliuu@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22141}