WebKit Bugzilla
Attachment 347839 Details for
Bug 188745
: Update libwebrtc up to 984f1a80c0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
reduced patch that contains only the changes after resyncing libwebrtc
patch-after-libwebrtc-resync (text/plain), 844.46 KB, created by
youenn fablet
on 2018-08-22 13:35:46 PDT
(
hide
)
Description:
reduced patch that contains only the changes after resyncing libwebrtc
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-08-22 13:35:46 PDT
Size:
844.46 KB
patch
obsolete
>diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index b54f89ec9ec..c687430a12a 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,15 @@ >+2018-08-20 Youenn Fablet <youenn@apple.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Updated tests according new webrtc backend. >+ >+ * webrtc/libwebrtc/setLocalDescriptionCrash.html: >+ * webrtc/video-getParameters.html: >+ > 2018-08-21 Yusuke Suzuki <yusukesuzuki@slowstart.org> > > Support "name" option for dedicated workers >diff --git a/LayoutTests/imported/w3c/ChangeLog b/LayoutTests/imported/w3c/ChangeLog >index 14e2c7c12e3..0e4dda7c09e 100644 >--- a/LayoutTests/imported/w3c/ChangeLog >+++ b/LayoutTests/imported/w3c/ChangeLog >@@ -1,3 +1,14 @@ >+2018-08-21 Youenn Fablet <youenn@apple.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ <rdar://problem/43539177> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt: >+ * web-platform-tests/webrtc/no-media-call-expected.txt: >+ > 2018-08-21 Yusuke Suzuki <yusukesuzuki@slowstart.org> > > Support "name" option for dedicated workers >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt >index ca4912e349b..259885390dc 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/RTCPeerConnection-addIceCandidate-expected.txt >@@ -1,25 +1,25 @@ > >-FAIL Add null candidate should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >+FAIL Add null candidate should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." > FAIL Add ICE candidate before setting remote description should reject with InvalidStateError assert_unreached: Should have rejected: undefined Reached unreachable code >-FAIL Add ICE candidate after setting remote description should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add ICE candidate with RTCIceCandidate should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with only valid sdpMid should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with only valid sdpMLineIndex should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL addIceCandidate with first sdpMid and sdpMLineIndex add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL addIceCandidate with second sdpMid and sdpMLineIndex should add candidate to second media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate for first media stream with null ufrag should add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Adding multiple candidates should add candidates to their corresponding media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add with empty candidate string (end of candidate) should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with both sdpMid and sdpMLineIndex manually set to null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with only valid candidate string should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with invalid candidate string and both sdpMid and sdpMLineIndex null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with empty dict should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with manually filled default values should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with invalid sdpMid should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with invalid sdpMLineIndex should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Invalid sdpMLineIndex should be ignored if valid sdpMid is provided promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate for media stream 2 with null ufrag should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with invalid ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with invalid candidate string should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >-FAIL Add candidate with sdpMid belonging to different ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters.." >+FAIL Add ICE candidate after setting remote description should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add ICE candidate with RTCIceCandidate should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with only valid sdpMid should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with only valid sdpMLineIndex should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL addIceCandidate with first sdpMid and sdpMLineIndex add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL addIceCandidate with second sdpMid and sdpMLineIndex should add candidate to second media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate for first media stream with null ufrag should add candidate to first media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Adding multiple candidates should add candidates to their corresponding media stream promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add with empty candidate string (end of candidate) should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with both sdpMid and sdpMLineIndex manually set to null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with only valid candidate string should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with invalid candidate string and both sdpMid and sdpMLineIndex null should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with empty dict should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with manually filled default values should reject with TypeError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with invalid sdpMid should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with invalid sdpMLineIndex should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Invalid sdpMLineIndex should be ignored if valid sdpMid is provided promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate for media stream 2 with null ufrag should succeed promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with invalid ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with invalid candidate string should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." >+FAIL Add candidate with sdpMid belonging to different ufrag should reject with OperationError promise_test: Unhandled rejection with value: object "OperationError: Failed to set remote offer sdp: Failed to set remote video description send parameters." > >diff --git a/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt >index 033022f81bb..15d01b9e6a5 100644 >--- a/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt >+++ b/LayoutTests/imported/w3c/web-platform-tests/webrtc/no-media-call-expected.txt >@@ -4,5 +4,4 @@ Harness Error (TIMEOUT), message = null > TIMEOUT Can set up a basic WebRTC call with no data. Test timed out > iceConnectionState info > >-First: checking >-Second: new >+ >diff --git a/LayoutTests/webrtc/libwebrtc/setLocalDescriptionCrash.html b/LayoutTests/webrtc/libwebrtc/setLocalDescriptionCrash.html >index 7a0142c2a47..886a97c52df 100644 >--- a/LayoutTests/webrtc/libwebrtc/setLocalDescriptionCrash.html >+++ b/LayoutTests/webrtc/libwebrtc/setLocalDescriptionCrash.html >@@ -10,7 +10,7 @@ > <script> > function badifyAnswer(answer) > { >- return {type: answer.type, sdp: answer.sdp.replace("BUNDLE video", "BUNDLE")}; >+ return {type: answer.type, sdp: answer.sdp.replace("v=0", "v")}; > } > > promise_test((test) => { >@@ -29,9 +29,9 @@ promise_test((test) => { > badAnswer = badifyAnswer(answer); > return pc2.setLocalDescription(badAnswer); > }).then(assert_unreached, (e) => { >- assert_equals(e.message, "Failed to set local answer sdp: Failed to enable BUNDLE."); >+ assert_equals(e.message, "Expect line: v="); > return pc2.setLocalDescription(badAnswer).then(assert_unreached, (e) => { >- assert_equals(e.message, "Failed to set local answer sdp: no pending remote description."); >+ assert_equals(e.message, "Expect line: v="); > }); > }); > }, "Testing calling twice setLocalDescription with a bad SDP"); >diff --git a/LayoutTests/webrtc/video-getParameters.html b/LayoutTests/webrtc/video-getParameters.html >index c9c949f8a5e..3b269080b3d 100644 >--- a/LayoutTests/webrtc/video-getParameters.html >+++ b/LayoutTests/webrtc/video-getParameters.html >@@ -45,6 +45,9 @@ promise_test((test) => { > receiverParameters.encodings[0].fec.ssrc = 1; > receiverParameters.encodings[0].rtx.ssrc = 1; > >+ senderParameters.transactionId = ""; >+ receiverParameters.transactionId = ""; >+ > assert_equals(JSON.stringify(senderParameters), JSON.stringify(receiverParameters), "testing sender vs. receiver parameters"); > > senderParameters.encodings[0].ssrc = 1; >diff --git a/Source/ThirdParty/libwebrtc/CMakeLists.txt b/Source/ThirdParty/libwebrtc/CMakeLists.txt >index 550cf2a16de..5552a6ef63f 100644 >--- a/Source/ThirdParty/libwebrtc/CMakeLists.txt >+++ b/Source/ThirdParty/libwebrtc/CMakeLists.txt >@@ -17,6 +17,11 @@ if (NOT ALSALIB_FOUND) > endif () > > set(webrtc_SOURCES >+ Source/third_party/abseil-cpp/absl/base/dynamic_annotations.cc >+ Source/third_party/abseil-cpp/absl/base/internal/raw_logging.cc >+ Source/third_party/abseil-cpp/absl/types/bad_optional_access.cc >+ Source/third_party/abseil-cpp/absl/types/bad_variant_access.cc >+ Source/third_party/abseil-cpp/absl/types/optional.cc > Source/third_party/boringssl/err_data.c > Source/third_party/boringssl/src/crypto/asn1/a_bitstr.c > Source/third_party/boringssl/src/crypto/asn1/a_bool.c >@@ -294,17 +299,14 @@ set(webrtc_SOURCES > Source/third_party/libyuv/source/rotate_any.cc > Source/third_party/libyuv/source/rotate_argb.cc > Source/third_party/libyuv/source/rotate_common.cc >- Source/third_party/libyuv/source/rotate_dspr2.cc > Source/third_party/libyuv/source/rotate_gcc.cc > Source/third_party/libyuv/source/row_any.cc > Source/third_party/libyuv/source/row_common.cc >- Source/third_party/libyuv/source/row_dspr2.cc > Source/third_party/libyuv/source/row_gcc.cc > Source/third_party/libyuv/source/scale.cc > Source/third_party/libyuv/source/scale_any.cc > Source/third_party/libyuv/source/scale_argb.cc > Source/third_party/libyuv/source/scale_common.cc >- Source/third_party/libyuv/source/scale_dspr2.cc > Source/third_party/libyuv/source/scale_gcc.cc > Source/third_party/libyuv/source/video_common.cc > Source/third_party/opus/src/celt/bands.c >@@ -442,6 +444,8 @@ set(webrtc_SOURCES > Source/third_party/opus/src/src/opus_multistream_decoder.c > Source/third_party/opus/src/src/opus_multistream_encoder.c > Source/third_party/opus/src/src/repacketizer.c >+ Source/third_party/rnnoise/src/kiss_fft.cc >+ Source/third_party/rnnoise/src/rnn_vad_weights.cc > Source/third_party/usrsctp/usrsctplib/netinet/sctp_asconf.c > Source/third_party/usrsctp/usrsctplib/netinet/sctp_auth.c > Source/third_party/usrsctp/usrsctplib/netinet/sctp_bsd_addr.c >@@ -465,8 +469,10 @@ set(webrtc_SOURCES > Source/third_party/usrsctp/usrsctplib/user_mbuf.c > Source/third_party/usrsctp/usrsctplib/user_recv_thread.c > Source/third_party/usrsctp/usrsctplib/user_socket.c >+ Source/webrtc/api/audio/audio_frame.cc > Source/webrtc/api/audio_codecs/L16/audio_decoder_L16.cc > Source/webrtc/api/audio_codecs/L16/audio_encoder_L16.cc >+ Source/webrtc/api/audio_codecs/audio_codec_pair_id.cc > Source/webrtc/api/audio_codecs/audio_decoder.cc > Source/webrtc/api/audio_codecs/audio_encoder.cc > Source/webrtc/api/audio_codecs/audio_format.cc >@@ -485,46 +491,87 @@ set(webrtc_SOURCES > Source/webrtc/api/audio_codecs/opus/audio_decoder_opus.cc > Source/webrtc/api/audio_codecs/opus/audio_encoder_opus.cc > Source/webrtc/api/audio_codecs/opus/audio_encoder_opus_config.cc >+ Source/webrtc/api/audio_options.cc >+ Source/webrtc/api/call/transport.cc > Source/webrtc/api/candidate.cc >+ Source/webrtc/api/datachannelinterface.cc > Source/webrtc/api/jsep.cc >+ Source/webrtc/api/jsepicecandidate.cc > Source/webrtc/api/mediaconstraintsinterface.cc > Source/webrtc/api/mediastreaminterface.cc > Source/webrtc/api/mediatypes.cc >- Source/webrtc/api/optional.cc >+ Source/webrtc/api/peerconnectioninterface.cc > Source/webrtc/api/proxy.cc > Source/webrtc/api/rtcerror.cc > Source/webrtc/api/rtp_headers.cc > Source/webrtc/api/rtpparameters.cc >+ Source/webrtc/api/rtpreceiverinterface.cc >+ Source/webrtc/api/rtptransceiverinterface.cc > Source/webrtc/api/statstypes.cc >- Source/webrtc/api/umametrics.cc >+ Source/webrtc/api/transport/bitrate_settings.cc >+ Source/webrtc/api/transport/network_types.cc >+ Source/webrtc/api/units/data_rate.cc >+ Source/webrtc/api/units/data_size.cc >+ Source/webrtc/api/units/time_delta.cc >+ Source/webrtc/api/units/timestamp.cc >+ Source/webrtc/api/video/color_space.cc >+ Source/webrtc/api/video/encoded_frame.cc >+ Source/webrtc/api/video/i010_buffer.cc > Source/webrtc/api/video/i420_buffer.cc >+ Source/webrtc/api/video/video_bitrate_allocation.cc > Source/webrtc/api/video/video_content_type.cc > Source/webrtc/api/video/video_frame.cc > Source/webrtc/api/video/video_frame_buffer.cc >+ Source/webrtc/api/video/video_source_interface.cc >+ Source/webrtc/api/video/video_stream_decoder_create.cc >+ Source/webrtc/api/video/video_stream_encoder_create.cc > Source/webrtc/api/video/video_timing.cc >+ Source/webrtc/api/video_codecs/builtin_video_decoder_factory.cc >+ Source/webrtc/api/video_codecs/builtin_video_encoder_factory.cc >+ Source/webrtc/api/video_codecs/sdp_video_format.cc >+ Source/webrtc/api/video_codecs/video_codec.cc >+ Source/webrtc/api/video_codecs/video_decoder.cc >+ Source/webrtc/api/video_codecs/video_decoder_software_fallback_wrapper.cc > Source/webrtc/api/video_codecs/video_encoder.cc >- Source/webrtc/api/videosourceinterface.cc >+ Source/webrtc/api/video_codecs/video_encoder_config.cc >+ Source/webrtc/api/video_codecs/video_encoder_software_fallback_wrapper.cc >+ Source/webrtc/audio/audio_level.cc > Source/webrtc/audio/audio_receive_stream.cc > Source/webrtc/audio/audio_send_stream.cc > Source/webrtc/audio/audio_state.cc > Source/webrtc/audio/audio_transport_impl.cc >+ Source/webrtc/audio/channel.cc >+ Source/webrtc/audio/channel_proxy.cc > Source/webrtc/audio/null_audio_poller.cc >+ Source/webrtc/audio/remix_resample.cc > Source/webrtc/audio/time_interval.cc >+ Source/webrtc/audio/transport_feedback_packet_loss_tracker.cc > Source/webrtc/audio/utility/audio_frame_operations.cc >+ Source/webrtc/call/audio_receive_stream.cc > Source/webrtc/call/audio_send_stream.cc >+ Source/webrtc/call/audio_state.cc > Source/webrtc/call/bitrate_allocator.cc > Source/webrtc/call/call.cc >+ Source/webrtc/call/call_config.cc > Source/webrtc/call/callfactory.cc >+ Source/webrtc/call/degraded_call.cc >+ Source/webrtc/call/fake_network_pipe.cc >+ Source/webrtc/call/flexfec_receive_stream.cc > Source/webrtc/call/flexfec_receive_stream_impl.cc >+ Source/webrtc/call/packet_receiver.cc >+ Source/webrtc/call/receive_time_calculator.cc > Source/webrtc/call/rtcp_demuxer.cc >+ Source/webrtc/call/rtp_bitrate_configurator.cc > Source/webrtc/call/rtp_config.cc > Source/webrtc/call/rtp_demuxer.cc >+ Source/webrtc/call/rtp_payload_params.cc > Source/webrtc/call/rtp_rtcp_demuxer_helper.cc > Source/webrtc/call/rtp_stream_receiver_controller.cc > Source/webrtc/call/rtp_transport_controller_send.cc >+ Source/webrtc/call/rtp_video_sender.cc > Source/webrtc/call/rtx_receive_stream.cc >+ Source/webrtc/call/simulated_network.cc > Source/webrtc/call/syncable.cc >- Source/webrtc/call/video_config.cc > Source/webrtc/call/video_receive_stream.cc > Source/webrtc/call/video_send_stream.cc > Source/webrtc/common_audio/audio_converter.cc >@@ -532,7 +579,6 @@ set(webrtc_SOURCES > Source/webrtc/common_audio/audio_util.cc > Source/webrtc/common_audio/blocker.cc > Source/webrtc/common_audio/channel_buffer.cc >- Source/webrtc/common_audio/fft4g.c > Source/webrtc/common_audio/fir_filter_c.cc > Source/webrtc/common_audio/fir_filter_factory.cc > Source/webrtc/common_audio/lapped_transform.cc >@@ -573,12 +619,13 @@ set(webrtc_SOURCES > Source/webrtc/common_audio/signal_processing/spl_init.c > Source/webrtc/common_audio/signal_processing/spl_inl.c > Source/webrtc/common_audio/signal_processing/spl_sqrt.c >- Source/webrtc/common_audio/signal_processing/spl_sqrt_floor.c > Source/webrtc/common_audio/signal_processing/splitting_filter.c > Source/webrtc/common_audio/signal_processing/sqrt_of_one_minus_x_squared.c > Source/webrtc/common_audio/signal_processing/vector_scaling_operations.c > Source/webrtc/common_audio/smoothing_filter.cc > Source/webrtc/common_audio/sparse_fir_filter.cc >+ Source/webrtc/common_audio/third_party/fft4g/fft4g.c >+ Source/webrtc/common_audio/third_party/spl_sqrt_floor/spl_sqrt_floor.c > Source/webrtc/common_audio/vad/vad.cc > Source/webrtc/common_audio/vad/vad_core.c > Source/webrtc/common_audio/vad/vad_filterbank.c >@@ -588,7 +635,6 @@ set(webrtc_SOURCES > Source/webrtc/common_audio/wav_file.cc > Source/webrtc/common_audio/wav_header.cc > Source/webrtc/common_audio/window_generator.cc >- Source/webrtc/common_types.cc > Source/webrtc/common_video/bitrate_adjuster.cc > Source/webrtc/common_video/h264/h264_bitstream_parser.cc > Source/webrtc/common_video/h264/h264_common.cc >@@ -608,6 +654,8 @@ set(webrtc_SOURCES > Source/webrtc/logging/rtc_event_log/events/rtc_event_audio_send_stream_config.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_bwe_update_delay_based.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_bwe_update_loss_based.cc >+ Source/webrtc/logging/rtc_event_log/events/rtc_event_ice_candidate_pair.cc >+ Source/webrtc/logging/rtc_event_log/events/rtc_event_ice_candidate_pair_config.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_probe_cluster_created.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_probe_result_failure.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_probe_result_success.cc >@@ -617,13 +665,16 @@ set(webrtc_SOURCES > Source/webrtc/logging/rtc_event_log/events/rtc_event_rtp_packet_outgoing.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_video_receive_stream_config.cc > Source/webrtc/logging/rtc_event_log/events/rtc_event_video_send_stream_config.cc >+ Source/webrtc/logging/rtc_event_log/icelogger.cc > Source/webrtc/logging/rtc_event_log/output/rtc_event_log_output_file.cc > Source/webrtc/logging/rtc_event_log/rtc_event_log.cc > Source/webrtc/logging/rtc_event_log/rtc_event_log_factory.cc >+ Source/webrtc/logging/rtc_event_log/rtc_event_log_impl.cc > Source/webrtc/logging/rtc_event_log/rtc_stream_config.cc > Source/webrtc/media/base/adaptedvideotracksource.cc > Source/webrtc/media/base/codec.cc > Source/webrtc/media/base/h264_profile_level_id.cc >+ Source/webrtc/media/base/mediachannel.cc > Source/webrtc/media/base/mediaconstants.cc > Source/webrtc/media/base/mediaengine.cc > Source/webrtc/media/base/rtpdataengine.cc >@@ -646,8 +697,6 @@ set(webrtc_SOURCES > Source/webrtc/media/engine/scopedvideoencoder.cc > Source/webrtc/media/engine/simulcast.cc > Source/webrtc/media/engine/simulcast_encoder_adapter.cc >- Source/webrtc/media/engine/videodecodersoftwarefallbackwrapper.cc >- Source/webrtc/media/engine/videoencodersoftwarefallbackwrapper.cc > Source/webrtc/media/engine/vp8_encoder_simulcast_proxy.cc > Source/webrtc/media/engine/webrtcmediaengine.cc > Source/webrtc/media/engine/webrtcvideocapturer.cc >@@ -681,12 +730,9 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_coding/codecs/cng/webrtc_cng.cc > Source/webrtc/modules/audio_coding/codecs/g711/audio_decoder_pcm.cc > Source/webrtc/modules/audio_coding/codecs/g711/audio_encoder_pcm.cc >- Source/webrtc/modules/audio_coding/codecs/g711/g711.c > Source/webrtc/modules/audio_coding/codecs/g711/g711_interface.c > Source/webrtc/modules/audio_coding/codecs/g722/audio_decoder_g722.cc > Source/webrtc/modules/audio_coding/codecs/g722/audio_encoder_g722.cc >- Source/webrtc/modules/audio_coding/codecs/g722/g722_decode.c >- Source/webrtc/modules/audio_coding/codecs/g722/g722_encode.c > Source/webrtc/modules/audio_coding/codecs/g722/g722_interface.c > Source/webrtc/modules/audio_coding/codecs/ilbc/abs_quant.c > Source/webrtc/modules/audio_coding/codecs/ilbc/abs_quant_loop.c >@@ -802,12 +848,11 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_coding/codecs/isac/main/source/encode.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/encode_lpc_swb.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/entropy_coding.c >- Source/webrtc/modules/audio_coding/codecs/isac/main/source/fft.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/filter_functions.c >- Source/webrtc/modules/audio_coding/codecs/isac/main/source/filterbank_tables.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/filterbanks.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/intialize.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/isac.c >+ Source/webrtc/modules/audio_coding/codecs/isac/main/source/isac_vad.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/lattice.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_analysis.c > Source/webrtc/modules/audio_coding/codecs/isac/main/source/lpc_gain_swb_tables.c >@@ -838,8 +883,6 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_coding/neteq/comfort_noise.cc > Source/webrtc/modules/audio_coding/neteq/cross_correlation.cc > Source/webrtc/modules/audio_coding/neteq/decision_logic.cc >- Source/webrtc/modules/audio_coding/neteq/decision_logic_fax.cc >- Source/webrtc/modules/audio_coding/neteq/decision_logic_normal.cc > Source/webrtc/modules/audio_coding/neteq/decoder_database.cc > Source/webrtc/modules/audio_coding/neteq/delay_manager.cc > Source/webrtc/modules/audio_coding/neteq/delay_peak_detector.cc >@@ -847,6 +890,7 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_coding/neteq/dtmf_buffer.cc > Source/webrtc/modules/audio_coding/neteq/dtmf_tone_generator.cc > Source/webrtc/modules/audio_coding/neteq/expand.cc >+ Source/webrtc/modules/audio_coding/neteq/expand_uma_logger.cc > Source/webrtc/modules/audio_coding/neteq/merge.cc > Source/webrtc/modules/audio_coding/neteq/nack_tracker.cc > Source/webrtc/modules/audio_coding/neteq/neteq.cc >@@ -911,7 +955,6 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_processing/aec3/matched_filter.cc > Source/webrtc/modules/audio_processing/aec3/matched_filter_lag_aggregator.cc > Source/webrtc/modules/audio_processing/aec3/matrix_buffer.cc >- Source/webrtc/modules/audio_processing/aec3/output_selector.cc > Source/webrtc/modules/audio_processing/aec3/render_buffer.cc > Source/webrtc/modules/audio_processing/aec3/render_delay_buffer.cc > Source/webrtc/modules/audio_processing/aec3/render_delay_controller.cc >@@ -929,38 +972,54 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_processing/aecm/echo_control_mobile.cc > Source/webrtc/modules/audio_processing/agc/agc.cc > Source/webrtc/modules/audio_processing/agc/agc_manager_direct.cc >+ Source/webrtc/modules/audio_processing/agc/utility.cc > Source/webrtc/modules/audio_processing/agc/legacy/analog_agc.c > Source/webrtc/modules/audio_processing/agc/legacy/digital_agc.c > Source/webrtc/modules/audio_processing/agc/loudness_histogram.cc >- Source/webrtc/modules/audio_processing/agc/utility.cc >- Source/webrtc/modules/audio_processing/agc2/gain_controller2.cc >+ Source/webrtc/modules/audio_processing/agc2/adaptive_agc.cc >+ Source/webrtc/modules/audio_processing/agc2/adaptive_digital_gain_applier.cc >+ Source/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator.cc >+ Source/webrtc/modules/audio_processing/agc2/adaptive_mode_level_estimator_agc.cc >+ Source/webrtc/modules/audio_processing/agc2/biquad_filter.cc >+ Source/webrtc/modules/audio_processing/agc2/compute_interpolated_gain_curve.cc >+ Source/webrtc/modules/audio_processing/agc2/down_sampler.cc >+ Source/webrtc/modules/audio_processing/agc2/fixed_digital_level_estimator.cc >+ Source/webrtc/modules/audio_processing/agc2/fixed_gain_controller.cc >+ Source/webrtc/modules/audio_processing/agc2/gain_applier.cc >+ Source/webrtc/modules/audio_processing/agc2/gain_curve_applier.cc >+ Source/webrtc/modules/audio_processing/agc2/interpolated_gain_curve.cc >+ Source/webrtc/modules/audio_processing/agc2/limiter.cc >+ Source/webrtc/modules/audio_processing/agc2/noise_level_estimator.cc >+ Source/webrtc/modules/audio_processing/agc2/noise_spectrum_estimator.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/features_extraction.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/fft_util.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/lp_residual.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/pitch_search.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/pitch_search_internal.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/rnn.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/spectral_features.cc >+ Source/webrtc/modules/audio_processing/agc2/rnn_vad/spectral_features_internal.cc >+ Source/webrtc/modules/audio_processing/agc2/saturation_protector.cc >+ Source/webrtc/modules/audio_processing/agc2/signal_classifier.cc >+ Source/webrtc/modules/audio_processing/agc2/vad_with_level.cc >+ Source/webrtc/modules/audio_processing/agc2/vector_float_frame.cc > Source/webrtc/modules/audio_processing/audio_buffer.cc > Source/webrtc/modules/audio_processing/audio_processing_impl.cc >- Source/webrtc/modules/audio_processing/beamformer/array_util.cc >- Source/webrtc/modules/audio_processing/beamformer/covariance_matrix_generator.cc >- Source/webrtc/modules/audio_processing/beamformer/nonlinear_beamformer.cc > Source/webrtc/modules/audio_processing/echo_cancellation_impl.cc >+ Source/webrtc/modules/audio_processing/echo_cancellation_proxy.cc > Source/webrtc/modules/audio_processing/echo_control_mobile_impl.cc >+ Source/webrtc/modules/audio_processing/echo_control_mobile_proxy.cc > Source/webrtc/modules/audio_processing/echo_detector/circular_buffer.cc > Source/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc > Source/webrtc/modules/audio_processing/echo_detector/moving_max.cc > Source/webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.cc > Source/webrtc/modules/audio_processing/gain_control_for_experimental_agc.cc > Source/webrtc/modules/audio_processing/gain_control_impl.cc >+ Source/webrtc/modules/audio_processing/gain_controller2.cc > Source/webrtc/modules/audio_processing/include/aec_dump.cc > Source/webrtc/modules/audio_processing/include/audio_processing.cc > Source/webrtc/modules/audio_processing/include/audio_processing_statistics.cc > Source/webrtc/modules/audio_processing/include/config.cc >- Source/webrtc/modules/audio_processing/level_controller/biquad_filter.cc >- Source/webrtc/modules/audio_processing/level_controller/down_sampler.cc >- Source/webrtc/modules/audio_processing/level_controller/gain_applier.cc >- Source/webrtc/modules/audio_processing/level_controller/gain_selector.cc >- Source/webrtc/modules/audio_processing/level_controller/level_controller.cc >- Source/webrtc/modules/audio_processing/level_controller/noise_level_estimator.cc >- Source/webrtc/modules/audio_processing/level_controller/noise_spectrum_estimator.cc >- Source/webrtc/modules/audio_processing/level_controller/peak_level_estimator.cc >- Source/webrtc/modules/audio_processing/level_controller/saturating_gain_estimator.cc >- Source/webrtc/modules/audio_processing/level_controller/signal_classifier.cc > Source/webrtc/modules/audio_processing/level_estimator_impl.cc > Source/webrtc/modules/audio_processing/logging/apm_data_dumper.cc > Source/webrtc/modules/audio_processing/low_cut_filter.cc >@@ -992,25 +1051,37 @@ set(webrtc_SOURCES > Source/webrtc/modules/audio_processing/voice_detection_impl.cc > Source/webrtc/modules/bitrate_controller/bitrate_controller_impl.cc > Source/webrtc/modules/bitrate_controller/send_side_bandwidth_estimation.cc >- Source/webrtc/modules/congestion_controller/acknowledged_bitrate_estimator.cc >- Source/webrtc/modules/congestion_controller/bitrate_estimator.cc >- Source/webrtc/modules/congestion_controller/delay_based_bwe.cc >- Source/webrtc/modules/congestion_controller/median_slope_estimator.cc >- Source/webrtc/modules/congestion_controller/probe_bitrate_estimator.cc >- Source/webrtc/modules/congestion_controller/probe_controller.cc >+ Source/webrtc/modules/congestion_controller/bbr/bandwidth_sampler.cc >+ Source/webrtc/modules/congestion_controller/bbr/bbr_factory.cc >+ Source/webrtc/modules/congestion_controller/bbr/bbr_network_controller.cc >+ Source/webrtc/modules/congestion_controller/bbr/data_transfer_tracker.cc >+ Source/webrtc/modules/congestion_controller/bbr/loss_rate_filter.cc >+ Source/webrtc/modules/congestion_controller/bbr/rtt_stats.cc >+ Source/webrtc/modules/congestion_controller/congestion_window_pushback_controller.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/acknowledged_bitrate_estimator.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/alr_detector.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/bitrate_estimator.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/delay_based_bwe.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/goog_cc_factory.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/goog_cc_network_control.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/median_slope_estimator.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/probe_bitrate_estimator.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/probe_controller.cc >+ Source/webrtc/modules/congestion_controller/goog_cc/trendline_estimator.cc > Source/webrtc/modules/congestion_controller/receive_side_congestion_controller.cc >+ Source/webrtc/modules/congestion_controller/rtp/pacer_controller.cc >+ Source/webrtc/modules/congestion_controller/rtp/send_side_congestion_controller.cc >+ Source/webrtc/modules/congestion_controller/rtp/send_time_history.cc >+ Source/webrtc/modules/congestion_controller/rtp/transport_feedback_adapter.cc > Source/webrtc/modules/congestion_controller/send_side_congestion_controller.cc > Source/webrtc/modules/congestion_controller/transport_feedback_adapter.cc >- Source/webrtc/modules/congestion_controller/trendline_estimator.cc >- Source/webrtc/modules/media_file/media_file_impl.cc >- Source/webrtc/modules/media_file/media_file_utility.cc >- Source/webrtc/modules/pacing/alr_detector.cc > Source/webrtc/modules/pacing/bitrate_prober.cc > Source/webrtc/modules/pacing/interval_budget.cc > Source/webrtc/modules/pacing/paced_sender.cc > Source/webrtc/modules/pacing/packet_queue.cc >- Source/webrtc/modules/pacing/packet_queue2.cc >+ Source/webrtc/modules/pacing/packet_queue_interface.cc > Source/webrtc/modules/pacing/packet_router.cc >+ Source/webrtc/modules/pacing/round_robin_packet_queue.cc > Source/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.cc > Source/webrtc/modules/remote_bitrate_estimator/aimd_rate_control.h > Source/webrtc/modules/remote_bitrate_estimator/bwe_defines.cc >@@ -1020,9 +1091,11 @@ set(webrtc_SOURCES > Source/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_abs_send_time.cc > Source/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator_single_stream.cc > Source/webrtc/modules/remote_bitrate_estimator/remote_estimator_proxy.cc >- Source/webrtc/modules/remote_bitrate_estimator/send_time_history.cc > Source/webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.cc >+ Source/webrtc/modules/rtp_rtcp/source/contributing_sources.cc > Source/webrtc/modules/rtp_rtcp/source/dtmf_queue.cc >+ Source/webrtc/modules/rtp_rtcp/source/fec_private_tables_bursty.cc >+ Source/webrtc/modules/rtp_rtcp/source/fec_private_tables_random.cc > Source/webrtc/modules/rtp_rtcp/source/flexfec_header_reader_writer.cc > Source/webrtc/modules/rtp_rtcp/source/flexfec_receiver.cc > Source/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc >@@ -1067,15 +1140,17 @@ set(webrtc_SOURCES > Source/webrtc/modules/rtp_rtcp/source/rtp_format.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_format_h264.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_format_video_generic.cc >- Source/webrtc/modules/rtp_rtcp/source/rtp_format_video_stereo.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_format_vp8.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc >+ Source/webrtc/modules/rtp_rtcp/source/rtp_generic_frame_descriptor.cc >+ Source/webrtc/modules/rtp_rtcp/source/rtp_generic_frame_descriptor_extension.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_header_extension_map.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_header_extensions.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_header_parser.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_packet.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_packet_received.cc >+ Source/webrtc/modules/rtp_rtcp/source/rtp_packet_to_send.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_payload_registry.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_receiver_audio.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_receiver_impl.cc >@@ -1086,11 +1161,17 @@ set(webrtc_SOURCES > Source/webrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_sender_video.cc > Source/webrtc/modules/rtp_rtcp/source/rtp_utility.cc >+ Source/webrtc/modules/rtp_rtcp/source/rtp_video_header.cc > Source/webrtc/modules/rtp_rtcp/source/time_util.cc > Source/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc > Source/webrtc/modules/rtp_rtcp/source/ulpfec_generator.cc > Source/webrtc/modules/rtp_rtcp/source/ulpfec_header_reader_writer.cc > Source/webrtc/modules/rtp_rtcp/source/ulpfec_receiver_impl.cc >+ Source/webrtc/modules/third_party/fft/fft.c >+ Source/webrtc/modules/third_party/g711/g711.c >+ Source/webrtc/modules/third_party/g722/g722_decode.c >+ Source/webrtc/modules/third_party/g722/g722_encode.c >+ Source/webrtc/modules/third_party/portaudio/pa_ringbuffer.c > Source/webrtc/modules/utility/source/process_thread_impl.cc > Source/webrtc/modules/video_capture/device_info_impl.cc > Source/webrtc/modules/video_capture/external/device_info_external.cc >@@ -1099,20 +1180,17 @@ set(webrtc_SOURCES > Source/webrtc/modules/video_capture/linux/video_capture_linux.cc > Source/webrtc/modules/video_capture/video_capture_factory.cc > Source/webrtc/modules/video_capture/video_capture_impl.cc >- Source/webrtc/modules/video_coding/codec_database.cc > Source/webrtc/modules/video_coding/codec_timer.cc > Source/webrtc/modules/video_coding/codecs/h264/h264.cc > Source/webrtc/modules/video_coding/codecs/i420/i420.cc > Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc > Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc >- Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.cc > Source/webrtc/modules/video_coding/codecs/vp8/temporal_layers.cc >- Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc >- Source/webrtc/modules/video_coding/codecs/vp9/screenshare_layers.cc >- Source/webrtc/modules/video_coding/codecs/vp9/vp9_frame_buffer_pool.cc >- Source/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc >+ Source/webrtc/modules/video_coding/decoder_database.cc > Source/webrtc/modules/video_coding/decoding_state.cc > Source/webrtc/modules/video_coding/encoded_frame.cc >+ Source/webrtc/modules/video_coding/encoder_database.cc >+ Source/webrtc/modules/video_coding/fec_controller_default.cc > Source/webrtc/modules/video_coding/frame_buffer.cc > Source/webrtc/modules/video_coding/frame_buffer2.cc > Source/webrtc/modules/video_coding/frame_object.cc >@@ -1129,7 +1207,6 @@ set(webrtc_SOURCES > Source/webrtc/modules/video_coding/nack_module.cc > Source/webrtc/modules/video_coding/packet.cc > Source/webrtc/modules/video_coding/packet_buffer.cc >- Source/webrtc/modules/video_coding/protection_bitrate_calculator.cc > Source/webrtc/modules/video_coding/qp_parser.cc > Source/webrtc/modules/video_coding/receiver.cc > Source/webrtc/modules/video_coding/rtp_frame_reference_finder.cc >@@ -1142,9 +1219,12 @@ set(webrtc_SOURCES > Source/webrtc/modules/video_coding/utility/ivf_file_writer.cc > Source/webrtc/modules/video_coding/utility/moving_average.cc > Source/webrtc/modules/video_coding/utility/quality_scaler.cc >+ Source/webrtc/modules/video_coding/utility/simulcast_rate_allocator.cc >+ Source/webrtc/modules/video_coding/utility/simulcast_utility.cc > Source/webrtc/modules/video_coding/utility/vp8_header_parser.cc > Source/webrtc/modules/video_coding/utility/vp9_uncompressed_header_parser.cc > Source/webrtc/modules/video_coding/video_codec_initializer.cc >+ Source/webrtc/modules/video_coding/video_coding_defines.cc > Source/webrtc/modules/video_coding/video_coding_impl.cc > Source/webrtc/modules/video_coding/video_receiver.cc > Source/webrtc/modules/video_coding/video_sender.cc >@@ -1154,6 +1234,7 @@ set(webrtc_SOURCES > Source/webrtc/modules/video_processing/util/skin_detection.cc > Source/webrtc/modules/video_processing/video_denoiser.cc > Source/webrtc/p2p/base/asyncstuntcpsocket.cc >+ Source/webrtc/p2p/base/basicasyncresolverfactory.cc > Source/webrtc/p2p/base/basicpacketsocketfactory.cc > Source/webrtc/p2p/base/dtlstransport.cc > Source/webrtc/p2p/base/dtlstransportinternal.cc >@@ -1167,9 +1248,9 @@ set(webrtc_SOURCES > Source/webrtc/p2p/base/portallocator.cc > Source/webrtc/p2p/base/portinterface.cc > Source/webrtc/p2p/base/pseudotcp.cc >+ Source/webrtc/p2p/base/regatheringcontroller.cc > Source/webrtc/p2p/base/relayport.cc > Source/webrtc/p2p/base/relayserver.cc >- Source/webrtc/p2p/base/session.cc > Source/webrtc/p2p/base/stun.cc > Source/webrtc/p2p/base/stunport.cc > Source/webrtc/p2p/base/stunrequest.cc >@@ -1181,16 +1262,13 @@ set(webrtc_SOURCES > Source/webrtc/p2p/base/turnserver.cc > Source/webrtc/p2p/base/udptransport.cc > Source/webrtc/p2p/client/basicportallocator.cc >- Source/webrtc/p2p/client/socketmonitor.cc > Source/webrtc/p2p/client/turnportfactory.cc > Source/webrtc/p2p/stunprober/stunprober.cc >- Source/webrtc/pc/audiomonitor.cc > Source/webrtc/pc/audiotrack.cc > Source/webrtc/pc/bundlefilter.cc > Source/webrtc/pc/channel.cc > Source/webrtc/pc/channelmanager.cc > Source/webrtc/pc/createpeerconnectionfactory.cc >- Source/webrtc/pc/currentspeakermonitor.cc > Source/webrtc/pc/datachannel.cc > Source/webrtc/pc/dtlssrtptransport.cc > Source/webrtc/pc/dtmfsender.cc >@@ -1199,8 +1277,8 @@ set(webrtc_SOURCES > Source/webrtc/pc/jsepicecandidate.cc > Source/webrtc/pc/jsepsessiondescription.cc > Source/webrtc/pc/jseptransport.cc >+ Source/webrtc/pc/jseptransportcontroller.cc > Source/webrtc/pc/localaudiosource.cc >- Source/webrtc/pc/mediamonitor.cc > Source/webrtc/pc/mediasession.cc > Source/webrtc/pc/mediastream.cc > Source/webrtc/pc/mediastreamobserver.cc >@@ -1209,7 +1287,9 @@ set(webrtc_SOURCES > Source/webrtc/pc/remoteaudiosource.cc > Source/webrtc/pc/rtcpmuxfilter.cc > Source/webrtc/pc/rtcstatscollector.cc >+ Source/webrtc/pc/rtcstatstraversal.cc > Source/webrtc/pc/rtpmediautils.cc >+ Source/webrtc/pc/rtpparametersconversion.cc > Source/webrtc/pc/rtpreceiver.cc > Source/webrtc/pc/rtpsender.cc > Source/webrtc/pc/rtptransceiver.cc >@@ -1222,7 +1302,7 @@ set(webrtc_SOURCES > Source/webrtc/pc/srtptransport.cc > Source/webrtc/pc/statscollector.cc > Source/webrtc/pc/trackmediainfomap.cc >- Source/webrtc/pc/transportcontroller.cc >+ Source/webrtc/pc/transportstats.cc > Source/webrtc/pc/videocapturertracksource.cc > Source/webrtc/pc/videotrack.cc > Source/webrtc/pc/videotracksource.cc >@@ -1234,7 +1314,6 @@ set(webrtc_SOURCES > Source/webrtc/rtc_base/asyncsocket.cc > Source/webrtc/rtc_base/asynctcpsocket.cc > Source/webrtc/rtc_base/asyncudpsocket.cc >- Source/webrtc/rtc_base/base64.cc > Source/webrtc/rtc_base/bitbuffer.cc > Source/webrtc/rtc_base/bitrateallocationstrategy.cc > Source/webrtc/rtc_base/bufferqueue.cc >@@ -1245,9 +1324,14 @@ set(webrtc_SOURCES > Source/webrtc/rtc_base/crc32.cc > Source/webrtc/rtc_base/criticalsection.cc > Source/webrtc/rtc_base/cryptstring.cc >+ Source/webrtc/rtc_base/data_rate_limiter.cc > Source/webrtc/rtc_base/event.cc > Source/webrtc/rtc_base/event_tracer.cc > Source/webrtc/rtc_base/experiments/alr_experiment.cc >+ Source/webrtc/rtc_base/experiments/congestion_controller_experiment.cc >+ Source/webrtc/rtc_base/experiments/field_trial_parser.cc >+ Source/webrtc/rtc_base/experiments/field_trial_units.cc >+ Source/webrtc/rtc_base/experiments/quality_scaling_experiment.cc > Source/webrtc/rtc_base/file.cc > Source/webrtc/rtc_base/file_posix.cc > Source/webrtc/rtc_base/filerotatingstream.cc >@@ -1264,8 +1348,7 @@ set(webrtc_SOURCES > Source/webrtc/rtc_base/location.cc > Source/webrtc/rtc_base/logging.cc > Source/webrtc/rtc_base/logsinks.cc >- Source/webrtc/rtc_base/md5.cc >- Source/webrtc/rtc_base/md5digest.cc >+ Source/webrtc/rtc_base/memory/aligned_malloc.cc > Source/webrtc/rtc_base/memory_usage.cc > Source/webrtc/rtc_base/messagedigest.cc > Source/webrtc/rtc_base/messagehandler.cc >@@ -1281,52 +1364,63 @@ set(webrtc_SOURCES > Source/webrtc/rtc_base/nullsocketserver.cc > Source/webrtc/rtc_base/numerics/exp_filter.cc > Source/webrtc/rtc_base/numerics/histogram_percentile_counter.cc >+ Source/webrtc/rtc_base/numerics/sample_counter.cc > Source/webrtc/rtc_base/openssladapter.cc >+ Source/webrtc/rtc_base/opensslcertificate.cc > Source/webrtc/rtc_base/openssldigest.cc > Source/webrtc/rtc_base/opensslidentity.cc >+ Source/webrtc/rtc_base/opensslsessioncache.cc > Source/webrtc/rtc_base/opensslstreamadapter.cc >+ Source/webrtc/rtc_base/opensslutility.cc > Source/webrtc/rtc_base/optionsfile.cc > Source/webrtc/rtc_base/pathutils.cc > Source/webrtc/rtc_base/physicalsocketserver.cc > Source/webrtc/rtc_base/platform_file.cc > Source/webrtc/rtc_base/platform_thread.cc >+ Source/webrtc/rtc_base/platform_thread_types.cc > Source/webrtc/rtc_base/proxyinfo.cc > Source/webrtc/rtc_base/proxyserver.cc > Source/webrtc/rtc_base/race_checker.cc > Source/webrtc/rtc_base/random.cc > Source/webrtc/rtc_base/rate_limiter.cc > Source/webrtc/rtc_base/rate_statistics.cc >- Source/webrtc/rtc_base/ratelimiter.cc > Source/webrtc/rtc_base/ratetracker.cc > Source/webrtc/rtc_base/rtccertificate.cc > Source/webrtc/rtc_base/rtccertificategenerator.cc > Source/webrtc/rtc_base/sequenced_task_checker_impl.cc >- Source/webrtc/rtc_base/sha1.cc >- Source/webrtc/rtc_base/sha1digest.cc > Source/webrtc/rtc_base/signalthread.cc >- Source/webrtc/rtc_base/sigslot.cc >+ Source/webrtc/rtc_base/socket.cc > Source/webrtc/rtc_base/socketadapters.cc > Source/webrtc/rtc_base/socketaddress.cc > Source/webrtc/rtc_base/socketaddresspair.cc > Source/webrtc/rtc_base/socketstream.cc > Source/webrtc/rtc_base/ssladapter.cc >+ Source/webrtc/rtc_base/sslcertificate.cc > Source/webrtc/rtc_base/sslfingerprint.cc > Source/webrtc/rtc_base/sslidentity.cc > Source/webrtc/rtc_base/sslstreamadapter.cc > Source/webrtc/rtc_base/stream.cc > Source/webrtc/rtc_base/string_to_number.cc > Source/webrtc/rtc_base/stringencode.cc >+ Source/webrtc/rtc_base/strings/audio_format_to_string.cc >+ Source/webrtc/rtc_base/strings/string_builder.cc > Source/webrtc/rtc_base/stringutils.cc >+ Source/webrtc/rtc_base/synchronization/rw_lock_posix.cc >+ Source/webrtc/rtc_base/synchronization/rw_lock_wrapper.cc >+ Source/webrtc/rtc_base/system/file_wrapper.cc > Source/webrtc/rtc_base/task_queue_libevent.cc > Source/webrtc/rtc_base/task_queue_posix.cc >+ Source/webrtc/rtc_base/third_party/base64/base64.cc >+ Source/webrtc/rtc_base/third_party/sigslot/sigslot.cc > Source/webrtc/rtc_base/thread.cc > Source/webrtc/rtc_base/thread_checker_impl.cc >+ Source/webrtc/rtc_base/time/timestamp_extrapolator.cc > Source/webrtc/rtc_base/timestampaligner.cc > Source/webrtc/rtc_base/timeutils.cc >- Source/webrtc/rtc_base/transformadapter.cc > Source/webrtc/rtc_base/unixfilesystem.cc > Source/webrtc/rtc_base/virtualsocketserver.cc > Source/webrtc/rtc_base/weak_ptr.cc >+ Source/webrtc/rtc_base/zero_memory.cc > Source/webrtc/rtc_tools/frame_analyzer/reference_less_video_analysis_lib.cc > Source/webrtc/rtc_tools/frame_analyzer/video_quality_analysis.cc > Source/webrtc/rtc_tools/frame_editing/frame_editing_lib.cc >@@ -1334,7 +1428,6 @@ set(webrtc_SOURCES > Source/webrtc/stats/rtcstats.cc > Source/webrtc/stats/rtcstats_objects.cc > Source/webrtc/stats/rtcstatsreport.cc >- Source/webrtc/system_wrappers/source/aligned_malloc.cc > Source/webrtc/system_wrappers/source/clock.cc > Source/webrtc/system_wrappers/source/cpu_features.cc > Source/webrtc/system_wrappers/source/cpu_features_linux.c >@@ -1342,18 +1435,13 @@ set(webrtc_SOURCES > Source/webrtc/system_wrappers/source/event.cc > Source/webrtc/system_wrappers/source/event_timer_posix.cc > Source/webrtc/system_wrappers/source/field_trial_default.cc >- Source/webrtc/system_wrappers/source/file_impl.cc > Source/webrtc/system_wrappers/source/metrics_default.cc > Source/webrtc/system_wrappers/source/rtp_to_ntp_estimator.cc > Source/webrtc/system_wrappers/source/runtime_enabled_features_default.cc >- Source/webrtc/system_wrappers/source/rw_lock.cc >- Source/webrtc/system_wrappers/source/rw_lock_posix.cc > Source/webrtc/system_wrappers/source/sleep.cc >- Source/webrtc/system_wrappers/source/timestamp_extrapolator.cc > Source/webrtc/video/call_stats.cc > Source/webrtc/video/encoder_rtcp_feedback.cc > Source/webrtc/video/overuse_frame_detector.cc >- Source/webrtc/video/payload_router.cc > Source/webrtc/video/quality_threshold.cc > Source/webrtc/video/receive_statistics_proxy.cc > Source/webrtc/video/report_block_stats.cc >@@ -1364,15 +1452,13 @@ set(webrtc_SOURCES > Source/webrtc/video/stats_counter.cc > Source/webrtc/video/stream_synchronization.cc > Source/webrtc/video/transport_adapter.cc >+ Source/webrtc/video/video_quality_observer.cc > Source/webrtc/video/video_receive_stream.cc > Source/webrtc/video/video_send_stream.cc >+ Source/webrtc/video/video_send_stream_impl.cc > Source/webrtc/video/video_stream_decoder.cc >+ Source/webrtc/video/video_stream_decoder_impl.cc > Source/webrtc/video/video_stream_encoder.cc >- Source/webrtc/voice_engine/audio_level.cc >- Source/webrtc/voice_engine/channel.cc >- Source/webrtc/voice_engine/channel_proxy.cc >- Source/webrtc/voice_engine/transport_feedback_packet_loss_tracker.cc >- Source/webrtc/voice_engine/utility.cc > $<TARGET_OBJECTS:libsrtp> > ) > >@@ -1429,6 +1515,8 @@ target_compile_definitions(webrtc PRIVATE > WEBRTC_USE_BUILTIN_ISAC_FIX=1 > WEBRTC_USE_BUILTIN_ISAC_FLOAT=0 > WTF_USE_DYNAMIC_ANNOTATIONS=1 >+ LINUX_ALSA >+ RTC_DISABLE_VP9 > _GNU_SOURCE > __Userspace__ > __Userspace_os_Linux >@@ -1436,6 +1524,7 @@ target_compile_definitions(webrtc PRIVATE > > target_include_directories(webrtc PRIVATE > Source >+ Source/third_party/abseil-cpp > Source/third_party/boringssl/src/include > Source/third_party/jsoncpp/overrides/include > Source/third_party/jsoncpp/source/include >diff --git a/Source/ThirdParty/libwebrtc/ChangeLog b/Source/ThirdParty/libwebrtc/ChangeLog >index 06163977c73..d288f96b6dc 100644 >--- a/Source/ThirdParty/libwebrtc/ChangeLog >+++ b/Source/ThirdParty/libwebrtc/ChangeLog >@@ -1,3 +1,73 @@ >+2018-08-20 Youenn Fablet <youenn@apple.com> and Alejandro G. Castro <alex@igalia.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ <rdar://problem/43539177> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Update libwebrtc main code. >+ Update exported symbols and related applied modifications. >+ >+ * CMakeLists.txt: >+ * Configurations/libwebrtc.iOS.exp: >+ * Configurations/libwebrtc.iOSsim.exp: >+ * Configurations/libwebrtc.mac.exp: >+ * Configurations/libwebrtc.xcconfig: >+ * Source/webrtc: refreshed >+ * WebKit/0001-Updating-webrtc.patch: Added. >+ * WebKit/0001-Adapting-libwebrtc-H264-codec.patch: Removed. >+ * WebKit/0001-Disable-SIGPIPE-for-WebRTC-sockets.patch: Removed. >+ * WebKit/0001-Update-RTCVideoEncoderH264.mm-for-WebKit.patch: Removed. >+ * WebKit/0001-Using-VCP.patch: Removed. >+ * WebKit/0003-Fixing-VP8-files.patch: Removed. >+ * WebKit/0004-Removing-parameter-names-from-files-included-from-We.patch: Removed. >+ * WebKit/0005-Fix-RTC_FATAL.patch: Removed. >+ * WebKit/0006-Disabling-VP8.patch: Removed. >+ * WebKit/0007-Fix-RTC_STRINGIZE.patch: Removed. >+ * WebKit/0008-Fix-sanitizer.patch: Removed. >+ * WebKit/0009-Remove-dispatch_set_target_queue.patch: Removed. >+ * WebKit/0010-Fix-RTCVideoEncoderH264-CVPixelBuffer-leak.patch: Removed. >+ * WebKit/0011-Fix-AudioDeviceID-array-leak.patch: Removed. >+ * WebKit/0012-Add-WK-prefix-to-Objective-C-classes-and-protocols.patch: Removed. >+ * WebKit/0013-Fix-SafeSetError-use-after-move.patch: Removed. >+ * libwebrtc.xcodeproj/project.pbxproj: >+ >+2018-08-20 Youenn Fablet <youenn@apple.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Updated webrtc to 984f1a80c0. >+ Updated libyuv accordingly. >+ Added abseil-cpp and rnnoise third party source code. >+ Removed WebKit specific patches that are no longer needed. >+ >+ * Configurations/libwebrtc.iOS.exp: Updated to include new required symbols. >+ * Configurations/libwebrtc.iOSsim.exp: Ditto. >+ * Configurations/libwebrtc.mac.exp: Ditto. >+ * Source/third_party/abseil-cpp: Added. >+ * Source/third_party/rnnoise: Added. >+ * Source/webrtc: Updated. >+ * WebKit/0001-Adapting-libwebrtc-H264-codec.patch: Removed. >+ * WebKit/0001-Disable-SIGPIPE-for-WebRTC-sockets.patch: Removed. >+ * WebKit/0001-Update-RTCVideoEncoderH264.mm-for-WebKit.patch: Removed. >+ * WebKit/0001-Using-VCP.patch: Removed. >+ * WebKit/0003-Fixing-VP8-files.patch: Removed. >+ * WebKit/0004-Removing-parameter-names-from-files-included-from-We.patch: Removed. >+ * WebKit/0005-Fix-RTC_FATAL.patch: Removed. >+ * WebKit/0006-Disabling-VP8.patch: Removed. >+ * WebKit/0007-Fix-RTC_STRINGIZE.patch: Removed. >+ * WebKit/0008-Fix-sanitizer.patch: Removed. >+ * WebKit/0009-Remove-dispatch_set_target_queue.patch: Removed. >+ * WebKit/0010-Fix-RTCVideoEncoderH264-CVPixelBuffer-leak.patch: Removed. >+ * WebKit/0011-Fix-AudioDeviceID-array-leak.patch: Removed. >+ * WebKit/0012-Add-WK-prefix-to-Objective-C-classes-and-protocols.patch: Removed. >+ * WebKit/0013-Fix-SafeSetError-use-after-move.patch: Removed. >+ * libwebrtc.xcodeproj/project.pbxproj: >+ > 2018-08-21 Youenn Fablet <youenn@apple.com> > > Update some libwebrtc third party libraries as per libwebrtc 984f1a80c0c >@@ -552,7 +622,54 @@ > * Source/webrtc/sdk/WebKit/WebKitUtilities.mm: > (webrtc::pixelBufferToFrame): > >-2018-04-02 Alejandro G. Castro <alex@igalia.com> >+2018-04-02 Alejandro G. Castro <a2018-08-20 Youenn Fablet <youenn@apple.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Covered by existing tests. >+ >+ Updated implementation according new webrtc backend. >+ Instead of modifying libwebrtc header files, we disable unused parameter warning for such headers included in WebCore. >+ WebCore implementation is updated according new webrtc API, mostly AddRef/Release. >+ RealtimeOutgoingVideoSource now uses a pixel convolver to convert RGB pixel buffers as I420. >+ >+ * Configurations/Base.xcconfig: >+ * Configurations/WebCoreTestSupport.xcconfig: >+ * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h: >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCMediaEndpoint::addTrack): >+ (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): >+ (WebCore::fillEncodingParameters): >+ (WebCore::fillRtpParameters): >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h: >+ (WebCore::LibWebRTCMediaEndpoint::Release const): >+ * WebCore.xcodeproj/project.pbxproj: >+ * platform/mediastream/RealtimeIncomingAudioSource.h: >+ * platform/mediastream/RealtimeIncomingVideoSource.h: >+ * platform/mediastream/RealtimeOutgoingAudioSource.h: >+ * platform/mediastream/RealtimeOutgoingVideoSource.h: >+ * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h: >+ * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp: >+ * platform/mediastream/libwebrtc/LibWebRTCProvider.h: >+ * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: >+ (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): >+ * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: >+ (WebCore::ConvertToI420): >+ (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm: Copied from Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h. >+ (WebCore::RealtimeOutgoingVideoSourceCocoa::convertToYUV): >+ * testing/MockLibWebRTCPeerConnection.cpp: >+ (WebCore::MockLibWebRTCPeerConnection::AddTrack): >+ * testing/MockLibWebRTCPeerConnection.h: >+ (WebCore::MockRtpSender::GetParameters): >+ (WebCore::MockRtpSender::SetParameters): >+ >+lex@igalia.com> > > Unreviewed fixing GTK port X86 32bits compilation after r230152. > >diff --git a/Source/ThirdParty/libwebrtc/Configurations/Base.xcconfig b/Source/ThirdParty/libwebrtc/Configurations/Base.xcconfig >index b04182e31f8..8796a86a93a 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/Base.xcconfig >+++ b/Source/ThirdParty/libwebrtc/Configurations/Base.xcconfig >@@ -88,7 +88,7 @@ OTHER_CFLAGS = $(ASAN_OTHER_CFLAGS) -fvisibility=default; > OTHER_CPLUSPLUSFLAGS = $(ASAN_OTHER_CPLUSPLUSFLAGS) -fvisibility=default; > OTHER_LDFLAGS = $(ASAN_OTHER_LDFLAGS) -fvisibility=default; > >-GCC_PREPROCESSOR_DEFINITIONS = $(DEBUG_DEFINES) $(inherited); >+GCC_PREPROCESSOR_DEFINITIONS = $(DEBUG_DEFINES) $(inherited) ABSL_ALLOCATOR_NOTHROW; > > EXCLUDED_INSTALLSRC_SUBDIRECTORY_PATTERNS = $(inherited) "$(PROJECT_DIR)/Source/webrtc/examples"; > >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >index 89f4e8b8a9c..8478b284152 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOS.exp >@@ -1,7 +1,4 @@ > __ZN3rtc10LogMessage10LogToDebugENS_15LoggingSeverityE >-__ZN3rtc12FatalMessageC1EPKci >-__ZN3rtc12FatalMessageC1EPKciPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE >-__ZN3rtc12FatalMessageD1Ev > __ZN3rtc14MessageHandlerD2Ev > __ZN3rtc14VideoSinkWantsC1Ev > __ZN3rtc14VideoSinkWantsD1Ev >@@ -9,7 +6,6 @@ __ZN3rtc17CopyOnWriteBuffer21CloneDataIfReferencedEm > __ZN3rtc17CopyOnWriteBufferC1ERKS0_ > __ZN3rtc17CopyOnWriteBufferC1Emm > __ZN3rtc17CopyOnWriteBufferD1Ev >-__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE > __ZN3rtc6Thread22CreateWithSocketServerEv > __ZN3rtc6Thread5StartEPNS_8RunnableE > __ZN3rtc6Thread6CreateEv >@@ -34,15 +30,11 @@ __ZN6webrtc16ConvertVideoTypeENS_9VideoTypeE > __ZN6webrtc18CreateIceCandidateERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEiS8_PNS_13SdpParseErrorE > __ZN6webrtc19RTCCertificateStats5kTypeE > __ZN6webrtc19RTCDataChannelStats5kTypeE >-__ZN6webrtc20CoreVideoFrameBuffer6ToI420Ev >-__ZN6webrtc20CoreVideoFrameBufferC2EP10__CVBuffer >-__ZN6webrtc20CoreVideoFrameBufferD2Ev > __ZN6webrtc24CreateSessionDescriptionERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_PNS_13SdpParseErrorE > __ZN6webrtc24RTCIceCandidatePairStats5kTypeE > __ZN6webrtc24RTCInboundRTPStreamStats5kTypeE > __ZN6webrtc24RTCMediaStreamTrackStats5kTypeE > __ZN6webrtc25RTCOutboundRTPStreamStats5kTypeE >-__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE > __ZN6webrtc27SessionDescriptionInterface6kOfferE > __ZN6webrtc27SessionDescriptionInterface7kAnswerE > __ZN6webrtc27SessionDescriptionInterface9kPrAnswerE >@@ -50,7 +42,6 @@ __ZN6webrtc8internal21SynchronousMethodCall6InvokeERKN3rtc8LocationEPNS2_6Thread > __ZN6webrtc8internal21SynchronousMethodCallC1EPN3rtc14MessageHandlerE > __ZN6webrtc8internal21SynchronousMethodCallD1Ev > __ZN7cricket17MediaTypeToStringENS_9MediaTypeE >-__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE > __ZNK6webrtc10VideoFrame18video_frame_bufferEv > __ZNK6webrtc10VideoFrame5widthEv > __ZNK6webrtc10VideoFrame6heightEv >@@ -59,9 +50,6 @@ __ZNK6webrtc14RTCStatsReport13ConstIteratorneERKS1_ > __ZNK6webrtc14RTCStatsReport13ConstIteratorptEv > __ZNK6webrtc14RTCStatsReport3endEv > __ZNK6webrtc14RTCStatsReport5beginEv >-__ZNK6webrtc20CoreVideoFrameBuffer4typeEv >-__ZNK6webrtc20CoreVideoFrameBuffer5widthEv >-__ZNK6webrtc20CoreVideoFrameBuffer6heightEv > __ZNK6webrtc8RTCStats6ToJsonEv > __ZTVN3rtc14MessageHandlerE > _ConvertToI420 >@@ -95,13 +83,11 @@ __ZN3rtc13SocketAddressC1ERKS0_ > __ZN3rtc13SocketAddressaSERKS0_ > __ZNK3rtc13SocketAddress6ipaddrEv > __ZNK3rtc18NetworkManagerBase11GetNetworksEPNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEE >-__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc22PacketTimeUpdateParamsC1Ev > __ZN3rtc17AsyncPacketSocketD2Ev > __ZN3rtc9ProxyInfoD1Ev > __ZN3rtc18NetworkManagerBaseC2Ev > __ZN3rtc7NetworkD1Ev >-__ZTVN3rtc19PacketSocketFactoryE > __ZN3rtc22PacketTimeUpdateParamsD1Ev > __ZN3rtc22AsyncResolverInterfaceC2Ev > __ZN3rtc18NetworkManagerBase16MergeNetworkListERKNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEEPb >@@ -118,9 +104,6 @@ __ZN6webrtc32CreateBuiltinAudioDecoderFactoryEv > __ZN6webrtc32CreateBuiltinAudioEncoderFactoryEv > __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE > __ZNK6webrtc21IceCandidateInterface10server_urlEv >-__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >-__ZTVN6webrtc21IceCandidateInterfaceE >-__ZTVN6webrtc27SessionDescriptionInterfaceE > __ZN6webrtc20setApplicationStatusEb > __ZN6webrtc32createVideoToolboxDecoderFactoryEv > __ZN6webrtc32createVideoToolboxEncoderFactoryEv >@@ -128,6 +111,98 @@ __ZN6webrtc29setH264HardwareEncoderAllowedEb > __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameE > __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer > __ZN3rtc24BasicPacketSocketFactory19CreateAsyncResolverEv >-__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc24BasicPacketSocketFactoryC2Ev > __ZN3rtc24BasicPacketSocketFactoryD2Ev >+__ZNK3rtc6Thread9IsCurrentEv >+__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE >+__ZN3rtc5EventD1Ev >+__ZN3rtc5EventC1Ebb >+__ZN3rtc5Event4WaitEi >+__ZN3rtc5Event3SetEv >+__ZN3rtc18CreateRandomStringEm >+__ZN6webrtc8RTCError2OKEv >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZTVN6webrtc32CreateSessionDescriptionObserverE >+__ZTVN6webrtc30PeerConnectionFactoryInterfaceE >+__ZTVN6webrtc29SetSessionDescriptionObserverE >+__ZNK3rtc17ThreadCheckerImpl19CalledOnValidThreadEv >+__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE >+__ZN7cricket12AudioOptionsD1Ev >+__ZN6webrtc32CreateSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerE >+__ZN6webrtc29SetSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc28RtpHeaderExtensionCapabilityD1Ev >+__ZN6webrtc26PeerConnectionDependenciesD1Ev >+__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationD1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface9IceServerC1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerD1Ev >+__ZN6webrtc26PeerConnectionDependenciesC1EOS0_ >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZTVN6webrtc27SessionDescriptionInterfaceE >+__ZTVN6webrtc23PeerConnectionInterfaceE >+__ZTVN6webrtc21IceCandidateInterfaceE >+__ZTVN6webrtc20DataChannelInterfaceE >+__ZTVN6webrtc19VideoTrackInterfaceE >+__ZTVN6webrtc19AudioTrackInterfaceE >+__ZNK6webrtc30PeerConnectionFactoryInterface26GetRtpReceiverCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc30PeerConnectionFactoryInterface24GetRtpSenderCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >+__ZNK6webrtc23PeerConnectionInterface26pending_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface26current_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25pending_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25current_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface15GetTransceiversEv >+__ZNK6webrtc23PeerConnectionInterface12GetReceiversEv >+__ZNK6webrtc23PeerConnectionInterface10GetSendersEv >+__ZNK6webrtc20DataChannelInterface8protocolEv >+__ZNK6webrtc20DataChannelInterface17maxRetransmitTimeEv >+__ZNK6webrtc20DataChannelInterface14maxRetransmitsEv >+__ZNK6webrtc20DataChannelInterface10negotiatedEv >+__ZNK6webrtc19VideoTrackInterface12content_hintEv >+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENS_26PeerConnectionDependenciesE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface19RemoveIceCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogEix >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogENSt3__110unique_ptrINS_17RtcEventLogOutputENS1_14default_deleteIS3_EEEEx >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationEPNS_8RTCErrorE >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationE >+__ZN6webrtc19AudioTrackInterface14GetSignalLevelEPi >+__ZN6webrtc19AudioTrackInterface17GetAudioProcessorEv >+__ZN6webrtc23PeerConnectionInterface10SetBitrateERKNS_15BitrateSettingsE >+__ZN6webrtc23PeerConnectionInterface12CreateSenderERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_ >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface16GetConfigurationEv >+__ZN6webrtc23PeerConnectionInterface14RemoveTrackNewEN3rtc13scoped_refptrINS_18RtpSenderInterfaceEEE >+__ZN3rtc10SentPacketC1Exx >+__ZN3rtc13PacketOptionsC1ERKS0_ >+__ZN3rtc10PacketInfoD1Ev >+__ZN3rtc10PacketInfoC1ERKS0_ >+__ZTVN3rtc19PacketSocketFactoryE >+__ZN3rtc13PacketOptionsD1Ev >+__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN3rtc13PacketOptionsC1Ev >+__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >index 89f4e8b8a9c..8478b284152 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.iOSsim.exp >@@ -1,7 +1,4 @@ > __ZN3rtc10LogMessage10LogToDebugENS_15LoggingSeverityE >-__ZN3rtc12FatalMessageC1EPKci >-__ZN3rtc12FatalMessageC1EPKciPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE >-__ZN3rtc12FatalMessageD1Ev > __ZN3rtc14MessageHandlerD2Ev > __ZN3rtc14VideoSinkWantsC1Ev > __ZN3rtc14VideoSinkWantsD1Ev >@@ -9,7 +6,6 @@ __ZN3rtc17CopyOnWriteBuffer21CloneDataIfReferencedEm > __ZN3rtc17CopyOnWriteBufferC1ERKS0_ > __ZN3rtc17CopyOnWriteBufferC1Emm > __ZN3rtc17CopyOnWriteBufferD1Ev >-__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE > __ZN3rtc6Thread22CreateWithSocketServerEv > __ZN3rtc6Thread5StartEPNS_8RunnableE > __ZN3rtc6Thread6CreateEv >@@ -34,15 +30,11 @@ __ZN6webrtc16ConvertVideoTypeENS_9VideoTypeE > __ZN6webrtc18CreateIceCandidateERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEiS8_PNS_13SdpParseErrorE > __ZN6webrtc19RTCCertificateStats5kTypeE > __ZN6webrtc19RTCDataChannelStats5kTypeE >-__ZN6webrtc20CoreVideoFrameBuffer6ToI420Ev >-__ZN6webrtc20CoreVideoFrameBufferC2EP10__CVBuffer >-__ZN6webrtc20CoreVideoFrameBufferD2Ev > __ZN6webrtc24CreateSessionDescriptionERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_PNS_13SdpParseErrorE > __ZN6webrtc24RTCIceCandidatePairStats5kTypeE > __ZN6webrtc24RTCInboundRTPStreamStats5kTypeE > __ZN6webrtc24RTCMediaStreamTrackStats5kTypeE > __ZN6webrtc25RTCOutboundRTPStreamStats5kTypeE >-__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE > __ZN6webrtc27SessionDescriptionInterface6kOfferE > __ZN6webrtc27SessionDescriptionInterface7kAnswerE > __ZN6webrtc27SessionDescriptionInterface9kPrAnswerE >@@ -50,7 +42,6 @@ __ZN6webrtc8internal21SynchronousMethodCall6InvokeERKN3rtc8LocationEPNS2_6Thread > __ZN6webrtc8internal21SynchronousMethodCallC1EPN3rtc14MessageHandlerE > __ZN6webrtc8internal21SynchronousMethodCallD1Ev > __ZN7cricket17MediaTypeToStringENS_9MediaTypeE >-__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE > __ZNK6webrtc10VideoFrame18video_frame_bufferEv > __ZNK6webrtc10VideoFrame5widthEv > __ZNK6webrtc10VideoFrame6heightEv >@@ -59,9 +50,6 @@ __ZNK6webrtc14RTCStatsReport13ConstIteratorneERKS1_ > __ZNK6webrtc14RTCStatsReport13ConstIteratorptEv > __ZNK6webrtc14RTCStatsReport3endEv > __ZNK6webrtc14RTCStatsReport5beginEv >-__ZNK6webrtc20CoreVideoFrameBuffer4typeEv >-__ZNK6webrtc20CoreVideoFrameBuffer5widthEv >-__ZNK6webrtc20CoreVideoFrameBuffer6heightEv > __ZNK6webrtc8RTCStats6ToJsonEv > __ZTVN3rtc14MessageHandlerE > _ConvertToI420 >@@ -95,13 +83,11 @@ __ZN3rtc13SocketAddressC1ERKS0_ > __ZN3rtc13SocketAddressaSERKS0_ > __ZNK3rtc13SocketAddress6ipaddrEv > __ZNK3rtc18NetworkManagerBase11GetNetworksEPNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEE >-__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc22PacketTimeUpdateParamsC1Ev > __ZN3rtc17AsyncPacketSocketD2Ev > __ZN3rtc9ProxyInfoD1Ev > __ZN3rtc18NetworkManagerBaseC2Ev > __ZN3rtc7NetworkD1Ev >-__ZTVN3rtc19PacketSocketFactoryE > __ZN3rtc22PacketTimeUpdateParamsD1Ev > __ZN3rtc22AsyncResolverInterfaceC2Ev > __ZN3rtc18NetworkManagerBase16MergeNetworkListERKNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEEPb >@@ -118,9 +104,6 @@ __ZN6webrtc32CreateBuiltinAudioDecoderFactoryEv > __ZN6webrtc32CreateBuiltinAudioEncoderFactoryEv > __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE > __ZNK6webrtc21IceCandidateInterface10server_urlEv >-__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >-__ZTVN6webrtc21IceCandidateInterfaceE >-__ZTVN6webrtc27SessionDescriptionInterfaceE > __ZN6webrtc20setApplicationStatusEb > __ZN6webrtc32createVideoToolboxDecoderFactoryEv > __ZN6webrtc32createVideoToolboxEncoderFactoryEv >@@ -128,6 +111,98 @@ __ZN6webrtc29setH264HardwareEncoderAllowedEb > __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameE > __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer > __ZN3rtc24BasicPacketSocketFactory19CreateAsyncResolverEv >-__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc24BasicPacketSocketFactoryC2Ev > __ZN3rtc24BasicPacketSocketFactoryD2Ev >+__ZNK3rtc6Thread9IsCurrentEv >+__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE >+__ZN3rtc5EventD1Ev >+__ZN3rtc5EventC1Ebb >+__ZN3rtc5Event4WaitEi >+__ZN3rtc5Event3SetEv >+__ZN3rtc18CreateRandomStringEm >+__ZN6webrtc8RTCError2OKEv >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZTVN6webrtc32CreateSessionDescriptionObserverE >+__ZTVN6webrtc30PeerConnectionFactoryInterfaceE >+__ZTVN6webrtc29SetSessionDescriptionObserverE >+__ZNK3rtc17ThreadCheckerImpl19CalledOnValidThreadEv >+__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE >+__ZN7cricket12AudioOptionsD1Ev >+__ZN6webrtc32CreateSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerE >+__ZN6webrtc29SetSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc28RtpHeaderExtensionCapabilityD1Ev >+__ZN6webrtc26PeerConnectionDependenciesD1Ev >+__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationD1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface9IceServerC1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerD1Ev >+__ZN6webrtc26PeerConnectionDependenciesC1EOS0_ >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZTVN6webrtc27SessionDescriptionInterfaceE >+__ZTVN6webrtc23PeerConnectionInterfaceE >+__ZTVN6webrtc21IceCandidateInterfaceE >+__ZTVN6webrtc20DataChannelInterfaceE >+__ZTVN6webrtc19VideoTrackInterfaceE >+__ZTVN6webrtc19AudioTrackInterfaceE >+__ZNK6webrtc30PeerConnectionFactoryInterface26GetRtpReceiverCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc30PeerConnectionFactoryInterface24GetRtpSenderCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >+__ZNK6webrtc23PeerConnectionInterface26pending_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface26current_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25pending_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25current_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface15GetTransceiversEv >+__ZNK6webrtc23PeerConnectionInterface12GetReceiversEv >+__ZNK6webrtc23PeerConnectionInterface10GetSendersEv >+__ZNK6webrtc20DataChannelInterface8protocolEv >+__ZNK6webrtc20DataChannelInterface17maxRetransmitTimeEv >+__ZNK6webrtc20DataChannelInterface14maxRetransmitsEv >+__ZNK6webrtc20DataChannelInterface10negotiatedEv >+__ZNK6webrtc19VideoTrackInterface12content_hintEv >+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENS_26PeerConnectionDependenciesE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface19RemoveIceCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogEix >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogENSt3__110unique_ptrINS_17RtcEventLogOutputENS1_14default_deleteIS3_EEEEx >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationEPNS_8RTCErrorE >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationE >+__ZN6webrtc19AudioTrackInterface14GetSignalLevelEPi >+__ZN6webrtc19AudioTrackInterface17GetAudioProcessorEv >+__ZN6webrtc23PeerConnectionInterface10SetBitrateERKNS_15BitrateSettingsE >+__ZN6webrtc23PeerConnectionInterface12CreateSenderERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_ >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface16GetConfigurationEv >+__ZN6webrtc23PeerConnectionInterface14RemoveTrackNewEN3rtc13scoped_refptrINS_18RtpSenderInterfaceEEE >+__ZN3rtc10SentPacketC1Exx >+__ZN3rtc13PacketOptionsC1ERKS0_ >+__ZN3rtc10PacketInfoD1Ev >+__ZN3rtc10PacketInfoC1ERKS0_ >+__ZTVN3rtc19PacketSocketFactoryE >+__ZN3rtc13PacketOptionsD1Ev >+__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN3rtc13PacketOptionsC1Ev >+__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >index 89f4e8b8a9c..8478b284152 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.mac.exp >@@ -1,7 +1,4 @@ > __ZN3rtc10LogMessage10LogToDebugENS_15LoggingSeverityE >-__ZN3rtc12FatalMessageC1EPKci >-__ZN3rtc12FatalMessageC1EPKciPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE >-__ZN3rtc12FatalMessageD1Ev > __ZN3rtc14MessageHandlerD2Ev > __ZN3rtc14VideoSinkWantsC1Ev > __ZN3rtc14VideoSinkWantsD1Ev >@@ -9,7 +6,6 @@ __ZN3rtc17CopyOnWriteBuffer21CloneDataIfReferencedEm > __ZN3rtc17CopyOnWriteBufferC1ERKS0_ > __ZN3rtc17CopyOnWriteBufferC1Emm > __ZN3rtc17CopyOnWriteBufferD1Ev >-__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE > __ZN3rtc6Thread22CreateWithSocketServerEv > __ZN3rtc6Thread5StartEPNS_8RunnableE > __ZN3rtc6Thread6CreateEv >@@ -34,15 +30,11 @@ __ZN6webrtc16ConvertVideoTypeENS_9VideoTypeE > __ZN6webrtc18CreateIceCandidateERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEiS8_PNS_13SdpParseErrorE > __ZN6webrtc19RTCCertificateStats5kTypeE > __ZN6webrtc19RTCDataChannelStats5kTypeE >-__ZN6webrtc20CoreVideoFrameBuffer6ToI420Ev >-__ZN6webrtc20CoreVideoFrameBufferC2EP10__CVBuffer >-__ZN6webrtc20CoreVideoFrameBufferD2Ev > __ZN6webrtc24CreateSessionDescriptionERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEES8_PNS_13SdpParseErrorE > __ZN6webrtc24RTCIceCandidatePairStats5kTypeE > __ZN6webrtc24RTCInboundRTPStreamStats5kTypeE > __ZN6webrtc24RTCMediaStreamTrackStats5kTypeE > __ZN6webrtc25RTCOutboundRTPStreamStats5kTypeE >-__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE > __ZN6webrtc27SessionDescriptionInterface6kOfferE > __ZN6webrtc27SessionDescriptionInterface7kAnswerE > __ZN6webrtc27SessionDescriptionInterface9kPrAnswerE >@@ -50,7 +42,6 @@ __ZN6webrtc8internal21SynchronousMethodCall6InvokeERKN3rtc8LocationEPNS2_6Thread > __ZN6webrtc8internal21SynchronousMethodCallC1EPN3rtc14MessageHandlerE > __ZN6webrtc8internal21SynchronousMethodCallD1Ev > __ZN7cricket17MediaTypeToStringENS_9MediaTypeE >-__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE > __ZNK6webrtc10VideoFrame18video_frame_bufferEv > __ZNK6webrtc10VideoFrame5widthEv > __ZNK6webrtc10VideoFrame6heightEv >@@ -59,9 +50,6 @@ __ZNK6webrtc14RTCStatsReport13ConstIteratorneERKS1_ > __ZNK6webrtc14RTCStatsReport13ConstIteratorptEv > __ZNK6webrtc14RTCStatsReport3endEv > __ZNK6webrtc14RTCStatsReport5beginEv >-__ZNK6webrtc20CoreVideoFrameBuffer4typeEv >-__ZNK6webrtc20CoreVideoFrameBuffer5widthEv >-__ZNK6webrtc20CoreVideoFrameBuffer6heightEv > __ZNK6webrtc8RTCStats6ToJsonEv > __ZTVN3rtc14MessageHandlerE > _ConvertToI420 >@@ -95,13 +83,11 @@ __ZN3rtc13SocketAddressC1ERKS0_ > __ZN3rtc13SocketAddressaSERKS0_ > __ZNK3rtc13SocketAddress6ipaddrEv > __ZNK3rtc18NetworkManagerBase11GetNetworksEPNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEE >-__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc22PacketTimeUpdateParamsC1Ev > __ZN3rtc17AsyncPacketSocketD2Ev > __ZN3rtc9ProxyInfoD1Ev > __ZN3rtc18NetworkManagerBaseC2Ev > __ZN3rtc7NetworkD1Ev >-__ZTVN3rtc19PacketSocketFactoryE > __ZN3rtc22PacketTimeUpdateParamsD1Ev > __ZN3rtc22AsyncResolverInterfaceC2Ev > __ZN3rtc18NetworkManagerBase16MergeNetworkListERKNSt3__16vectorIPNS_7NetworkENS1_9allocatorIS4_EEEEPb >@@ -118,9 +104,6 @@ __ZN6webrtc32CreateBuiltinAudioDecoderFactoryEv > __ZN6webrtc32CreateBuiltinAudioEncoderFactoryEv > __ZN6webrtc27SessionDescriptionInterface16RemoveCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE > __ZNK6webrtc21IceCandidateInterface10server_urlEv >-__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >-__ZTVN6webrtc21IceCandidateInterfaceE >-__ZTVN6webrtc27SessionDescriptionInterfaceE > __ZN6webrtc20setApplicationStatusEb > __ZN6webrtc32createVideoToolboxDecoderFactoryEv > __ZN6webrtc32createVideoToolboxEncoderFactoryEv >@@ -128,6 +111,98 @@ __ZN6webrtc29setH264HardwareEncoderAllowedEb > __ZN6webrtc20pixelBufferFromFrameERKNS_10VideoFrameE > __ZN6webrtc18pixelBufferToFrameEP10__CVBuffer > __ZN3rtc24BasicPacketSocketFactory19CreateAsyncResolverEv >-__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE > __ZN3rtc24BasicPacketSocketFactoryC2Ev > __ZN3rtc24BasicPacketSocketFactoryD2Ev >+__ZNK3rtc6Thread9IsCurrentEv >+__ZN3rtc6Thread14InvokeInternalERKNS_8LocationEPNS_14MessageHandlerE >+__ZN3rtc5EventD1Ev >+__ZN3rtc5EventC1Ebb >+__ZN3rtc5Event4WaitEi >+__ZN3rtc5Event3SetEv >+__ZN3rtc18CreateRandomStringEm >+__ZN6webrtc8RTCError2OKEv >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZTVN6webrtc32CreateSessionDescriptionObserverE >+__ZTVN6webrtc30PeerConnectionFactoryInterfaceE >+__ZTVN6webrtc29SetSessionDescriptionObserverE >+__ZNK3rtc17ThreadCheckerImpl19CalledOnValidThreadEv >+__ZN7cricket18BasicPortAllocatorC1EPN3rtc14NetworkManagerEPNS1_19PacketSocketFactoryEPN6webrtc14TurnCustomizerEPNS_25RelayPortFactoryInterfaceE >+__ZN7cricket12AudioOptionsD1Ev >+__ZN6webrtc32CreateSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceEPN7cricket13VideoCapturerE >+__ZN6webrtc29SetSessionDescriptionObserver9OnFailureENS_8RTCErrorE >+__ZN6webrtc28RtpHeaderExtensionCapabilityD1Ev >+__ZN6webrtc26PeerConnectionDependenciesD1Ev >+__ZN3rtc24BasicPacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationD1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerC1ERKS1_ >+__ZN6webrtc23PeerConnectionInterface9IceServerC1Ev >+__ZN6webrtc23PeerConnectionInterface9IceServerD1Ev >+__ZN6webrtc26PeerConnectionDependenciesC1EOS0_ >+__ZN3rtc18webrtc_checks_impl8FatalLogEPKciS2_PKNS0_12CheckArgTypeEz >+__ZN6webrtc12RtcpFeedbackC1ERKS0_ >+__ZN6webrtc12RtcpFeedbackD1Ev >+__ZN6webrtc14I420BufferPoolC1Ev >+__ZN6webrtc14I420BufferPoolD1Ev >+__ZN6webrtc15RtpCapabilitiesC1Ev >+__ZN6webrtc15RtpCapabilitiesD1Ev >+__ZN6webrtc18RtpCodecCapabilityD1Ev >+__ZN6webrtc23PeerConnectionInterface16RTCConfigurationC1ERKS1_ >+__ZTVN6webrtc27SessionDescriptionInterfaceE >+__ZTVN6webrtc23PeerConnectionInterfaceE >+__ZTVN6webrtc21IceCandidateInterfaceE >+__ZTVN6webrtc20DataChannelInterfaceE >+__ZTVN6webrtc19VideoTrackInterfaceE >+__ZTVN6webrtc19AudioTrackInterfaceE >+__ZNK6webrtc30PeerConnectionFactoryInterface26GetRtpReceiverCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc30PeerConnectionFactoryInterface24GetRtpSenderCapabilitiesEN7cricket9MediaTypeE >+__ZNK6webrtc27SessionDescriptionInterface7GetTypeEv >+__ZNK6webrtc23PeerConnectionInterface26pending_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface26current_remote_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25pending_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface25current_local_descriptionEv >+__ZNK6webrtc23PeerConnectionInterface15GetTransceiversEv >+__ZNK6webrtc23PeerConnectionInterface12GetReceiversEv >+__ZNK6webrtc23PeerConnectionInterface10GetSendersEv >+__ZNK6webrtc20DataChannelInterface8protocolEv >+__ZNK6webrtc20DataChannelInterface17maxRetransmitTimeEv >+__ZNK6webrtc20DataChannelInterface14maxRetransmitsEv >+__ZNK6webrtc20DataChannelInterface10negotiatedEv >+__ZNK6webrtc19VideoTrackInterface12content_hintEv >+__ZN6webrtc30PeerConnectionFactoryInterface20CreatePeerConnectionERKNS_23PeerConnectionInterface16RTCConfigurationENS_26PeerConnectionDependenciesE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEEPKNS_25MediaConstraintsInterfaceE >+__ZN6webrtc30PeerConnectionFactoryInterface17CreateVideoSourceENSt3__110unique_ptrIN7cricket13VideoCapturerENS1_14default_deleteIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface19RemoveIceCandidatesERKNSt3__16vectorIN7cricket9CandidateENS1_9allocatorIS4_EEEE >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogEix >+__ZN6webrtc23PeerConnectionInterface16StartRtcEventLogENSt3__110unique_ptrINS_17RtcEventLogOutputENS1_14default_deleteIS3_EEEEx >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationEPNS_8RTCErrorE >+__ZN6webrtc23PeerConnectionInterface16SetConfigurationERKNS0_16RTCConfigurationE >+__ZN6webrtc19AudioTrackInterface14GetSignalLevelEPi >+__ZN6webrtc19AudioTrackInterface17GetAudioProcessorEv >+__ZN6webrtc23PeerConnectionInterface10SetBitrateERKNS_15BitrateSettingsE >+__ZN6webrtc23PeerConnectionInterface12CreateSenderERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_ >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN3rtc13scoped_refptrINS_25MediaStreamTrackInterfaceEEERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeE >+__ZN6webrtc23PeerConnectionInterface14AddTransceiverEN7cricket9MediaTypeERKNS_18RtpTransceiverInitE >+__ZN6webrtc23PeerConnectionInterface16GetConfigurationEv >+__ZN6webrtc23PeerConnectionInterface14RemoveTrackNewEN3rtc13scoped_refptrINS_18RtpSenderInterfaceEEE >+__ZN3rtc10SentPacketC1Exx >+__ZN3rtc13PacketOptionsC1ERKS0_ >+__ZN3rtc10PacketInfoD1Ev >+__ZN3rtc10PacketInfoC1ERKS0_ >+__ZTVN3rtc19PacketSocketFactoryE >+__ZN3rtc13PacketOptionsD1Ev >+__ZN3rtc19PacketSocketFactory21CreateClientTcpSocketERKNS_13SocketAddressES3_RKNS_9ProxyInfoERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEERKNS_22PacketSocketTcpOptionsE >+__ZN3rtc13PacketOptionsC1Ev >+__ZN6webrtc27CreatePeerConnectionFactoryEPN3rtc6ThreadES2_S2_NS0_13scoped_refptrINS_17AudioDeviceModuleEEENS3_INS_19AudioEncoderFactoryEEENS3_INS_19AudioDecoderFactoryEEENSt3__110unique_ptrINS_19VideoEncoderFactoryENSA_14default_deleteISC_EEEENSB_INS_19VideoDecoderFactoryENSD_ISG_EEEENS3_INS_10AudioMixerEEENS3_INS_15AudioProcessingEEE >diff --git a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig >index 0306586af6b..62a1196e337 100644 >--- a/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig >+++ b/Source/ThirdParty/libwebrtc/Configurations/libwebrtc.xcconfig >@@ -26,7 +26,7 @@ INSTALLHDRS_SCRIPT_PHASE = YES; > WARNING_CFLAGS = -Wno-deprecated-declarations $(inherited); > > // FIXME: Set WEBRTC_USE_BUILTIN_ISAC_FIX and WEBRTC_USE_BUILTIN_ISAC_FLOAT for iOS and Mac >-GCC_PREPROCESSOR_DEFINITIONS = GTEST_RELATIVE_PATH WEBRTC_OPUS_SUPPORT_120MS_PTIME=0 WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 RTC_DISABLE_VP8 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE HAVE_SCTP WEBRTC_CODEC_G711 WEBRTC_CODEC_G722 WEBRTC_OPUS_VARIABLE_COMPLEXITY=0 WEBRTC_USE_BUILTIN_ISAC_FIX=1 WEBRTC_USE_BUILTIN_ISAC_FLOAT=0 $(inherited); >+GCC_PREPROCESSOR_DEFINITIONS = GTEST_RELATIVE_PATH WEBRTC_OPUS_SUPPORT_120MS_PTIME=0 WEBRTC_POSIX WEBRTC_MAC SSL_USE_OPENSSL FEATURE_ENABLE_SSL HAVE_SRTP HAVE_OPENSSL_SSL_H SCTP_PROCESS_LEVEL_LOCKS SCTP_SIMPLE_ALLOCATOR SCTP_USE_OPENSSL_SHA1 __Userspace__ HAVE_SA_LEN HAVE_SCONN_LEN __APPLE_USE_RFC_2292 __Userspace_os_Darwin NON_WINDOWS_DEFINE HAVE_WEBRTC_VIDEO HAVE_WEBRTC_VOICE WEBRTC_INTELLIGIBILITY_ENHANCER=0 WEBRTC_APM_DEBUG_DUMP=0 WEBRTC_NS_FLOAT WEBRTC_USE_BUILTIN_ILBC WEBRTC_CODEC_ILBC WEBRTC_USE_BUILTIN_OPUS WEBRTC_CODEC_OPUS WEBRTC_CODEC_ISAC WEBRTC_CODEC_RED RTC_DISABLE_VP9 RTC_DISABLE_VP8 HAVE_STDINT_H HAVE_STDLIB_H HAVE_UINT64_T OPENSSL HAVE_CONFIG_H WEBRTC_WEBKIT_BUILD HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE HAVE_SCTP WEBRTC_CODEC_G711 WEBRTC_CODEC_G722 WEBRTC_OPUS_VARIABLE_COMPLEXITY=0 WEBRTC_USE_BUILTIN_ISAC_FIX=1 WEBRTC_USE_BUILTIN_ISAC_FLOAT=0 USE_BUILTIN_SW_CODECS $(inherited); > > GCC_PREPROCESSOR_DEFINITIONS[sdk=macosx*] = $(inherited) WEBRTC_USE_VTB_HARDWARE_ENCODER; > GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*] = $(inherited) WEBRTC_IOS; >diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_libevent.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_libevent.cc >index d3b1a7c5cb1..cbed3334d77 100644 >--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_libevent.cc >+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_libevent.cc >@@ -16,7 +16,14 @@ > #include <unistd.h> > #include <list> > >+#if defined(WEBRTC_LINUX) >+#include <event2/event.h> >+#include <event2/event_compat.h> >+#include <event2/event_struct.h> >+#else > #include "base/third_party/libevent/event.h" >+#endif >+ > #include "rtc_base/checks.h" > #include "rtc_base/criticalsection.h" > #include "rtc_base/logging.h" >diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm >index d7521262d4d..955d9745863 100644 >--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm >+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoCodec.mm >@@ -43,6 +43,7 @@ namespace { > using namespace webrtc::H264; > > NSString *MaxSupportedLevelForProfile(Profile profile) { >+#if !defined(WEBRTC_WEBKIT_BUILD) > const absl::optional<ProfileLevelId> profileLevelId = [UIDevice maxSupportedH264Profile]; > if (profileLevelId && profileLevelId->profile >= profile) { > const absl::optional<std::string> profileString = >@@ -51,6 +52,7 @@ NSString *MaxSupportedLevelForProfile(Profile profile) { > return [NSString stringForStdString:*profileString]; > } > } >+#endif > return nil; > } > #endif >diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >index 2871b8a5ef1..4c9576e150d 100644 >--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >@@ -260,9 +260,13 @@ - (void)configureDecompressionSession { > - (void)destroyDecompressionSession { > if (_decompressionSession) { > #if defined(WEBRTC_IOS) >+#if !defined(WEBRTC_WEBKIT_BUILD) > if ([UIDevice isIOS11OrLater]) { > VTDecompressionSessionWaitForAsynchronousFrames(_decompressionSession); > } >+#else >+ VTDecompressionSessionWaitForAsynchronousFrames(_decompressionSession); >+#endif > #endif > VTDecompressionSessionInvalidate(_decompressionSession); > CFRelease(_decompressionSession); >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0001-Adapting-libwebrtc-H264-codec.patch b/Source/ThirdParty/libwebrtc/WebKit/0001-Adapting-libwebrtc-H264-codec.patch >deleted file mode 100644 >index 03638614812..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0001-Adapting-libwebrtc-H264-codec.patch >+++ /dev/null >@@ -1,118 +0,0 @@ >-From c5debd83bb3933413d0a3dd2417f5fd9d64a3205 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 22 Mar 2018 16:38:14 -0700 >-Subject: [PATCH] Adapting-libwebrtc-H264-codec >- >---- >- .../sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm | 1 + >- .../Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm | 11 +++++++---- >- .../Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm | 10 ++++++++-- >- 3 files changed, 16 insertions(+), 6 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm >-index 203896758e8..537a65e17d3 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm >-@@ -73,6 +73,7 @@ - (instancetype)initWithPixelBuffer:(CVPixelBufferRef)pixelBuffer >- >- - (void)dealloc { >- CVBufferRelease(_pixelBuffer); >-+ [super dealloc]; >- } >- >- - (int)width { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >-index 2f4b6bd72c6..34d08db0e3b 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoDecoderH264.mm >-@@ -90,6 +90,10 @@ - (instancetype)init { >- - (void)dealloc { >- [self destroyDecompressionSession]; >- [self setVideoFormat:nullptr]; >-+ if (_callback) { >-+ Block_release(_callback); >-+ } >-+ [super dealloc]; >- } >- >- - (NSInteger)startDecodeWithSettings:(RTCVideoEncoderSettings *)settings >-@@ -178,7 +182,7 @@ - (NSInteger)decode:(RTCEncodedImage *)inputImage >- } >- >- - (void)setCallback:(RTCVideoDecoderCallback)callback { >-- _callback = callback; >-+ _callback = Block_copy(callback); >- } >- >- - (void)setError:(OSStatus)error { >-@@ -190,6 +194,7 @@ - (NSInteger)releaseDecoder { >- // is safe to null out the callback. >- [self destroyDecompressionSession]; >- [self setVideoFormat:nullptr]; >-+ Block_release(_callback); >- _callback = nullptr; >- return WEBRTC_VIDEO_CODEC_OK; >- } >-@@ -260,9 +265,7 @@ - (void)configureDecompressionSession { >- - (void)destroyDecompressionSession { >- if (_decompressionSession) { >- #if defined(WEBRTC_IOS) >-- if ([UIDevice isIOS11OrLater]) { >-- VTDecompressionSessionWaitForAsynchronousFrames(_decompressionSession); >-- } >-+ VTDecompressionSessionWaitForAsynchronousFrames(_decompressionSession); >- #endif >- VTDecompressionSessionInvalidate(_decompressionSession); >- CFRelease(_decompressionSession); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-index a818c27d1e6..809948011a6 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-@@ -34,6 +34,7 @@ >- #include "sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h" >- #include "system_wrappers/include/clock.h" >- #include "third_party/libyuv/include/libyuv/convert_from.h" >-+#include "sdk/WebKit/WebKitUtilities.h" >- >- @interface RTCVideoEncoderH264 () >- >-@@ -318,6 +319,10 @@ - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo { >- >- - (void)dealloc { >- [self destroyCompressionSession]; >-+ if (_callback) { >-+ Block_release(_callback); >-+ } >-+ [super dealloc]; >- } >- >- - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings >-@@ -463,7 +468,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- } >- >- - (void)setCallback:(RTCVideoEncoderCallback)callback { >-- _callback = callback; >-+ _callback = Block_copy(callback); >- } >- >- - (int)setBitrate:(uint32_t)bitrateKbit framerate:(uint32_t)framerate { >-@@ -480,6 +485,7 @@ - (NSInteger)releaseEncoder { >- // callback anymore. Do not remove callback until the session is invalidated >- // since async encoder callbacks can occur until invalidation. >- [self destroyCompressionSession]; >-+ Block_release(_callback); >- _callback = nullptr; >- return WEBRTC_VIDEO_CODEC_OK; >- } >-@@ -573,7 +579,7 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >- nullptr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >- CFDictionarySetValue(encoder_specs, >- kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, >-- kCFBooleanTrue); >-+ webrtc::isH264HardwareEncoderAllowed() ? kCFBooleanTrue : kCFBooleanFalse); >- #endif >- OSStatus status = >- VTCompressionSessionCreate(nullptr, // use default allocator >--- >-2.15.1 (Apple Git-101) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0001-Disable-SIGPIPE-for-WebRTC-sockets.patch b/Source/ThirdParty/libwebrtc/WebKit/0001-Disable-SIGPIPE-for-WebRTC-sockets.patch >deleted file mode 100644 >index 3a12db8e198..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0001-Disable-SIGPIPE-for-WebRTC-sockets.patch >+++ /dev/null >@@ -1,25 +0,0 @@ >-From ca7c3a4683bbafaaf8a7bbe9fcf7b99cd0a55441 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Mon, 9 Apr 2018 13:27:57 -0700 >-Subject: [PATCH] Disable SIGPIPE for WebRTC sockets >- >---- >- .../ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc | 2 +- >- 1 file changed, 1 insertion(+), 1 deletion(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >-index 0d5fc525242..bba921b6692 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >-@@ -632,7 +632,7 @@ bool SocketDispatcher::Initialize() { >- #elif defined(WEBRTC_POSIX) >- fcntl(s_, F_SETFL, fcntl(s_, F_GETFL, 0) | O_NONBLOCK); >- #endif >--#if defined(WEBRTC_IOS) >-+#if defined(WEBRTC_IOS) || (defined(WEBRTC_MAC) && defined(WEBRTC_WEBKIT_BUILD)) >- // iOS may kill sockets when the app is moved to the background >- // (specifically, if the app doesn't use the "voip" UIBackgroundMode). When >- // we attempt to write to such a socket, SIGPIPE will be raised, which by >--- >-2.15.1 (Apple Git-101) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0001-Update-RTCVideoEncoderH264.mm-for-WebKit.patch b/Source/ThirdParty/libwebrtc/WebKit/0001-Update-RTCVideoEncoderH264.mm-for-WebKit.patch >deleted file mode 100644 >index 168be45c14f..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0001-Update-RTCVideoEncoderH264.mm-for-WebKit.patch >+++ /dev/null >@@ -1,274 +0,0 @@ >-From 6526d1daf054748cd0983f994ec0f988df235dc1 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Mon, 30 Apr 2018 11:26:26 -0700 >-Subject: [PATCH] Update RTCVideoEncoderH264 for WebKit >- >---- >- .../Classes/VideoToolbox/RTCVideoEncoderH264.mm | 159 ++++++++++++++++++--- >- 1 file changed, 140 insertions(+), 19 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-index a818c27d1e6..68118f8f56a 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-@@ -35,6 +35,43 @@ >- #include "system_wrappers/include/clock.h" >- #include "third_party/libyuv/include/libyuv/convert_from.h" >- >-+#include "sdk/WebKit/EncoderUtilities.h" >-+#include "sdk/WebKit/WebKitUtilities.h" >-+ >-+#import <dlfcn.h> >-+#import <objc/runtime.h> >-+ >-+SOFT_LINK_FRAMEWORK_OPTIONAL(VideoToolBox) >-+SOFT_LINK_POINTER_OPTIONAL(VideoToolBox, kVTVideoEncoderSpecification_Usage, NSString *) >-+ >-+#if !ENABLE_VCP_ENCODER && !defined(WEBRTC_IOS) >-+static inline bool isStandardFrameSize(int32_t width, int32_t height) >-+{ >-+ // FIXME: Envision relaxing this rule, something like width and height dividable by 4 or 8 should be good enough. >-+ if (width == 1280) >-+ return height == 720; >-+ if (width == 720) >-+ return height == 1280; >-+ if (width == 960) >-+ return height == 540; >-+ if (width == 540) >-+ return height == 960; >-+ if (width == 640) >-+ return height == 480; >-+ if (width == 480) >-+ return height == 640; >-+ if (width == 288) >-+ return height == 352; >-+ if (width == 352) >-+ return height == 288; >-+ if (width == 320) >-+ return height == 240; >-+ if (width == 240) >-+ return height == 320; >-+ return false; >-+} >-+#endif >-+ >- @interface RTCVideoEncoderH264 () >- >- - (void)frameWasEncoded:(OSStatus)status >-@@ -285,7 +322,7 @@ @implementation RTCVideoEncoderH264 { >- RTCVideoEncoderCallback _callback; >- int32_t _width; >- int32_t _height; >-- VTCompressionSessionRef _compressionSession; >-+ CompressionSessionRef _compressionSession; >- RTCVideoCodecMode _mode; >- >- webrtc::H264BitstreamParser _h264BitstreamParser; >-@@ -318,6 +355,10 @@ - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo { >- >- - (void)dealloc { >- [self destroyCompressionSession]; >-+ if (_callback) { >-+ Block_release(_callback); >-+ } >-+ [super dealloc]; >- } >- >- - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings >-@@ -358,9 +399,9 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- >- // Get a pixel buffer from the pool and copy frame data over. >- CVPixelBufferPoolRef pixelBufferPool = >-- VTCompressionSessionGetPixelBufferPool(_compressionSession); >-+ CompressionSessionGetPixelBufferPool(_compressionSession); >- if ([self resetCompressionSessionIfNeededForPool:pixelBufferPool withFrame:frame]) { >-- pixelBufferPool = VTCompressionSessionGetPixelBufferPool(_compressionSession); >-+ pixelBufferPool = CompressionSessionGetPixelBufferPool(_compressionSession); >- isKeyframeRequired = YES; >- } >- >-@@ -442,7 +483,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- // Update the bitrate if needed. >- [self setBitrateBps:_bitrateAdjuster->GetAdjustedBitrateBps()]; >- >-- OSStatus status = VTCompressionSessionEncodeFrame(_compressionSession, >-+ OSStatus status = CompressionSessionEncodeFrame(_compressionSession, >- pixelBuffer, >- presentationTimeStamp, >- kCMTimeInvalid, >-@@ -463,7 +504,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- } >- >- - (void)setCallback:(RTCVideoEncoderCallback)callback { >-- _callback = callback; >-+ _callback = Block_copy(callback); >- } >- >- - (int)setBitrate:(uint32_t)bitrateKbit framerate:(uint32_t)framerate { >-@@ -480,6 +521,7 @@ - (NSInteger)releaseEncoder { >- // callback anymore. Do not remove callback until the session is invalidated >- // since async encoder callbacks can occur until invalidation. >- [self destroyCompressionSession]; >-+ Block_release(_callback); >- _callback = nullptr; >- return WEBRTC_VIDEO_CODEC_OK; >- } >-@@ -565,22 +607,21 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >- CFRelease(pixelFormat); >- pixelFormat = nullptr; >- } >-- CFMutableDictionaryRef encoder_specs = nullptr; >-+ CFDictionaryRef encoderSpecs = nullptr; >- #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) >-+ auto useHardwareEncoder = webrtc::isH264HardwareEncoderAllowed() ? kCFBooleanTrue : kCFBooleanFalse; >- // Currently hw accl is supported above 360p on mac, below 360p >- // the compression session will be created with hw accl disabled. >-- encoder_specs = CFDictionaryCreateMutable( >-- nullptr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >-- CFDictionarySetValue(encoder_specs, >-- kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, >-- kCFBooleanTrue); >-+ CFTypeRef sessionKeys[] = {kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder, kVTCompressionPropertyKey_RealTime }; >-+ CFTypeRef sessionValues[] = { useHardwareEncoder, useHardwareEncoder, kCFBooleanTrue }; >-+ encoderSpecs = CFDictionaryCreate(kCFAllocatorDefault, sessionKeys, sessionValues, 3, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >- #endif >- OSStatus status = >-- VTCompressionSessionCreate(nullptr, // use default allocator >-+ CompressionSessionCreate(nullptr, // use default allocator >- _width, >- _height, >-- kCMVideoCodecType_H264, >-- encoder_specs, // use hardware accelerated encoder if available >-+ kCodecTypeH264, >-+ encoderSpecs, // use hardware accelerated encoder if available >- sourceAttributes, >- nullptr, // use default compressed data allocator >- compressionOutputCallback, >-@@ -590,24 +631,101 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >- CFRelease(sourceAttributes); >- sourceAttributes = nullptr; >- } >-- if (encoder_specs) { >-- CFRelease(encoder_specs); >-- encoder_specs = nullptr; >-+ if (encoderSpecs) { >-+ CFRelease(encoderSpecs); >-+ encoderSpecs = nullptr; >- } >-+ >-+#if ENABLE_VCP_ENCODER || defined(WEBRTC_IOS) >- if (status != noErr) { >- RTC_LOG(LS_ERROR) << "Failed to create compression session: " << status; >- return WEBRTC_VIDEO_CODEC_ERROR; >- } >-+#endif >- #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) >- CFBooleanRef hwaccl_enabled = nullptr; >-- status = VTSessionCopyProperty(_compressionSession, >-+ if (status == noErr) { >-+ status = VTSessionCopyProperty(_compressionSession, >- kVTCompressionPropertyKey_UsingHardwareAcceleratedVideoEncoder, >- nullptr, >- &hwaccl_enabled); >-+ } >- if (status == noErr && (CFBooleanGetValue(hwaccl_enabled))) { >- RTC_LOG(LS_INFO) << "Compression session created with hw accl enabled"; >- } else { >- RTC_LOG(LS_INFO) << "Compression session created with hw accl disabled"; >-+ >-+#if !ENABLE_VCP_ENCODER && !defined(WEBRTC_IOS) >-+ if (!isStandardFrameSize(_width, _height)) { >-+ RTC_LOG(LS_ERROR) << "Using H264 software encoder with non standard size is not supported"; >-+ return WEBRTC_VIDEO_CODEC_ERROR; >-+ } >-+ >-+ if (!getkVTVideoEncoderSpecification_Usage()) { >-+ RTC_LOG(LS_ERROR) << "RTCVideoEncoderH264 cannot create a H264 software encoder"; >-+ return WEBRTC_VIDEO_CODEC_ERROR; >-+ } >-+ >-+ CFDictionaryRef ioSurfaceValue = CreateCFTypeDictionary(nullptr, nullptr, 0); >-+ int64_t pixelFormatType = framePixelFormat; >-+ CFNumberRef pixelFormat = CFNumberCreate(nullptr, kCFNumberLongType, &pixelFormatType); >-+ >-+ const size_t attributesSize = 3; >-+ CFTypeRef keys[attributesSize] = { >-+ kCVPixelBufferOpenGLCompatibilityKey, >-+ kCVPixelBufferIOSurfacePropertiesKey, >-+ kCVPixelBufferPixelFormatTypeKey >-+ }; >-+ CFTypeRef values[attributesSize] = { >-+ kCFBooleanTrue, >-+ ioSurfaceValue, >-+ pixelFormat}; >-+ CFDictionaryRef sourceAttributes = CreateCFTypeDictionary(keys, values, attributesSize); >-+ >-+ if (ioSurfaceValue) { >-+ CFRelease(ioSurfaceValue); >-+ ioSurfaceValue = nullptr; >-+ } >-+ if (pixelFormat) { >-+ CFRelease(pixelFormat); >-+ pixelFormat = nullptr; >-+ } >-+ >-+ CFMutableDictionaryRef encoderSpecs = CFDictionaryCreateMutable(nullptr, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >-+ CFDictionarySetValue(encoderSpecs, kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, kCFBooleanFalse); >-+ int usageValue = 1; >-+ CFNumberRef usage = CFNumberCreate(nullptr, kCFNumberIntType, &usageValue); >-+ CFDictionarySetValue(encoderSpecs, getkVTVideoEncoderSpecification_Usage(), usage); >-+ if (usage) { >-+ CFRelease(usage); >-+ usage = nullptr; >-+ } >-+ >-+ [self destroyCompressionSession]; >-+ >-+ OSStatus status = >-+ CompressionSessionCreate(nullptr, // use default allocator >-+ _width, >-+ _height, >-+ kCodecTypeH264, >-+ encoderSpecs, >-+ sourceAttributes, >-+ nullptr, // use default compressed data allocator >-+ compressionOutputCallback, >-+ nullptr, >-+ &_compressionSession); >-+ if (sourceAttributes) { >-+ CFRelease(sourceAttributes); >-+ sourceAttributes = nullptr; >-+ } >-+ if (encoderSpecs) { >-+ CFRelease(encoderSpecs); >-+ encoderSpecs = nullptr; >-+ } >-+ if (status != noErr) { >-+ return WEBRTC_VIDEO_CODEC_ERROR; >-+ } >-+#endif >- } >- #endif >- [self configureCompressionSession]; >-@@ -619,6 +737,9 @@ - (void)configureCompressionSession { >- SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_RealTime, true); >- SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_ProfileLevel, _profile); >- SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_AllowFrameReordering, false); >-+#if ENABLE_VCP_ENCODER >-+ SetVTSessionProperty(_compressionSession, (__bridge CFStringRef)getkVTVideoEncoderSpecification_Usage(), 1); >-+#endif >- [self setEncoderBitrateBps:_targetBitrateBps]; >- // TODO(tkchin): Look at entropy mode and colorspace matrices. >- // TODO(tkchin): Investigate to see if there's any way to make this work. >-@@ -636,7 +757,7 @@ - (void)configureCompressionSession { >- >- - (void)destroyCompressionSession { >- if (_compressionSession) { >-- VTCompressionSessionInvalidate(_compressionSession); >-+ CompressionSessionInvalidate(_compressionSession); >- CFRelease(_compressionSession); >- _compressionSession = nullptr; >- } >--- >-2.16.1 (Apple Git-102) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0001-Updating-webrtc.patch b/Source/ThirdParty/libwebrtc/WebKit/0001-Updating-webrtc.patch >new file mode 100644 >index 00000000000..db29fe8a9df >--- /dev/null >+++ b/Source/ThirdParty/libwebrtc/WebKit/0001-Updating-webrtc.patch >@@ -0,0 +1,1769 @@ >+From 97d8ac39e6fc0e8dc1b7e25a1210d6aed91fe452 Mon Sep 17 00:00:00 2001 >+From: Youenn Fablet <youenn@apple.com> >+Date: Tue, 21 Aug 2018 14:23:22 -0700 >+Subject: [PATCH 1/2] Updating webrtc >+ >+--- >+ .../audio_codecs/ilbc/audio_encoder_ilbc.cc | 2 +- >+ .../libwebrtc/Source/webrtc/api/mediatypes.cc | 4 +- >+ .../Source/webrtc/audio/remix_resample.cc | 4 +- >+ .../Source/webrtc/common_audio/wav_file.cc | 4 +- >+ .../webrtc/common_video/video_frame_buffer.cc | 2 +- >+ .../Source/webrtc/media/base/codec.cc | 4 + >+ .../audio_coding/acm2/audio_coding_module.cc | 2 +- >+ .../modules/audio_coding/acm2/rent_a_codec.cc | 4 +- >+ .../codecs/cng/audio_encoder_cng.cc | 2 +- >+ .../codecs/ilbc/audio_encoder_ilbc.cc | 4 +- >+ .../neteq/tools/rtp_file_source.cc | 2 +- >+ .../video_coding/codecs/vp8/include/vp8.h | 2 + >+ .../webrtc/modules/video_coding/qp_parser.cc | 2 + >+ .../video_coding/video_codec_initializer.cc | 4 + >+ .../Source/webrtc/pc/peerconnectionfactory.cc | 4 +- >+ .../webrtc/pc/rtpparametersconversion.cc | 2 +- >+ .../libwebrtc/Source/webrtc/rtc_base/checks.h | 4 +- >+ .../libwebrtc/Source/webrtc/rtc_base/flags.cc | 6 +- >+ .../Source/webrtc/rtc_base/location.h | 2 +- >+ .../webrtc/rtc_base/logging_unittest.cc | 2 +- >+ .../rtc_base/numerics/safe_conversions.h | 4 +- >+ .../webrtc/rtc_base/opensslcertificate.cc | 8 +- >+ .../webrtc/rtc_base/physicalsocketserver.cc | 2 +- >+ .../Source/webrtc/rtc_base/stringize_macros.h | 4 +- >+ .../Source/webrtc/rtc_base/task_queue_gcd.cc | 5 +- >+ .../sdk/WebKit/VideoProcessingSoftLink.h | 2 +- >+ .../sdk/WebKit/VideoToolBoxDecoderFactory.cpp | 2 +- >+ .../sdk/WebKit/VideoToolBoxEncoderFactory.cpp | 3 +- >+ .../webrtc/sdk/WebKit/WebKitUtilities.h | 3 +- >+ .../webrtc/sdk/WebKit/WebKitUtilities.mm | 34 ++- >+ .../Source/webrtc/sdk/WebKit/decoder.h | 1 - >+ .../Source/webrtc/sdk/WebKit/decoder.mm | 1 - >+ .../Common/RTCUIApplicationStatusObserver.h | 1 + >+ .../VideoToolbox/RTCVideoEncoderH264.mm | 235 +++++++++++++----- >+ .../Headers/WebRTC/RTCAudioSession.h | 4 + >+ .../WebRTC/RTCAudioSessionConfiguration.h | 1 + >+ .../Framework/Headers/WebRTC/RTCAudioSource.h | 1 + >+ .../Framework/Headers/WebRTC/RTCAudioTrack.h | 1 + >+ .../Headers/WebRTC/RTCCameraPreviewView.h | 1 + >+ .../Headers/WebRTC/RTCConfiguration.h | 1 + >+ .../Framework/Headers/WebRTC/RTCDataChannel.h | 2 + >+ .../WebRTC/RTCDataChannelConfiguration.h | 1 + >+ .../Framework/Headers/WebRTC/RTCDispatcher.h | 1 + >+ .../Framework/Headers/WebRTC/RTCFileLogger.h | 1 + >+ .../Headers/WebRTC/RTCIceCandidate.h | 1 + >+ .../Framework/Headers/WebRTC/RTCIceServer.h | 1 + >+ .../Headers/WebRTC/RTCIntervalRange.h | 1 + >+ .../Headers/WebRTC/RTCLegacyStatsReport.h | 1 + >+ .../Headers/WebRTC/RTCMediaConstraints.h | 1 + >+ .../Framework/Headers/WebRTC/RTCMediaSource.h | 1 + >+ .../Framework/Headers/WebRTC/RTCMediaStream.h | 1 + >+ .../Headers/WebRTC/RTCMediaStreamTrack.h | 1 + >+ .../Headers/WebRTC/RTCMetricsSampleInfo.h | 1 + >+ .../Headers/WebRTC/RTCPeerConnection.h | 4 + >+ .../Headers/WebRTC/RTCPeerConnectionFactory.h | 1 + >+ .../Headers/WebRTC/RTCRtpCodecParameters.h | 1 + >+ .../Headers/WebRTC/RTCRtpEncodingParameters.h | 1 + >+ .../Headers/WebRTC/RTCRtpParameters.h | 1 + >+ .../Framework/Headers/WebRTC/RTCRtpReceiver.h | 1 + >+ .../Framework/Headers/WebRTC/RTCRtpSender.h | 1 + >+ .../Headers/WebRTC/RTCSessionDescription.h | 1 + >+ .../Headers/WebRTC/RTCVideoCapturer.h | 1 + >+ .../Framework/Headers/WebRTC/RTCVideoCodec.h | 5 + >+ .../Headers/WebRTC/RTCVideoCodecFactory.h | 2 + >+ .../Headers/WebRTC/RTCVideoCodecH264.h | 6 + >+ .../Headers/WebRTC/RTCVideoDecoderVP8.h | 1 + >+ .../Headers/WebRTC/RTCVideoDecoderVP9.h | 1 + >+ .../Headers/WebRTC/RTCVideoEncoderVP8.h | 1 + >+ .../Headers/WebRTC/RTCVideoEncoderVP9.h | 1 + >+ .../Framework/Headers/WebRTC/RTCVideoFrame.h | 1 + >+ .../Headers/WebRTC/RTCVideoFrameBuffer.h | 3 + >+ .../Framework/Headers/WebRTC/RTCVideoSource.h | 1 + >+ .../Framework/Headers/WebRTC/RTCVideoTrack.h | 1 + >+ 73 files changed, 307 insertions(+), 118 deletions(-) >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >+index efcef382ff7..2ae75474ccd 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >+@@ -33,7 +33,7 @@ int GetIlbcBitrate(int ptime) { >+ // 50 bytes per frame of 30 ms => (approx) 13333 bits/s. >+ return 13333; >+ default: >+- FATAL(); >++ RTC_FATAL(); >+ } >+ } >+ } // namespace >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >+index 599542db08f..140d0ae9625 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >+@@ -28,7 +28,7 @@ std::string MediaTypeToString(MediaType type) { >+ case MEDIA_TYPE_DATA: >+ return kMediaTypeData; >+ } >+- FATAL(); >++ RTC_FATAL(); >+ // Not reachable; avoids compile warning. >+ return ""; >+ } >+@@ -41,7 +41,7 @@ MediaType MediaTypeFromString(const std::string& type_str) { >+ } else if (type_str == kMediaTypeData) { >+ return MEDIA_TYPE_DATA; >+ } >+- FATAL(); >++ RTC_FATAL(); >+ // Not reachable; avoids compile warning. >+ return static_cast<MediaType>(-1); >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/audio/remix_resample.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/audio/remix_resample.cc >+index eda70c7c378..97222e947a4 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/audio/remix_resample.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/audio/remix_resample.cc >+@@ -58,7 +58,7 @@ void RemixAndResample(const int16_t* src_data, >+ >+ if (resampler->InitializeIfNeeded(sample_rate_hz, dst_frame->sample_rate_hz_, >+ audio_ptr_num_channels) == -1) { >+- FATAL() << "InitializeIfNeeded failed: sample_rate_hz = " << sample_rate_hz >++ RTC_FATAL() << "InitializeIfNeeded failed: sample_rate_hz = " << sample_rate_hz >+ << ", dst_frame->sample_rate_hz_ = " << dst_frame->sample_rate_hz_ >+ << ", audio_ptr_num_channels = " << audio_ptr_num_channels; >+ } >+@@ -72,7 +72,7 @@ void RemixAndResample(const int16_t* src_data, >+ resampler->Resample(audio_ptr, src_length, dst_frame->mutable_data(), >+ AudioFrame::kMaxDataSizeSamples); >+ if (out_length == -1) { >+- FATAL() << "Resample failed: audio_ptr = " << audio_ptr >++ RTC_FATAL() << "Resample failed: audio_ptr = " << audio_ptr >+ << ", src_length = " << src_length >+ << ", dst_frame->mutable_data() = " << dst_frame->mutable_data(); >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/common_audio/wav_file.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/common_audio/wav_file.cc >+index 008891f9cfb..0209f52d2c7 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/common_audio/wav_file.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/common_audio/wav_file.cc >+@@ -53,7 +53,7 @@ WavReader::WavReader(rtc::PlatformFile file) { >+ if (!rtc::ClosePlatformFile(file)) { >+ RTC_LOG(LS_ERROR) << "Can't close file."; >+ } >+- FATAL() << "Could not open wav file for reading."; >++ RTC_FATAL() << "Could not open wav file for reading."; >+ } >+ >+ ReadableWavFile readable(file_handle_); >+@@ -138,7 +138,7 @@ WavWriter::WavWriter(rtc::PlatformFile file, >+ if (!rtc::ClosePlatformFile(file)) { >+ RTC_LOG(LS_ERROR) << "Can't close file."; >+ } >+- FATAL() << "Could not open wav file for writing."; >++ RTC_FATAL() << "Could not open wav file for writing."; >+ } >+ >+ RTC_CHECK(CheckWavParameters(num_channels_, sample_rate_, kWavFormat, >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >+index 2cd0b290f15..be0b4927bbe 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >+@@ -323,7 +323,7 @@ rtc::scoped_refptr<PlanarYuvBuffer> WrapYuvBuffer( >+ return WrapI444Buffer(width, height, y_plane, y_stride, u_plane, u_stride, >+ v_plane, v_stride, no_longer_used); >+ default: >+- FATAL() << "Unexpected frame buffer type."; >++ RTC_FATAL() << "Unexpected frame buffer type."; >+ return nullptr; >+ } >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/codec.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/codec.cc >+index caf32121125..ee7eda343b3 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/codec.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/codec.cc >+@@ -271,8 +271,10 @@ bool VideoCodec::Matches(const VideoCodec& other) const { >+ if (CodecNamesEq(name.c_str(), kH264CodecName)) >+ return webrtc::H264::IsSameH264Profile(params, other.params) && >+ IsSameH264PacketizationMode(params, other.params); >++#if !defined(RTC_DISABLE_VP9) >+ if (CodecNamesEq(name.c_str(), kVp9CodecName)) >+ return webrtc::IsSameVP9Profile(params, other.params); >++#endif >+ return true; >+ } >+ >+@@ -392,8 +394,10 @@ bool IsSameCodec(const std::string& name1, >+ // For every format besides H264 and VP9, comparing names is enough. >+ if (CodecNamesEq(name1.c_str(), kH264CodecName)) >+ return webrtc::H264::IsSameH264Profile(params1, params2); >++#if !defined(RTC_DISABLE_VP9) >+ if (CodecNamesEq(name1.c_str(), kVp9CodecName)) >+ return webrtc::IsSameVP9Profile(params1, params2); >++#endif >+ return true; >+ } >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >+index 7f652a215d6..ef4250eb40e 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >+@@ -1149,7 +1149,7 @@ int AudioCodingModuleImpl::SetOpusApplication(OpusApplicationMode application) { >+ app = AudioEncoder::Application::kAudio; >+ break; >+ default: >+- FATAL(); >++ RTC_FATAL(); >+ return 0; >+ } >+ return encoder_stack_->SetApplication(app) ? 0 : -1; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >+index 818e17f3b57..7eff320b723 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >+@@ -215,7 +215,7 @@ std::unique_ptr<AudioEncoder> CreateCngEncoder( >+ config.vad_mode = Vad::kVadVeryAggressive; >+ break; >+ default: >+- FATAL(); >++ RTC_FATAL(); >+ } >+ return std::unique_ptr<AudioEncoder>(new AudioEncoderCng(std::move(config))); >+ } >+@@ -230,7 +230,7 @@ std::unique_ptr<AudioDecoder> CreateIsacDecoder( >+ return std::unique_ptr<AudioDecoder>( >+ new AudioDecoderIsacFloatImpl(sample_rate_hz, bwinfo)); >+ #else >+- FATAL() << "iSAC is not supported."; >++ RTC_FATAL() << "iSAC is not supported."; >+ return std::unique_ptr<AudioDecoder>(); >+ #endif >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >+index 4cda3401fa2..055190497a5 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >+@@ -139,7 +139,7 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodeImpl( >+ break; >+ } >+ case Vad::kError: { >+- FATAL(); // Fails only if fed invalid data. >++ RTC_FATAL(); // Fails only if fed invalid data. >+ break; >+ } >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >+index 84695e37630..dae956b30c0 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >+@@ -40,7 +40,7 @@ int GetIlbcBitrate(int ptime) { >+ // 50 bytes per frame of 30 ms => (approx) 13333 bits/s. >+ return 13333; >+ default: >+- FATAL(); >++ RTC_FATAL(); >+ } >+ } >+ >+@@ -147,7 +147,7 @@ size_t AudioEncoderIlbcImpl::RequiredOutputSizeBytes() const { >+ case 6: >+ return 2 * 50; >+ default: >+- FATAL(); >++ RTC_FATAL(); >+ } >+ } >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >+index 806bba7a9fe..7bf7d52083c 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >+@@ -89,7 +89,7 @@ bool RtpFileSource::OpenFile(const std::string& file_name) { >+ return true; >+ rtp_reader_.reset(RtpFileReader::Create(RtpFileReader::kPcap, file_name)); >+ if (!rtp_reader_) { >+- FATAL() << "Couldn't open input file as either a rtpdump or .pcap. Note " >++ RTC_FATAL() << "Couldn't open input file as either a rtpdump or .pcap. Note " >+ "that .pcapng is not supported."; >+ } >+ return true; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >+index 57be521320d..580755f08de 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >+@@ -22,6 +22,7 @@ namespace webrtc { >+ class VP8Encoder : public VideoEncoder { >+ public: >+ static std::unique_ptr<VP8Encoder> Create(); >++ static bool IsSupported(); >+ >+ ~VP8Encoder() override {} >+ }; // end of VP8Encoder class >+@@ -29,6 +30,7 @@ class VP8Encoder : public VideoEncoder { >+ class VP8Decoder : public VideoDecoder { >+ public: >+ static std::unique_ptr<VP8Decoder> Create(); >++ static bool IsSupported(); >+ >+ ~VP8Decoder() override {} >+ }; // end of VP8Decoder class >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >+index 2adbca9b712..2db0d9cbf53 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >+@@ -21,9 +21,11 @@ bool QpParser::GetQp(const VCMEncodedFrame& frame, int* qp) { >+ case kVideoCodecVP8: >+ // QP range: [0, 127]. >+ return vp8::GetQp(frame.Buffer(), frame.Length(), qp); >++#if !defined(RTC_DISABLE_VP9) >+ case kVideoCodecVP9: >+ // QP range: [0, 255]. >+ return vp9::GetQp(frame.Buffer(), frame.Length(), qp); >++#endif >+ default: >+ return false; >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >+index fe59afc184c..cd73551891a 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >+@@ -56,9 +56,11 @@ VideoCodecInitializer::CreateBitrateAllocator(const VideoCodec& codec) { >+ case kVideoCodecH264: >+ rate_allocator.reset(new SimulcastRateAllocator(codec)); >+ break; >++#if !defined(RTC_DISABLE_VP9) >+ case kVideoCodecVP9: >+ rate_allocator.reset(new SvcRateAllocator(codec)); >+ break; >++#endif >+ default: >+ rate_allocator.reset(new DefaultVideoBitrateAllocator(codec)); >+ } >+@@ -177,6 +179,7 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec( >+ >+ break; >+ } >++#if !defined(RTC_DISABLE_VP9) >+ case kVideoCodecVP9: { >+ if (!config.encoder_specific_settings) { >+ *video_codec.VP9() = VideoEncoder::GetDefaultVp9Settings(); >+@@ -232,6 +235,7 @@ VideoCodec VideoCodecInitializer::VideoEncoderConfigToVideoCodec( >+ >+ break; >+ } >++#endif >+ case kVideoCodecH264: { >+ if (!config.encoder_specific_settings) >+ *video_codec.H264() = VideoEncoder::GetDefaultH264Settings(); >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnectionfactory.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnectionfactory.cc >+index d407228e67c..a6db5198692 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnectionfactory.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnectionfactory.cc >+@@ -257,7 +257,7 @@ RtpCapabilities PeerConnectionFactory::GetRtpSenderCapabilities( >+ return RtpCapabilities(); >+ } >+ // Not reached; avoids compile warning. >+- FATAL(); >++ RTC_FATAL(); >+ } >+ >+ RtpCapabilities PeerConnectionFactory::GetRtpReceiverCapabilities( >+@@ -284,7 +284,7 @@ RtpCapabilities PeerConnectionFactory::GetRtpReceiverCapabilities( >+ return RtpCapabilities(); >+ } >+ // Not reached; avoids compile warning. >+- FATAL(); >++ RTC_FATAL(); >+ } >+ >+ rtc::scoped_refptr<AudioSourceInterface> >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpparametersconversion.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpparametersconversion.cc >+index a57066e4db0..e519b9b06de 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpparametersconversion.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/rtpparametersconversion.cc >+@@ -61,7 +61,7 @@ RTCErrorOr<cricket::FeedbackParam> ToCricketFeedbackParam( >+ return cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc); >+ } >+ // Not reached; avoids compile warning. >+- FATAL(); >++ RTC_FATAL(); >+ } >+ >+ template <typename C> >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >+index a65088d3fda..c7cf36e4b4d 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >+@@ -81,7 +81,7 @@ RTC_NORETURN void rtc_FatalMessage(const char* file, int line, const char* msg); >+ // messages if the condition doesn't hold. Prefer them to raw RTC_CHECK and >+ // RTC_DCHECK. >+ // >+-// - FATAL() aborts unconditionally. >++// - RTC_FATAL() aborts unconditionally. >+ // >+ // TODO(ajm): Ideally, checks.h would be combined with logging.h, but >+ // consolidation with system_wrappers/logging.h should happen first. >+@@ -349,7 +349,7 @@ class FatalLogCall final { >+ #define RTC_NOTREACHED() RTC_DCHECK(RTC_UNREACHABLE_CODE_HIT) >+ >+ // TODO(bugs.webrtc.org/8454): Add an RTC_ prefix or rename differently. >+-#define FATAL() \ >++#define RTC_FATAL() \ >+ rtc::webrtc_checks_impl::FatalLogCall<false>(__FILE__, __LINE__, \ >+ "FATAL()") & \ >+ rtc::webrtc_checks_impl::LogStreamer<>() >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >+index 5b28794f6ca..4f294594bd4 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >+@@ -80,7 +80,7 @@ void Flag::SetToDefault() { >+ variable_->s = default_.s; >+ return; >+ } >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ >+ static const char* Type2String(Flag::Type type) { >+@@ -94,7 +94,7 @@ static const char* Type2String(Flag::Type type) { >+ case Flag::STRING: >+ return "string"; >+ } >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ >+ static void PrintFlagValue(Flag::Type type, FlagValue* p) { >+@@ -112,7 +112,7 @@ static void PrintFlagValue(Flag::Type type, FlagValue* p) { >+ printf("%s", p->s); >+ return; >+ } >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ >+ void Flag::Print(bool print_current_value) { >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >+index 513bc263651..718d9589348 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >+@@ -50,7 +50,7 @@ class Location { >+ #define RTC_FROM_HERE RTC_FROM_HERE_WITH_FUNCTION(__FUNCTION__) >+ >+ #define RTC_FROM_HERE_WITH_FUNCTION(function_name) \ >+- ::rtc::Location(function_name, __FILE__ ":" STRINGIZE(__LINE__)) >++ ::rtc::Location(function_name, __FILE__ ":" RTC_STRINGIZE(__LINE__)) >+ >+ } // namespace rtc >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/logging_unittest.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/logging_unittest.cc >+index af512129fbb..7c411926440 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/logging_unittest.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/logging_unittest.cc >+@@ -196,7 +196,7 @@ TEST(LogTest, SingleStream) { >+ >+ #if GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) >+ TEST(LogTest, Checks) { >+- EXPECT_DEATH(FATAL() << "message", >++ EXPECT_DEATH(RTC_FATAL() << "message", >+ "\n\n#\n" >+ "# Fatal error in: \\S+, line \\w+\n" >+ "# last system error: \\w+\n" >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >+index 58efcaa746a..48c212e4d49 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >+@@ -63,11 +63,11 @@ inline Dst saturated_cast(Src value) { >+ >+ // Should fail only on attempting to assign NaN to a saturated integer. >+ case internal::TYPE_INVALID: >+- FATAL(); >++ RTC_FATAL(); >+ return std::numeric_limits<Dst>::max(); >+ } >+ >+- FATAL(); >++ RTC_FATAL(); >+ return static_cast<Dst>(value); >+ } >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslcertificate.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslcertificate.cc >+index ed67a8938e1..236bef55c8a 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslcertificate.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslcertificate.cc >+@@ -256,11 +256,11 @@ OpenSSLCertificate* OpenSSLCertificate::GetReference() const { >+ std::string OpenSSLCertificate::ToPEMString() const { >+ BIO* bio = BIO_new(BIO_s_mem()); >+ if (!bio) { >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ if (!PEM_write_bio_X509(bio, x509_)) { >+ BIO_free(bio); >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ BIO_write(bio, "\0", 1); >+ char* buffer; >+@@ -277,11 +277,11 @@ void OpenSSLCertificate::ToDER(Buffer* der_buffer) const { >+ // Calculates the DER representation of the certificate, from scratch. >+ BIO* bio = BIO_new(BIO_s_mem()); >+ if (!bio) { >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ if (!i2d_X509_bio(bio, x509_)) { >+ BIO_free(bio); >+- FATAL() << "unreachable code"; >++ RTC_FATAL() << "unreachable code"; >+ } >+ char* data; >+ size_t length = BIO_get_mem_data(bio, &data); >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >+index ca78499179a..0e9a17a6af5 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/physicalsocketserver.cc >+@@ -605,7 +605,7 @@ bool SocketDispatcher::Initialize() { >+ #elif defined(WEBRTC_POSIX) >+ fcntl(s_, F_SETFL, fcntl(s_, F_GETFL, 0) | O_NONBLOCK); >+ #endif >+-#if defined(WEBRTC_IOS) >++#if defined(WEBRTC_IOS) || (defined(WEBRTC_MAC) && defined(WEBRTC_WEBKIT_BUILD)) >+ // iOS may kill sockets when the app is moved to the background >+ // (specifically, if the app doesn't use the "voip" UIBackgroundMode). When >+ // we attempt to write to such a socket, SIGPIPE will be raised, which by >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >+index aee8d14551d..c94a90de1ba 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >+@@ -21,7 +21,7 @@ >+ // This is not very useful as it does not expand defined symbols if >+ // called directly. Use its counterpart without the _NO_EXPANSION >+ // suffix, below. >+-#define STRINGIZE_NO_EXPANSION(x) #x >++#define RTC_STRINGIZE_NO_EXPANSION(x) #x >+ >+ // Use this to quote the provided parameter, first expanding it if it >+ // is a preprocessor symbol. >+@@ -33,6 +33,6 @@ >+ // Then: >+ // STRINGIZE(A) produces "FOO" >+ // STRINGIZE(B(y)) produces "myobj->FunctionCall(y)" >+-#define STRINGIZE(x) STRINGIZE_NO_EXPANSION(x) >++#define RTC_STRINGIZE(x) RTC_STRINGIZE_NO_EXPANSION(x) >+ >+ #endif // RTC_BASE_STRINGIZE_MACROS_H_ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >+index c7731dda3ee..f7ba4d1db80 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >+@@ -139,7 +139,7 @@ class TaskQueue::Impl : public RefCountInterface { >+ TaskQueue::Impl::Impl(const char* queue_name, >+ TaskQueue* task_queue, >+ Priority priority) >+- : queue_(dispatch_queue_create(queue_name, DISPATCH_QUEUE_SERIAL)), >++ : queue_(dispatch_queue_create_with_target(queue_name, DISPATCH_QUEUE_SERIAL, dispatch_get_global_queue(TaskQueuePriorityToGCD(priority), 0))), >+ context_(new QueueContext(task_queue)) { >+ RTC_DCHECK(queue_name); >+ RTC_CHECK(queue_); >+@@ -148,9 +148,6 @@ TaskQueue::Impl::Impl(const char* queue_name, >+ // to the queue is released. This may run after the TaskQueue object has >+ // been deleted. >+ dispatch_set_finalizer_f(queue_, &QueueContext::DeleteContext); >+- >+- dispatch_set_target_queue( >+- queue_, dispatch_get_global_queue(TaskQueuePriorityToGCD(priority), 0)); >+ } >+ >+ TaskQueue::Impl::~Impl() { >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoProcessingSoftLink.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoProcessingSoftLink.h >+index 4e5019dd4d8..cfa9dd6da96 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoProcessingSoftLink.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoProcessingSoftLink.h >+@@ -38,7 +38,7 @@ >+ #elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) >+ #define ENABLE_VCP_ENCODER 0 >+ #elif (defined(TARGET_OS_MAC) && TARGET_OS_MAC) >+-#define ENABLE_VCP_ENCODER (__MAC_OS_X_VERSION_MAX_ALLOWED >= 101304) >++#define ENABLE_VCP_ENCODER 0 //(__MAC_OS_X_VERSION_MAX_ALLOWED >= 101304) >+ #endif >+ >+ #endif >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxDecoderFactory.cpp b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxDecoderFactory.cpp >+index 37de8f50070..e7307700080 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxDecoderFactory.cpp >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxDecoderFactory.cpp >+@@ -69,7 +69,7 @@ std::unique_ptr<VideoDecoder> VideoToolboxVideoDecoderFactory::CreateVideoDecode >+ } >+ >+ static inline SdpVideoFormat CreateH264Format(H264::Profile profile, H264::Level level) { >+- const rtc::Optional<std::string> profile_string = >++ const absl::optional<std::string> profile_string = >+ H264::ProfileLevelIdToString(H264::ProfileLevelId(profile, level)); >+ RTC_CHECK(profile_string); >+ return SdpVideoFormat(cricket::kH264CodecName, >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxEncoderFactory.cpp b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxEncoderFactory.cpp >+index f45ff01780d..296703f35e0 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxEncoderFactory.cpp >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/VideoToolBoxEncoderFactory.cpp >+@@ -69,8 +69,7 @@ void VideoToolboxVideoEncoderFactory::setH264HardwareEncoderAllowed(bool allowed >+ } >+ >+ static inline SdpVideoFormat CreateH264Format(H264::Profile profile, H264::Level level) { >+- const rtc::Optional<std::string> profile_string = >+- H264::ProfileLevelIdToString(H264::ProfileLevelId(profile, level)); >++ const absl::optional<std::string> profile_string = H264::ProfileLevelIdToString(H264::ProfileLevelId(profile, level)); >+ RTC_CHECK(profile_string); >+ return SdpVideoFormat(cricket::kH264CodecName, >+ {{cricket::kH264FmtpProfileLevelId, *profile_string}, >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h >+index 776da18fbc1..1ad27c85260 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.h >+@@ -25,9 +25,10 @@ >+ >+ #pragma once >+ >+-#include "api/video_codecs/video_encoder_factory.h" >+ #include "api/video/video_frame_buffer.h" >+ #include "rtc_base/scoped_ref_ptr.h" >++#include "webrtc/media/engine/webrtcvideodecoderfactory.h" >++#include "webrtc/media/engine/webrtcvideoencoderfactory.h" >+ >+ typedef struct __CVBuffer* CVPixelBufferRef; >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >+index 5e65230f321..240a174534d 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >+@@ -24,13 +24,17 @@ >+ */ >+ >+ #include "WebKitUtilities.h" >++ >+ #include "Common/RTCUIApplicationStatusObserver.h" >+-#include "VideoToolbox/objc_video_decoder_factory.h" >+-#include "VideoToolbox/objc_video_encoder_factory.h" >+ #import "WebRTC/RTCVideoCodecH264.h" >++ >+ #include "api/video/video_frame.h" >+-#include <webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h> >+-#include <webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h> >++#include "webrtc/sdk/objc/Framework/Native/src/objc_frame_buffer.h" >++#include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h" >++#include "webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h" >++#include "webrtc/sdk/objc/Framework/Native/api/video_decoder_factory.h" >++#include "webrtc/sdk/objc/Framework/Native/api/video_encoder_factory.h" >++ >+ >+ #if !defined(WEBRTC_IOS) >+ __attribute__((objc_runtime_name("WK_RTCUIApplicationStatusObserver"))) >+@@ -99,12 +103,12 @@ std::unique_ptr<webrtc::VideoEncoderFactory> createVideoToolboxEncoderFactory() >+ webrtc::VPModuleInitialize(); >+ }); >+ #endif >+- return std::make_unique<webrtc::ObjCVideoEncoderFactory>([[RTCVideoEncoderFactoryH264 alloc] init]); >++ return ObjCToNativeVideoEncoderFactory([[RTCVideoEncoderFactoryH264 alloc] init]); >+ } >+ >+ std::unique_ptr<webrtc::VideoDecoderFactory> createVideoToolboxDecoderFactory() >+ { >+- return std::make_unique<webrtc::ObjCVideoDecoderFactory>([[RTCVideoDecoderFactoryH264 alloc] init]); >++ return ObjCToNativeVideoDecoderFactory([[RTCVideoDecoderFactoryH264 alloc] init]); >+ } >+ >+ static bool h264HardwareEncoderAllowed = true; >+@@ -120,17 +124,21 @@ bool isH264HardwareEncoderAllowed() >+ >+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> pixelBufferToFrame(CVPixelBufferRef pixelBuffer) >+ { >+- RTCCVPixelBuffer *frameBuffer = [[RTCCVPixelBuffer alloc] initWithPixelBuffer: pixelBuffer]; >+- return new rtc::RefCountedObject<webrtc::ObjCFrameBuffer>(frameBuffer); >++ RTCCVPixelBuffer *frameBuffer = [[RTCCVPixelBuffer alloc] initWithPixelBuffer:pixelBuffer]; >++ return new rtc::RefCountedObject<ObjCFrameBuffer>(frameBuffer); >+ } >+ >+ CVPixelBufferRef pixelBufferFromFrame(const VideoFrame& frame) >+ { >+- auto buffer = frame.video_frame_buffer(); >+- auto frameBuffer = static_cast<webrtc::ObjCFrameBuffer&>(*buffer).wrapped_frame_buffer(); >+- if ([frameBuffer isKindOfClass: [RTCCVPixelBuffer class]]) >+- return [(RTCCVPixelBuffer *)frameBuffer pixelBuffer]; >+- return nullptr; >++ if (frame.video_frame_buffer()->type() != VideoFrameBuffer::Type::kNative) >++ return nullptr; >++ >++ auto *frameBuffer = static_cast<ObjCFrameBuffer*>(frame.video_frame_buffer().get())->wrapped_frame_buffer(); >++ if (![frameBuffer isKindOfClass:[RTCCVPixelBuffer class]]) >++ return nullptr; >++ >++ auto *rtcPixelBuffer = (RTCCVPixelBuffer *)frameBuffer; >++ return rtcPixelBuffer.pixelBuffer; >+ } >+ >+ } >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.h >+index e0a7b03ef22..75b57dad79c 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.h >+@@ -37,7 +37,6 @@ class H264VideoToolboxDecoder : public H264Decoder { >+ >+ int Decode(const EncodedImage& input_image, >+ bool missing_frames, >+- const RTPFragmentationHeader* fragmentation, >+ const CodecSpecificInfo* codec_specific_info, >+ int64_t render_time_ms) override; >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.mm >+index 664a99aae56..ca4586bb7b5 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.mm >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/decoder.mm >+@@ -99,7 +99,6 @@ int H264VideoToolboxDecoder::InitDecode(const VideoCodec* video_codec, >+ int H264VideoToolboxDecoder::Decode( >+ const EncodedImage& input_image, >+ bool missing_frames, >+- const RTPFragmentationHeader* fragmentation, >+ const CodecSpecificInfo* codec_specific_info, >+ int64_t render_time_ms) { >+ RTC_DCHECK(input_image._buffer); >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >+index 0c032953be3..c7172288033 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >+@@ -12,6 +12,7 @@ >+ >+ #import <Foundation/Foundation.h> >+ >++__attribute__((objc_runtime_name("WK_RTCUIApplicationStatusObserver"))) >+ NS_EXTENSION_UNAVAILABLE_IOS("Application status not available in app extensions.") >+ @interface RTCUIApplicationStatusObserver : NSObject >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >+index c167e54757d..d47818f763f 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >+@@ -32,8 +32,46 @@ >+ #include "rtc_base/logging.h" >+ #include "rtc_base/timeutils.h" >+ #include "sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h" >++#include "system_wrappers/include/clock.h" >+ #include "third_party/libyuv/include/libyuv/convert_from.h" >+ >++#include "sdk/WebKit/EncoderUtilities.h" >++#include "sdk/WebKit/WebKitUtilities.h" >++ >++#import <dlfcn.h> >++#import <objc/runtime.h> >++ >++SOFT_LINK_FRAMEWORK_OPTIONAL(VideoToolBox) >++SOFT_LINK_POINTER_OPTIONAL(VideoToolBox, kVTVideoEncoderSpecification_Usage, NSString *) >++ >++#if !ENABLE_VCP_ENCODER && !defined(WEBRTC_IOS) >++static inline bool isStandardFrameSize(int32_t width, int32_t height) >++{ >++ // FIXME: Envision relaxing this rule, something like width and height dividable by 4 or 8 should be good enough. >++ if (width == 1280) >++ return height == 720; >++ if (width == 720) >++ return height == 1280; >++ if (width == 960) >++ return height == 540; >++ if (width == 540) >++ return height == 960; >++ if (width == 640) >++ return height == 480; >++ if (width == 480) >++ return height == 640; >++ if (width == 288) >++ return height == 352; >++ if (width == 352) >++ return height == 288; >++ if (width == 320) >++ return height == 240; >++ if (width == 240) >++ return height == 320; >++ return false; >++} >++#endif >++ >+ @interface RTCVideoEncoderH264 () >+ >+ - (void)frameWasEncoded:(OSStatus)status >+@@ -167,8 +205,8 @@ void compressionOutputCallback(void *encoder, >+ rotation:encodeParams->rotation]; >+ } >+ >+-// Extract VideoToolbox profile out of the webrtc::SdpVideoFormat. If there is >+-// no specific VideoToolbox profile for the specified level, AutoLevel will be >++// Extract VideoToolbox profile out of the cricket::VideoCodec. If there is no >++// specific VideoToolbox profile for the specified level, AutoLevel will be >+ // returned. The user must initialize the encoder with a resolution and >+ // framerate conforming to the selected H264 level regardless. >+ CFStringRef ExtractProfile(webrtc::SdpVideoFormat videoFormat) { >+@@ -284,8 +322,7 @@ @implementation RTCVideoEncoderH264 { >+ RTCVideoEncoderCallback _callback; >+ int32_t _width; >+ int32_t _height; >+- VTCompressionSessionRef _compressionSession; >+- CVPixelBufferPoolRef _pixelBufferPool; >++ CompressionSessionRef _compressionSession; >+ RTCVideoCodecMode _mode; >+ >+ webrtc::H264BitstreamParser _h264BitstreamParser; >+@@ -308,7 +345,7 @@ - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo { >+ RTC_LOG(LS_INFO) << "Using profile " << CFStringToString(_profile); >+ RTC_CHECK([codecInfo.name isEqualToString:kRTCVideoCodecH264Name]); >+ >+-#if defined(WEBRTC_IOS) && !defined(RTC_APPRTCMOBILE_BROADCAST_EXTENSION) >++#if defined(WEBRTC_IOS) >+ [RTCUIApplicationStatusObserver prepareForUse]; >+ #endif >+ } >+@@ -329,7 +366,7 @@ - (NSInteger)startEncodeWithSettings:(RTCVideoEncoderSettings *)settings >+ _mode = settings.mode; >+ >+ // We can only set average bitrate on the HW encoder. >+- _targetBitrateBps = settings.startBitrate * 1000; // startBitrate is in kbps. >++ _targetBitrateBps = settings.startBitrate; >+ _bitrateAdjuster->SetTargetBitrateBps(_targetBitrateBps); >+ >+ // TODO(tkchin): Try setting payload size via >+@@ -346,7 +383,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ if (!_callback || !_compressionSession) { >+ return WEBRTC_VIDEO_CODEC_UNINITIALIZED; >+ } >+-#if defined(WEBRTC_IOS) && !defined(RTC_APPRTCMOBILE_BROADCAST_EXTENSION) >++#if defined(WEBRTC_IOS) >+ if (![[RTCUIApplicationStatusObserver sharedInstance] isApplicationActive]) { >+ // Ignore all encode requests when app isn't active. In this state, the >+ // hardware encoder has been invalidated by the OS. >+@@ -356,7 +393,10 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ BOOL isKeyframeRequired = NO; >+ >+ // Get a pixel buffer from the pool and copy frame data over. >+- if ([self resetCompressionSessionIfNeededWithFrame:frame]) { >++ CVPixelBufferPoolRef pixelBufferPool = >++ CompressionSessionGetPixelBufferPool(_compressionSession); >++ if ([self resetCompressionSessionIfNeededForPool:pixelBufferPool withFrame:frame]) { >++ pixelBufferPool = CompressionSessionGetPixelBufferPool(_compressionSession); >+ isKeyframeRequired = YES; >+ } >+ >+@@ -373,7 +413,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ CVBufferRetain(pixelBuffer); >+ } else { >+ // Cropping required, we need to crop and scale to a new pixel buffer. >+- pixelBuffer = CreatePixelBuffer(_pixelBufferPool); >++ pixelBuffer = CreatePixelBuffer(pixelBufferPool); >+ if (!pixelBuffer) { >+ return WEBRTC_VIDEO_CODEC_ERROR; >+ } >+@@ -396,7 +436,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ >+ if (!pixelBuffer) { >+ // We did not have a native frame buffer >+- pixelBuffer = CreatePixelBuffer(_pixelBufferPool); >++ pixelBuffer = CreatePixelBuffer(pixelBufferPool); >+ if (!pixelBuffer) { >+ return WEBRTC_VIDEO_CODEC_ERROR; >+ } >+@@ -439,7 +479,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ // Update the bitrate if needed. >+ [self setBitrateBps:_bitrateAdjuster->GetAdjustedBitrateBps()]; >+ >+- OSStatus status = VTCompressionSessionEncodeFrame(_compressionSession, >++ OSStatus status = CompressionSessionEncodeFrame(_compressionSession, >+ pixelBuffer, >+ presentationTimeStamp, >+ kCMTimeInvalid, >+@@ -452,14 +492,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >+ if (pixelBuffer) { >+ CVBufferRelease(pixelBuffer); >+ } >+- >+- if (status == kVTInvalidSessionErr) { >+- // This error occurs when entering foreground after backgrounding the app. >+- RTC_LOG(LS_ERROR) << "Invalid compression session, resetting."; >+- [self resetCompressionSessionWithPixelFormat:[self pixelFormatOfFrame:frame]]; >+- >+- return WEBRTC_VIDEO_CODEC_NO_OUTPUT; >+- } else if (status != noErr) { >++ if (status != noErr) { >+ RTC_LOG(LS_ERROR) << "Failed to encode frame with code: " << status; >+ return WEBRTC_VIDEO_CODEC_ERROR; >+ } >+@@ -488,44 +521,51 @@ - (NSInteger)releaseEncoder { >+ return WEBRTC_VIDEO_CODEC_OK; >+ } >+ >+-- (OSType)pixelFormatOfFrame:(RTCVideoFrame *)frame { >+- // Use NV12 for non-native frames. >+- if ([frame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) { >+- RTCCVPixelBuffer *rtcPixelBuffer = (RTCCVPixelBuffer *)frame.buffer; >+- return CVPixelBufferGetPixelFormatType(rtcPixelBuffer.pixelBuffer); >+- } >+- >+- return kNV12PixelFormat; >+-} >+- >+-- (BOOL)resetCompressionSessionIfNeededWithFrame:(RTCVideoFrame *)frame { >++- (BOOL)resetCompressionSessionIfNeededForPool:(CVPixelBufferPoolRef)pixelBufferPool >++ withFrame:(RTCVideoFrame *)frame { >+ BOOL resetCompressionSession = NO; >+ >++#if defined(WEBRTC_IOS) >++ if (!pixelBufferPool) { >++ // Kind of a hack. On backgrounding, the compression session seems to get >++ // invalidated, which causes this pool call to fail when the application >++ // is foregrounded and frames are being sent for encoding again. >++ // Resetting the session when this happens fixes the issue. >++ // In addition we request a keyframe so video can recover quickly. >++ resetCompressionSession = YES; >++ RTC_LOG(LS_INFO) << "Resetting compression session due to invalid pool."; >++ } >++#endif >++ >+ // If we're capturing native frames in another pixel format than the compression session is >+ // configured with, make sure the compression session is reset using the correct pixel format. >+- OSType framePixelFormat = [self pixelFormatOfFrame:frame]; >+- >+- if (_compressionSession) { >++ // If we're capturing non-native frames and the compression session is configured with a non-NV12 >++ // format, reset it to NV12. >++ OSType framePixelFormat = kNV12PixelFormat; >++ if (pixelBufferPool) { >+ // The pool attribute `kCVPixelBufferPixelFormatTypeKey` can contain either an array of pixel >+ // formats or a single pixel format. >+ NSDictionary *poolAttributes = >+- (__bridge NSDictionary *)CVPixelBufferPoolGetPixelBufferAttributes(_pixelBufferPool); >++ (__bridge NSDictionary *)CVPixelBufferPoolGetPixelBufferAttributes(pixelBufferPool); >+ id pixelFormats = >+ [poolAttributes objectForKey:(__bridge NSString *)kCVPixelBufferPixelFormatTypeKey]; >+ NSArray<NSNumber *> *compressionSessionPixelFormats = nil; >+ if ([pixelFormats isKindOfClass:[NSArray class]]) { >+ compressionSessionPixelFormats = (NSArray *)pixelFormats; >+- } else if ([pixelFormats isKindOfClass:[NSNumber class]]) { >++ } else { >+ compressionSessionPixelFormats = @[ (NSNumber *)pixelFormats ]; >+ } >+ >++ if ([frame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) { >++ RTCCVPixelBuffer *rtcPixelBuffer = (RTCCVPixelBuffer *)frame.buffer; >++ framePixelFormat = CVPixelBufferGetPixelFormatType(rtcPixelBuffer.pixelBuffer); >++ } >++ >+ if (![compressionSessionPixelFormats >+ containsObject:[NSNumber numberWithLong:framePixelFormat]]) { >+ resetCompressionSession = YES; >+ RTC_LOG(LS_INFO) << "Resetting compression session due to non-matching pixel format."; >+ } >+- } else { >+- resetCompressionSession = YES; >+ } >+ >+ if (resetCompressionSession) { >+@@ -562,22 +602,21 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >+ CFRelease(pixelFormat); >+ pixelFormat = nullptr; >+ } >+- CFMutableDictionaryRef encoder_specs = nullptr; >++ CFDictionaryRef encoderSpecs = nullptr; >+ #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) >++ auto useHardwareEncoder = webrtc::isH264HardwareEncoderAllowed() ? kCFBooleanTrue : kCFBooleanFalse; >+ // Currently hw accl is supported above 360p on mac, below 360p >+ // the compression session will be created with hw accl disabled. >+- encoder_specs = CFDictionaryCreateMutable( >+- nullptr, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >+- CFDictionarySetValue(encoder_specs, >+- kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, >+- kCFBooleanTrue); >++ CFTypeRef sessionKeys[] = { kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, kVTVideoEncoderSpecification_RequireHardwareAcceleratedVideoEncoder, kVTCompressionPropertyKey_RealTime }; >++ CFTypeRef sessionValues[] = { useHardwareEncoder, useHardwareEncoder, kCFBooleanTrue }; >++ encoderSpecs = CFDictionaryCreate(kCFAllocatorDefault, sessionKeys, sessionValues, 3, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >+ #endif >+ OSStatus status = >+- VTCompressionSessionCreate(nullptr, // use default allocator >++ CompressionSessionCreate(nullptr, // use default allocator >+ _width, >+ _height, >+- kCMVideoCodecType_H264, >+- encoder_specs, // use hardware accelerated encoder if available >++ kCodecTypeH264, >++ encoderSpecs, // use hardware accelerated encoder if available >+ sourceAttributes, >+ nullptr, // use default compressed data allocator >+ compressionOutputCallback, >+@@ -587,32 +626,105 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >+ CFRelease(sourceAttributes); >+ sourceAttributes = nullptr; >+ } >+- if (encoder_specs) { >+- CFRelease(encoder_specs); >+- encoder_specs = nullptr; >++ if (encoderSpecs) { >++ CFRelease(encoderSpecs); >++ encoderSpecs = nullptr; >+ } >++ >++#if ENABLE_VCP_ENCODER || defined(WEBRTC_IOS) >+ if (status != noErr) { >+ RTC_LOG(LS_ERROR) << "Failed to create compression session: " << status; >+ return WEBRTC_VIDEO_CODEC_ERROR; >+ } >++#endif >+ #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) >+ CFBooleanRef hwaccl_enabled = nullptr; >+- status = VTSessionCopyProperty(_compressionSession, >++ if (status == noErr) { >++ status = VTSessionCopyProperty(_compressionSession, >+ kVTCompressionPropertyKey_UsingHardwareAcceleratedVideoEncoder, >+ nullptr, >+ &hwaccl_enabled); >++ } >+ if (status == noErr && (CFBooleanGetValue(hwaccl_enabled))) { >+ RTC_LOG(LS_INFO) << "Compression session created with hw accl enabled"; >+ } else { >+ RTC_LOG(LS_INFO) << "Compression session created with hw accl disabled"; >++ >++#if !ENABLE_VCP_ENCODER && !defined(WEBRTC_IOS) >++ if (!isStandardFrameSize(_width, _height)) { >++ RTC_LOG(LS_ERROR) << "Using H264 software encoder with non standard size is not supported"; >++ return WEBRTC_VIDEO_CODEC_ERROR; >++ } >++ >++ if (!getkVTVideoEncoderSpecification_Usage()) { >++ RTC_LOG(LS_ERROR) << "RTCVideoEncoderH264 cannot create a H264 software encoder"; >++ return WEBRTC_VIDEO_CODEC_ERROR; >++ } >++ >++ CFDictionaryRef ioSurfaceValue = CreateCFTypeDictionary(nullptr, nullptr, 0); >++ int64_t pixelFormatType = framePixelFormat; >++ CFNumberRef pixelFormat = CFNumberCreate(nullptr, kCFNumberLongType, &pixelFormatType); >++ >++ const size_t attributesSize = 3; >++ CFTypeRef keys[attributesSize] = { >++ kCVPixelBufferOpenGLCompatibilityKey, >++ kCVPixelBufferIOSurfacePropertiesKey, >++ kCVPixelBufferPixelFormatTypeKey >++ }; >++ CFTypeRef values[attributesSize] = { >++ kCFBooleanTrue, >++ ioSurfaceValue, >++ pixelFormat}; >++ CFDictionaryRef sourceAttributes = CreateCFTypeDictionary(keys, values, attributesSize); >++ >++ if (ioSurfaceValue) { >++ CFRelease(ioSurfaceValue); >++ ioSurfaceValue = nullptr; >++ } >++ if (pixelFormat) { >++ CFRelease(pixelFormat); >++ pixelFormat = nullptr; >++ } >++ >++ CFMutableDictionaryRef encoderSpecs = CFDictionaryCreateMutable(nullptr, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); >++ CFDictionarySetValue(encoderSpecs, kVTVideoEncoderSpecification_EnableHardwareAcceleratedVideoEncoder, kCFBooleanFalse); >++ int usageValue = 1; >++ CFNumberRef usage = CFNumberCreate(nullptr, kCFNumberIntType, &usageValue); >++ CFDictionarySetValue(encoderSpecs, (__bridge CFStringRef)getkVTVideoEncoderSpecification_Usage(), usage); >++ >++ if (usage) { >++ CFRelease(usage); >++ usage = nullptr; >++ } >++ >++ [self destroyCompressionSession]; >++ >++ OSStatus status = >++ CompressionSessionCreate(nullptr, // use default allocator >++ _width, >++ _height, >++ kCodecTypeH264, >++ encoderSpecs, >++ sourceAttributes, >++ nullptr, // use default compressed data allocator >++ compressionOutputCallback, >++ nullptr, >++ &_compressionSession); >++ if (sourceAttributes) { >++ CFRelease(sourceAttributes); >++ sourceAttributes = nullptr; >++ } >++ if (encoderSpecs) { >++ CFRelease(encoderSpecs); >++ encoderSpecs = nullptr; >++ } >++ if (status != noErr) { >++ return WEBRTC_VIDEO_CODEC_ERROR; >++ } >++#endif >+ } >+ #endif >+ [self configureCompressionSession]; >+- >+- // The pixel buffer pool is dependent on the compression session so if the session is reset, the >+- // pool should be reset as well. >+- _pixelBufferPool = VTCompressionSessionGetPixelBufferPool(_compressionSession); >+- >+ return WEBRTC_VIDEO_CODEC_OK; >+ } >+ >+@@ -621,6 +733,10 @@ - (void)configureCompressionSession { >+ SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_RealTime, true); >+ SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_ProfileLevel, _profile); >+ SetVTSessionProperty(_compressionSession, kVTCompressionPropertyKey_AllowFrameReordering, false); >++#if ENABLE_VCP_ENCODER >++ if (auto key = getkVTVideoEncoderSpecification_Usage()) >++ SetVTSessionProperty(_compressionSession, (__bridge CFStringRef)key, 1); >++#endif >+ [self setEncoderBitrateBps:_targetBitrateBps]; >+ // TODO(tkchin): Look at entropy mode and colorspace matrices. >+ // TODO(tkchin): Investigate to see if there's any way to make this work. >+@@ -638,10 +754,9 @@ - (void)configureCompressionSession { >+ >+ - (void)destroyCompressionSession { >+ if (_compressionSession) { >+- VTCompressionSessionInvalidate(_compressionSession); >++ CompressionSessionInvalidate(_compressionSession); >+ CFRelease(_compressionSession); >+ _compressionSession = nullptr; >+- _pixelBufferPool = nullptr; >+ } >+ } >+ >+@@ -669,7 +784,7 @@ - (void)setEncoderBitrateBps:(uint32_t)bitrateBps { >+ CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt64Type, &oneSecondValue); >+ const void *nums[2] = {bytesPerSecond, oneSecond}; >+ CFArrayRef dataRateLimits = CFArrayCreate(nullptr, nums, 2, &kCFTypeArrayCallBacks); >+- OSStatus status = VTSessionSetProperty( >++ OSStatus status = CompressionSessionSetProperty( >+ _compressionSession, kVTCompressionPropertyKey_DataRateLimits, dataRateLimits); >+ if (bytesPerSecond) { >+ CFRelease(bytesPerSecond); >+@@ -681,7 +796,7 @@ - (void)setEncoderBitrateBps:(uint32_t)bitrateBps { >+ CFRelease(dataRateLimits); >+ } >+ if (status != noErr) { >+- RTC_LOG(LS_ERROR) << "Failed to set data rate limit with code: " << status; >++ RTC_LOG(LS_ERROR) << "Failed to set data rate limit"; >+ } >+ >+ _encoderBitrateBps = bitrateBps; >+@@ -698,7 +813,7 @@ - (void)frameWasEncoded:(OSStatus)status >+ timestamp:(uint32_t)timestamp >+ rotation:(RTCVideoRotation)rotation { >+ if (status != noErr) { >+- RTC_LOG(LS_ERROR) << "H264 encode failed with code: " << status; >++ RTC_LOG(LS_ERROR) << "H264 encode failed: " << status; >+ return; >+ } >+ if (infoFlags & kVTEncodeInfo_FrameDropped) { >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >+index 15b63d39dc4..8e55852844b 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >+@@ -28,6 +28,7 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; >+ // from AVAudioSession and handle them before calling these delegate methods, >+ // at which point applications can perform additional processing if required. >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCAudioSessionDelegate"))) >+ @protocol RTCAudioSessionDelegate <NSObject> >+ >+ @optional >+@@ -103,6 +104,7 @@ RTC_EXPORT >+ * case of this is when CallKit activates the audio session for the application >+ */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCAudioSessionActivationDelegate"))) >+ @protocol RTCAudioSessionActivationDelegate <NSObject> >+ >+ /** Called when the audio session is activated outside of the app by iOS. */ >+@@ -121,6 +123,7 @@ RTC_EXPORT >+ * activated only once. See |setActive:error:|. >+ */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCAudioSession"))) >+ @interface RTCAudioSession : NSObject <RTCAudioSessionActivationDelegate> >+ >+ /** Convenience property to access the AVAudioSession singleton. Callers should >+@@ -228,6 +231,7 @@ RTC_EXPORT >+ error:(NSError **)outError; >+ @end >+ >++__attribute__((objc_runtime_name("WK_RTCAudioSession"))) >+ @interface RTCAudioSession (Configuration) >+ >+ /** Applies the configuration to the current session. Attempts to set all >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >+index 6a02751d294..0097246e7c8 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >+@@ -23,6 +23,7 @@ extern const double kRTCAudioSessionLowComplexityIOBufferDuration; >+ >+ // Struct to hold configuration values. >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCAudioSessionConfiguration"))) >+ @interface RTCAudioSessionConfiguration : NSObject >+ >+ @property(nonatomic, strong) NSString *category; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >+index 3db31573cb8..7287c31a738 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >+@@ -16,6 +16,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCAudioSource"))) >+ @interface RTCAudioSource : RTCMediaSource >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >+index b83eede528c..71d797dbd75 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >+@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN >+ @class RTCAudioSource; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMediaStreamTrack"))) >+ @interface RTCAudioTrack : RTCMediaStreamTrack >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >+index 2995c9c3b10..56ef9281729 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >+@@ -19,6 +19,7 @@ >+ * AVCaptureSession. >+ */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCCameraPreviewView"))) >+ @interface RTCCameraPreviewView : UIView >+ >+ /** The capture session being rendered in the view. Capture session >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >+index 11ea6a35479..458b20c7ac9 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >+@@ -69,6 +69,7 @@ typedef NS_ENUM(NSInteger, RTCSdpSemantics) { >+ >+ NS_ASSUME_NONNULL_BEGIN >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCConfiguration"))) >+ @interface RTCConfiguration : NSObject >+ >+ /** An array of Ice Servers available to be used by ICE. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >+index 4859e04bdba..b525a84fc82 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >+@@ -16,6 +16,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDataBuffer"))) >+ @interface RTCDataBuffer : NSObject >+ >+ /** NSData representation of the underlying buffer. */ >+@@ -60,6 +61,7 @@ typedef NS_ENUM(NSInteger, RTCDataChannelState) { >+ }; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDataChannel"))) >+ @interface RTCDataChannel : NSObject >+ >+ /** >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >+index 65ca8f8d563..567e8838c65 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >+@@ -16,6 +16,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDataChannelConfiguration"))) >+ @interface RTCDataChannelConfiguration : NSObject >+ >+ /** Set to YES if ordered delivery is required. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >+index 03387471c49..5e149fce0b1 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >+@@ -26,6 +26,7 @@ typedef NS_ENUM(NSInteger, RTCDispatcherQueueType) { >+ * shared dispatch queue. >+ */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDispatcher"))) >+ @interface RTCDispatcher : NSObject >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >+index ac8a9104c15..a4e05a70b85 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >+@@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN >+ // For kRTCFileLoggerTypeApp, the oldest log is overwritten. >+ // This class is not threadsafe. >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCFileLogger"))) >+ @interface RTCFileLogger : NSObject >+ >+ // The severity level to capture. The default is kRTCFileLoggerSeverityInfo. >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >+index fb5064e5185..59083dca07c 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >+@@ -15,6 +15,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCIceCandidate"))) >+ @interface RTCIceCandidate : NSObject >+ >+ /** >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >+index 727da8acbeb..d1feda40fe7 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >+@@ -20,6 +20,7 @@ typedef NS_ENUM(NSUInteger, RTCTlsCertPolicy) { >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCIceServer"))) >+ @interface RTCIceServer : NSObject >+ >+ /** URI(s) for this server represented as NSStrings. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >+index 00508eba17b..1bb27b629c7 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >+@@ -12,6 +12,7 @@ >+ >+ NS_ASSUME_NONNULL_BEGIN >+ >++__attribute__((objc_runtime_name("WK_RTCIntervalRange"))) >+ @interface RTCIntervalRange : NSObject >+ >+ @property(nonatomic, readonly) NSInteger min; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >+index 14d996c1cec..bbc4c035f78 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >+@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN >+ >+ /** This does not currently conform to the spec. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCLegacyStatsReport"))) >+ @interface RTCLegacyStatsReport : NSObject >+ >+ /** Time since 1970-01-01T00:00:00Z in milliseconds. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >+index fce08212e9a..8b358e9c59d 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >+@@ -39,6 +39,7 @@ RTC_EXTERN NSString *const kRTCMediaConstraintsValueTrue; >+ RTC_EXTERN NSString *const kRTCMediaConstraintsValueFalse; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMediaConstraints"))) >+ @interface RTCMediaConstraints : NSObject >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >+index 6cfcb7d2ce8..1a4003b5283 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >+@@ -22,6 +22,7 @@ typedef NS_ENUM(NSInteger, RTCSourceState) { >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMediaSource"))) >+ @interface RTCMediaSource : NSObject >+ >+ /** The current state of the RTCMediaSource. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >+index b97960d436c..9cefde13c5f 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >+@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >+ @class RTCVideoTrack; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMediaStream"))) >+ @interface RTCMediaStream : NSObject >+ >+ /** The audio tracks in this stream. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >+index aee9bdd0a0b..914d8f2e047 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >+@@ -26,6 +26,7 @@ RTC_EXTERN NSString *const kRTCMediaStreamTrackKindAudio; >+ RTC_EXTERN NSString *const kRTCMediaStreamTrackKindVideo; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMediaStreamTrack"))) >+ @interface RTCMediaStreamTrack : NSObject >+ >+ /** >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >+index f01bea9b71b..28b71d1f9e4 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >+@@ -15,6 +15,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMetricsSampleInfo"))) >+ @interface RTCMetricsSampleInfo : NSObject >+ >+ /** >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >+index 94036cc7534..0e930c524e1 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >+@@ -127,6 +127,7 @@ RTC_EXPORT >+ @end >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCPeerConnection"))) >+ @interface RTCPeerConnection : NSObject >+ >+ /** The object that will be notifed about events such as state changes and >+@@ -279,6 +280,7 @@ RTC_EXPORT >+ >+ @end >+ >++__attribute__((objc_runtime_name("WK_RTCPeerConnection"))) >+ @interface RTCPeerConnection (Media) >+ >+ /** Create an RTCRtpSender with the specified kind and media stream ID. >+@@ -290,6 +292,7 @@ RTC_EXPORT >+ >+ @end >+ >++__attribute__((objc_runtime_name("WK_RTCPeerConnection"))) >+ @interface RTCPeerConnection (DataChannel) >+ >+ /** Create a new data channel with the given label and configuration. */ >+@@ -298,6 +301,7 @@ RTC_EXPORT >+ >+ @end >+ >++__attribute__((objc_runtime_name("WK_RTCPeerConnection"))) >+ @interface RTCPeerConnection (Stats) >+ >+ /** Gather stats for the given RTCMediaStreamTrack. If |mediaStreamTrack| is nil >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >+index 7f7b7e6c4c4..3fc70e65488 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >+@@ -28,6 +28,7 @@ NS_ASSUME_NONNULL_BEGIN >+ @protocol RTCVideoEncoderFactory; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCPeerConnectionFactory"))) >+ @interface RTCPeerConnectionFactory : NSObject >+ >+ /* Initialize object with default H264 video encoder/decoder factories */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >+index bb9aa90507e..341e4289884 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >+@@ -33,6 +33,7 @@ RTC_EXTERN const NSString *const kRTCH264CodecName; >+ >+ /** Defined in http://w3c.github.io/webrtc-pc/#idl-def-RTCRtpCodecParameters */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpCodecParameters"))) >+ @interface RTCRtpCodecParameters : NSObject >+ >+ /** The RTP payload type. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >+index 5ba0176449d..1230e05b004 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >+@@ -15,6 +15,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpEncodingParameters"))) >+ @interface RTCRtpEncodingParameters : NSObject >+ >+ /** Controls whether the encoding is currently transmitted. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >+index 8f0993489db..ea74644f7e0 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >+@@ -19,6 +19,7 @@ >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpParameters"))) >+ @interface RTCRtpParameters : NSObject >+ >+ /** A unique identifier for the last set of parameters applied. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >+index 6156db9f932..a9b697220a2 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >+@@ -73,6 +73,7 @@ RTC_EXPORT >+ @end >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpReceiver"))) >+ @interface RTCRtpReceiver : NSObject <RTCRtpReceiver> >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >+index f6e91250267..01ed2f749dd 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >+@@ -41,6 +41,7 @@ RTC_EXPORT >+ @end >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpSender"))) >+ @interface RTCRtpSender : NSObject <RTCRtpSender> >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >+index 7db53da8bea..5ac62d67d3b 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >+@@ -25,6 +25,7 @@ typedef NS_ENUM(NSInteger, RTCSdpType) { >+ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCSessionDescription"))) >+ @interface RTCSessionDescription : NSObject >+ >+ /** The type of session description. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >+index f0a2eaa14c6..60151a1ac15 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >+@@ -20,6 +20,7 @@ RTC_EXPORT >+ @end >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoCapturer"))) >+ @interface RTCVideoCapturer : NSObject >+ >+ @property(nonatomic, weak) id<RTCVideoCapturerDelegate> delegate; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >+index 5bc6d66d1ee..6fccf44fb93 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >+@@ -39,6 +39,7 @@ typedef NS_ENUM(NSUInteger, RTCVideoContentType) { >+ >+ /** Represents an encoded frame. Corresponds to webrtc::EncodedImage. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCEncodedImage"))) >+ @interface RTCEncodedImage : NSObject >+ >+ @property(nonatomic, strong) NSData *buffer; >+@@ -60,6 +61,7 @@ RTC_EXPORT >+ >+ /** Information for header. Corresponds to webrtc::RTPFragmentationHeader. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCRtpFragmentationHeader"))) >+ @interface RTCRtpFragmentationHeader : NSObject >+ >+ @property(nonatomic, strong) NSArray<NSNumber *> *fragmentationOffset; >+@@ -92,6 +94,7 @@ typedef NS_ENUM(NSUInteger, RTCVideoCodecMode) { >+ >+ /** Holds information to identify a codec. Corresponds to webrtc::SdpVideoFormat. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoCodecInfo"))) >+ @interface RTCVideoCodecInfo : NSObject <NSCoding> >+ >+ - (instancetype)init NS_UNAVAILABLE; >+@@ -111,6 +114,7 @@ RTC_EXPORT >+ >+ /** Settings for encoder. Corresponds to webrtc::VideoCodec. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderSettings"))) >+ @interface RTCVideoEncoderSettings : NSObject >+ >+ @property(nonatomic, strong) NSString *name; >+@@ -132,6 +136,7 @@ RTC_EXPORT >+ >+ /** QP thresholds for encoder. Corresponds to webrtc::VideoEncoder::QpThresholds. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderQpThresholds"))) >+ @interface RTCVideoEncoderQpThresholds : NSObject >+ >+ - (instancetype)initWithThresholdsLow:(NSInteger)low high:(NSInteger)high; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >+index 0ef2c8a655c..e9053025de7 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >+@@ -39,6 +39,7 @@ RTC_EXPORT >+ * codecs, create custom implementations of RTCVideoEncoderFactory and RTCVideoDecoderFactory. >+ */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDefaultVideoEncoderFactory"))) >+ @interface RTCDefaultVideoEncoderFactory : NSObject <RTCVideoEncoderFactory> >+ >+ @property(nonatomic, retain) RTCVideoCodecInfo *preferredCodec; >+@@ -48,6 +49,7 @@ RTC_EXPORT >+ @end >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCDefaultVideoDecoderFactory"))) >+ @interface RTCDefaultVideoDecoderFactory : NSObject <RTCVideoDecoderFactory> >+ @end >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >+index d4dbf88f2b6..84bf9b75028 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >+@@ -20,6 +20,7 @@ typedef NS_ENUM(NSUInteger, RTCH264PacketizationMode) { >+ }; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCCodecSpecificInfoH264"))) >+ @interface RTCCodecSpecificInfoH264 : NSObject <RTCCodecSpecificInfo> >+ >+ @property(nonatomic, assign) RTCH264PacketizationMode packetizationMode; >+@@ -56,6 +57,7 @@ typedef NS_ENUM(NSUInteger, RTCH264Level) { >+ }; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCH264ProfileLevelId"))) >+ @interface RTCH264ProfileLevelId : NSObject >+ >+ @property(nonatomic, readonly) RTCH264Profile profile; >+@@ -69,6 +71,7 @@ RTC_EXPORT >+ >+ /** Encoder. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderH264"))) >+ @interface RTCVideoEncoderH264 : NSObject <RTCVideoEncoder> >+ >+ - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo; >+@@ -77,15 +80,18 @@ RTC_EXPORT >+ >+ /** Decoder. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoDecoderH264"))) >+ @interface RTCVideoDecoderH264 : NSObject <RTCVideoDecoder> >+ @end >+ >+ /** Encoder factory. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderFactoryH264"))) >+ @interface RTCVideoEncoderFactoryH264 : NSObject <RTCVideoEncoderFactory> >+ @end >+ >+ /** Decoder factory. */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoDecoderFactoryH264"))) >+ @interface RTCVideoDecoderFactoryH264 : NSObject <RTCVideoDecoderFactory> >+ @end >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >+index 962b6312f7f..3e19ef8909c 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >+@@ -14,6 +14,7 @@ >+ #import <WebRTC/RTCVideoCodec.h> >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoDecoderVP8"))) >+ @interface RTCVideoDecoderVP8 : NSObject >+ >+ /* This returns a VP8 decoder that can be returned from a RTCVideoDecoderFactory injected into >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >+index faf66ef065b..3fe79bc4a52 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >+@@ -14,6 +14,7 @@ >+ #import <WebRTC/RTCVideoCodec.h> >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoDecoderVP9"))) >+ @interface RTCVideoDecoderVP9 : NSObject >+ >+ /* This returns a VP9 decoder that can be returned from a RTCVideoDecoderFactory injected into >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >+index e63b24dde75..52155b52551 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >+@@ -14,6 +14,7 @@ >+ #import <WebRTC/RTCVideoCodec.h> >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderVP8"))) >+ @interface RTCVideoEncoderVP8 : NSObject >+ >+ /* This returns a VP8 encoder that can be returned from a RTCVideoEncoderFactory injected into >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >+index cef8c82e96f..866e626a05e 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >+@@ -14,6 +14,7 @@ >+ #import <WebRTC/RTCVideoCodec.h> >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoEncoderVP9"))) >+ @interface RTCVideoEncoderVP9 : NSObject >+ >+ /* This returns a VP9 encoder that can be returned from a RTCVideoEncoderFactory injected into >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >+index cfccfa9e940..809363674b4 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >+@@ -26,6 +26,7 @@ typedef NS_ENUM(NSInteger, RTCVideoRotation) { >+ >+ // RTCVideoFrame is an ObjectiveC version of webrtc::VideoFrame. >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoFrame"))) >+ @interface RTCVideoFrame : NSObject >+ >+ /** Width without rotation applied. */ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >+index d590a5f7fc3..3f342536e38 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >+@@ -71,6 +71,7 @@ RTC_EXPORT >+ >+ /** RTCVideoFrameBuffer containing a CVPixelBufferRef */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCCVPixelBuffer"))) >+ @interface RTCCVPixelBuffer : NSObject <RTCVideoFrameBuffer> >+ >+ @property(nonatomic, readonly) CVPixelBufferRef pixelBuffer; >+@@ -105,11 +106,13 @@ RTC_EXPORT >+ >+ /** RTCI420Buffer implements the RTCI420Buffer protocol */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCI420Buffer"))) >+ @interface RTCI420Buffer : NSObject <RTCI420Buffer> >+ @end >+ >+ /** Mutable version of RTCI420Buffer */ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCMutableI420Buffer"))) >+ @interface RTCMutableI420Buffer : RTCI420Buffer <RTCMutableI420Buffer> >+ @end >+ >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >+index a9ebc06c88e..60075e3435a 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >+@@ -18,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN >+ >+ RTC_EXPORT >+ >++__attribute__((objc_runtime_name("WK_RTCVideoSource"))) >+ @interface RTCVideoSource : RTCMediaSource <RTCVideoCapturerDelegate> >+ >+ - (instancetype)init NS_UNAVAILABLE; >+diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >+index 899d7c34780..e381c3d1e3e 100644 >+--- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >++++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >+@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >+ @class RTCVideoSource; >+ >+ RTC_EXPORT >++__attribute__((objc_runtime_name("WK_RTCVideoTrack"))) >+ @interface RTCVideoTrack : RTCMediaStreamTrack >+ >+ /** The video source for this video track. */ >+-- >+2.17.1 (Apple Git-112) >+ >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0001-Using-VCP.patch b/Source/ThirdParty/libwebrtc/WebKit/0001-Using-VCP.patch >deleted file mode 100644 >index 5d08b2a0961..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0001-Using-VCP.patch >+++ /dev/null >@@ -1,77 +0,0 @@ >-From f6d216e76cc576b7cac5a980c74d4cf60f28cb17 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 22 Mar 2018 15:44:50 -0700 >-Subject: [PATCH] Using VCP >- >---- >- .../Classes/VideoToolbox/RTCVideoEncoderH264.mm | 16 +++++++++------- >- 1 file changed, 9 insertions(+), 7 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-index d1af6e3c632..138d44573b8 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-@@ -34,6 +34,8 @@ >- #include "sdk/objc/Framework/Classes/VideoToolbox/nalu_rewriter.h" >- #include "system_wrappers/include/clock.h" >- #include "third_party/libyuv/include/libyuv/convert_from.h" >-+ >-+#include "sdk/WebKit/EncoderUtilities.h" >- #include "sdk/WebKit/WebKitUtilities.h" >- >- @interface RTCVideoEncoderH264 () >-@@ -286,7 +288,7 @@ @implementation RTCVideoEncoderH264 { >- RTCVideoEncoderCallback _callback; >- int32_t _width; >- int32_t _height; >-- VTCompressionSessionRef _compressionSession; >-+ CompressionSessionRef _compressionSession; >- RTCVideoCodecMode _mode; >- >- webrtc::H264BitstreamParser _h264BitstreamParser; >-@@ -360,9 +362,9 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- >- // Get a pixel buffer from the pool and copy frame data over. >- CVPixelBufferPoolRef pixelBufferPool = >-- VTCompressionSessionGetPixelBufferPool(_compressionSession); >-+ CompressionSessionGetPixelBufferPool(_compressionSession); >- if ([self resetCompressionSessionIfNeededForPool:pixelBufferPool withFrame:frame]) { >-- pixelBufferPool = VTCompressionSessionGetPixelBufferPool(_compressionSession); >-+ pixelBufferPool = CompressionSessionGetPixelBufferPool(_compressionSession); >- isKeyframeRequired = YES; >- } >- >-@@ -444,7 +446,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- // Update the bitrate if needed. >- [self setBitrateBps:_bitrateAdjuster->GetAdjustedBitrateBps()]; >- >-- OSStatus status = VTCompressionSessionEncodeFrame(_compressionSession, >-+ OSStatus status = CompressionSessionEncodeFrame(_compressionSession, >- pixelBuffer, >- presentationTimeStamp, >- kCMTimeInvalid, >-@@ -579,10 +581,10 @@ - (int)resetCompressionSessionWithPixelFormat:(OSType)framePixelFormat { >- webrtc::isH264HardwareEncoderAllowed() ? kCFBooleanTrue : kCFBooleanFalse); >- #endif >- OSStatus status = >-- VTCompressionSessionCreate(nullptr, // use default allocator >-+ CompressionSessionCreate(nullptr, // use default allocator >- _width, >- _height, >-- kCMVideoCodecType_H264, >-+ kCodecTypeH264, >- encoder_specs, // use hardware accelerated encoder if available >- sourceAttributes, >- nullptr, // use default compressed data allocator >-@@ -639,7 +641,7 @@ - (void)configureCompressionSession { >- >- - (void)destroyCompressionSession { >- if (_compressionSession) { >-- VTCompressionSessionInvalidate(_compressionSession); >-+ CompressionSessionInvalidate(_compressionSession); >- CFRelease(_compressionSession); >- _compressionSession = nullptr; >- } >--- >-2.15.1 (Apple Git-101) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0003-Fixing-VP8-files.patch b/Source/ThirdParty/libwebrtc/WebKit/0003-Fixing-VP8-files.patch >deleted file mode 100644 >index 06bb0099b02..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0003-Fixing-VP8-files.patch >+++ /dev/null >@@ -1,3072 +0,0 @@ >-From be6c0b3edb476e45bf282046e8d1e41c6d4e17cf Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:47:41 -0800 >-Subject: [PATCH 3/8] Fixing VP8 files >- >---- >- .../codecs/vp8/default_temporal_layers.cc | 354 +++++++++--- >- .../codecs/vp8/default_temporal_layers.h | 59 +- >- .../codecs/vp8/default_temporal_layers_unittest.cc | 276 +++++++-- >- .../modules/video_coding/codecs/vp8/include/vp8.h | 16 +- >- .../codecs/vp8/include/vp8_common_types.h | 10 +- >- .../video_coding/codecs/vp8/include/vp8_globals.h | 8 +- >- .../video_coding/codecs/vp8/screenshare_layers.cc | 103 ++-- >- .../video_coding/codecs/vp8/screenshare_layers.h | 33 +- >- .../codecs/vp8/screenshare_layers_unittest.cc | 74 ++- >- .../codecs/vp8/simulcast_rate_allocator.cc | 4 +- >- .../codecs/vp8/simulcast_rate_allocator.h | 14 +- >- .../video_coding/codecs/vp8/simulcast_unittest.cc | 18 +- >- .../video_coding/codecs/vp8/temporal_layers.h | 119 +++- >- .../codecs/vp8/test/vp8_impl_unittest.cc | 628 +++++++++++---------- >- .../modules/video_coding/codecs/vp8/vp8_impl.cc | 246 +++++--- >- .../modules/video_coding/codecs/vp8/vp8_impl.h | 34 +- >- .../modules/video_coding/codecs/vp8/vp8_noop.cc | 8 +- >- 17 files changed, 1364 insertions(+), 640 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc >-index 3573aa8f1cb..f070750e7bc 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.cc >-@@ -1,31 +1,36 @@ >- /* Copyright (c) 2013 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. >--*/ >-+ * >-+ * 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 "webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h" >-+#include "modules/video_coding/codecs/vp8/default_temporal_layers.h" >- >- #include <stdlib.h> >- #include <string.h> >- >- #include <algorithm> >-+#include <memory> >-+#include <set> >- #include <vector> >- >--#include "webrtc/base/checks.h" >--#include "webrtc/modules/include/module_common_types.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h" >-+#include "modules/include/module_common_types.h" >-+#include "modules/video_coding/codecs/vp8/include/vp8_common_types.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "rtc_base/checks.h" >-+#include "rtc_base/logging.h" >-+#include "system_wrappers/include/field_trial.h" >- >--#include "vpx/vpx_encoder.h" >- #include "vpx/vp8cx.h" >-+#include "vpx/vpx_encoder.h" >- >- namespace webrtc { >- >--TemporalLayers::FrameConfig::FrameConfig() {} >-+TemporalLayers::FrameConfig::FrameConfig() >-+ : FrameConfig(kNone, kNone, kNone, false) {} >- >- TemporalLayers::FrameConfig::FrameConfig(TemporalLayers::BufferFlags last, >- TemporalLayers::BufferFlags golden, >-@@ -48,6 +53,9 @@ TemporalLayers::FrameConfig::FrameConfig(TemporalLayers::BufferFlags last, >- last_buffer_flags(last), >- golden_buffer_flags(golden), >- arf_buffer_flags(arf), >-+ encoder_layer_id(0), >-+ packetizer_temporal_idx(kNoTemporalIdx), >-+ layer_sync(false), >- freeze_entropy(freeze_entropy) {} >- >- namespace { >-@@ -91,16 +99,19 @@ std::vector<bool> GetTemporalLayerSync(size_t num_layers) { >- case 2: >- return {false, true, false, false, false, false, false, false}; >- case 3: >-- return {false, true, true, false, false, false, false, false}; >-+ if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) { >-+ return {false, true, true, false}; >-+ } else { >-+ return {false, true, true, false, false, false, false, false}; >-+ } >- case 4: >-- return {false, true, true, true, true, true, false, true, >-- false, true, false, true, false, true, false, true}; >-+ return {false, true, true, false, true, false, false, false, >-+ false, false, false, false, false, false, false, false}; >- default: >-- RTC_NOTREACHED(); >- break; >- } >-- RTC_NOTREACHED(); >-- return {false}; >-+ RTC_NOTREACHED() << num_layers; >-+ return {}; >- } >- >- std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { >-@@ -129,7 +140,7 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { >- // TL0 also references and updates the 'last' buffer. >- // TL1 also references 'last' and references and updates 'golden'. >- return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-- TemporalLayers::kUpdate, >-+ TemporalLayers::kNone, >- TemporalLayers::kReference), >- TemporalLayers::FrameConfig(TemporalLayers::kReference, >- TemporalLayers::kUpdate, >-@@ -153,35 +164,68 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { >- TemporalLayers::kReference, TemporalLayers::kReference, >- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; >- case 3: >-- // All layers can reference but not update the 'alt' buffer, this means >-- // that the 'alt' buffer reference is effectively the last keyframe. >-- // TL0 also references and updates the 'last' buffer. >-- // TL1 also references 'last' and references and updates 'golden'. >-- // TL2 references both 'last' and 'golden' but updates no buffer. >-- return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-- TemporalLayers::kUpdate, >-- TemporalLayers::kReference), >-- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kNone, >-- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-- TemporalLayers::FrameConfig(TemporalLayers::kReference, >-- TemporalLayers::kUpdate, >-- TemporalLayers::kReference), >-- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kReference, >-- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-- TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-- TemporalLayers::kNone, >-- TemporalLayers::kReference), >-- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kReference, >-- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-- TemporalLayers::FrameConfig(TemporalLayers::kReference, >-- TemporalLayers::kReferenceAndUpdate, >-- TemporalLayers::kReference), >-- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kReference, >-- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy)}; >-+ if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) { >-+ // This field trial is intended to check if it is worth using a shorter >-+ // temporal pattern, trading some coding efficiency for less risk of >-+ // dropped frames. >-+ // The coding efficiency will decrease somewhat since the higher layer >-+ // state is more volatile, but it will be offset slightly by updating >-+ // the altref buffer with TL2 frames, instead of just referencing lower >-+ // layers. >-+ // If a frame is dropped in a higher layer, the jitter >-+ // buffer on the receive side won't be able to decode any higher layer >-+ // frame until the next sync frame. So we expect a noticeable decrease >-+ // in frame drops on links with high packet loss. >-+ >-+ // TL0 references and updates the 'last' buffer. >-+ // TL1 references 'last' and references and updates 'golden'. >-+ // TL2 references both 'last' & 'golden' and references and updates >-+ // 'arf'. >-+ return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-+ TemporalLayers::kNone, >-+ TemporalLayers::kNone), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kNone, >-+ TemporalLayers::kUpdate), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kUpdate, >-+ TemporalLayers::kNone), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kReference, >-+ TemporalLayers::kReference, >-+ TemporalLayers::kFreezeEntropy)}; >-+ } else { >-+ // All layers can reference but not update the 'alt' buffer, this means >-+ // that the 'alt' buffer reference is effectively the last keyframe. >-+ // TL0 also references and updates the 'last' buffer. >-+ // TL1 also references 'last' and references and updates 'golden'. >-+ // TL2 references both 'last' and 'golden' but updates no buffer. >-+ return {TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-+ TemporalLayers::kNone, >-+ TemporalLayers::kReference), >-+ TemporalLayers::FrameConfig( >-+ TemporalLayers::kReference, TemporalLayers::kNone, >-+ TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kUpdate, >-+ TemporalLayers::kReference), >-+ TemporalLayers::FrameConfig( >-+ TemporalLayers::kReference, TemporalLayers::kReference, >-+ TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReferenceAndUpdate, >-+ TemporalLayers::kNone, >-+ TemporalLayers::kReference), >-+ TemporalLayers::FrameConfig( >-+ TemporalLayers::kReference, TemporalLayers::kReference, >-+ TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kReferenceAndUpdate, >-+ TemporalLayers::kReference), >-+ TemporalLayers::FrameConfig(TemporalLayers::kReference, >-+ TemporalLayers::kReference, >-+ TemporalLayers::kReference, >-+ TemporalLayers::kFreezeEntropy)}; >-+ } >- case 4: >- // TL0 references and updates only the 'last' buffer. >- // TL1 references 'last' and updates and references 'golden'. >-@@ -191,13 +235,13 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { >- TemporalLayers::kNone, >- TemporalLayers::kNone), >- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kReference, >-- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >-+ TemporalLayers::kReference, TemporalLayers::kNone, >-+ TemporalLayers::kNone, TemporalLayers::kFreezeEntropy), >- TemporalLayers::FrameConfig(TemporalLayers::kReference, >- TemporalLayers::kNone, >- TemporalLayers::kUpdate), >- TemporalLayers::FrameConfig( >-- TemporalLayers::kReference, TemporalLayers::kReference, >-+ TemporalLayers::kReference, TemporalLayers::kNone, >- TemporalLayers::kReference, TemporalLayers::kFreezeEntropy), >- TemporalLayers::FrameConfig(TemporalLayers::kReference, >- TemporalLayers::kUpdate, >-@@ -244,6 +288,17 @@ std::vector<TemporalLayers::FrameConfig> GetTemporalPattern(size_t num_layers) { >- TemporalLayers::kNone, TemporalLayers::kNone, TemporalLayers::kNone)}; >- } >- >-+// Temporary fix for forced SW fallback. >-+// For VP8 SW codec, |TemporalLayers| is created and reported to >-+// SimulcastRateAllocator::OnTemporalLayersCreated but not for VP8 HW. >-+// Causes an issue when going from forced SW -> HW as |TemporalLayers| is not >-+// deregistred when deleted by SW codec (tl factory might not exist, owned by >-+// SimulcastRateAllocator). >-+bool ExcludeOnTemporalLayersCreated(int num_temporal_layers) { >-+ return webrtc::field_trial::IsEnabled( >-+ "WebRTC-VP8-Forced-Fallback-Encoder-v2") && >-+ num_temporal_layers == 1; >-+} >- } // namespace >- >- DefaultTemporalLayers::DefaultTemporalLayers(int number_of_temporal_layers, >-@@ -254,7 +309,6 @@ DefaultTemporalLayers::DefaultTemporalLayers(int number_of_temporal_layers, >- temporal_pattern_(GetTemporalPattern(num_layers_)), >- tl0_pic_idx_(initial_tl0_pic_idx), >- pattern_idx_(255), >-- timestamp_(0), >- last_base_layer_sync_(false) { >- RTC_DCHECK_EQ(temporal_pattern_.size(), temporal_layer_sync_.size()); >- RTC_CHECK_GE(kMaxTemporalStreams, number_of_temporal_layers); >-@@ -266,12 +320,6 @@ DefaultTemporalLayers::DefaultTemporalLayers(int number_of_temporal_layers, >- RTC_DCHECK_LE(temporal_ids_.size(), temporal_pattern_.size()); >- } >- >--int DefaultTemporalLayers::GetTemporalLayerId( >-- const TemporalLayers::FrameConfig& tl_config) const { >-- RTC_DCHECK(!tl_config.drop_frame); >-- return temporal_ids_[tl_config.pattern_idx % temporal_ids_.size()]; >--} >-- >- uint8_t DefaultTemporalLayers::Tl0PicIdx() const { >- return tl0_pic_idx_; >- } >-@@ -332,7 +380,10 @@ TemporalLayers::FrameConfig DefaultTemporalLayers::UpdateLayerConfig( >- RTC_DCHECK_LT(0, temporal_pattern_.size()); >- pattern_idx_ = (pattern_idx_ + 1) % temporal_pattern_.size(); >- TemporalLayers::FrameConfig tl_config = temporal_pattern_[pattern_idx_]; >-- tl_config.pattern_idx = pattern_idx_; >-+ tl_config.layer_sync = >-+ temporal_layer_sync_[pattern_idx_ % temporal_layer_sync_.size()]; >-+ tl_config.encoder_layer_id = tl_config.packetizer_temporal_idx = >-+ temporal_ids_[pattern_idx_ % temporal_ids_.size()]; >- return tl_config; >- } >- >-@@ -348,24 +399,19 @@ void DefaultTemporalLayers::PopulateCodecSpecific( >- vp8_info->layerSync = false; >- vp8_info->tl0PicIdx = kNoTl0PicIdx; >- } else { >-+ vp8_info->temporalIdx = tl_config.packetizer_temporal_idx; >-+ vp8_info->layerSync = tl_config.layer_sync; >- if (frame_is_keyframe) { >- vp8_info->temporalIdx = 0; >- vp8_info->layerSync = true; >-- } else { >-- vp8_info->temporalIdx = GetTemporalLayerId(tl_config); >-- >-- vp8_info->layerSync = temporal_layer_sync_[tl_config.pattern_idx % >-- temporal_layer_sync_.size()]; >- } >- if (last_base_layer_sync_ && vp8_info->temporalIdx != 0) { >- // Regardless of pattern the frame after a base layer sync will always >- // be a layer sync. >- vp8_info->layerSync = true; >- } >-- if (vp8_info->temporalIdx == 0 && timestamp != timestamp_) { >-- timestamp_ = timestamp; >-+ if (vp8_info->temporalIdx == 0) >- tl0_pic_idx_++; >-- } >- last_base_layer_sync_ = frame_is_keyframe; >- vp8_info->tl0PicIdx = tl0_pic_idx_; >- } >-@@ -377,13 +423,181 @@ TemporalLayers* TemporalLayersFactory::Create( >- uint8_t initial_tl0_pic_idx) const { >- TemporalLayers* tl = >- new DefaultTemporalLayers(temporal_layers, initial_tl0_pic_idx); >-- if (listener_) >-+ if (listener_ && !ExcludeOnTemporalLayersCreated(temporal_layers)) >- listener_->OnTemporalLayersCreated(simulcast_id, tl); >- return tl; >- } >- >-+std::unique_ptr<TemporalLayersChecker> TemporalLayersFactory::CreateChecker( >-+ int /*simulcast_id*/, >-+ int temporal_layers, >-+ uint8_t initial_tl0_pic_idx) const { >-+ TemporalLayersChecker* tlc = >-+ new DefaultTemporalLayersChecker(temporal_layers, initial_tl0_pic_idx); >-+ return std::unique_ptr<TemporalLayersChecker>(tlc); >-+} >-+ >- void TemporalLayersFactory::SetListener(TemporalLayersListener* listener) { >- listener_ = listener; >- } >- >-+// Returns list of temporal dependencies for each frame in the temporal pattern. >-+// Values are lists of indecies in the pattern. >-+std::vector<std::set<uint8_t>> GetTemporalDependencies( >-+ int num_temporal_layers) { >-+ switch (num_temporal_layers) { >-+ case 1: >-+ return {{0}}; >-+ case 2: >-+ return {{6}, {0}, {0}, {1, 2}, {2}, {3, 4}, {4}, {5, 6}}; >-+ case 3: >-+ if (field_trial::IsEnabled("WebRTC-UseShortVP8TL3Pattern")) { >-+ return {{0}, {0}, {0}, {0, 1, 2}}; >-+ } else { >-+ return {{4}, {0}, {0}, {0, 2}, {0}, {2, 4}, {2, 4}, {4, 6}}; >-+ } >-+ case 4: >-+ return {{8}, {0}, {0}, {0, 2}, >-+ {0}, {0, 2, 4}, {0, 2, 4}, {0, 4, 6}, >-+ {0}, {4, 6, 8}, {4, 6, 8}, {4, 8, 10}, >-+ {4, 8}, {8, 10, 12}, {8, 10, 12}, {8, 12, 14}}; >-+ default: >-+ RTC_NOTREACHED(); >-+ return {}; >-+ } >-+} >-+ >-+DefaultTemporalLayersChecker::DefaultTemporalLayersChecker( >-+ int num_temporal_layers, >-+ uint8_t initial_tl0_pic_idx) >-+ : TemporalLayersChecker(num_temporal_layers, initial_tl0_pic_idx), >-+ num_layers_(std::max(1, num_temporal_layers)), >-+ temporal_ids_(GetTemporalIds(num_layers_)), >-+ temporal_dependencies_(GetTemporalDependencies(num_layers_)), >-+ pattern_idx_(255) { >-+ int i = 0; >-+ while (temporal_ids_.size() < temporal_dependencies_.size()) { >-+ temporal_ids_.push_back(temporal_ids_[i++]); >-+ } >-+} >-+ >-+bool DefaultTemporalLayersChecker::CheckTemporalConfig( >-+ bool frame_is_keyframe, >-+ const TemporalLayers::FrameConfig& frame_config) { >-+ if (!TemporalLayersChecker::CheckTemporalConfig(frame_is_keyframe, >-+ frame_config)) { >-+ return false; >-+ } >-+ if (frame_config.drop_frame) { >-+ return true; >-+ } >-+ ++pattern_idx_; >-+ if (pattern_idx_ == temporal_ids_.size()) { >-+ // All non key-frame buffers should be updated each pattern cycle. >-+ if (!last_.is_keyframe && !last_.is_updated_this_cycle) { >-+ RTC_LOG(LS_ERROR) << "Last buffer was not updated during pattern cycle."; >-+ return false; >-+ } >-+ if (!arf_.is_keyframe && !arf_.is_updated_this_cycle) { >-+ RTC_LOG(LS_ERROR) << "Arf buffer was not updated during pattern cycle."; >-+ return false; >-+ } >-+ if (!golden_.is_keyframe && !golden_.is_updated_this_cycle) { >-+ RTC_LOG(LS_ERROR) >-+ << "Golden buffer was not updated during pattern cycle."; >-+ return false; >-+ } >-+ last_.is_updated_this_cycle = false; >-+ arf_.is_updated_this_cycle = false; >-+ golden_.is_updated_this_cycle = false; >-+ pattern_idx_ = 0; >-+ } >-+ uint8_t expected_tl_idx = temporal_ids_[pattern_idx_]; >-+ if (frame_config.packetizer_temporal_idx != expected_tl_idx) { >-+ RTC_LOG(LS_ERROR) << "Frame has an incorrect temporal index. Expected: " >-+ << static_cast<int>(expected_tl_idx) << " Actual: " >-+ << static_cast<int>(frame_config.packetizer_temporal_idx); >-+ return false; >-+ } >-+ >-+ bool need_sync = temporal_ids_[pattern_idx_] > 0 && >-+ temporal_ids_[pattern_idx_] != kNoTemporalIdx; >-+ std::vector<int> dependencies; >-+ >-+ if (frame_config.last_buffer_flags & >-+ TemporalLayers::BufferFlags::kReference) { >-+ uint8_t referenced_layer = temporal_ids_[last_.pattern_idx]; >-+ if (referenced_layer > 0) { >-+ need_sync = false; >-+ } >-+ if (!last_.is_keyframe) { >-+ dependencies.push_back(last_.pattern_idx); >-+ } >-+ } >-+ >-+ if (frame_config.arf_buffer_flags & TemporalLayers::BufferFlags::kReference) { >-+ uint8_t referenced_layer = temporal_ids_[arf_.pattern_idx]; >-+ if (referenced_layer > 0) { >-+ need_sync = false; >-+ } >-+ if (!arf_.is_keyframe) { >-+ dependencies.push_back(arf_.pattern_idx); >-+ } >-+ } >-+ >-+ if (frame_config.golden_buffer_flags & >-+ TemporalLayers::BufferFlags::kReference) { >-+ uint8_t referenced_layer = temporal_ids_[golden_.pattern_idx]; >-+ if (referenced_layer > 0) { >-+ need_sync = false; >-+ } >-+ if (!golden_.is_keyframe) { >-+ dependencies.push_back(golden_.pattern_idx); >-+ } >-+ } >-+ >-+ if (need_sync != frame_config.layer_sync) { >-+ RTC_LOG(LS_ERROR) << "Sync bit is set incorrectly on a frame. Expected: " >-+ << need_sync << " Actual: " << frame_config.layer_sync; >-+ return false; >-+ } >-+ >-+ if (!frame_is_keyframe) { >-+ size_t i; >-+ for (i = 0; i < dependencies.size(); ++i) { >-+ if (temporal_dependencies_[pattern_idx_].find(dependencies[i]) == >-+ temporal_dependencies_[pattern_idx_].end()) { >-+ RTC_LOG(LS_ERROR) >-+ << "Illegal temporal dependency out of defined pattern " >-+ "from position " >-+ << static_cast<int>(pattern_idx_) << " to position " >-+ << static_cast<int>(dependencies[i]); >-+ return false; >-+ } >-+ } >-+ } >-+ >-+ if (frame_config.last_buffer_flags & TemporalLayers::BufferFlags::kUpdate) { >-+ last_.is_updated_this_cycle = true; >-+ last_.pattern_idx = pattern_idx_; >-+ last_.is_keyframe = false; >-+ } >-+ if (frame_config.arf_buffer_flags & TemporalLayers::BufferFlags::kUpdate) { >-+ arf_.is_updated_this_cycle = true; >-+ arf_.pattern_idx = pattern_idx_; >-+ arf_.is_keyframe = false; >-+ } >-+ if (frame_config.golden_buffer_flags & TemporalLayers::BufferFlags::kUpdate) { >-+ golden_.is_updated_this_cycle = true; >-+ golden_.pattern_idx = pattern_idx_; >-+ golden_.is_keyframe = false; >-+ } >-+ if (frame_is_keyframe) { >-+ last_.is_keyframe = true; >-+ arf_.is_keyframe = true; >-+ golden_.is_keyframe = true; >-+ } >-+ return true; >-+} >-+ >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h >-index 4681fe9dc84..f1925569209 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h >-@@ -1,22 +1,23 @@ >- /* Copyright (c) 2013 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. >--*/ >-+ * >-+ * 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. >-+ */ >- /* >--* This file defines classes for doing temporal layers with VP8. >--*/ >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >-+ * This file defines classes for doing temporal layers with VP8. >-+ */ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >- >-+#include <set> >- #include <vector> >- >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >- >--#include "webrtc/base/optional.h" >-+#include "api/optional.h" >- >- namespace webrtc { >- >-@@ -45,9 +46,6 @@ class DefaultTemporalLayers : public TemporalLayers { >- >- void FrameEncoded(unsigned int size, int qp) override {} >- >-- int GetTemporalLayerId( >-- const TemporalLayers::FrameConfig& references) const override; >-- >- uint8_t Tl0PicIdx() const override; >- >- private: >-@@ -58,10 +56,35 @@ class DefaultTemporalLayers : public TemporalLayers { >- >- uint8_t tl0_pic_idx_; >- uint8_t pattern_idx_; >-- uint32_t timestamp_; >- bool last_base_layer_sync_; >- rtc::Optional<std::vector<uint32_t>> new_bitrates_kbps_; >- }; >- >-+class DefaultTemporalLayersChecker : public TemporalLayersChecker { >-+ public: >-+ DefaultTemporalLayersChecker(int number_of_temporal_layers, >-+ uint8_t initial_tl0_pic_idx); >-+ bool CheckTemporalConfig( >-+ bool frame_is_keyframe, >-+ const TemporalLayers::FrameConfig& frame_config) override; >-+ >-+ private: >-+ struct BufferState { >-+ BufferState() >-+ : is_updated_this_cycle(false), is_keyframe(true), pattern_idx(0) {} >-+ >-+ bool is_updated_this_cycle; >-+ bool is_keyframe; >-+ uint8_t pattern_idx; >-+ }; >-+ const size_t num_layers_; >-+ std::vector<unsigned int> temporal_ids_; >-+ const std::vector<std::set<uint8_t>> temporal_dependencies_; >-+ BufferState last_; >-+ BufferState arf_; >-+ BufferState golden_; >-+ uint8_t pattern_idx_; >-+}; >-+ >- } // namespace webrtc >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_DEFAULT_TEMPORAL_LAYERS_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc >-index edab34c16dd..1c1d63f1f8d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/default_temporal_layers_unittest.cc >-@@ -8,19 +8,20 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#include "webrtc/modules/video_coding/codecs/vp8/default_temporal_layers.h" >-+#include "modules/video_coding/codecs/vp8/default_temporal_layers.h" >-+#include "modules/video_coding/codecs/vp8/vp8_impl.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "test/field_trial.h" >-+#include "test/gtest.h" >- #include "vpx/vp8cx.h" >- #include "vpx/vpx_encoder.h" >--#include "webrtc/modules/video_coding/codecs/vp8/vp8_impl.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/test/gtest.h" >- >- namespace webrtc { >-+namespace test { >- >- enum { >- kTemporalUpdateLast = VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF | >-- VP8_EFLAG_NO_REF_GF | >-- VP8_EFLAG_NO_REF_ARF, >-+ VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_REF_ARF, >- kTemporalUpdateGoldenWithoutDependency = >- VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_REF_ARF | VP8_EFLAG_NO_UPD_ARF | >- VP8_EFLAG_NO_UPD_LAST, >-@@ -31,16 +32,16 @@ enum { >- VP8_EFLAG_NO_UPD_LAST, >- kTemporalUpdateAltref = VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_LAST, >- kTemporalUpdateNone = VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF | >-- VP8_EFLAG_NO_UPD_LAST | >-- VP8_EFLAG_NO_UPD_ENTROPY, >-- kTemporalUpdateNoneNoRefAltRef = VP8_EFLAG_NO_REF_ARF | VP8_EFLAG_NO_UPD_GF | >-- VP8_EFLAG_NO_UPD_ARF | >-- VP8_EFLAG_NO_UPD_LAST | >-- VP8_EFLAG_NO_UPD_ENTROPY, >-- kTemporalUpdateNoneNoRefGolden = VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_UPD_GF | >-- VP8_EFLAG_NO_UPD_ARF | >-- VP8_EFLAG_NO_UPD_LAST | >-- VP8_EFLAG_NO_UPD_ENTROPY, >-+ VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_ENTROPY, >-+ kTemporalUpdateNoneNoRefAltRef = >-+ VP8_EFLAG_NO_REF_ARF | VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF | >-+ VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_ENTROPY, >-+ kTemporalUpdateNoneNoRefGolden = >-+ VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF | >-+ VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_ENTROPY, >-+ kTemporalUpdateNoneNoRefGoldenAltRef = >-+ VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_REF_ARF | >-+ VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_LAST | VP8_EFLAG_NO_UPD_ENTROPY, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef = >- VP8_EFLAG_NO_REF_GF | VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_LAST, >- kTemporalUpdateGoldenRefAltRef = VP8_EFLAG_NO_UPD_ARF | VP8_EFLAG_NO_UPD_LAST, >-@@ -52,13 +53,14 @@ enum { >- >- TEST(TemporalLayersTest, 2Layers) { >- DefaultTemporalLayers tl(2, 0); >-+ DefaultTemporalLayersChecker checker(2, 0); >- vpx_codec_enc_cfg_t cfg; >- CodecSpecificInfoVP8 vp8_info; >- tl.OnRatesUpdated(500, 500, 30); >- tl.UpdateConfiguration(&cfg); >- >- int expected_flags[16] = { >-- kTemporalUpdateLastAndGoldenRefAltRef, >-+ kTemporalUpdateLastRefAltRef, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef, >- kTemporalUpdateLastRefAltRef, >- kTemporalUpdateGoldenRefAltRef, >-@@ -66,7 +68,7 @@ TEST(TemporalLayersTest, 2Layers) { >- kTemporalUpdateGoldenRefAltRef, >- kTemporalUpdateLastRefAltRef, >- kTemporalUpdateNone, >-- kTemporalUpdateLastAndGoldenRefAltRef, >-+ kTemporalUpdateLastRefAltRef, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef, >- kTemporalUpdateLastRefAltRef, >- kTemporalUpdateGoldenRefAltRef, >-@@ -85,23 +87,28 @@ TEST(TemporalLayersTest, 2Layers) { >- uint32_t timestamp = 0; >- for (int i = 0; i < 16; ++i) { >- TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >-- EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); >-- tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); >-+ EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)) << i; >-+ tl.PopulateCodecSpecific(i == 0, tl_config, &vp8_info, 0); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(i == 0, tl_config)); >- EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); >-- EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id); >-+ EXPECT_EQ(i == 0 || expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync); >- timestamp += 3000; >- } >- } >- >- TEST(TemporalLayersTest, 3Layers) { >- DefaultTemporalLayers tl(3, 0); >-+ DefaultTemporalLayersChecker checker(3, 0); >- vpx_codec_enc_cfg_t cfg; >- CodecSpecificInfoVP8 vp8_info; >- tl.OnRatesUpdated(500, 500, 30); >- tl.UpdateConfiguration(&cfg); >- >- int expected_flags[16] = { >-- kTemporalUpdateLastAndGoldenRefAltRef, >-+ kTemporalUpdateLastRefAltRef, >- kTemporalUpdateNoneNoRefGolden, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef, >- kTemporalUpdateNone, >-@@ -109,7 +116,7 @@ TEST(TemporalLayersTest, 3Layers) { >- kTemporalUpdateNone, >- kTemporalUpdateGoldenRefAltRef, >- kTemporalUpdateNone, >-- kTemporalUpdateLastAndGoldenRefAltRef, >-+ kTemporalUpdateLastRefAltRef, >- kTemporalUpdateNoneNoRefGolden, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef, >- kTemporalUpdateNone, >-@@ -128,25 +135,67 @@ TEST(TemporalLayersTest, 3Layers) { >- unsigned int timestamp = 0; >- for (int i = 0; i < 16; ++i) { >- TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >-- EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); >-- tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); >-+ EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)) << i; >-+ tl.PopulateCodecSpecific(i == 0, tl_config, &vp8_info, 0); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(i == 0, tl_config)); >-+ EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id); >-+ EXPECT_EQ(i == 0 || expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync); >-+ timestamp += 3000; >-+ } >-+} >-+ >-+TEST(TemporalLayersTest, Alternative3Layers) { >-+ ScopedFieldTrials field_trial("WebRTC-UseShortVP8TL3Pattern/Enabled/"); >-+ DefaultTemporalLayers tl(3, 0); >-+ DefaultTemporalLayersChecker checker(3, 0); >-+ vpx_codec_enc_cfg_t cfg; >-+ CodecSpecificInfoVP8 vp8_info; >-+ tl.OnRatesUpdated(500, 500, 30); >-+ tl.UpdateConfiguration(&cfg); >-+ >-+ int expected_flags[8] = {kTemporalUpdateLast, >-+ kTemporalUpdateAltrefWithoutDependency, >-+ kTemporalUpdateGoldenWithoutDependency, >-+ kTemporalUpdateNone, >-+ kTemporalUpdateLast, >-+ kTemporalUpdateAltrefWithoutDependency, >-+ kTemporalUpdateGoldenWithoutDependency, >-+ kTemporalUpdateNone}; >-+ int expected_temporal_idx[8] = {0, 2, 1, 2, 0, 2, 1, 2}; >-+ >-+ bool expected_layer_sync[8] = {false, true, true, false, >-+ false, true, true, false}; >-+ >-+ unsigned int timestamp = 0; >-+ for (int i = 0; i < 8; ++i) { >-+ TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >-+ EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)) << i; >-+ tl.PopulateCodecSpecific(i == 0, tl_config, &vp8_info, 0); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(i == 0, tl_config)); >- EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); >-- EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id); >-+ EXPECT_EQ(i == 0 || expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync); >- timestamp += 3000; >- } >- } >- >- TEST(TemporalLayersTest, 4Layers) { >- DefaultTemporalLayers tl(4, 0); >-+ DefaultTemporalLayersChecker checker(4, 0); >- vpx_codec_enc_cfg_t cfg; >- CodecSpecificInfoVP8 vp8_info; >- tl.OnRatesUpdated(500, 500, 30); >- tl.UpdateConfiguration(&cfg); >- int expected_flags[16] = { >- kTemporalUpdateLast, >-- kTemporalUpdateNone, >-+ kTemporalUpdateNoneNoRefGoldenAltRef, >- kTemporalUpdateAltrefWithoutDependency, >-- kTemporalUpdateNone, >-+ kTemporalUpdateNoneNoRefGolden, >- kTemporalUpdateGoldenWithoutDependency, >- kTemporalUpdateNone, >- kTemporalUpdateAltref, >-@@ -163,30 +212,35 @@ TEST(TemporalLayersTest, 4Layers) { >- int expected_temporal_idx[16] = {0, 3, 2, 3, 1, 3, 2, 3, >- 0, 3, 2, 3, 1, 3, 2, 3}; >- >-- bool expected_layer_sync[16] = {false, true, true, true, true, true, >-- false, true, false, true, false, true, >-- false, true, false, true}; >-+ bool expected_layer_sync[16] = {false, true, true, false, true, false, >-+ false, false, false, false, false, false, >-+ false, false, false, false}; >- >- uint32_t timestamp = 0; >- for (int i = 0; i < 16; ++i) { >- TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >-- EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); >-- tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); >-+ EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)) << i; >-+ tl.PopulateCodecSpecific(i == 0, tl_config, &vp8_info, 0); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(i == 0, tl_config)); >- EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); >-- EXPECT_EQ(expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id); >-+ EXPECT_EQ(i == 0 || expected_layer_sync[i], vp8_info.layerSync); >-+ EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync); >- timestamp += 3000; >- } >- } >- >- TEST(TemporalLayersTest, KeyFrame) { >- DefaultTemporalLayers tl(3, 0); >-+ DefaultTemporalLayersChecker checker(3, 0); >- vpx_codec_enc_cfg_t cfg; >- CodecSpecificInfoVP8 vp8_info; >- tl.OnRatesUpdated(500, 500, 30); >- tl.UpdateConfiguration(&cfg); >- >- int expected_flags[8] = { >-- kTemporalUpdateLastAndGoldenRefAltRef, >-+ kTemporalUpdateLastRefAltRef, >- kTemporalUpdateNoneNoRefGolden, >- kTemporalUpdateGoldenWithoutDependencyRefAltRef, >- kTemporalUpdateNone, >-@@ -195,21 +249,161 @@ TEST(TemporalLayersTest, KeyFrame) { >- kTemporalUpdateGoldenRefAltRef, >- kTemporalUpdateNone, >- }; >-- int expected_temporal_idx[8] = {0, 0, 0, 0, 0, 0, 0, 2}; >-+ int expected_temporal_idx[8] = {0, 2, 1, 2, 0, 2, 1, 2}; >-+ bool expected_layer_sync[8] = {false, true, true, false, >-+ false, false, false, false}; >- >- uint32_t timestamp = 0; >- for (int i = 0; i < 7; ++i) { >- TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >-- EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)); >-+ EXPECT_EQ(expected_flags[i], VP8EncoderImpl::EncodeFlags(tl_config)) << i; >- tl.PopulateCodecSpecific(true, tl_config, &vp8_info, 0); >-- EXPECT_EQ(expected_temporal_idx[i], vp8_info.temporalIdx); >-- EXPECT_EQ(true, vp8_info.layerSync); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(true, tl_config)); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[i], tl_config.encoder_layer_id); >-+ EXPECT_EQ(0, vp8_info.temporalIdx) >-+ << "Key frame should always be packetized as layer 0"; >-+ EXPECT_EQ(expected_layer_sync[i], tl_config.layer_sync); >-+ EXPECT_TRUE(vp8_info.layerSync) << "Key frame should be marked layer sync."; >- timestamp += 3000; >- } >- TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp); >- EXPECT_EQ(expected_flags[7], VP8EncoderImpl::EncodeFlags(tl_config)); >- tl.PopulateCodecSpecific(false, tl_config, &vp8_info, 0); >-- EXPECT_EQ(expected_temporal_idx[7], vp8_info.temporalIdx); >-- EXPECT_EQ(true, vp8_info.layerSync); >-+ EXPECT_TRUE(checker.CheckTemporalConfig(false, tl_config)); >-+ EXPECT_NE(0, vp8_info.temporalIdx) >-+ << "To test something useful, this frame should not use layer 0."; >-+ EXPECT_EQ(expected_temporal_idx[7], vp8_info.temporalIdx) >-+ << "Non-keyframe, should use frame temporal index."; >-+ EXPECT_EQ(expected_temporal_idx[7], tl_config.packetizer_temporal_idx); >-+ EXPECT_EQ(expected_temporal_idx[7], tl_config.encoder_layer_id); >-+ EXPECT_FALSE(tl_config.layer_sync); >-+ EXPECT_TRUE(vp8_info.layerSync) << "Frame after keyframe should always be " >-+ "marked layer sync since it only depends " >-+ "on the base layer."; >-+} >-+ >-+class TemporalLayersReferenceTest : public ::testing::TestWithParam<int> { >-+ public: >-+ TemporalLayersReferenceTest() >-+ : timestamp_(1), >-+ last_sync_timestamp_(timestamp_), >-+ tl0_reference_(nullptr) {} >-+ virtual ~TemporalLayersReferenceTest() {} >-+ >-+ protected: >-+ static const int kMaxPatternLength = 32; >-+ >-+ struct BufferState { >-+ BufferState() : BufferState(-1, 0, false) {} >-+ BufferState(int temporal_idx, uint32_t timestamp, bool sync) >-+ : temporal_idx(temporal_idx), timestamp(timestamp), sync(sync) {} >-+ int temporal_idx; >-+ uint32_t timestamp; >-+ bool sync; >-+ }; >-+ >-+ bool UpdateSyncRefState(const TemporalLayers::BufferFlags& flags, >-+ BufferState* buffer_state) { >-+ if (flags & TemporalLayers::kReference) { >-+ if (buffer_state->temporal_idx == -1) >-+ return true; // References key-frame. >-+ if (buffer_state->temporal_idx == 0) { >-+ // No more than one reference to TL0 frame. >-+ EXPECT_EQ(nullptr, tl0_reference_); >-+ tl0_reference_ = buffer_state; >-+ return true; >-+ } >-+ return false; // References higher layer. >-+ } >-+ return true; // No reference, does not affect sync frame status. >-+ } >-+ >-+ void ValidateReference(const TemporalLayers::BufferFlags& flags, >-+ const BufferState& buffer_state, >-+ int temporal_layer) { >-+ if (flags & TemporalLayers::kReference) { >-+ if (temporal_layer > 0 && buffer_state.timestamp > 0) { >-+ // Check that high layer reference does not go past last sync frame. >-+ EXPECT_GE(buffer_state.timestamp, last_sync_timestamp_); >-+ } >-+ // No reference to buffer in higher layer. >-+ EXPECT_LE(buffer_state.temporal_idx, temporal_layer); >-+ } >-+ } >-+ >-+ uint32_t timestamp_ = 1; >-+ uint32_t last_sync_timestamp_ = timestamp_; >-+ BufferState* tl0_reference_; >-+ >-+ BufferState last_state; >-+ BufferState golden_state; >-+ BufferState altref_state; >-+}; >-+ >-+INSTANTIATE_TEST_CASE_P(DefaultTemporalLayersTest, >-+ TemporalLayersReferenceTest, >-+ ::testing::Range(1, kMaxTemporalStreams + 1)); >-+ >-+TEST_P(TemporalLayersReferenceTest, ValidFrameConfigs) { >-+ const int num_layers = GetParam(); >-+ DefaultTemporalLayers tl(num_layers, 0); >-+ vpx_codec_enc_cfg_t cfg; >-+ tl.OnRatesUpdated(500, 500, 30); >-+ tl.UpdateConfiguration(&cfg); >-+ >-+ // Run through the pattern and store the frame dependencies, plus keep track >-+ // of the buffer state; which buffers references which temporal layers (if >-+ // (any). If a given buffer is never updated, it is legal to reference it >-+ // even for sync frames. In order to be general, don't assume TL0 always >-+ // updates |last|. >-+ std::vector<TemporalLayers::FrameConfig> tl_configs(kMaxPatternLength); >-+ for (int i = 0; i < kMaxPatternLength; ++i) { >-+ TemporalLayers::FrameConfig tl_config = tl.UpdateLayerConfig(timestamp_++); >-+ EXPECT_FALSE(tl_config.drop_frame); >-+ tl_configs.push_back(tl_config); >-+ int temporal_idx = tl_config.encoder_layer_id; >-+ // For the default layers, always keep encoder and rtp layers in sync. >-+ EXPECT_EQ(tl_config.packetizer_temporal_idx, temporal_idx); >-+ >-+ // Determine if this frame is in a higher layer but references only TL0 >-+ // or untouched buffers, if so verify it is marked as a layer sync. >-+ bool is_sync_frame = true; >-+ tl0_reference_ = nullptr; >-+ if (temporal_idx <= 0) { >-+ is_sync_frame = false; // TL0 by definition not a sync frame. >-+ } else if (!UpdateSyncRefState(tl_config.last_buffer_flags, &last_state)) { >-+ is_sync_frame = false; >-+ } else if (!UpdateSyncRefState(tl_config.golden_buffer_flags, >-+ &golden_state)) { >-+ is_sync_frame = false; >-+ } else if (!UpdateSyncRefState(tl_config.arf_buffer_flags, &altref_state)) { >-+ is_sync_frame = false; >-+ } >-+ if (is_sync_frame) { >-+ // Cache timestamp for last found sync frame, so that we can verify no >-+ // references back past this frame. >-+ ASSERT_TRUE(tl0_reference_); >-+ last_sync_timestamp_ = tl0_reference_->timestamp; >-+ } >-+ EXPECT_EQ(tl_config.layer_sync, is_sync_frame); >-+ >-+ // Validate no reference from lower to high temporal layer, or backwards >-+ // past last reference frame. >-+ ValidateReference(tl_config.last_buffer_flags, last_state, temporal_idx); >-+ ValidateReference(tl_config.golden_buffer_flags, golden_state, >-+ temporal_idx); >-+ ValidateReference(tl_config.arf_buffer_flags, altref_state, temporal_idx); >-+ >-+ // Update the current layer state. >-+ BufferState state = {temporal_idx, timestamp_, is_sync_frame}; >-+ if (tl_config.last_buffer_flags & TemporalLayers::kUpdate) >-+ last_state = state; >-+ if (tl_config.golden_buffer_flags & TemporalLayers::kUpdate) >-+ golden_state = state; >-+ if (tl_config.arf_buffer_flags & TemporalLayers::kUpdate) >-+ altref_state = state; >-+ } >- } >-+} // namespace test >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >-index c9e45ee5b65..06003613adf 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8.h >-@@ -10,28 +10,30 @@ >- * WEBRTC VP8 wrapper interface >- */ >- >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >- >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >-+#include <memory> >-+ >-+#include "modules/video_coding/include/video_codec_interface.h" >- >- namespace webrtc { >- >- class VP8Encoder : public VideoEncoder { >- public: >- static bool IsSupported(); >-- static VP8Encoder* Create(); >-+ static std::unique_ptr<VP8Encoder> Create(); >- >- virtual ~VP8Encoder() {} >- }; // end of VP8Encoder class >- >- class VP8Decoder : public VideoDecoder { >- public: >-- static bool IsSupported(); >-- static VP8Decoder* Create(); >-+ static bool IsSupported(); >-+ static std::unique_ptr<VP8Decoder> Create(); >- >- virtual ~VP8Decoder() {} >- }; // end of VP8Decoder class >- } // namespace webrtc >- >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h >-index 7a27e4429a9..dff70ac3328 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h >-@@ -8,17 +8,17 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >- >--#include "webrtc/common_types.h" >-+#include "common_types.h" // NOLINT(build/include) >- >- namespace webrtc { >- >- // Ratio allocation between temporal streams: >- // Values as required for the VP8 codec (accumulating). >- static const float >-- kVp8LayerRateAlloction[kMaxTemporalStreams][kMaxTemporalStreams] = { >-+ kVp8LayerRateAlloction[kMaxSimulcastStreams][kMaxTemporalStreams] = { >- {1.0f, 1.0f, 1.0f, 1.0f}, // 1 layer >- {0.6f, 1.0f, 1.0f, 1.0f}, // 2 layers {60%, 40%} >- {0.4f, 0.6f, 1.0f, 1.0f}, // 3 layers {40%, 20%, 40%} >-@@ -26,4 +26,4 @@ static const float >- }; >- >- } // namespace webrtc >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_COMMON_TYPES_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_globals.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_globals.h >-index 938e1991269..1fab5f45a6f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_globals.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/include/vp8_globals.h >-@@ -11,10 +11,10 @@ >- // This file contains codec dependent definitions that are needed in >- // order to compile the WebRTC codebase, even if this codec is not used. >- >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >- >--#include "webrtc/modules/video_coding/codecs/interface/common_constants.h" >-+#include "modules/video_coding/codecs/interface/common_constants.h" >- >- namespace webrtc { >- >-@@ -46,4 +46,4 @@ struct RTPVideoHeaderVP8 { >- >- } // namespace webrtc >- >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_INCLUDE_VP8_GLOBALS_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc >-index a30679a36cf..782dc772fca 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.cc >-@@ -1,30 +1,32 @@ >- /* Copyright (c) 2013 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. >--*/ >-+ * >-+ * 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 "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h" >-+#include "modules/video_coding/codecs/vp8/screenshare_layers.h" >- >- #include <stdlib.h> >- >- #include <algorithm> >-+#include <memory> >- >--#include "webrtc/base/checks.h" >--#include "vpx/vpx_encoder.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "rtc_base/checks.h" >-+#include "rtc_base/logging.h" >-+#include "system_wrappers/include/clock.h" >-+#include "system_wrappers/include/metrics.h" >- #include "vpx/vp8cx.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/system_wrappers/include/clock.h" >--#include "webrtc/system_wrappers/include/metrics.h" >-+#include "vpx/vpx_encoder.h" >- >- namespace webrtc { >- >- static const int kOneSecond90Khz = 90000; >--static const int kMinTimeBetweenSyncs = kOneSecond90Khz * 5; >--static const int kMaxTimeBetweenSyncs = kOneSecond90Khz * 10; >-+static const int kMinTimeBetweenSyncs = kOneSecond90Khz * 2; >-+static const int kMaxTimeBetweenSyncs = kOneSecond90Khz * 4; >- static const int kQpDeltaThresholdForSync = 8; >- static const int kMinBitrateKbpsForQpBoost = 500; >- >-@@ -54,6 +56,23 @@ webrtc::TemporalLayers* ScreenshareTemporalLayersFactory::Create( >- return tl; >- } >- >-+std::unique_ptr<webrtc::TemporalLayersChecker> >-+ScreenshareTemporalLayersFactory::CreateChecker( >-+ int simulcast_id, >-+ int temporal_layers, >-+ uint8_t initial_tl0_pic_idx) const { >-+ webrtc::TemporalLayersChecker* tlc; >-+ if (simulcast_id == 0) { >-+ tlc = >-+ new webrtc::TemporalLayersChecker(temporal_layers, initial_tl0_pic_idx); >-+ } else { >-+ TemporalLayersFactory rt_tl_factory; >-+ return rt_tl_factory.CreateChecker(simulcast_id, temporal_layers, >-+ initial_tl0_pic_idx); >-+ } >-+ return std::unique_ptr<webrtc::TemporalLayersChecker>(tlc); >-+} >-+ >- ScreenshareLayers::ScreenshareLayers(int num_temporal_layers, >- uint8_t initial_tl0_pic_idx, >- Clock* clock) >-@@ -79,12 +98,6 @@ ScreenshareLayers::~ScreenshareLayers() { >- UpdateHistograms(); >- } >- >--int ScreenshareLayers::GetTemporalLayerId( >-- const TemporalLayers::FrameConfig& tl_config) const { >-- // Codec does not use temporal layers for screenshare. >-- return 0; >--} >-- >- uint8_t ScreenshareLayers::Tl0PicIdx() const { >- return tl0_pic_idx_; >- } >-@@ -96,7 +109,6 @@ TemporalLayers::FrameConfig ScreenshareLayers::UpdateLayerConfig( >- // TODO(pbos): Consider updating only last, and not all buffers. >- TemporalLayers::FrameConfig tl_config( >- kReferenceAndUpdate, kReferenceAndUpdate, kReferenceAndUpdate); >-- tl_config.pattern_idx = static_cast<int>(TemporalLayerState::kTl1); >- return tl_config; >- } >- >-@@ -152,11 +164,17 @@ TemporalLayers::FrameConfig ScreenshareLayers::UpdateLayerConfig( >- last_emitted_tl0_timestamp_ = unwrapped_timestamp; >- break; >- case 1: >-- if (TimeToSync(unwrapped_timestamp)) { >-- last_sync_timestamp_ = unwrapped_timestamp; >-- layer_state = TemporalLayerState::kTl1Sync; >-+ if (layers_[1].state != TemporalLayer::State::kDropped) { >-+ if (TimeToSync(unwrapped_timestamp)) { >-+ last_sync_timestamp_ = unwrapped_timestamp; >-+ layer_state = TemporalLayerState::kTl1Sync; >-+ } else { >-+ layer_state = TemporalLayerState::kTl1; >-+ } >- } else { >-- layer_state = TemporalLayerState::kTl1; >-+ layer_state = last_sync_timestamp_ == unwrapped_timestamp >-+ ? TemporalLayerState::kTl1Sync >-+ : TemporalLayerState::kTl1; >- } >- break; >- case -1: >-@@ -178,21 +196,24 @@ TemporalLayers::FrameConfig ScreenshareLayers::UpdateLayerConfig( >- // TL0 only references and updates 'last'. >- tl_config = >- TemporalLayers::FrameConfig(kReferenceAndUpdate, kNone, kNone); >-+ tl_config.packetizer_temporal_idx = 0; >- break; >- case TemporalLayerState::kTl1: >- // TL1 references both 'last' and 'golden' but only updates 'golden'. >- tl_config = >- TemporalLayers::FrameConfig(kReference, kReferenceAndUpdate, kNone); >-+ tl_config.packetizer_temporal_idx = 1; >- break; >- case TemporalLayerState::kTl1Sync: >- // Predict from only TL0 to allow participants to switch to the high >- // bitrate stream. Updates 'golden' so that TL1 can continue to refer to >- // and update 'golden' from this point on. >- tl_config = TemporalLayers::FrameConfig(kReference, kUpdate, kNone); >-+ tl_config.packetizer_temporal_idx = 1; >- break; >- } >- >-- tl_config.pattern_idx = static_cast<int>(layer_state); >-+ tl_config.layer_sync = layer_state == TemporalLayerState::kTl1Sync; >- return tl_config; >- } >- >-@@ -269,36 +290,24 @@ void ScreenshareLayers::PopulateCodecSpecific( >- const TemporalLayers::FrameConfig& tl_config, >- CodecSpecificInfoVP8* vp8_info, >- uint32_t timestamp) { >-- int64_t unwrapped_timestamp = time_wrap_handler_.Unwrap(timestamp); >- if (number_of_temporal_layers_ == 1) { >- vp8_info->temporalIdx = kNoTemporalIdx; >- vp8_info->layerSync = false; >- vp8_info->tl0PicIdx = kNoTl0PicIdx; >- } else { >-- TemporalLayerState layer_state = >-- static_cast<TemporalLayerState>(tl_config.pattern_idx); >-- switch (layer_state) { >-- case TemporalLayerState::kDrop: >-- RTC_NOTREACHED(); >-- break; >-- case TemporalLayerState::kTl0: >-- vp8_info->temporalIdx = 0; >-- break; >-- case TemporalLayerState::kTl1: >-- case TemporalLayerState::kTl1Sync: >-- vp8_info->temporalIdx = 1; >-- break; >-- } >-+ int64_t unwrapped_timestamp = time_wrap_handler_.Unwrap(timestamp); >-+ vp8_info->temporalIdx = tl_config.packetizer_temporal_idx; >-+ vp8_info->layerSync = tl_config.layer_sync; >- if (frame_is_keyframe) { >- vp8_info->temporalIdx = 0; >- last_sync_timestamp_ = unwrapped_timestamp; >-+ vp8_info->layerSync = true; >- } else if (last_base_layer_sync_ && vp8_info->temporalIdx != 0) { >- // Regardless of pattern the frame after a base layer sync will always >- // be a layer sync. >- last_sync_timestamp_ = unwrapped_timestamp; >-+ vp8_info->layerSync = true; >- } >-- vp8_info->layerSync = last_sync_timestamp_ != -1 && >-- last_sync_timestamp_ == unwrapped_timestamp; >- if (vp8_info->temporalIdx == 0) { >- tl0_pic_idx_++; >- } >-@@ -443,8 +452,9 @@ void ScreenshareLayers::UpdateHistograms() { >- int total_frames = stats_.num_tl0_frames_ + stats_.num_tl1_frames_; >- RTC_HISTOGRAM_COUNTS_10000( >- "WebRTC.Video.Screenshare.FramesPerDrop", >-- (stats_.num_dropped_frames_ == 0 ? 0 : total_frames / >-- stats_.num_dropped_frames_)); >-+ (stats_.num_dropped_frames_ == 0 >-+ ? 0 >-+ : total_frames / stats_.num_dropped_frames_)); >- RTC_HISTOGRAM_COUNTS_10000( >- "WebRTC.Video.Screenshare.FramesPerOvershoot", >- (stats_.num_overshoots_ == 0 ? 0 >-@@ -465,5 +475,4 @@ void ScreenshareLayers::UpdateHistograms() { >- } >- } >- } >-- >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h >-index 873846e8b22..81db90abe6b 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h >-@@ -1,21 +1,21 @@ >- /* Copyright (c) 2013 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. >--*/ >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >-+ * >-+ * 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. >-+ */ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >- >- #include <vector> >- >--#include "webrtc/base/rate_statistics.h" >--#include "webrtc/base/timeutils.h" >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >--#include "webrtc/modules/video_coding/utility/frame_dropper.h" >--#include "webrtc/typedefs.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "modules/video_coding/utility/frame_dropper.h" >-+#include "rtc_base/rate_statistics.h" >-+#include "rtc_base/timeutils.h" >-+#include "typedefs.h" // NOLINT(build/include) >- >- namespace webrtc { >- >-@@ -54,9 +54,6 @@ class ScreenshareLayers : public TemporalLayers { >- >- void FrameEncoded(unsigned int size, int qp) override; >- >-- int GetTemporalLayerId( >-- const TemporalLayers::FrameConfig& tl_config) const override; >-- >- uint8_t Tl0PicIdx() const override; >- >- private: >-@@ -127,4 +124,4 @@ class ScreenshareLayers : public TemporalLayers { >- }; >- } // namespace webrtc >- >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_SCREENSHARE_LAYERS_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc >-index 9cac0b0a420..754235ab0b3 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/screenshare_layers_unittest.cc >-@@ -13,14 +13,14 @@ >- >- #include "vpx/vp8cx.h" >- #include "vpx/vpx_encoder.h" >--#include "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h" >--#include "webrtc/modules/video_coding/codecs/vp8/vp8_impl.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/modules/video_coding/utility/mock/mock_frame_dropper.h" >--#include "webrtc/system_wrappers/include/clock.h" >--#include "webrtc/system_wrappers/include/metrics.h" >--#include "webrtc/system_wrappers/include/metrics_default.h" >--#include "webrtc/test/gtest.h" >-+#include "modules/video_coding/codecs/vp8/screenshare_layers.h" >-+#include "modules/video_coding/codecs/vp8/vp8_impl.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "modules/video_coding/utility/mock/mock_frame_dropper.h" >-+#include "system_wrappers/include/clock.h" >-+#include "system_wrappers/include/metrics.h" >-+#include "system_wrappers/include/metrics_default.h" >-+#include "test/gtest.h" >- >- using ::testing::_; >- using ::testing::ElementsAre; >-@@ -35,8 +35,8 @@ const int kDefaultQp = 54; >- const int kDefaultTl0BitrateKbps = 200; >- const int kDefaultTl1BitrateKbps = 2000; >- const int kFrameRate = 5; >--const int kSyncPeriodSeconds = 5; >--const int kMaxSyncPeriodSeconds = 10; >-+const int kSyncPeriodSeconds = 2; >-+const int kMaxSyncPeriodSeconds = 4; >- >- // Expected flags for corresponding temporal layers. >- const int kTl0Flags = VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF | >-@@ -71,6 +71,10 @@ class ScreenshareLayerTest : public ::testing::Test { >- >- int ConfigureFrame(bool key_frame) { >- tl_config_ = layers_->UpdateLayerConfig(timestamp_); >-+ EXPECT_EQ(0, tl_config_.encoder_layer_id) >-+ << "ScreenshareLayers always encodes using the bitrate allocator for " >-+ "layer 0, but may reference different buffers and packetize " >-+ "differently."; >- if (tl_config_.drop_frame) { >- return -1; >- } >-@@ -126,18 +130,29 @@ class ScreenshareLayerTest : public ::testing::Test { >- >- // Adds frames until we get one in the specified temporal layer. The last >- // FrameEncoded() call will be omitted and needs to be done by the caller. >-- void SkipUntilTl(int layer) { >-- for (int i = 0; i < 5; ++i) { >-- ConfigureFrame(false); >-+ // Returns the flags for the last frame. >-+ int SkipUntilTl(int layer) { >-+ return SkipUntilTlAndSync(layer, rtc::nullopt); >-+ } >-+ >-+ // Same as SkipUntilTl, but also waits until the sync bit condition is met. >-+ int SkipUntilTlAndSync(int layer, rtc::Optional<bool> sync) { >-+ int flags = 0; >-+ const int kMaxFramesToSkip = >-+ 1 + (sync.value_or(false) ? kMaxSyncPeriodSeconds : 1) * kFrameRate; >-+ for (int i = 0; i < kMaxFramesToSkip; ++i) { >-+ flags = ConfigureFrame(false); >- timestamp_ += kTimestampDelta5Fps; >-- if (vp8_info_.temporalIdx != layer) { >-+ if (vp8_info_.temporalIdx != layer || >-+ (sync && *sync != vp8_info_.layerSync)) { >- layers_->FrameEncoded(frame_size_, kDefaultQp); >- } else { >-- // Found frame form sought layer. >-- return; >-+ // Found frame from sought after layer. >-+ return flags; >- } >- } >- ADD_FAILURE() << "Did not get a frame of TL" << layer << " in time."; >-+ return -1; >- } >- >- int min_qp_; >-@@ -562,4 +577,31 @@ TEST_F(ScreenshareLayerTest, RespectsConfiguredFramerate) { >- // Allow for some rounding errors in the measurements. >- EXPECT_NEAR(num_discarded_frames, num_input_frames / 2, 2); >- } >-+ >-+TEST_F(ScreenshareLayerTest, 2LayersSyncAtOvershootDrop) { >-+ // Run grace period so we have existing frames in both TL0 and Tl1. >-+ EXPECT_TRUE(RunGracePeriod()); >-+ >-+ // Move ahead until we have a sync frame in TL1. >-+ EXPECT_EQ(kTl1SyncFlags, SkipUntilTlAndSync(1, true)); >-+ ASSERT_TRUE(vp8_info_.layerSync); >-+ >-+ // Simulate overshoot of this frame. >-+ layers_->FrameEncoded(0, -1); >-+ >-+ // Reencode, frame config, flags and codec specific info should remain the >-+ // same as for the dropped frame. >-+ timestamp_ -= kTimestampDelta5Fps; // Undo last timestamp increment. >-+ TemporalLayers::FrameConfig new_tl_config = >-+ layers_->UpdateLayerConfig(timestamp_); >-+ EXPECT_EQ(tl_config_, new_tl_config); >-+ >-+ config_updated_ = layers_->UpdateConfiguration(&cfg_); >-+ EXPECT_EQ(kTl1SyncFlags, VP8EncoderImpl::EncodeFlags(tl_config_)); >-+ >-+ CodecSpecificInfoVP8 new_vp8_info; >-+ layers_->PopulateCodecSpecific(false, tl_config_, &new_vp8_info, timestamp_); >-+ EXPECT_TRUE(new_vp8_info.layerSync); >-+} >-+ >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.cc >-index 39c43c9b6d0..b2b3334815f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.cc >-@@ -8,14 +8,14 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#include "webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h" >-+#include "modules/video_coding/codecs/vp8/simulcast_rate_allocator.h" >- >- #include <algorithm> >- #include <memory> >- #include <vector> >- #include <utility> >- >--#include "webrtc/base/checks.h" >-+#include "rtc_base/checks.h" >- >- namespace webrtc { >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h >-index e558290e6b4..929abba4132 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h >-@@ -8,18 +8,18 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >- >- #include <stdint.h> >- >- #include <map> >- #include <memory> >- >--#include "webrtc/api/video_codecs/video_encoder.h" >--#include "webrtc/base/constructormagic.h" >--#include "webrtc/common_video/include/video_bitrate_allocator.h" >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "api/video_codecs/video_encoder.h" >-+#include "common_video/include/video_bitrate_allocator.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "rtc_base/constructormagic.h" >- >- namespace webrtc { >- >-@@ -48,4 +48,4 @@ class SimulcastRateAllocator : public VideoBitrateAllocator, >- >- } // namespace webrtc >- >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_RATE_ALLOCATOR_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc >-index 9d919cdd5bd..b1dd794f291 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.cc >-@@ -8,19 +8,19 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#include "webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h" >-+#include "modules/video_coding/codecs/vp8/simulcast_test_utility.h" >- >- namespace webrtc { >- namespace testing { >- >- class TestVp8Impl : public TestVp8Simulcast { >-- public: >-- TestVp8Impl() >-- : TestVp8Simulcast(VP8Encoder::Create(), VP8Decoder::Create()) {} >-- >- protected: >-- virtual void SetUp() { TestVp8Simulcast::SetUp(); } >-- virtual void TearDown() { TestVp8Simulcast::TearDown(); } >-+ std::unique_ptr<VP8Encoder> CreateEncoder() override { >-+ return VP8Encoder::Create(); >-+ } >-+ std::unique_ptr<VP8Decoder> CreateDecoder() override { >-+ return VP8Decoder::Create(); >-+ } >- }; >- >- TEST_F(TestVp8Impl, TestKeyFrameRequestsOnAllStreams) { >-@@ -71,10 +71,6 @@ TEST_F(TestVp8Impl, TestSaptioTemporalLayers333PatternEncoder) { >- TestVp8Simulcast::TestSaptioTemporalLayers333PatternEncoder(); >- } >- >--TEST_F(TestVp8Impl, TestSpatioTemporalLayers321PatternEncoder) { >-- TestVp8Simulcast::TestSpatioTemporalLayers321PatternEncoder(); >--} >-- >- TEST_F(TestVp8Impl, TestStrideEncodeDecode) { >- TestVp8Simulcast::TestStrideEncodeDecode(); >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h >-index f0561076a0e..dad718cd0f3 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/temporal_layers.h >-@@ -1,21 +1,21 @@ >- /* Copyright (c) 2011 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. >--*/ >-+ * >-+ * 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. >-+ */ >- /* >--* This file defines the interface for doing temporal layers with VP8. >--*/ >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >-+ * This file defines the interface for doing temporal layers with VP8. >-+ */ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >- >- #include <vector> >-+#include <memory> >- >--#include "webrtc/typedefs.h" >-- >-+#include "typedefs.h" // NOLINT(build/include) >- struct vpx_codec_enc_cfg; >- typedef struct vpx_codec_enc_cfg vpx_codec_enc_cfg_t; >- >-@@ -47,13 +47,34 @@ class TemporalLayers { >- BufferFlags golden_buffer_flags; >- BufferFlags arf_buffer_flags; >- >-- // TODO(pbos): Consider breaking these out of here and returning only a >-- // pattern index that needs to be returned to fill CodecSpecificInfoVP8 or >-- // EncodeFlags. >-+ // The encoder layer ID is used to utilize the correct bitrate allocator >-+ // inside the encoder. It does not control references nor determine which >-+ // "actual" temporal layer this is. The packetizer temporal index determines >-+ // which layer the encoded frame should be packetized into. >-+ // Normally these are the same, but current temporal-layer strategies for >-+ // screenshare use one bitrate allocator for all layers, but attempt to >-+ // packetize / utilize references to split a stream into multiple layers, >-+ // with different quantizer settings, to hit target bitrate. >-+ // TODO(pbos): Screenshare layers are being reconsidered at the time of >-+ // writing, we might be able to remove this distinction, and have a temporal >-+ // layer imply both (the normal case). >-+ int encoder_layer_id; >-+ int packetizer_temporal_idx; >-+ >- bool layer_sync; >-+ >- bool freeze_entropy; >- >-- int pattern_idx; >-+ bool operator==(const FrameConfig& o) const { >-+ return drop_frame == o.drop_frame && >-+ last_buffer_flags == o.last_buffer_flags && >-+ golden_buffer_flags == o.golden_buffer_flags && >-+ arf_buffer_flags == o.arf_buffer_flags && >-+ layer_sync == o.layer_sync && freeze_entropy == o.freeze_entropy && >-+ encoder_layer_id == o.encoder_layer_id && >-+ packetizer_temporal_idx == o.packetizer_temporal_idx; >-+ } >-+ bool operator!=(const FrameConfig& o) const { return !(*this == o); } >- >- private: >- FrameConfig(BufferFlags last, >-@@ -91,18 +112,27 @@ class TemporalLayers { >- // Returns the current tl0_pic_idx, so it can be reused in future >- // instantiations. >- virtual uint8_t Tl0PicIdx() const = 0; >-- virtual int GetTemporalLayerId( >-- const TemporalLayers::FrameConfig& tl_config) const = 0; >- }; >- >- class TemporalLayersListener; >-+class TemporalLayersChecker; >-+ >- class TemporalLayersFactory { >- public: >- TemporalLayersFactory() : listener_(nullptr) {} >- virtual ~TemporalLayersFactory() {} >-- virtual TemporalLayers* Create(int /* simulcast_id */, >-- int /* temporal_layers */, >-- uint8_t /* initial_tl0_pic_idx */) const { return nullptr; } >-+ virtual TemporalLayers* Create(int simulcast_id, >-+ int temporal_layers, >-+ uint8_t initial_tl0_pic_idx) const; >-+ >-+ // Creates helper class which performs online checks of a correctness of >-+ // temporal layers dependencies returned by TemporalLayers class created in >-+ // the same factory. >-+ virtual std::unique_ptr<TemporalLayersChecker> CreateChecker( >-+ int simulcast_id, >-+ int temporal_layers, >-+ uint8_t initial_tl0_pic_idx) const; >-+ >- void SetListener(TemporalLayersListener* listener); >- >- protected: >-@@ -117,6 +147,14 @@ class ScreenshareTemporalLayersFactory : public webrtc::TemporalLayersFactory { >- webrtc::TemporalLayers* Create(int simulcast_id, >- int num_temporal_layers, >- uint8_t initial_tl0_pic_idx) const override; >-+ >-+ // Creates helper class which performs online checks of a correctness of >-+ // temporal layers dependencies returned by TemporalLayers class created in >-+ // the same factory. >-+ std::unique_ptr<webrtc::TemporalLayersChecker> CreateChecker( >-+ int simulcast_id, >-+ int temporal_layers, >-+ uint8_t initial_tl0_pic_idx) const override; >- }; >- >- class TemporalLayersListener { >-@@ -128,5 +166,40 @@ class TemporalLayersListener { >- TemporalLayers* layers) = 0; >- }; >- >-+// Used only inside RTC_DCHECK(). It checks correctness of temporal layers >-+// dependencies and sync bits. The only method of this class is called after >-+// each UpdateLayersConfig() of a corresponding TemporalLayers class. >-+class TemporalLayersChecker { >-+ public: >-+ TemporalLayersChecker(int num_temporal_layers, uint8_t initial_tl0_pic_idx); >-+ virtual ~TemporalLayersChecker() {} >-+ >-+ virtual bool CheckTemporalConfig( >-+ bool frame_is_keyframe, >-+ const TemporalLayers::FrameConfig& frame_config); >-+ >-+ private: >-+ struct BufferState { >-+ BufferState() : is_keyframe(true), temporal_layer(0), sequence_number(0) {} >-+ bool is_keyframe; >-+ uint8_t temporal_layer; >-+ uint32_t sequence_number; >-+ }; >-+ bool CheckAndUpdateBufferState(BufferState* state, >-+ bool* need_sync, >-+ bool frame_is_keyframe, >-+ uint8_t temporal_layer, >-+ webrtc::TemporalLayers::BufferFlags flags, >-+ uint32_t sequence_number, >-+ uint32_t* lowest_sequence_referenced); >-+ BufferState last_; >-+ BufferState arf_; >-+ BufferState golden_; >-+ int num_temporal_layers_; >-+ uint32_t sequence_number_; >-+ uint32_t last_sync_sequence_number_; >-+ uint32_t last_tl0_sequence_number_; >-+}; >-+ >- } // namespace webrtc >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_TEMPORAL_LAYERS_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc >-index a3db4fdad69..5d6abec76d8 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc >-@@ -12,99 +12,88 @@ >- >- #include <memory> >- >--#include "webrtc/api/video/i420_buffer.h" >--#include "webrtc/base/checks.h" >--#include "webrtc/base/optional.h" >--#include "webrtc/base/timeutils.h" >--#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" >--#include "webrtc/modules/video_coding/codecs/test/video_codec_test.h" >--#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >--#include "webrtc/test/frame_utils.h" >--#include "webrtc/test/gtest.h" >--#include "webrtc/test/testsupport/fileutils.h" >-+#include "api/optional.h" >-+#include "api/video/i420_buffer.h" >-+#include "common_video/libyuv/include/webrtc_libyuv.h" >-+#include "modules/video_coding/codecs/test/video_codec_test.h" >-+#include "modules/video_coding/codecs/vp8/include/vp8.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "rtc_base/checks.h" >-+#include "rtc_base/timeutils.h" >-+#include "test/field_trial.h" >-+#include "test/frame_utils.h" >-+#include "test/gtest.h" >-+#include "test/testsupport/fileutils.h" >-+#include "test/video_codec_settings.h" >- >- namespace webrtc { >- >- namespace { >-+constexpr uint32_t kInitialTimestampRtp = 123; >-+constexpr int64_t kTestNtpTimeMs = 456; >-+constexpr int64_t kInitialTimestampMs = 789; >-+constexpr uint32_t kTimestampIncrement = 3000; >-+constexpr int kNumCores = 1; >-+constexpr size_t kMaxPayloadSize = 1440; >-+constexpr int kDefaultMinPixelsPerFrame = 320 * 180; >-+constexpr int kWidth = 172; >-+constexpr int kHeight = 144; >- >- void Calc16ByteAlignedStride(int width, int* stride_y, int* stride_uv) { >- *stride_y = 16 * ((width + 15) / 16); >- *stride_uv = 16 * ((width + 31) / 32); >- } >-- >--enum { kMaxWaitEncTimeMs = 100 }; >--enum { kMaxWaitDecTimeMs = 25 }; >-- >--constexpr uint32_t kTestTimestamp = 123; >--constexpr int64_t kTestNtpTimeMs = 456; >--constexpr uint32_t kTimestampIncrementPerFrame = 3000; >-- >- } // namespace >- >--// TODO(mikhal): Replace these with mocks. >--class Vp8UnitTestEncodeCompleteCallback : public webrtc::EncodedImageCallback { >-+class EncodedImageCallbackTestImpl : public webrtc::EncodedImageCallback { >- public: >-- Vp8UnitTestEncodeCompleteCallback(EncodedImage* frame, >-- CodecSpecificInfo* codec_specific_info, >-- unsigned int decoderSpecificSize, >-- void* decoderSpecificInfo) >-- : encoded_frame_(frame), >-- codec_specific_info_(codec_specific_info), >-- encode_complete_(false) {} >-- >-- Result OnEncodedImage(const EncodedImage& encoded_frame_, >-+ Result OnEncodedImage(const EncodedImage& encoded_frame, >- const CodecSpecificInfo* codec_specific_info, >-- const RTPFragmentationHeader* fragmentation) override; >-- bool EncodeComplete(); >-+ const RTPFragmentationHeader* fragmentation) override { >-+ EXPECT_GT(encoded_frame._length, 0u); >-+ VerifyQpParser(encoded_frame); >- >-- private: >-- EncodedImage* const encoded_frame_; >-- CodecSpecificInfo* const codec_specific_info_; >-- std::unique_ptr<uint8_t[]> frame_buffer_; >-- bool encode_complete_; >--}; >-+ if (encoded_frame_._size != encoded_frame._size) { >-+ delete[] encoded_frame_._buffer; >-+ frame_buffer_.reset(new uint8_t[encoded_frame._size]); >-+ } >-+ RTC_DCHECK(frame_buffer_); >-+ memcpy(frame_buffer_.get(), encoded_frame._buffer, encoded_frame._length); >-+ encoded_frame_ = encoded_frame; >-+ encoded_frame_._buffer = frame_buffer_.get(); >-+ >-+ // Skip |codec_name|, to avoid allocating. >-+ EXPECT_STREQ("libvpx", codec_specific_info->codec_name); >-+ EXPECT_EQ(kVideoCodecVP8, codec_specific_info->codecType); >-+ EXPECT_EQ(0u, codec_specific_info->codecSpecific.VP8.simulcastIdx); >-+ codec_specific_info_.codecType = codec_specific_info->codecType; >-+ codec_specific_info_.codecSpecific = codec_specific_info->codecSpecific; >-+ complete_ = true; >-+ return Result(Result::OK, 0); >-+ } >- >--webrtc::EncodedImageCallback::Result >--Vp8UnitTestEncodeCompleteCallback::OnEncodedImage( >-- const EncodedImage& encoded_frame, >-- const CodecSpecificInfo* codec_specific_info, >-- const RTPFragmentationHeader* fragmentation) { >-- if (encoded_frame_->_size < encoded_frame._length) { >-- delete[] encoded_frame_->_buffer; >-- frame_buffer_.reset(new uint8_t[encoded_frame._length]); >-- encoded_frame_->_buffer = frame_buffer_.get(); >-- encoded_frame_->_size = encoded_frame._length; >-+ void VerifyQpParser(const EncodedImage& encoded_frame) const { >-+ int qp; >-+ ASSERT_TRUE(vp8::GetQp(encoded_frame._buffer, encoded_frame._length, &qp)); >-+ EXPECT_EQ(encoded_frame.qp_, qp) << "Encoder QP != parsed bitstream QP."; >- } >-- memcpy(encoded_frame_->_buffer, encoded_frame._buffer, encoded_frame._length); >-- encoded_frame_->_length = encoded_frame._length; >-- encoded_frame_->_encodedWidth = encoded_frame._encodedWidth; >-- encoded_frame_->_encodedHeight = encoded_frame._encodedHeight; >-- encoded_frame_->_timeStamp = encoded_frame._timeStamp; >-- encoded_frame_->_frameType = encoded_frame._frameType; >-- encoded_frame_->_completeFrame = encoded_frame._completeFrame; >-- encoded_frame_->rotation_ = encoded_frame.rotation_; >-- encoded_frame_->qp_ = encoded_frame.qp_; >-- codec_specific_info_->codecType = codec_specific_info->codecType; >-- // Skip |codec_name|, to avoid allocating. >-- codec_specific_info_->codecSpecific = codec_specific_info->codecSpecific; >-- encode_complete_ = true; >-- return Result(Result::OK, 0); >--} >- >--bool Vp8UnitTestEncodeCompleteCallback::EncodeComplete() { >-- if (encode_complete_) { >-- encode_complete_ = false; >-- return true; >-+ bool EncodeComplete() { >-+ if (complete_) { >-+ complete_ = false; >-+ return true; >-+ } >-+ return false; >- } >-- return false; >--} >- >--class Vp8UnitTestDecodeCompleteCallback : public webrtc::DecodedImageCallback { >-+ EncodedImage encoded_frame_; >-+ CodecSpecificInfo codec_specific_info_; >-+ std::unique_ptr<uint8_t[]> frame_buffer_; >-+ bool complete_ = false; >-+}; >-+ >-+class DecodedImageCallbackTestImpl : public webrtc::DecodedImageCallback { >- public: >-- explicit Vp8UnitTestDecodeCompleteCallback(rtc::Optional<VideoFrame>* frame, >-- rtc::Optional<uint8_t>* qp) >-- : decoded_frame_(frame), decoded_qp_(qp), decode_complete(false) {} >- int32_t Decoded(VideoFrame& frame) override { >- RTC_NOTREACHED(); >- return -1; >-@@ -115,163 +104,158 @@ class Vp8UnitTestDecodeCompleteCallback : public webrtc::DecodedImageCallback { >- } >- void Decoded(VideoFrame& frame, >- rtc::Optional<int32_t> decode_time_ms, >-- rtc::Optional<uint8_t> qp) override; >-- bool DecodeComplete(); >-- >-- private: >-- rtc::Optional<VideoFrame>* decoded_frame_; >-- rtc::Optional<uint8_t>* decoded_qp_; >-- bool decode_complete; >--}; >-+ rtc::Optional<uint8_t> qp) override { >-+ EXPECT_GT(frame.width(), 0); >-+ EXPECT_GT(frame.height(), 0); >-+ EXPECT_TRUE(qp); >-+ frame_ = frame; >-+ qp_ = qp; >-+ complete_ = true; >-+ } >- >--bool Vp8UnitTestDecodeCompleteCallback::DecodeComplete() { >-- if (decode_complete) { >-- decode_complete = false; >-- return true; >-+ bool DecodeComplete() { >-+ if (complete_) { >-+ complete_ = false; >-+ return true; >-+ } >-+ return false; >- } >-- return false; >--} >- >--void Vp8UnitTestDecodeCompleteCallback::Decoded( >-- VideoFrame& frame, >-- rtc::Optional<int32_t> decode_time_ms, >-- rtc::Optional<uint8_t> qp) { >-- *decoded_frame_ = rtc::Optional<VideoFrame>(frame); >-- *decoded_qp_ = qp; >-- decode_complete = true; >--} >-+ rtc::Optional<VideoFrame> frame_; >-+ rtc::Optional<uint8_t> qp_; >-+ bool complete_ = false; >-+}; >- >- class TestVp8Impl : public ::testing::Test { >-+ public: >-+ TestVp8Impl() : TestVp8Impl("") {} >-+ explicit TestVp8Impl(const std::string& field_trials) >-+ : override_field_trials_(field_trials), >-+ encoder_(VP8Encoder::Create()), >-+ decoder_(VP8Decoder::Create()) {} >-+ virtual ~TestVp8Impl() {} >-+ >- protected: >- virtual void SetUp() { >-- encoder_.reset(VP8Encoder::Create()); >-- decoder_.reset(VP8Decoder::Create()); >-- memset(&codec_settings_, 0, sizeof(codec_settings_)); >-- encode_complete_callback_.reset(new Vp8UnitTestEncodeCompleteCallback( >-- &encoded_frame_, &codec_specific_info_, 0, nullptr)); >-- decode_complete_callback_.reset( >-- new Vp8UnitTestDecodeCompleteCallback(&decoded_frame_, &decoded_qp_)); >-- encoder_->RegisterEncodeCompleteCallback(encode_complete_callback_.get()); >-- decoder_->RegisterDecodeCompleteCallback(decode_complete_callback_.get()); >-+ encoder_->RegisterEncodeCompleteCallback(&encoded_cb_); >-+ decoder_->RegisterDecodeCompleteCallback(&decoded_cb_); >-+ SetupCodecSettings(); >-+ SetupInputFrame(); >-+ } >-+ >-+ void SetupInputFrame() { >- // Using a QCIF image (aligned stride (u,v planes) > width). >- // Processing only one frame. >-- source_file_ = fopen(test::ResourcePath("paris_qcif", "yuv").c_str(), "rb"); >-- ASSERT_TRUE(source_file_ != nullptr); >-+ FILE* file = fopen(test::ResourcePath("paris_qcif", "yuv").c_str(), "rb"); >-+ ASSERT_TRUE(file != nullptr); >- rtc::scoped_refptr<I420BufferInterface> compact_buffer( >-- test::ReadI420Buffer(kWidth, kHeight, source_file_)); >-+ test::ReadI420Buffer(kWidth, kHeight, file)); >- ASSERT_TRUE(compact_buffer); >-- codec_settings_.width = kWidth; >-- codec_settings_.height = kHeight; >-- const int kFramerate = 30; >-- codec_settings_.maxFramerate = kFramerate; >-+ >- // Setting aligned stride values. >- int stride_uv; >- int stride_y; >-- Calc16ByteAlignedStride(codec_settings_.width, &stride_y, &stride_uv); >-+ Calc16ByteAlignedStride(kWidth, &stride_y, &stride_uv); >- EXPECT_EQ(stride_y, 176); >- EXPECT_EQ(stride_uv, 96); >-- >- rtc::scoped_refptr<I420Buffer> stride_buffer( >- I420Buffer::Create(kWidth, kHeight, stride_y, stride_uv, stride_uv)); >- >- // No scaling in our case, just a copy, to add stride to the image. >- stride_buffer->ScaleFrom(*compact_buffer); >- >-- input_frame_.reset( >-- new VideoFrame(stride_buffer, kVideoRotation_0, 0)); >-- input_frame_->set_timestamp(kTestTimestamp); >-+ input_frame_.reset(new VideoFrame(stride_buffer, kInitialTimestampRtp, >-+ kInitialTimestampMs, kVideoRotation_0)); >-+ fclose(file); >- } >- >-- void SetUpEncodeDecode() { >-- codec_settings_.startBitrate = 300; >-+ void SetupCodecSettings() { >-+ webrtc::test::CodecSettings(kVideoCodecVP8, &codec_settings_); >- codec_settings_.maxBitrate = 4000; >-- codec_settings_.qpMax = 56; >-+ codec_settings_.width = kWidth; >-+ codec_settings_.height = kHeight; >- codec_settings_.VP8()->denoisingOn = true; >-+ codec_settings_.VP8()->frameDroppingOn = false; >-+ codec_settings_.VP8()->automaticResizeOn = false; >-+ codec_settings_.VP8()->complexity = kComplexityNormal; >- codec_settings_.VP8()->tl_factory = &tl_factory_; >-- codec_settings_.VP8()->numberOfTemporalLayers = 1; >-- >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->InitEncode(&codec_settings_, 1, 1440)); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->InitDecode(&codec_settings_, 1)); >- } >- >-- size_t WaitForEncodedFrame() const { >-- int64_t startTime = rtc::TimeMillis(); >-- while (rtc::TimeMillis() - startTime < kMaxWaitEncTimeMs) { >-- if (encode_complete_callback_->EncodeComplete()) { >-- return encoded_frame_._length; >-- } >-- } >-- return 0; >-+ void InitEncodeDecode() { >-+ EXPECT_EQ( >-+ WEBRTC_VIDEO_CODEC_OK, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-+ decoder_->InitDecode(&codec_settings_, kNumCores)); >- } >- >-- size_t WaitForDecodedFrame() const { >-- int64_t startTime = rtc::TimeMillis(); >-- while (rtc::TimeMillis() - startTime < kMaxWaitDecTimeMs) { >-- if (decode_complete_callback_->DecodeComplete()) { >-- return CalcBufferSize(VideoType::kI420, decoded_frame_->width(), >-- decoded_frame_->height()); >-- } >-- } >-- return 0; >-+ void EncodeFrame() { >-+ EXPECT_FALSE(encoded_cb_.EncodeComplete()); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-+ encoder_->Encode(*input_frame_, nullptr, nullptr)); >-+ EXPECT_TRUE(encoded_cb_.EncodeComplete()); >- } >- >- void ExpectFrameWith(int16_t picture_id, >- int tl0_pic_idx, >- uint8_t temporal_idx) { >-- ASSERT_TRUE(WaitForEncodedFrame()); >-- EXPECT_EQ(picture_id, codec_specific_info_.codecSpecific.VP8.pictureId); >-- EXPECT_EQ(tl0_pic_idx, codec_specific_info_.codecSpecific.VP8.tl0PicIdx); >-- EXPECT_EQ(temporal_idx, codec_specific_info_.codecSpecific.VP8.temporalIdx); >-+ EXPECT_EQ(picture_id % (1 << 15), >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.pictureId); >-+ EXPECT_EQ(tl0_pic_idx % (1 << 8), >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.tl0PicIdx); >-+ EXPECT_EQ(temporal_idx, >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.temporalIdx); >- } >- >-- const int kWidth = 172; >-- const int kHeight = 144; >-- >-- std::unique_ptr<Vp8UnitTestEncodeCompleteCallback> encode_complete_callback_; >-- std::unique_ptr<Vp8UnitTestDecodeCompleteCallback> decode_complete_callback_; >-- std::unique_ptr<uint8_t[]> source_buffer_; >-- FILE* source_file_; >-+ test::ScopedFieldTrials override_field_trials_; >-+ EncodedImageCallbackTestImpl encoded_cb_; >-+ DecodedImageCallbackTestImpl decoded_cb_; >- std::unique_ptr<VideoFrame> input_frame_; >-- std::unique_ptr<VideoEncoder> encoder_; >-- std::unique_ptr<VideoDecoder> decoder_; >-- EncodedImage encoded_frame_; >-- CodecSpecificInfo codec_specific_info_; >-- rtc::Optional<VideoFrame> decoded_frame_; >-- rtc::Optional<uint8_t> decoded_qp_; >-+ const std::unique_ptr<VideoEncoder> encoder_; >-+ const std::unique_ptr<VideoDecoder> decoder_; >- VideoCodec codec_settings_; >- TemporalLayersFactory tl_factory_; >- }; >- >--TEST_F(TestVp8Impl, EncoderParameterTest) { >-- strncpy(codec_settings_.plName, "VP8", 31); >-- codec_settings_.plType = 126; >-- codec_settings_.maxBitrate = 0; >-- codec_settings_.minBitrate = 0; >-- codec_settings_.width = 1440; >-- codec_settings_.height = 1080; >-- codec_settings_.maxFramerate = 30; >-- codec_settings_.startBitrate = 300; >-- codec_settings_.qpMax = 56; >-- codec_settings_.VP8()->complexity = kComplexityNormal; >-- codec_settings_.VP8()->numberOfTemporalLayers = 1; >-- codec_settings_.VP8()->tl_factory = &tl_factory_; >-- // Calls before InitEncode(). >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); >-- int bit_rate = 300; >-+TEST_F(TestVp8Impl, SetRateAllocation) { >-+ const int kBitrateBps = 300000; >- BitrateAllocation bitrate_allocation; >-- bitrate_allocation.SetBitrate(0, 0, bit_rate * 1000); >-+ bitrate_allocation.SetBitrate(0, 0, kBitrateBps); >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_UNINITIALIZED, >- encoder_->SetRateAllocation(bitrate_allocation, >- codec_settings_.maxFramerate)); >-+ InitEncodeDecode(); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-+ encoder_->SetRateAllocation(bitrate_allocation, >-+ codec_settings_.maxFramerate)); >-+} >- >-+TEST_F(TestVp8Impl, EncodeFrameAndRelease) { >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->InitEncode(&codec_settings_, 1, 1440)); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ EncodeFrame(); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_UNINITIALIZED, >-+ encoder_->Encode(*input_frame_, nullptr, nullptr)); >-+} >- >-- // Decoder parameter tests. >-- // Calls before InitDecode(). >-+TEST_F(TestVp8Impl, InitDecode) { >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->Release()); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->InitDecode(&codec_settings_, 1)); >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-+ decoder_->InitDecode(&codec_settings_, kNumCores)); >-+} >-+ >-+TEST_F(TestVp8Impl, OnEncodedImageReportsInfo) { >-+ InitEncodeDecode(); >-+ EncodeFrame(); >-+ EXPECT_EQ(kInitialTimestampRtp, encoded_cb_.encoded_frame_._timeStamp); >-+ EXPECT_EQ(kInitialTimestampMs, encoded_cb_.encoded_frame_.capture_time_ms_); >-+ EXPECT_EQ(kWidth, static_cast<int>(encoded_cb_.encoded_frame_._encodedWidth)); >-+ EXPECT_EQ(kHeight, >-+ static_cast<int>(encoded_cb_.encoded_frame_._encodedHeight)); >-+ EXPECT_EQ(-1, // Disabled for single stream. >-+ encoded_cb_.encoded_frame_.adapt_reason_.bw_resolutions_disabled); >- } >- >- // We only test the encoder here, since the decoded frame rotation is set based >-@@ -279,46 +263,84 @@ TEST_F(TestVp8Impl, EncoderParameterTest) { >- // TODO(brandtr): Consider passing through the rotation flag through the decoder >- // in the same way as done in the encoder. >- TEST_F(TestVp8Impl, EncodedRotationEqualsInputRotation) { >-- SetUpEncodeDecode(); >-- >-+ InitEncodeDecode(); >- input_frame_->set_rotation(kVideoRotation_0); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- WaitForEncodedFrame(); >-- EXPECT_EQ(kVideoRotation_0, encoded_frame_.rotation_); >-+ EncodeFrame(); >-+ EXPECT_EQ(kVideoRotation_0, encoded_cb_.encoded_frame_.rotation_); >- >- input_frame_->set_rotation(kVideoRotation_90); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- WaitForEncodedFrame(); >-- EXPECT_EQ(kVideoRotation_90, encoded_frame_.rotation_); >-+ EncodeFrame(); >-+ EXPECT_EQ(kVideoRotation_90, encoded_cb_.encoded_frame_.rotation_); >- } >- >- TEST_F(TestVp8Impl, DecodedQpEqualsEncodedQp) { >-- SetUpEncodeDecode(); >-- encoder_->Encode(*input_frame_, nullptr, nullptr); >-- EXPECT_GT(WaitForEncodedFrame(), 0u); >-+ InitEncodeDecode(); >-+ EncodeFrame(); >- // First frame should be a key frame. >-- encoded_frame_._frameType = kVideoFrameKey; >-+ encoded_cb_.encoded_frame_._frameType = kVideoFrameKey; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- decoder_->Decode(encoded_frame_, false, nullptr)); >-- EXPECT_GT(WaitForDecodedFrame(), 0u); >-- ASSERT_TRUE(decoded_frame_); >-- EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_frame_), 36); >-- ASSERT_TRUE(decoded_qp_); >-- EXPECT_EQ(encoded_frame_.qp_, *decoded_qp_); >-+ decoder_->Decode(encoded_cb_.encoded_frame_, false, nullptr)); >-+ EXPECT_TRUE(decoded_cb_.DecodeComplete()); >-+ EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_cb_.frame_), 36); >-+ EXPECT_EQ(encoded_cb_.encoded_frame_.qp_, *decoded_cb_.qp_); >- } >- >--TEST_F(TestVp8Impl, ParserQpEqualsEncodedQp) { >-- SetUpEncodeDecode(); >-+TEST_F(TestVp8Impl, ChecksSimulcastSettings) { >-+ codec_settings_.numberOfSimulcastStreams = 2; >-+ // Reslutions are not scaled by 2, temporal layers do not match. >-+ codec_settings_.simulcastStream[0] = {kWidth, kHeight, 2, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = {kWidth, kHeight, 3, 4000, >-+ 3000, 2000, 80}; >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ codec_settings_.numberOfSimulcastStreams = 3; >-+ // Reslutions are not scaled by 2. >-+ codec_settings_.simulcastStream[0] = {kWidth / 2, kHeight / 2, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000, >-+ 3000, 2000, 80}; >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ // Reslutions are not scaled by 2. >-+ codec_settings_.simulcastStream[0] = {kWidth, kHeight, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = {kWidth, kHeight, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000, >-+ 3000, 2000, 80}; >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ // Temporal layers do not match. >-+ codec_settings_.simulcastStream[0] = {kWidth / 4, kHeight / 4, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 2, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[2] = {kWidth, kHeight, 3, 4000, >-+ 3000, 2000, 80}; >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ // Resolutions do not match codec config. >-+ codec_settings_.simulcastStream[0] = { >-+ kWidth / 4 + 1, kHeight / 4 + 1, 1, 4000, 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = { >-+ kWidth / 2 + 2, kHeight / 2 + 2, 1, 4000, 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[2] = {kWidth + 4, kHeight + 4, 1, 4000, >-+ 3000, 2000, 80}; >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED, >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ // Everything fine: scaling by 2, top resolution matches video, temporal >-+ // settings are the same for all layers. >-+ codec_settings_.simulcastStream[0] = {kWidth / 4, kHeight / 4, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[1] = {kWidth / 2, kHeight / 2, 1, 4000, >-+ 3000, 2000, 80}; >-+ codec_settings_.simulcastStream[2] = {kWidth, kHeight, 1, 4000, >-+ 3000, 2000, 80}; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- EXPECT_GT(WaitForEncodedFrame(), 0u); >-- >-- int qp = 0; >-- ASSERT_TRUE(vp8::GetQp(encoded_frame_._buffer, encoded_frame_._length, &qp)); >-- >-- EXPECT_EQ(encoded_frame_.qp_, qp); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >- } >- >- #if defined(WEBRTC_ANDROID) >-@@ -327,20 +349,18 @@ TEST_F(TestVp8Impl, ParserQpEqualsEncodedQp) { >- #define MAYBE_AlignedStrideEncodeDecode AlignedStrideEncodeDecode >- #endif >- TEST_F(TestVp8Impl, MAYBE_AlignedStrideEncodeDecode) { >-- SetUpEncodeDecode(); >-- encoder_->Encode(*input_frame_, nullptr, nullptr); >-- EXPECT_GT(WaitForEncodedFrame(), 0u); >-+ InitEncodeDecode(); >-+ EncodeFrame(); >- // First frame should be a key frame. >-- encoded_frame_._frameType = kVideoFrameKey; >-- encoded_frame_.ntp_time_ms_ = kTestNtpTimeMs; >-+ encoded_cb_.encoded_frame_._frameType = kVideoFrameKey; >-+ encoded_cb_.encoded_frame_.ntp_time_ms_ = kTestNtpTimeMs; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- decoder_->Decode(encoded_frame_, false, nullptr)); >-- EXPECT_GT(WaitForDecodedFrame(), 0u); >-- ASSERT_TRUE(decoded_frame_); >-+ decoder_->Decode(encoded_cb_.encoded_frame_, false, nullptr)); >-+ EXPECT_TRUE(decoded_cb_.DecodeComplete()); >- // Compute PSNR on all planes (faster than SSIM). >-- EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_frame_), 36); >-- EXPECT_EQ(kTestTimestamp, decoded_frame_->timestamp()); >-- EXPECT_EQ(kTestNtpTimeMs, decoded_frame_->ntp_time_ms()); >-+ EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_cb_.frame_), 36); >-+ EXPECT_EQ(kInitialTimestampRtp, decoded_cb_.frame_->timestamp()); >-+ EXPECT_EQ(kTestNtpTimeMs, decoded_cb_.frame_->ntp_time_ms()); >- } >- >- #if defined(WEBRTC_ANDROID) >-@@ -349,100 +369,138 @@ TEST_F(TestVp8Impl, MAYBE_AlignedStrideEncodeDecode) { >- #define MAYBE_DecodeWithACompleteKeyFrame DecodeWithACompleteKeyFrame >- #endif >- TEST_F(TestVp8Impl, MAYBE_DecodeWithACompleteKeyFrame) { >-- SetUpEncodeDecode(); >-- encoder_->Encode(*input_frame_, nullptr, nullptr); >-- EXPECT_GT(WaitForEncodedFrame(), 0u); >-+ InitEncodeDecode(); >-+ EncodeFrame(); >- // Setting complete to false -> should return an error. >-- encoded_frame_._completeFrame = false; >-+ encoded_cb_.encoded_frame_._completeFrame = false; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERROR, >-- decoder_->Decode(encoded_frame_, false, nullptr)); >-+ decoder_->Decode(encoded_cb_.encoded_frame_, false, nullptr)); >- // Setting complete back to true. Forcing a delta frame. >-- encoded_frame_._frameType = kVideoFrameDelta; >-- encoded_frame_._completeFrame = true; >-+ encoded_cb_.encoded_frame_._frameType = kVideoFrameDelta; >-+ encoded_cb_.encoded_frame_._completeFrame = true; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_ERROR, >-- decoder_->Decode(encoded_frame_, false, nullptr)); >-+ decoder_->Decode(encoded_cb_.encoded_frame_, false, nullptr)); >- // Now setting a key frame. >-- encoded_frame_._frameType = kVideoFrameKey; >-+ encoded_cb_.encoded_frame_._frameType = kVideoFrameKey; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- decoder_->Decode(encoded_frame_, false, nullptr)); >-- ASSERT_TRUE(decoded_frame_); >-- EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_frame_), 36); >-+ decoder_->Decode(encoded_cb_.encoded_frame_, false, nullptr)); >-+ ASSERT_TRUE(decoded_cb_.frame_); >-+ EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_cb_.frame_), 36); >- } >- >--TEST_F(TestVp8Impl, EncoderRetainsRtpStateAfterRelease) { >-- SetUpEncodeDecode(); >-- // Override default settings. >-+TEST_F(TestVp8Impl, EncoderWith2TemporalLayersRetainsRtpStateAfterRelease) { >- codec_settings_.VP8()->numberOfTemporalLayers = 2; >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->InitEncode(&codec_settings_, 1, 1440)); >-+ InitEncodeDecode(); >- >- // Temporal layer 0. >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ASSERT_TRUE(WaitForEncodedFrame()); >-- EXPECT_EQ(0, codec_specific_info_.codecSpecific.VP8.temporalIdx); >-- int16_t picture_id = codec_specific_info_.codecSpecific.VP8.pictureId; >-- int tl0_pic_idx = codec_specific_info_.codecSpecific.VP8.tl0PicIdx; >-- >-+ EncodeFrame(); >-+ EXPECT_EQ(0, encoded_cb_.codec_specific_info_.codecSpecific.VP8.temporalIdx); >-+ int16_t picture_id = >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.pictureId; >-+ int tl0_pic_idx = >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.tl0PicIdx; >- // Temporal layer 1. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 1) % (1 << 15), tl0_pic_idx, 1); >-- >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 1, tl0_pic_idx + 0, 1); >- // Temporal layer 0. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 2) % (1 << 15), (tl0_pic_idx + 1) % (1 << 8), >-- 0); >-- >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 2, tl0_pic_idx + 1, 0); >- // Temporal layer 1. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 3) % (1 << 15), (tl0_pic_idx + 1) % (1 << 8), >-- 1); >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 3, tl0_pic_idx + 1, 1); >- >- // Reinit. >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->InitEncode(&codec_settings_, 1, 1440)); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >- >- // Temporal layer 0. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 4) % (1 << 15), (tl0_pic_idx + 2) % (1 << 8), >-- 0); >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 4, tl0_pic_idx + 2, 0); >-+ // Temporal layer 1. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 5, tl0_pic_idx + 2, 1); >-+ // Temporal layer 0. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 6, tl0_pic_idx + 3, 0); >-+ // Temporal layer 1. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 7, tl0_pic_idx + 3, 1); >-+} >- >-+TEST_F(TestVp8Impl, EncoderWith3TemporalLayersRetainsRtpStateAfterRelease) { >-+ codec_settings_.VP8()->numberOfTemporalLayers = 3; >-+ InitEncodeDecode(); >-+ >-+ // Temporal layer 0. >-+ EncodeFrame(); >-+ EXPECT_EQ(0, encoded_cb_.codec_specific_info_.codecSpecific.VP8.temporalIdx); >-+ int16_t picture_id = >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.pictureId; >-+ int tl0_pic_idx = >-+ encoded_cb_.codec_specific_info_.codecSpecific.VP8.tl0PicIdx; >-+ // Temporal layer 2. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 1, tl0_pic_idx + 0, 2); >- // Temporal layer 1. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 2, tl0_pic_idx + 0, 1); >-+ // Temporal layer 2. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 3, tl0_pic_idx + 0, 2); >-+ >-+ // Reinit. >-+ EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, encoder_->Release()); >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 5) % (1 << 15), (tl0_pic_idx + 2) % (1 << 8), >-- 1); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >- >- // Temporal layer 0. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 4, tl0_pic_idx + 1, 0); >-+ // Temporal layer 2. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 5, tl0_pic_idx + 1, 2); >-+ // Temporal layer 1. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 6, tl0_pic_idx + 1, 1); >-+ // Temporal layer 2. >-+ input_frame_->set_timestamp(input_frame_->timestamp() + kTimestampIncrement); >-+ EncodeFrame(); >-+ ExpectFrameWith(picture_id + 7, tl0_pic_idx + 1, 2); >-+} >-+ >-+TEST_F(TestVp8Impl, ScalingDisabledIfAutomaticResizeOff) { >-+ codec_settings_.VP8()->frameDroppingOn = true; >-+ codec_settings_.VP8()->automaticResizeOn = false; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 6) % (1 << 15), (tl0_pic_idx + 3) % (1 << 8), >-- 0); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >- >-- // Temporal layer 1. >-- input_frame_->set_timestamp(input_frame_->timestamp() + >-- kTimestampIncrementPerFrame); >-+ VideoEncoder::ScalingSettings settings = encoder_->GetScalingSettings(); >-+ EXPECT_FALSE(settings.enabled); >-+} >-+ >-+TEST_F(TestVp8Impl, ScalingEnabledIfAutomaticResizeOn) { >-+ codec_settings_.VP8()->frameDroppingOn = true; >-+ codec_settings_.VP8()->automaticResizeOn = true; >- EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, >-- encoder_->Encode(*input_frame_, nullptr, nullptr)); >-- ExpectFrameWith((picture_id + 7) % (1 << 15), (tl0_pic_idx + 3) % (1 << 8), >-- 1); >-+ encoder_->InitEncode(&codec_settings_, kNumCores, kMaxPayloadSize)); >-+ >-+ VideoEncoder::ScalingSettings settings = encoder_->GetScalingSettings(); >-+ EXPECT_TRUE(settings.enabled); >-+ EXPECT_EQ(kDefaultMinPixelsPerFrame, settings.min_pixels_per_frame); >- } >- >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc >-index 5038e8edf49..9e89696d465 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc >-@@ -8,7 +8,7 @@ >- * be found in the AUTHORS file in the root of the source tree. >- */ >- >--#include "webrtc/modules/video_coding/codecs/vp8/vp8_impl.h" >-+#include "modules/video_coding/codecs/vp8/vp8_impl.h" >- >- #include <stdlib.h> >- #include <string.h> >-@@ -17,29 +17,31 @@ >- #include <string> >- >- // NOTE(ajm): Path provided by gyp. >--#include "libyuv/scale.h" // NOLINT >- #include "libyuv/convert.h" // NOLINT >-+#include "libyuv/scale.h" // NOLINT >- >--#include "webrtc/base/checks.h" >--#include "webrtc/base/random.h" >--#include "webrtc/base/timeutils.h" >--#include "webrtc/base/trace_event.h" >--#include "webrtc/common_types.h" >--#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" >--#include "webrtc/modules/include/module_common_types.h" >--#include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h" >--#include "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h" >--#include "webrtc/modules/video_coding/codecs/vp8/simulcast_rate_allocator.h" >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/system_wrappers/include/clock.h" >--#include "webrtc/system_wrappers/include/field_trial.h" >--#include "webrtc/system_wrappers/include/metrics.h" >-+#include "common_types.h" // NOLINT(build/include) >-+#include "common_video/libyuv/include/webrtc_libyuv.h" >-+#include "modules/include/module_common_types.h" >-+#include "modules/video_coding/codecs/vp8/include/vp8_common_types.h" >-+#include "modules/video_coding/codecs/vp8/screenshare_layers.h" >-+#include "modules/video_coding/codecs/vp8/simulcast_rate_allocator.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "rtc_base/checks.h" >-+#include "rtc_base/numerics/exp_filter.h" >-+#include "rtc_base/ptr_util.h" >-+#include "rtc_base/random.h" >-+#include "rtc_base/timeutils.h" >-+#include "rtc_base/trace_event.h" >-+#include "system_wrappers/include/clock.h" >-+#include "system_wrappers/include/field_trial.h" >-+#include "system_wrappers/include/metrics.h" >- >- namespace webrtc { >- namespace { >- >--const char kVp8PostProcArmFieldTrial[] = "WebRTC-VP8-Postproc-Arm"; >-+const char kVp8PostProcArmFieldTrial[] = "WebRTC-VP8-Postproc-Config-Arm"; >- const char kVp8GfBoostFieldTrial[] = "WebRTC-VP8-GfBoost"; >- >- const int kTokenPartitions = VP8_ONE_TOKENPARTITION; >-@@ -97,6 +99,21 @@ bool ValidSimulcastResolutions(const VideoCodec& codec, int num_streams) { >- return false; >- } >- } >-+ for (int i = 1; i < num_streams; ++i) { >-+ if (codec.simulcastStream[i].width != >-+ codec.simulcastStream[i - 1].width * 2) { >-+ return false; >-+ } >-+ } >-+ return true; >-+} >-+ >-+bool ValidSimulcastTemporalLayers(const VideoCodec& codec, int num_streams) { >-+ for (int i = 0; i < num_streams - 1; ++i) { >-+ if (codec.simulcastStream[i].numberOfTemporalLayers != >-+ codec.simulcastStream[i + 1].numberOfTemporalLayers) >-+ return false; >-+ } >- return true; >- } >- >-@@ -122,14 +139,36 @@ bool GetGfBoostPercentageFromFieldTrialGroup(int* boost_percentage) { >- >- return true; >- } >-+ >-+void GetPostProcParamsFromFieldTrialGroup( >-+ VP8DecoderImpl::DeblockParams* deblock_params) { >-+ std::string group = >-+ webrtc::field_trial::FindFullName(kVp8PostProcArmFieldTrial); >-+ if (group.empty()) >-+ return; >-+ >-+ VP8DecoderImpl::DeblockParams params; >-+ if (sscanf(group.c_str(), "Enabled-%d,%d,%d", ¶ms.max_level, >-+ ¶ms.min_qp, ¶ms.degrade_qp) != 3) >-+ return; >-+ >-+ if (params.max_level < 0 || params.max_level > 16) >-+ return; >-+ >-+ if (params.min_qp < 0 || params.degrade_qp <= params.min_qp) >-+ return; >-+ >-+ *deblock_params = params; >-+} >-+ >- } // namespace >- >--VP8Encoder* VP8Encoder::Create() { >-- return new VP8EncoderImpl(); >-+std::unique_ptr<VP8Encoder> VP8Encoder::Create() { >-+ return rtc::MakeUnique<VP8EncoderImpl>(); >- } >- >--VP8Decoder* VP8Decoder::Create() { >-- return new VP8DecoderImpl(); >-+std::unique_ptr<VP8Decoder> VP8Decoder::Create() { >-+ return rtc::MakeUnique<VP8DecoderImpl>(); >- } >- >- vpx_enc_frame_flags_t VP8EncoderImpl::EncodeFlags( >-@@ -173,6 +212,7 @@ VP8EncoderImpl::VP8EncoderImpl() >- tl0_pic_idx_.push_back(random.Rand<uint8_t>()); >- } >- temporal_layers_.reserve(kMaxSimulcastStreams); >-+ temporal_layers_checkers_.reserve(kMaxSimulcastStreams); >- raw_images_.reserve(kMaxSimulcastStreams); >- encoded_images_.reserve(kMaxSimulcastStreams); >- send_stream_.reserve(kMaxSimulcastStreams); >-@@ -212,6 +252,7 @@ int VP8EncoderImpl::Release() { >- tl0_pic_idx_[i] = temporal_layers_[i]->Tl0PicIdx(); >- } >- temporal_layers_.clear(); >-+ temporal_layers_checkers_.clear(); >- inited_ = false; >- return ret_val; >- } >-@@ -281,8 +322,7 @@ const char* VP8EncoderImpl::ImplementationName() const { >- return "libvpx"; >- } >- >--void VP8EncoderImpl::SetStreamState(bool send_stream, >-- int stream_idx) { >-+void VP8EncoderImpl::SetStreamState(bool send_stream, int stream_idx) { >- if (send_stream && !send_stream_[stream_idx]) { >- // Need a key frame if we have not sent this stream before. >- key_frame_request_[stream_idx] = true; >-@@ -298,6 +338,8 @@ void VP8EncoderImpl::SetupTemporalLayers(int num_streams, >- if (num_streams == 1) { >- temporal_layers_.emplace_back( >- tl_factory->Create(0, num_temporal_layers, tl0_pic_idx_[0])); >-+ temporal_layers_checkers_.emplace_back( >-+ tl_factory->CreateChecker(0, num_temporal_layers, tl0_pic_idx_[0])); >- } else { >- for (int i = 0; i < num_streams; ++i) { >- RTC_CHECK_GT(num_temporal_layers, 0); >-@@ -305,6 +347,8 @@ void VP8EncoderImpl::SetupTemporalLayers(int num_streams, >- codec.simulcastStream[i].numberOfTemporalLayers); >- temporal_layers_.emplace_back( >- tl_factory->Create(i, layers, tl0_pic_idx_[i])); >-+ temporal_layers_checkers_.emplace_back( >-+ tl_factory->CreateChecker(i, layers, tl0_pic_idx_[i])); >- } >- } >- } >-@@ -339,8 +383,10 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, >- int number_of_streams = NumberOfStreams(*inst); >- bool doing_simulcast = (number_of_streams > 1); >- >-- if (doing_simulcast && !ValidSimulcastResolutions(*inst, number_of_streams)) { >-- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; >-+ if (doing_simulcast && >-+ (!ValidSimulcastResolutions(*inst, number_of_streams) || >-+ !ValidSimulcastTemporalLayers(*inst, number_of_streams))) { >-+ return WEBRTC_VIDEO_CODEC_ERR_SIMULCAST_PARAMETERS_NOT_SUPPORTED; >- } >- >- int num_temporal_layers = >-@@ -524,7 +570,8 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst, >- } >- >- int VP8EncoderImpl::SetCpuSpeed(int width, int height) { >--#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) || defined(ANDROID) >-+#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) \ >-+ || defined(WEBRTC_ANDROID) >- // On mobile platform, use a lower speed setting for lower resolutions for >- // CPUs with 4 or more cores. >- RTC_DCHECK_GT(number_of_cores_, 0); >-@@ -549,7 +596,7 @@ int VP8EncoderImpl::SetCpuSpeed(int width, int height) { >- } >- >- int VP8EncoderImpl::NumberOfThreads(int width, int height, int cpus) { >--#if defined(ANDROID) >-+#if defined(WEBRTC_ANDROID) >- if (width * height >= 320 * 180) { >- if (cpus >= 4) { >- // 3 threads for CPUs with 4 and more cores since most of times only 4 >-@@ -603,7 +650,8 @@ int VP8EncoderImpl::InitAndSetControlSettings() { >- // when encoding lower resolution streams. Would it work with the >- // multi-res encoding feature? >- denoiserState denoiser_state = kDenoiserOnYOnly; >--#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) || defined(ANDROID) >-+#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) \ >-+ || defined(WEBRTC_ANDROID) >- denoiser_state = kDenoiserOnYOnly; >- #else >- denoiser_state = kDenoiserOnAdaptive; >-@@ -703,17 +751,6 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, >- raw_images_[i].stride[VPX_PLANE_V], raw_images_[i].d_w, >- raw_images_[i].d_h, libyuv::kFilterBilinear); >- } >-- vpx_enc_frame_flags_t flags[kMaxSimulcastStreams]; >-- TemporalLayers::FrameConfig tl_configs[kMaxSimulcastStreams]; >-- for (size_t i = 0; i < encoders_.size(); ++i) { >-- tl_configs[i] = temporal_layers_[i]->UpdateLayerConfig(frame.timestamp()); >-- >-- if (tl_configs[i].drop_frame) { >-- // Drop this frame. >-- return WEBRTC_VIDEO_CODEC_OK; >-- } >-- flags[i] = EncodeFlags(tl_configs[i]); >-- } >- bool send_key_frame = false; >- for (size_t i = 0; i < key_frame_request_.size() && i < send_stream_.size(); >- ++i) { >-@@ -731,6 +768,18 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, >- } >- } >- } >-+ vpx_enc_frame_flags_t flags[kMaxSimulcastStreams]; >-+ TemporalLayers::FrameConfig tl_configs[kMaxSimulcastStreams]; >-+ for (size_t i = 0; i < encoders_.size(); ++i) { >-+ tl_configs[i] = temporal_layers_[i]->UpdateLayerConfig(frame.timestamp()); >-+ RTC_DCHECK(temporal_layers_checkers_[i]->CheckTemporalConfig( >-+ send_key_frame, tl_configs[i])); >-+ if (tl_configs[i].drop_frame) { >-+ // Drop this frame. >-+ return WEBRTC_VIDEO_CODEC_OK; >-+ } >-+ flags[i] = EncodeFlags(tl_configs[i]); >-+ } >- if (send_key_frame) { >- // Adapt the size of the key frame when in screenshare with 1 temporal >- // layer. >-@@ -765,9 +814,8 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, >- } >- >- vpx_codec_control(&encoders_[i], VP8E_SET_FRAME_FLAGS, flags[stream_idx]); >-- vpx_codec_control( >-- &encoders_[i], VP8E_SET_TEMPORAL_LAYER_ID, >-- temporal_layers_[stream_idx]->GetTemporalLayerId(tl_configs[i])); >-+ vpx_codec_control(&encoders_[i], VP8E_SET_TEMPORAL_LAYER_ID, >-+ tl_configs[i].encoder_layer_id); >- } >- // TODO(holmer): Ideally the duration should be the timestamp diff of this >- // frame and the next frame to be encoded, which we don't have. Instead we >-@@ -777,20 +825,31 @@ int VP8EncoderImpl::Encode(const VideoFrame& frame, >- assert(codec_.maxFramerate > 0); >- uint32_t duration = 90000 / codec_.maxFramerate; >- >-- // Note we must pass 0 for |flags| field in encode call below since they are >-- // set above in |vpx_codec_control| function for each encoder/spatial layer. >-- int error = vpx_codec_encode(&encoders_[0], &raw_images_[0], timestamp_, >-- duration, 0, VPX_DL_REALTIME); >-- // Reset specific intra frame thresholds, following the key frame. >-- if (send_key_frame) { >-- vpx_codec_control(&(encoders_[0]), VP8E_SET_MAX_INTRA_BITRATE_PCT, >-- rc_max_intra_target_); >-+ int error = WEBRTC_VIDEO_CODEC_OK; >-+ int num_tries = 0; >-+ // If the first try returns WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT >-+ // the frame must be reencoded with the same parameters again because >-+ // target bitrate is exceeded and encoder state has been reset. >-+ while (num_tries == 0 || >-+ (num_tries == 1 && >-+ error == WEBRTC_VIDEO_CODEC_TARGET_BITRATE_OVERSHOOT)) { >-+ ++num_tries; >-+ // Note we must pass 0 for |flags| field in encode call below since they are >-+ // set above in |vpx_codec_control| function for each encoder/spatial layer. >-+ error = vpx_codec_encode(&encoders_[0], &raw_images_[0], timestamp_, >-+ duration, 0, VPX_DL_REALTIME); >-+ // Reset specific intra frame thresholds, following the key frame. >-+ if (send_key_frame) { >-+ vpx_codec_control(&(encoders_[0]), VP8E_SET_MAX_INTRA_BITRATE_PCT, >-+ rc_max_intra_target_); >-+ } >-+ if (error) >-+ return WEBRTC_VIDEO_CODEC_ERROR; >-+ timestamp_ += duration; >-+ // Examines frame timestamps only. >-+ error = GetEncodedPartitions(tl_configs, frame); >- } >-- if (error) >-- return WEBRTC_VIDEO_CODEC_ERROR; >-- timestamp_ += duration; >-- // Examines frame timestamps only. >-- return GetEncodedPartitions(tl_configs, frame); >-+ return error; >- } >- >- void VP8EncoderImpl::PopulateCodecSpecific( >-@@ -878,7 +937,7 @@ int VP8EncoderImpl::GetEncodedPartitions( >- encoded_images_[encoder_idx].content_type_ = >- (codec_.mode == kScreensharing) ? VideoContentType::SCREENSHARE >- : VideoContentType::UNSPECIFIED; >-- encoded_images_[encoder_idx].timing_.is_timing_frame = false; >-+ encoded_images_[encoder_idx].timing_.flags = TimingFrameFlags::kInvalid; >- >- int qp = -1; >- vpx_codec_control(&encoders_[encoder_idx], VP8E_GET_LAST_QUANTIZER_64, &qp); >-@@ -926,9 +985,33 @@ int VP8EncoderImpl::RegisterEncodeCompleteCallback( >- return WEBRTC_VIDEO_CODEC_OK; >- } >- >-+class VP8DecoderImpl::QpSmoother { >-+ public: >-+ QpSmoother() : last_sample_ms_(rtc::TimeMillis()), smoother_(kAlpha) {} >-+ >-+ int GetAvg() const { >-+ float value = smoother_.filtered(); >-+ return (value == rtc::ExpFilter::kValueUndefined) ? 0 >-+ : static_cast<int>(value); >-+ } >-+ >-+ void Add(float sample) { >-+ int64_t now_ms = rtc::TimeMillis(); >-+ smoother_.Apply(static_cast<float>(now_ms - last_sample_ms_), sample); >-+ last_sample_ms_ = now_ms; >-+ } >-+ >-+ void Reset() { smoother_.Reset(kAlpha); } >-+ >-+ private: >-+ const float kAlpha = 0.95f; >-+ int64_t last_sample_ms_; >-+ rtc::ExpFilter smoother_; >-+}; >-+ >- VP8DecoderImpl::VP8DecoderImpl() >-- : use_postproc_arm_(webrtc::field_trial::FindFullName( >-- kVp8PostProcArmFieldTrial) == "Enabled"), >-+ : use_postproc_arm_( >-+ webrtc::field_trial::IsEnabled(kVp8PostProcArmFieldTrial)), >- buffer_pool_(false, 300 /* max_number_of_buffers*/), >- decode_complete_callback_(NULL), >- inited_(false), >-@@ -936,7 +1019,11 @@ VP8DecoderImpl::VP8DecoderImpl() >- propagation_cnt_(-1), >- last_frame_width_(0), >- last_frame_height_(0), >-- key_frame_required_(true) {} >-+ key_frame_required_(true), >-+ qp_smoother_(use_postproc_arm_ ? new QpSmoother() : nullptr) { >-+ if (use_postproc_arm_) >-+ GetPostProcParamsFromFieldTrialGroup(&deblock_); >-+} >- >- VP8DecoderImpl::~VP8DecoderImpl() { >- inited_ = true; // in order to do the actual release >-@@ -957,7 +1044,8 @@ int VP8DecoderImpl::InitDecode(const VideoCodec* inst, int number_of_cores) { >- cfg.threads = 1; >- cfg.h = cfg.w = 0; // set after decode >- >--#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) || defined(ANDROID) >-+#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) \ >-+ || defined(WEBRTC_ANDROID) >- vpx_codec_flags_t flags = use_postproc_arm_ ? VPX_CODEC_USE_POSTPROC : 0; >- #else >- vpx_codec_flags_t flags = VPX_CODEC_USE_POSTPROC; >-@@ -996,16 +1084,28 @@ int VP8DecoderImpl::Decode(const EncodedImage& input_image, >- } >- >- // Post process configurations. >--#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) || defined(ANDROID) >-+#if defined(WEBRTC_ARCH_ARM) || defined(WEBRTC_ARCH_ARM64) \ >-+ || defined(WEBRTC_ANDROID) >- if (use_postproc_arm_) { >- vp8_postproc_cfg_t ppcfg; >- ppcfg.post_proc_flag = VP8_MFQE; >-- // For low resolutions, use stronger deblocking filter and enable the >-- // deblock and demacroblocker. >-+ // For low resolutions, use stronger deblocking filter. >- int last_width_x_height = last_frame_width_ * last_frame_height_; >- if (last_width_x_height > 0 && last_width_x_height <= 320 * 240) { >-- ppcfg.deblocking_level = 6; // Only affects VP8_DEMACROBLOCK. >-- ppcfg.post_proc_flag |= VP8_DEBLOCK | VP8_DEMACROBLOCK; >-+ // Enable the deblock and demacroblocker based on qp thresholds. >-+ RTC_DCHECK(qp_smoother_); >-+ int qp = qp_smoother_->GetAvg(); >-+ if (qp > deblock_.min_qp) { >-+ int level = deblock_.max_level; >-+ if (qp < deblock_.degrade_qp) { >-+ // Use lower level. >-+ level = deblock_.max_level * (qp - deblock_.min_qp) / >-+ (deblock_.degrade_qp - deblock_.min_qp); >-+ } >-+ // Deblocking level only affects VP8_DEMACROBLOCK. >-+ ppcfg.deblocking_level = std::max(level, 1); >-+ ppcfg.post_proc_flag |= VP8_DEBLOCK | VP8_DEMACROBLOCK; >-+ } >- } >- vpx_codec_control(decoder_, VP8_SET_POSTPROC, &ppcfg); >- } >-@@ -1105,6 +1205,13 @@ int VP8DecoderImpl::ReturnFrame(const vpx_image_t* img, >- // Decoder OK and NULL image => No show frame >- return WEBRTC_VIDEO_CODEC_NO_OUTPUT; >- } >-+ if (qp_smoother_) { >-+ if (last_frame_width_ != static_cast<int>(img->d_w) || >-+ last_frame_height_ != static_cast<int>(img->d_h)) { >-+ qp_smoother_->Reset(); >-+ } >-+ qp_smoother_->Add(qp); >-+ } >- last_frame_width_ = img->d_w; >- last_frame_height_ = img->d_h; >- // Allocate memory for decoded image. >-@@ -1122,13 +1229,12 @@ int VP8DecoderImpl::ReturnFrame(const vpx_image_t* img, >- img->planes[VPX_PLANE_V], img->stride[VPX_PLANE_V], >- buffer->MutableDataY(), buffer->StrideY(), >- buffer->MutableDataU(), buffer->StrideU(), >-- buffer->MutableDataV(), buffer->StrideV(), >-- img->d_w, img->d_h); >-+ buffer->MutableDataV(), buffer->StrideV(), img->d_w, >-+ img->d_h); >- >- VideoFrame decoded_image(buffer, timestamp, 0, kVideoRotation_0); >- decoded_image.set_ntp_time_ms(ntp_time_ms); >-- decode_complete_callback_->Decoded(decoded_image, rtc::Optional<int32_t>(), >-- rtc::Optional<uint8_t>(qp)); >-+ decode_complete_callback_->Decoded(decoded_image, rtc::nullopt, qp); >- >- return WEBRTC_VIDEO_CODEC_OK; >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h >-index 376dde12808..e5d5d81e35c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_impl.h >-@@ -10,26 +10,26 @@ >- * WEBRTC VP8 wrapper interface >- */ >- >--#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >--#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >-+#ifndef MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >-+#define MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >- >- #include <memory> >- #include <vector> >- >- // NOTE: This include order must remain to avoid compile errors, even though >- // it breaks the style guide. >--#include "vpx/vpx_encoder.h" >--#include "vpx/vpx_decoder.h" >- #include "vpx/vp8cx.h" >- #include "vpx/vp8dx.h" >-+#include "vpx/vpx_decoder.h" >-+#include "vpx/vpx_encoder.h" >- >--#include "webrtc/api/video/video_frame.h" >--#include "webrtc/common_video/include/i420_buffer_pool.h" >--#include "webrtc/common_video/include/video_frame.h" >--#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" >--#include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" >--#include "webrtc/modules/video_coding/include/video_codec_interface.h" >--#include "webrtc/modules/video_coding/utility/quality_scaler.h" >-+#include "api/video/video_frame.h" >-+#include "common_video/include/i420_buffer_pool.h" >-+#include "common_video/include/video_frame.h" >-+#include "modules/video_coding/codecs/vp8/include/vp8.h" >-+#include "modules/video_coding/codecs/vp8/temporal_layers.h" >-+#include "modules/video_coding/include/video_codec_interface.h" >-+#include "modules/video_coding/utility/quality_scaler.h" >- >- namespace webrtc { >- >-@@ -104,6 +104,7 @@ class VP8EncoderImpl : public VP8Encoder { >- int number_of_cores_; >- uint32_t rc_max_intra_target_; >- std::vector<std::unique_ptr<TemporalLayers>> temporal_layers_; >-+ std::vector<std::unique_ptr<TemporalLayersChecker>> temporal_layers_checkers_; >- std::vector<uint16_t> picture_id_; >- std::vector<uint8_t> tl0_pic_idx_; >- std::vector<bool> key_frame_request_; >-@@ -135,7 +136,14 @@ class VP8DecoderImpl : public VP8Decoder { >- >- const char* ImplementationName() const override; >- >-+ struct DeblockParams { >-+ int max_level = 6; // Deblocking strength: [0, 16]. >-+ int degrade_qp = 1; // If QP value is below, start lowering |max_level|. >-+ int min_qp = 0; // If QP value is below, turn off deblocking. >-+ }; >-+ >- private: >-+ class QpSmoother; >- int ReturnFrame(const vpx_image_t* img, >- uint32_t timeStamp, >- int64_t ntp_time_ms, >-@@ -151,7 +159,9 @@ class VP8DecoderImpl : public VP8Decoder { >- int last_frame_width_; >- int last_frame_height_; >- bool key_frame_required_; >-+ DeblockParams deblock_; >-+ const std::unique_ptr<QpSmoother> qp_smoother_; >- }; >- } // namespace webrtc >- >--#endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >-+#endif // MODULES_VIDEO_CODING_CODECS_VP8_VP8_IMPL_H_ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc >-index a61c3655190..3267344204c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/codecs/vp8/vp8_noop.cc >-@@ -13,8 +13,8 @@ >- #error >- #endif // !defined(RTC_DISABLE_VP8) >- >--#include "webrtc/base/checks.h" >--#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" >-+#include "rtc_base/checks.h" >-+#include "modules/video_coding/codecs/vp8/include/vp8.h" >- >- namespace webrtc { >- >-@@ -22,7 +22,7 @@ bool VP8Encoder::IsSupported() { >- return false; >- } >- >--VP8Encoder* VP8Encoder::Create() { >-+std::unique_ptr<VP8Encoder> VP8Encoder::Create() { >- RTC_NOTREACHED(); >- return nullptr; >- } >-@@ -31,7 +31,7 @@ bool VP8Decoder::IsSupported() { >- return false; >- } >- >--VP8Decoder* VP8Decoder::Create() { >-+std::unique_ptr<VP8Decoder> VP8Decoder::Create() { >- RTC_NOTREACHED(); >- return nullptr; >- } >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0004-Removing-parameter-names-from-files-included-from-We.patch b/Source/ThirdParty/libwebrtc/WebKit/0004-Removing-parameter-names-from-files-included-from-We.patch >deleted file mode 100644 >index 359833fc7ee..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0004-Removing-parameter-names-from-files-included-from-We.patch >+++ /dev/null >@@ -1,682 +0,0 @@ >-From f848b7acea46bb74d5a41b9da5b2e48b31203a30 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:50:22 -0800 >-Subject: [PATCH 4/8] Removing parameter names from files included from WebKit >- >---- >- .../libwebrtc/Source/webrtc/api/array_view.h | 4 +- >- .../Source/webrtc/api/datachannelinterface.h | 2 +- >- .../ThirdParty/libwebrtc/Source/webrtc/api/jsep.h | 2 +- >- .../Source/webrtc/api/mediastreaminterface.h | 20 ++--- >- .../Source/webrtc/api/peerconnectioninterface.h | 87 +++++++++++----------- >- .../libwebrtc/Source/webrtc/api/umametrics.h | 6 +- >- .../Source/webrtc/api/video_codecs/video_decoder.h | 8 +- >- .../Source/webrtc/api/video_codecs/video_encoder.h | 2 +- >- .../webrtc/common_video/include/frame_callback.h | 2 +- >- .../webrtc/logging/rtc_event_log/rtc_event_log.h | 8 +- >- .../Source/webrtc/media/base/mediachannel.h | 6 +- >- .../modules/audio_device/include/audio_device.h | 16 ++-- >- .../Source/webrtc/p2p/base/icetransportinternal.h | 2 +- >- .../libwebrtc/Source/webrtc/p2p/base/port.h | 2 +- >- .../libwebrtc/Source/webrtc/p2p/base/stun.h | 2 +- >- .../libwebrtc/Source/webrtc/p2p/base/stunrequest.h | 6 +- >- .../Source/webrtc/rtc_base/messagehandler.h | 4 +- >- .../libwebrtc/Source/webrtc/rtc_base/network.h | 2 +- >- .../rtc_base/numerics/safe_conversions_impl.h | 2 +- >- .../Source/webrtc/rtc_base/socketserver.h | 2 +- >- .../libwebrtc/Source/webrtc/rtc_base/stream.h | 4 +- >- 21 files changed, 94 insertions(+), 95 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/array_view.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/array_view.h >-index d951d0f02d3..b27bd29a8e2 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/array_view.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/array_view.h >-@@ -94,7 +94,7 @@ class ArrayViewBase { >- static_assert(Size > 0, "ArrayView size must be variable or non-negative"); >- >- public: >-- ArrayViewBase(T* data, size_t size) : data_(data) {} >-+ ArrayViewBase(T* data, size_t) : data_(data) {} >- >- static constexpr size_t size() { return Size; } >- static constexpr bool empty() { return false; } >-@@ -111,7 +111,7 @@ class ArrayViewBase { >- template <typename T> >- class ArrayViewBase<T, 0> { >- public: >-- explicit ArrayViewBase(T* data, size_t size) {} >-+ explicit ArrayViewBase(T*, size_t) {} >- >- static constexpr size_t size() { return 0; } >- static constexpr bool empty() { return true; } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/datachannelinterface.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/datachannelinterface.h >-index 4ab7efb7407..4b5ce9a7333 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/datachannelinterface.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/datachannelinterface.h >-@@ -90,7 +90,7 @@ class DataChannelObserver { >- // A data buffer was successfully received. >- virtual void OnMessage(const DataBuffer& buffer) = 0; >- // The data channel's buffered_amount has changed. >-- virtual void OnBufferedAmountChange(uint64_t previous_amount) {} >-+ virtual void OnBufferedAmountChange(uint64_t) {} >- >- protected: >- virtual ~DataChannelObserver() {} >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/jsep.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/jsep.h >-index acfffd4d0a7..59064d85758 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/jsep.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/jsep.h >-@@ -126,7 +126,7 @@ class SessionDescriptionInterface { >- // >- // Returns the number of candidates removed. >- virtual size_t RemoveCandidates( >-- const std::vector<cricket::Candidate>& candidates) { return 0; } >-+ const std::vector<cricket::Candidate>&) { return 0; } >- >- // Returns the number of m= sections in the session description. >- virtual size_t number_of_mediasections() const = 0; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediastreaminterface.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediastreaminterface.h >-index 80595e09abe..aae5a032937 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediastreaminterface.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediastreaminterface.h >-@@ -167,14 +167,14 @@ class VideoTrackInterface >- >- // Register a video sink for this track. Used to connect the track to the >- // underlying video engine. >-- void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink, >-- const rtc::VideoSinkWants& wants) override {} >-- void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override {} >-+ void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>*, >-+ const rtc::VideoSinkWants&) override {} >-+ void RemoveSink(rtc::VideoSinkInterface<VideoFrame>*) override {} >- >- virtual VideoTrackSourceInterface* GetSource() const = 0; >- >- virtual ContentHint content_hint() const { return ContentHint::kNone; } >-- virtual void set_content_hint(ContentHint hint) {} >-+ virtual void set_content_hint(ContentHint) {} >- >- protected: >- virtual ~VideoTrackInterface() {} >-@@ -211,15 +211,15 @@ class AudioSourceInterface : public MediaSourceInterface { >- // Sets the volume of the source. |volume| is in the range of [0, 10]. >- // TODO(tommi): This method should be on the track and ideally volume should >- // be applied in the track in a way that does not affect clones of the track. >-- virtual void SetVolume(double volume) {} >-+ virtual void SetVolume(double) {} >- >- // Registers/unregisters observers to the audio source. >-- virtual void RegisterAudioObserver(AudioObserver* observer) {} >-- virtual void UnregisterAudioObserver(AudioObserver* observer) {} >-+ virtual void RegisterAudioObserver(AudioObserver*) {} >-+ virtual void UnregisterAudioObserver(AudioObserver*) {} >- >- // TODO(tommi): Make pure virtual. >-- virtual void AddSink(AudioTrackSinkInterface* sink) {} >-- virtual void RemoveSink(AudioTrackSinkInterface* sink) {} >-+ virtual void AddSink(AudioTrackSinkInterface*) {} >-+ virtual void RemoveSink(AudioTrackSinkInterface*) {} >- }; >- >- // Interface of the audio processor used by the audio track to collect >-@@ -288,7 +288,7 @@ class AudioTrackInterface : public MediaStreamTrackInterface { >- // Return true on success, otherwise false. >- // TODO(deadbeef): Change the interface to int GetSignalLevel() and pure >- // virtual after it's implemented in chromium. >-- virtual bool GetSignalLevel(int* level) { return false; } >-+ virtual bool GetSignalLevel(int*) { return false; } >- >- // Get the audio processor used by the audio track. Return null if the track >- // does not have any processor. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/peerconnectioninterface.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/peerconnectioninterface.h >-index a1e7d7ee2fb..76f7b28945c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/peerconnectioninterface.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/peerconnectioninterface.h >-@@ -629,12 +629,12 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // Errors: >- // - INVALID_PARAMETER: |track| is null. >- virtual RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> >-- AddTransceiver(rtc::scoped_refptr<MediaStreamTrackInterface> track) { >-+ AddTransceiver(rtc::scoped_refptr<MediaStreamTrackInterface>) { >- return RTCError(RTCErrorType::INTERNAL_ERROR, "not implemented"); >- } >- virtual RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> >-- AddTransceiver(rtc::scoped_refptr<MediaStreamTrackInterface> track, >-- const RtpTransceiverInit& init) { >-+ AddTransceiver(rtc::scoped_refptr<MediaStreamTrackInterface>, >-+ const RtpTransceiverInit&) { >- return RTCError(RTCErrorType::INTERNAL_ERROR, "not implemented"); >- } >- >-@@ -644,12 +644,12 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // - INVALID_PARAMETER: |media_type| is not MEDIA_TYPE_AUDIO or >- // MEDIA_TYPE_VIDEO. >- virtual RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> >-- AddTransceiver(cricket::MediaType media_type) { >-+ AddTransceiver(cricket::MediaType) { >- return RTCError(RTCErrorType::INTERNAL_ERROR, "not implemented"); >- } >- virtual RTCErrorOr<rtc::scoped_refptr<RtpTransceiverInterface>> >-- AddTransceiver(cricket::MediaType media_type, >-- const RtpTransceiverInit& init) { >-+ AddTransceiver(cricket::MediaType, >-+ const RtpTransceiverInit&) { >- return RTCError(RTCErrorType::INTERNAL_ERROR, "not implemented"); >- } >- >-@@ -675,8 +675,8 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // |stream_id| is used to populate the msid attribute; if empty, one will >- // be generated automatically. >- virtual rtc::scoped_refptr<RtpSenderInterface> CreateSender( >-- const std::string& kind, >-- const std::string& stream_id) { >-+ const std::string&, >-+ const std::string&) { >- return rtc::scoped_refptr<RtpSenderInterface>(); >- } >- >-@@ -719,7 +719,7 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // TODO(hbos): Default implementation that does nothing only exists as to not >- // break third party projects. As soon as they have been updated this should >- // be changed to "= 0;". >-- virtual void GetStats(RTCStatsCollectorCallback* callback) {} >-+ virtual void GetStats(RTCStatsCollectorCallback*) {} >- >- // Create a data channel with the provided config, or default config if none >- // is provided. Note that an offer/answer negotiation is still necessary >-@@ -760,23 +760,23 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- >- // Create a new offer. >- // The CreateSessionDescriptionObserver callback will be called when done. >-- virtual void CreateOffer(CreateSessionDescriptionObserver* observer, >-- const MediaConstraintsInterface* constraints) {} >-+ virtual void CreateOffer(CreateSessionDescriptionObserver*, >-+ const MediaConstraintsInterface*) {} >- >- // TODO(jiayl): remove the default impl and the old interface when chromium >- // code is updated. >-- virtual void CreateOffer(CreateSessionDescriptionObserver* observer, >-- const RTCOfferAnswerOptions& options) {} >-+ virtual void CreateOffer(CreateSessionDescriptionObserver*, >-+ const RTCOfferAnswerOptions&) {} >- >- // Create an answer to an offer. >- // The CreateSessionDescriptionObserver callback will be called when done. >-- virtual void CreateAnswer(CreateSessionDescriptionObserver* observer, >-- const RTCOfferAnswerOptions& options) {} >-+ virtual void CreateAnswer(CreateSessionDescriptionObserver*, >-+ const RTCOfferAnswerOptions&) {} >- // Deprecated - use version above. >- // TODO(hta): Remove and remove default implementations when all callers >- // are updated. >-- virtual void CreateAnswer(CreateSessionDescriptionObserver* observer, >-- const MediaConstraintsInterface* constraints) {} >-+ virtual void CreateAnswer(CreateSessionDescriptionObserver*, >-+ const MediaConstraintsInterface*) {} >- >- // Sets the local session description. >- // The PeerConnection takes the ownership of |desc| even if it fails. >-@@ -789,19 +789,19 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // The PeerConnection takes the ownership of |desc| even if it fails. >- // The |observer| callback will be called when done. >- // TODO(hbos): Remove when Chrome implements the new signature. >-- virtual void SetRemoteDescription(SetSessionDescriptionObserver* observer, >-- SessionDescriptionInterface* desc) {} >-+ virtual void SetRemoteDescription(SetSessionDescriptionObserver*, >-+ SessionDescriptionInterface*) {} >- // TODO(hbos): Make pure virtual when Chrome has updated its signature. >- virtual void SetRemoteDescription( >-- std::unique_ptr<SessionDescriptionInterface> desc, >-- rtc::scoped_refptr<SetRemoteDescriptionObserverInterface> observer) {} >-+ std::unique_ptr<SessionDescriptionInterface>, >-+ rtc::scoped_refptr<SetRemoteDescriptionObserverInterface>) {} >- // Deprecated; Replaced by SetConfiguration. >- // TODO(deadbeef): Remove once Chrome is moved over to SetConfiguration. >-- virtual bool UpdateIce(const IceServers& configuration, >-- const MediaConstraintsInterface* constraints) { >-+ virtual bool UpdateIce(const IceServers&, >-+ const MediaConstraintsInterface*) { >- return false; >- } >-- virtual bool UpdateIce(const IceServers& configuration) { return false; } >-+ virtual bool UpdateIce(const IceServers&) { return false; } >- >- // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of >- // PeerConnectionInterface implement it. >-@@ -833,14 +833,14 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // TODO(deadbeef): Make this pure virtual once all Chrome subclasses of >- // PeerConnectionInterface implement it. >- virtual bool SetConfiguration( >-- const PeerConnectionInterface::RTCConfiguration& config, >-- RTCError* error) { >-+ const PeerConnectionInterface::RTCConfiguration&, >-+ RTCError*) { >- return false; >- } >- // Version without error output param for backwards compatibility. >- // TODO(deadbeef): Remove once chromium is updated. >- virtual bool SetConfiguration( >-- const PeerConnectionInterface::RTCConfiguration& config) { >-+ const PeerConnectionInterface::RTCConfiguration&) { >- return false; >- } >- >-@@ -854,7 +854,7 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // continual gathering, to avoid an ever-growing list of candidates as >- // networks come and go. >- virtual bool RemoveIceCandidates( >-- const std::vector<cricket::Candidate>& candidates) { >-+ const std::vector<cricket::Candidate>&) { >- return false; >- } >- >-@@ -884,8 +884,7 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // ownership is passed with std::unique_ptr >- // TODO(alexnarest): Make this pure virtual when tests will be updated >- virtual void SetBitrateAllocationStrategy( >-- std::unique_ptr<rtc::BitrateAllocationStrategy> >-- bitrate_allocation_strategy) {} >-+ std::unique_ptr<rtc::BitrateAllocationStrategy>) {} >- >- // Enable/disable playout of received audio streams. Enabled by default. Note >- // that even if playout is enabled, streams will only be played out if the >-@@ -894,13 +893,13 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // for audio data every 10ms to ensure that audio processing happens and the >- // audio statistics are updated. >- // TODO(henrika): deprecate and remove this. >-- virtual void SetAudioPlayout(bool playout) {} >-+ virtual void SetAudioPlayout(bool) {} >- >- // Enable/disable recording of transmitted audio streams. Enabled by default. >- // Note that even if recording is enabled, streams will only be recorded if >- // the appropriate SDP is also applied. >- // TODO(henrika): deprecate and remove this. >-- virtual void SetAudioRecording(bool recording) {} >-+ virtual void SetAudioRecording(bool) {} >- >- // Returns the current SignalingState. >- virtual SignalingState signaling_state() = 0; >-@@ -919,8 +918,8 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // automatically after 10 minutes have passed, or when the StopRtcEventLog >- // function is called. >- // TODO(eladalon): Deprecate and remove this. >-- virtual bool StartRtcEventLog(rtc::PlatformFile file, >-- int64_t max_size_bytes) { >-+ virtual bool StartRtcEventLog(rtc::PlatformFile, >-+ int64_t) { >- return false; >- } >- >-@@ -928,8 +927,8 @@ class PeerConnectionInterface : public rtc::RefCountInterface { >- // |output| and passes it on to Call, which will take the ownership. If the >- // operation fails the output will be closed and deallocated. The event log >- // will send serialized events to the output object every |output_period_ms|. >-- virtual bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput> output, >-- int64_t output_period_ms) { >-+ virtual bool StartRtcEventLog(std::unique_ptr<RtcEventLogOutput>, >-+ int64_t) { >- return false; >- } >- >-@@ -1002,16 +1001,16 @@ class PeerConnectionObserver { >- // TODO(honghaiz): Make this a pure virtual method when all its subclasses >- // implement it. >- virtual void OnIceCandidatesRemoved( >-- const std::vector<cricket::Candidate>& candidates) {} >-+ const std::vector<cricket::Candidate>&) {} >- >- // Called when the ICE connection receiving status changes. >-- virtual void OnIceConnectionReceivingChange(bool receiving) {} >-+ virtual void OnIceConnectionReceivingChange(bool) {} >- >- // This is called when a receiver and its track is created. >- // TODO(zhihuang): Make this pure virtual when all subclasses implement it. >- virtual void OnAddTrack( >-- rtc::scoped_refptr<RtpReceiverInterface> receiver, >-- const std::vector<rtc::scoped_refptr<MediaStreamInterface>>& streams) {} >-+ rtc::scoped_refptr<RtpReceiverInterface>, >-+ const std::vector<rtc::scoped_refptr<MediaStreamInterface>>&) {} >- >- // TODO(hbos,deadbeef): Add |OnAssociatedStreamsUpdated| with |receiver| and >- // |streams| as arguments. This should be called when an existing receiver its >-@@ -1030,7 +1029,7 @@ class PeerConnectionObserver { >- // no longer removed, deprecate and remove this callback. >- // TODO(hbos,deadbeef): Make pure virtual when all subclasses implement it. >- virtual void OnRemoveTrack( >-- rtc::scoped_refptr<RtpReceiverInterface> receiver) {} >-+ rtc::scoped_refptr<RtpReceiverInterface>) {} >- >- protected: >- // Dtor protected as objects shouldn't be deleted via this interface. >-@@ -1133,7 +1132,7 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface { >- // TODO(deadbeef): Make pure virtual once downstream mock PC factory classes >- // are updated. >- virtual rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource( >-- std::unique_ptr<cricket::VideoCapturer> capturer) { >-+ std::unique_ptr<cricket::VideoCapturer>) { >- return nullptr; >- } >- >-@@ -1144,8 +1143,8 @@ class PeerConnectionFactoryInterface : public rtc::RefCountInterface { >- // |constraints| is only used for the invocation of this method, and can >- // safely be destroyed afterwards. >- virtual rtc::scoped_refptr<VideoTrackSourceInterface> CreateVideoSource( >-- std::unique_ptr<cricket::VideoCapturer> capturer, >-- const MediaConstraintsInterface* constraints) { >-+ std::unique_ptr<cricket::VideoCapturer>, >-+ const MediaConstraintsInterface*) { >- return nullptr; >- } >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/umametrics.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/umametrics.h >-index c5125985233..0d66a5e51fe 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/umametrics.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/umametrics.h >-@@ -116,9 +116,9 @@ class MetricsObserverInterface : public rtc::RefCountInterface { >- // |type| is the type of the enum counter to be incremented. |counter| >- // is the particular counter in that type. |counter_max| is the next sequence >- // number after the highest counter. >-- virtual void IncrementEnumCounter(PeerConnectionEnumCounterType type, >-- int counter, >-- int counter_max) {} >-+ virtual void IncrementEnumCounter(PeerConnectionEnumCounterType, >-+ int, >-+ int) {} >- >- // This is used to handle sparse counters like SSL cipher suites. >- // TODO(guoweis): Remove the implementation once the dependency's interface >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_decoder.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_decoder.h >-index 5897901346c..7d3a7f59781 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_decoder.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_decoder.h >-@@ -36,7 +36,7 @@ class DecodedImageCallback { >- // decode time excluding waiting time for any previous pending frame to >- // return. This is necessary for breaking positive feedback in the delay >- // estimation when the decoder has a single output buffer. >-- virtual int32_t Decoded(VideoFrame& decodedImage, int64_t decode_time_ms) { >-+ virtual int32_t Decoded(VideoFrame& decodedImage, int64_t /* decode_time_ms */) { >- // The default implementation ignores custom decode time value. >- return Decoded(decodedImage); >- } >-@@ -44,16 +44,16 @@ class DecodedImageCallback { >- // updated. >- virtual void Decoded(VideoFrame& decodedImage, >- rtc::Optional<int32_t> decode_time_ms, >-- rtc::Optional<uint8_t> qp) { >-+ rtc::Optional<uint8_t> /* qp */) { >- Decoded(decodedImage, >- decode_time_ms ? static_cast<int32_t>(*decode_time_ms) : -1); >- } >- >-- virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId) { >-+ virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t /* pictureId */) { >- return -1; >- } >- >-- virtual int32_t ReceivedDecodedFrame(const uint64_t pictureId) { return -1; } >-+ virtual int32_t ReceivedDecodedFrame(const uint64_t /* pictureId */) { return -1; } >- }; >- >- class VideoDecoder { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_encoder.h b/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_encoder.h >-index eb401afded9..64e33069099 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_encoder.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/video_codecs/video_encoder.h >-@@ -74,7 +74,7 @@ class EncodedImageCallback { >- // Deprecated. TODO(ilnik): Remove this in few weeks. >- virtual void OnDroppedFrame() {} >- >-- virtual void OnDroppedFrame(DropReason reason) {} >-+ virtual void OnDroppedFrame(DropReason) {} >- }; >- >- class VideoEncoder { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/include/frame_callback.h b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/include/frame_callback.h >-index 21019652870..0ab06a9a026 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/include/frame_callback.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/include/frame_callback.h >-@@ -49,7 +49,7 @@ struct EncodedFrame { >- class EncodedFrameObserver { >- public: >- virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) = 0; >-- virtual void OnEncodeTiming(int64_t capture_ntp_ms, int encode_duration_ms) {} >-+ virtual void OnEncodeTiming(int64_t, int) {} >- >- protected: >- virtual ~EncodedFrameObserver() {} >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/logging/rtc_event_log/rtc_event_log.h b/Source/ThirdParty/libwebrtc/Source/webrtc/logging/rtc_event_log/rtc_event_log.h >-index 89b4fc1a086..89ace2c9e95 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/logging/rtc_event_log/rtc_event_log.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/logging/rtc_event_log/rtc_event_log.h >-@@ -41,7 +41,7 @@ class RtcEventLog { >- // TODO(nisse): webrtc::Clock is deprecated. Delete this method and >- // above forward declaration of Clock when >- // webrtc/system_wrappers/include/clock.h is deleted. >-- static std::unique_ptr<RtcEventLog> Create(const Clock* clock, >-+ static std::unique_ptr<RtcEventLog> Create(const Clock*, >- EncodingType encoding_type) { >- return Create(encoding_type); >- } >-@@ -65,12 +65,12 @@ class RtcEventLog { >- // No-op implementation is used if flag is not set, or in tests. >- class RtcEventLogNullImpl : public RtcEventLog { >- public: >-- bool StartLogging(std::unique_ptr<RtcEventLogOutput> output, >-- int64_t output_period_ms) override { >-+ bool StartLogging(std::unique_ptr<RtcEventLogOutput>, >-+ int64_t) override { >- return false; >- } >- void StopLogging() override {} >-- void Log(std::unique_ptr<RtcEvent> event) override {} >-+ void Log(std::unique_ptr<RtcEvent>) override {} >- }; >- >- } // namespace webrtc >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/mediachannel.h b/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/mediachannel.h >-index 4826b2dc4a7..1a409615467 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/mediachannel.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/media/base/mediachannel.h >-@@ -1228,13 +1228,13 @@ class DataMediaChannel : public MediaChannel { >- virtual bool SetRecvParameters(const DataRecvParameters& params) = 0; >- >- // TODO(pthatcher): Implement this. >-- virtual bool GetStats(DataMediaInfo* info) { return true; } >-+ virtual bool GetStats(DataMediaInfo*) { return true; } >- >- virtual bool SetSend(bool send) = 0; >- virtual bool SetReceive(bool receive) = 0; >- >-- virtual void OnNetworkRouteChanged(const std::string& transport_name, >-- const rtc::NetworkRoute& network_route) {} >-+ virtual void OnNetworkRouteChanged(const std::string&, >-+ const rtc::NetworkRoute&) {} >- >- virtual bool SendData( >- const SendDataParams& params, >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/include/audio_device.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/include/audio_device.h >-index c096a8398cd..754c4e16ef9 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/include/audio_device.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/include/audio_device.h >-@@ -143,29 +143,29 @@ class AudioDeviceModule : public rtc::RefCountInterface { >- virtual int32_t SetStereoRecording(bool enable) = 0; >- virtual int32_t StereoRecording(bool* enabled) const = 0; >- // TODO(bugs.webrtc.org/7306): deprecated. >-- virtual int32_t SetRecordingChannel(const ChannelType channel) { return -1; } >-- virtual int32_t RecordingChannel(ChannelType* channel) const { return -1; } >-+ virtual int32_t SetRecordingChannel(const ChannelType) { return -1; } >-+ virtual int32_t RecordingChannel(ChannelType*) const { return -1; } >- >- // Playout delay >- virtual int32_t PlayoutDelay(uint16_t* delayMS) const = 0; >- >- // TODO(bugs.webrtc.org/7306): deprecated (to be removed). >-- virtual int32_t SetRecordingSampleRate(const uint32_t samplesPerSec) { >-+ virtual int32_t SetRecordingSampleRate(const uint32_t) { >- return -1; >- } >-- virtual int32_t RecordingSampleRate(uint32_t* samplesPerSec) const { >-+ virtual int32_t RecordingSampleRate(uint32_t*) const { >- return -1; >- } >-- virtual int32_t SetPlayoutSampleRate(const uint32_t samplesPerSec) { >-+ virtual int32_t SetPlayoutSampleRate(const uint32_t) { >- return -1; >- } >-- virtual int32_t PlayoutSampleRate(uint32_t* samplesPerSec) const { >-+ virtual int32_t PlayoutSampleRate(uint32_t*) const { >- return -1; >- } >- >- // TODO(bugs.webrtc.org/7306): deprecated (to be removed). >-- virtual int32_t SetLoudspeakerStatus(bool enable) { return -1; } >-- virtual int32_t GetLoudspeakerStatus(bool* enabled) const { return -1; } >-+ virtual int32_t SetLoudspeakerStatus(bool) { return -1; } >-+ virtual int32_t GetLoudspeakerStatus(bool*) const { return -1; } >- >- // Only supported on Android. >- virtual bool BuiltInAECIsAvailable() const = 0; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/icetransportinternal.h b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/icetransportinternal.h >-index 0a71162eea1..16f6b699a9b 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/icetransportinternal.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/icetransportinternal.h >-@@ -62,7 +62,7 @@ class IceTransportInternal : public rtc::PacketTransportInternal { >- >- // TODO(zhihuang): Remove this once it's no longer called in >- // remoting/protocol/libjingle_transport_factory.cc >-- virtual void SetIceProtocolType(IceProtocolType type) {} >-+ virtual void SetIceProtocolType(IceProtocolType) {} >- >- virtual void SetIceCredentials(const std::string& ice_ufrag, >- const std::string& ice_pwd); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/port.h b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/port.h >-index 2957fd8b742..380fd896933 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/port.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/port.h >-@@ -380,7 +380,7 @@ class Port : public PortInterface, public rtc::MessageHandler, >- } >- >- // Extra work to be done in subclasses when a connection is destroyed. >-- virtual void HandleConnectionDestroyed(Connection* conn) {} >-+ virtual void HandleConnectionDestroyed(Connection*) {} >- >- private: >- void Construct(); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stun.h b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stun.h >-index 6ff07b5766e..6ecd40d1779 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stun.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stun.h >-@@ -218,7 +218,7 @@ class StunAttribute { >- virtual StunAttributeValueType value_type() const = 0; >- >- // Only XorAddressAttribute needs this so far. >-- virtual void SetOwner(StunMessage* owner) {} >-+ virtual void SetOwner(StunMessage*) {} >- >- // Reads the body (not the type or length) for this type of attribute from >- // the given buffer. Return value is true if successful. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.h b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.h >-index 7bb04664089..9bca20ae20b 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/p2p/base/stunrequest.h >-@@ -118,11 +118,11 @@ class StunRequest : public rtc::MessageHandler { >- >- // Fills in a request object to be sent. Note that request's transaction ID >- // will already be set and cannot be changed. >-- virtual void Prepare(StunMessage* request) {} >-+ virtual void Prepare(StunMessage*) {} >- >- // Called when the message receives a response or times out. >-- virtual void OnResponse(StunMessage* response) {} >-- virtual void OnErrorResponse(StunMessage* response) {} >-+ virtual void OnResponse(StunMessage*) {} >-+ virtual void OnErrorResponse(StunMessage*) {} >- virtual void OnTimeout() {} >- // Called when the message is sent. >- virtual void OnSent(); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/messagehandler.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/messagehandler.h >-index ff953f7898d..dec3b8b86a0 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/messagehandler.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/messagehandler.h >-@@ -40,7 +40,7 @@ class FunctorMessageHandler : public MessageHandler { >- public: >- explicit FunctorMessageHandler(FunctorT&& functor) >- : functor_(std::forward<FunctorT>(functor)) {} >-- virtual void OnMessage(Message* msg) { >-+ virtual void OnMessage(Message*) { >- result_ = functor_(); >- } >- const ReturnT& result() const { return result_; } >-@@ -60,7 +60,7 @@ class FunctorMessageHandler<void, FunctorT> : public MessageHandler { >- public: >- explicit FunctorMessageHandler(const FunctorT& functor) >- : functor_(functor) {} >-- virtual void OnMessage(Message* msg) { >-+ virtual void OnMessage(Message*) { >- functor_(); >- } >- void result() const {} >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/network.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/network.h >-index 5755699fcdf..a1b5c4fa68a 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/network.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/network.h >-@@ -117,7 +117,7 @@ class NetworkManager : public DefaultLocalAddressProvider { >- // can optionally be called after GetNetworks. >- // >- // TODO(guoweis): remove this body when chromium implements this. >-- virtual void GetAnyAddressNetworks(NetworkList* networks) {} >-+ virtual void GetAnyAddressNetworks(NetworkList*) {} >- >- // Dumps the current list of networks in the network manager. >- virtual void DumpNetworks() {} >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions_impl.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions_impl.h >-index 9b4f1c6483d..0174a83d2f5 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions_impl.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions_impl.h >-@@ -101,7 +101,7 @@ struct RangeCheckImpl {}; >- // Dst range always contains the result: nothing to check. >- template <typename Dst, typename Src, DstSign IsDstSigned, SrcSign IsSrcSigned> >- struct RangeCheckImpl<Dst, Src, IsDstSigned, IsSrcSigned, CONTAINS_RANGE> { >-- static RangeCheckResult Check(Src value) { return TYPE_VALID; } >-+ static RangeCheckResult Check(Src) { return TYPE_VALID; } >- }; >- >- // Signed to signed narrowing. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/socketserver.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/socketserver.h >-index e29884e6b3c..38543693d37 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/socketserver.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/socketserver.h >-@@ -35,7 +35,7 @@ class SocketServer : public SocketFactory { >- // When the socket server is installed into a Thread, this function is >- // called to allow the socket server to use the thread's message queue for >- // any messaging that it might need to perform. >-- virtual void SetMessageQueue(MessageQueue* queue) {} >-+ virtual void SetMessageQueue(MessageQueue*) {} >- >- // Sleeps until: >- // 1) cms milliseconds have elapsed (unless cms == kForever) >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stream.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stream.h >-index 171a09f1e00..c959c228ea8 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stream.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stream.h >-@@ -132,7 +132,7 @@ class StreamInterface : public MessageHandler { >- // processed. Read and ConsumeReadData invalidate the buffer returned by >- // GetReadData. >- virtual const void* GetReadData(size_t* data_len); >-- virtual void ConsumeReadData(size_t used) {} >-+ virtual void ConsumeReadData(size_t) {} >- >- // GetWriteBuffer returns a pointer to a buffer which is owned by the stream. >- // The buffer has a capacity of buf_len bytes. null is returned if there is >-@@ -146,7 +146,7 @@ class StreamInterface : public MessageHandler { >- // when it is available. If the requested amount is too large, return an >- // error. >- virtual void* GetWriteBuffer(size_t* buf_len); >-- virtual void ConsumeWriteBuffer(size_t used) {} >-+ virtual void ConsumeWriteBuffer(size_t) {} >- >- // Write data_len bytes found in data, circumventing any throttling which >- // would could cause SR_BLOCK to be returned. Returns true if all the data >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0005-Fix-RTC_FATAL.patch b/Source/ThirdParty/libwebrtc/WebKit/0005-Fix-RTC_FATAL.patch >deleted file mode 100644 >index 43aa5a00dcd..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0005-Fix-RTC_FATAL.patch >+++ /dev/null >@@ -1,537 +0,0 @@ >-From 62e7f44af723f2f7f28038a9f08355a29cb0dc24 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:56:05 -0800 >-Subject: [PATCH 5/8] Fix RTC_FATAL >- >---- >- .../api/audio_codecs/ilbc/audio_encoder_ilbc.cc | 2 +- >- .../libwebrtc/Source/webrtc/api/mediatypes.cc | 4 +-- >- .../webrtc/common_video/video_frame_buffer.cc | 2 +- >- .../audio_coding/acm2/audio_coding_module.cc | 2 +- >- .../modules/audio_coding/acm2/rent_a_codec.cc | 4 +-- >- .../audio_coding/codecs/cng/audio_encoder_cng.cc | 2 +- >- .../audio_coding/codecs/ilbc/audio_encoder_ilbc.cc | 4 +-- >- .../audio_coding/neteq/tools/neteq_rtpplay.cc | 2 +- >- .../modules/audio_coding/neteq/tools/neteq_test.cc | 4 +-- >- .../audio_coding/neteq/tools/rtp_file_source.cc | 2 +- >- .../audio_device/android/audio_device_template.h | 30 +++++++++++----------- >- .../audio_device/android/audio_record_jni.cc | 2 +- >- .../quality_assessment/fake_polqa.cc | 2 +- >- .../audio_processing/test/wav_based_simulator.cc | 2 +- >- .../libwebrtc/Source/webrtc/ortc/ortcfactory.cc | 4 +-- >- .../Source/webrtc/ortc/rtpparametersconversion.cc | 2 +- >- .../libwebrtc/Source/webrtc/rtc_base/checks.h | 6 ++--- >- .../libwebrtc/Source/webrtc/rtc_base/flags.cc | 6 ++--- >- .../webrtc/rtc_base/numerics/safe_conversions.h | 4 +-- >- .../Source/webrtc/rtc_base/opensslidentity.cc | 8 +++--- >- .../Source/webrtc/test/rtp_file_reader.cc | 4 +-- >- .../Source/webrtc/voice_engine/utility.cc | 4 +-- >- 22 files changed, 51 insertions(+), 51 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >-index a7c68ffcf02..6db88402e39 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/audio_codecs/ilbc/audio_encoder_ilbc.cc >-@@ -33,7 +33,7 @@ int GetIlbcBitrate(int ptime) { >- // 50 bytes per frame of 30 ms => (approx) 13333 bits/s. >- return 13333; >- default: >-- FATAL(); >-+ RTC_FATAL(); >- } >- } >- } // namespace >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >-index 599542db08f..140d0ae9625 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/api/mediatypes.cc >-@@ -28,7 +28,7 @@ std::string MediaTypeToString(MediaType type) { >- case MEDIA_TYPE_DATA: >- return kMediaTypeData; >- } >-- FATAL(); >-+ RTC_FATAL(); >- // Not reachable; avoids compile warning. >- return ""; >- } >-@@ -41,7 +41,7 @@ MediaType MediaTypeFromString(const std::string& type_str) { >- } else if (type_str == kMediaTypeData) { >- return MEDIA_TYPE_DATA; >- } >-- FATAL(); >-+ RTC_FATAL(); >- // Not reachable; avoids compile warning. >- return static_cast<MediaType>(-1); >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >-index 88c8ca4a5d4..c05f72e6d17 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/common_video/video_frame_buffer.cc >-@@ -253,7 +253,7 @@ rtc::scoped_refptr<PlanarYuvBuffer> WrapYuvBuffer( >- return WrapI444Buffer(width, height, y_plane, y_stride, u_plane, u_stride, >- v_plane, v_stride, no_longer_used); >- default: >-- FATAL() << "Unexpected frame buffer type."; >-+ RTC_FATAL() << "Unexpected frame buffer type."; >- return nullptr; >- } >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >-index 18325f41590..f9c9690e98e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/audio_coding_module.cc >-@@ -1145,7 +1145,7 @@ int AudioCodingModuleImpl::SetOpusApplication(OpusApplicationMode application) { >- app = AudioEncoder::Application::kAudio; >- break; >- default: >-- FATAL(); >-+ RTC_FATAL(); >- return 0; >- } >- return encoder_stack_->SetApplication(app) ? 0 : -1; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >-index 78db38dad60..4a1746e3da9 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/acm2/rent_a_codec.cc >-@@ -215,7 +215,7 @@ std::unique_ptr<AudioEncoder> CreateCngEncoder( >- config.vad_mode = Vad::kVadVeryAggressive; >- break; >- default: >-- FATAL(); >-+ RTC_FATAL(); >- } >- return std::unique_ptr<AudioEncoder>(new AudioEncoderCng(std::move(config))); >- } >-@@ -230,7 +230,7 @@ std::unique_ptr<AudioDecoder> CreateIsacDecoder( >- return std::unique_ptr<AudioDecoder>( >- new AudioDecoderIsacFloatImpl(sample_rate_hz, bwinfo)); >- #else >-- FATAL() << "iSAC is not supported."; >-+ RTC_FATAL() << "iSAC is not supported."; >- return std::unique_ptr<AudioDecoder>(); >- #endif >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >-index 78148ab3504..5a043ecbccb 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/cng/audio_encoder_cng.cc >-@@ -139,7 +139,7 @@ AudioEncoder::EncodedInfo AudioEncoderCng::EncodeImpl( >- break; >- } >- case Vad::kError: { >-- FATAL(); // Fails only if fed invalid data. >-+ RTC_FATAL(); // Fails only if fed invalid data. >- break; >- } >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >-index 6ddc078f095..e108c412ceb 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/codecs/ilbc/audio_encoder_ilbc.cc >-@@ -40,7 +40,7 @@ int GetIlbcBitrate(int ptime) { >- // 50 bytes per frame of 30 ms => (approx) 13333 bits/s. >- return 13333; >- default: >-- FATAL(); >-+ RTC_FATAL(); >- } >- } >- >-@@ -148,7 +148,7 @@ size_t AudioEncoderIlbcImpl::RequiredOutputSizeBytes() const { >- case 3: return 50; >- case 4: return 2 * 38; >- case 6: return 2 * 50; >-- default: FATAL(); >-+ default: RTC_FATAL(); >- } >- } >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_rtpplay.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_rtpplay.cc >-index 2657bfaeb5b..4137f8e0c4f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_rtpplay.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_rtpplay.cc >-@@ -171,7 +171,7 @@ std::string CodecName(NetEqDecoder codec) { >- case NetEqDecoder::kDecoderCNGswb48kHz: >- return "comfort noise (48 kHz)"; >- default: >-- FATAL(); >-+ RTC_FATAL(); >- return "undefined"; >- } >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_test.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_test.cc >-index 39d95495779..295111a97d9 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_test.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/neteq_test.cc >-@@ -21,12 +21,12 @@ void DefaultNetEqTestErrorCallback::OnInsertPacketError( >- const NetEqInput::PacketData& packet) { >- std::cerr << "InsertPacket returned an error." << std::endl; >- std::cerr << "Packet data: " << packet.ToString() << std::endl; >-- FATAL(); >-+ RTC_FATAL(); >- } >- >- void DefaultNetEqTestErrorCallback::OnGetAudioError() { >- std::cerr << "GetAudio returned an error." << std::endl; >-- FATAL(); >-+ RTC_FATAL(); >- } >- >- NetEqTest::NetEqTest(const NetEq::Config& config, >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >-index c9ae5f2e714..d1b1008d704 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_coding/neteq/tools/rtp_file_source.cc >-@@ -93,7 +93,7 @@ bool RtpFileSource::OpenFile(const std::string& file_name) { >- return true; >- rtp_reader_.reset(RtpFileReader::Create(RtpFileReader::kPcap, file_name)); >- if (!rtp_reader_) { >-- FATAL() << "Couldn't open input file as either a rtpdump or .pcap. Note " >-+ RTC_FATAL() << "Couldn't open input file as either a rtpdump or .pcap. Note " >- "that .pcapng is not supported."; >- } >- return true; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_device_template.h b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_device_template.h >-index 75dbaf315f5..a4ef5dfa310 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_device_template.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_device_template.h >-@@ -103,14 +103,14 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { >- int32_t PlayoutDeviceName(uint16_t index, >- char name[kAdmMaxDeviceNameSize], >- char guid[kAdmMaxGuidSize]) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t RecordingDeviceName(uint16_t index, >- char name[kAdmMaxDeviceNameSize], >- char guid[kAdmMaxGuidSize]) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >-@@ -123,7 +123,7 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { >- >- int32_t SetPlayoutDevice( >- AudioDeviceModule::WindowsDeviceType device) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >-@@ -136,7 +136,7 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { >- >- int32_t SetRecordingDevice( >- AudioDeviceModule::WindowsDeviceType device) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >-@@ -217,7 +217,7 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { >- >- int32_t SetAGC(bool enable) override { >- if (enable) { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- } >- return -1; >- } >-@@ -278,52 +278,52 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { >- } >- >- int32_t SetMicrophoneVolume(uint32_t volume) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t MicrophoneVolume(uint32_t& volume) const override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t MaxMicrophoneVolume(uint32_t& maxVolume) const override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t MinMicrophoneVolume(uint32_t& minVolume) const override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t SpeakerMuteIsAvailable(bool& available) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t SetSpeakerMute(bool enable) override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t SpeakerMute(bool& enabled) const override { >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >- int32_t MicrophoneMuteIsAvailable(bool& available) override { >-- FATAL() << "Not implemented"; >-+ RTC_FATAL() << "Not implemented"; >- return -1; >- } >- >- int32_t SetMicrophoneMute(bool enable) override { >-- FATAL() << "Not implemented"; >-+ RTC_FATAL() << "Not implemented"; >- return -1; >- } >- >- int32_t MicrophoneMute(bool& enabled) const override { >-- FATAL() << "Not implemented"; >-+ RTC_FATAL() << "Not implemented"; >- return -1; >- } >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_record_jni.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_record_jni.cc >-index 79f8c8b0f9b..b8a564f06f2 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_record_jni.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/android/audio_record_jni.cc >-@@ -196,7 +196,7 @@ int32_t AudioRecordJni::EnableBuiltInAEC(bool enable) { >- >- int32_t AudioRecordJni::EnableBuiltInAGC(bool enable) { >- // TODO(henrika): possibly remove when no longer used by any client. >-- FATAL() << "Should never be called"; >-+ RTC_FATAL() << "Should never be called"; >- return -1; >- } >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc >-index 62d8ebb84d9..bae652e2835 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/py_quality_assessment/quality_assessment/fake_polqa.cc >-@@ -43,7 +43,7 @@ int main(int argc, char* argv[]) { >- return 0; >- } >- } >-- FATAL() << kErrorMessage; >-+ RTC_FATAL() << kErrorMessage; >- } >- >- } // namespace test >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/wav_based_simulator.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/wav_based_simulator.cc >-index f53d1e5d8d9..6ed8e529416 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/wav_based_simulator.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_processing/test/wav_based_simulator.cc >-@@ -40,7 +40,7 @@ WavBasedSimulator::GetCustomEventChain(const std::string& filename) { >- case '\n': >- break; >- default: >-- FATAL() << "Incorrect custom call order file, reverting to using the " >-+ RTC_FATAL() << "Incorrect custom call order file, reverting to using the " >- "default call order"; >- fclose(stream); >- return WavBasedSimulator::GetDefaultEventChain(); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/ortcfactory.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/ortcfactory.cc >-index 7492dd47aae..b9f0f61e5d8 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/ortcfactory.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/ortcfactory.cc >-@@ -332,7 +332,7 @@ RtpCapabilities OrtcFactory::GetRtpSenderCapabilities( >- return RtpCapabilities(); >- } >- // Not reached; avoids compile warning. >-- FATAL(); >-+ RTC_FATAL(); >- } >- >- RTCErrorOr<std::unique_ptr<OrtcRtpSenderInterface>> >-@@ -397,7 +397,7 @@ RtpCapabilities OrtcFactory::GetRtpReceiverCapabilities( >- return RtpCapabilities(); >- } >- // Not reached; avoids compile warning. >-- FATAL(); >-+ RTC_FATAL(); >- } >- >- RTCErrorOr<std::unique_ptr<OrtcRtpReceiverInterface>> >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/rtpparametersconversion.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/rtpparametersconversion.cc >-index 0a657eca8f3..bc702909e34 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/rtpparametersconversion.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/ortc/rtpparametersconversion.cc >-@@ -62,7 +62,7 @@ RTCErrorOr<cricket::FeedbackParam> ToCricketFeedbackParam( >- return cricket::FeedbackParam(cricket::kRtcpFbParamTransportCc); >- } >- // Not reached; avoids compile warning. >-- FATAL(); >-+ RTC_FATAL(); >- } >- >- template <typename C> >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >-index e9a19e6051f..cf2965fd77e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/checks.h >-@@ -73,7 +73,7 @@ NO_RETURN void rtc_FatalMessage(const char* file, int line, const char* msg); >- // messages if the condition doesn't hold. Prefer them to raw RTC_CHECK and >- // RTC_DCHECK. >- // >--// - FATAL() aborts unconditionally. >-+// - RTC_FATAL() aborts unconditionally. >- // >- // TODO(ajm): Ideally, checks.h would be combined with logging.h, but >- // consolidation with system_wrappers/logging.h should happen first. >-@@ -135,7 +135,7 @@ std::string* MakeCheckOpString(const t1& v1, const t2& v2, const char* names) { >- } >- >- // MSVC doesn't like complex extern templates and DLLs. >--#if !defined(COMPILER_MSVC) >-+#if 0 >- // Commonly used instantiations of MakeCheckOpString<>. Explicitly instantiated >- // in logging.cc. >- extern template std::string* MakeCheckOpString<int, int>( >-@@ -222,7 +222,7 @@ class FatalMessageVoidify { >- #define RTC_NOTREACHED() RTC_DCHECK(RTC_UNREACHABLE_CODE_HIT) >- >- // TODO(bugs.webrtc.org/8454): Add an RTC_ prefix or rename differently. >--#define FATAL() rtc::FatalMessage(__FILE__, __LINE__).stream() >-+#define RTC_FATAL() rtc::FatalMessage(__FILE__, __LINE__).stream() >- // TODO(ajm): Consider adding RTC_NOTIMPLEMENTED macro when >- // base/logging.h and system_wrappers/logging.h are consolidated such that we >- // can match the Chromium behavior. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >-index 4f2b11a9624..1c24a76ace4 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/flags.cc >-@@ -57,7 +57,7 @@ void Flag::SetToDefault() { >- variable_->s = default_.s; >- return; >- } >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- >- >-@@ -68,7 +68,7 @@ static const char* Type2String(Flag::Type type) { >- case Flag::FLOAT: return "float"; >- case Flag::STRING: return "string"; >- } >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- >- >-@@ -87,7 +87,7 @@ static void PrintFlagValue(Flag::Type type, FlagValue* p) { >- printf("%s", p->s); >- return; >- } >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >-index 58efcaa746a..48c212e4d49 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/numerics/safe_conversions.h >-@@ -63,11 +63,11 @@ inline Dst saturated_cast(Src value) { >- >- // Should fail only on attempting to assign NaN to a saturated integer. >- case internal::TYPE_INVALID: >-- FATAL(); >-+ RTC_FATAL(); >- return std::numeric_limits<Dst>::max(); >- } >- >-- FATAL(); >-+ RTC_FATAL(); >- return static_cast<Dst>(value); >- } >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslidentity.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslidentity.cc >-index 85ef176de09..bfb167aacef 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslidentity.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/opensslidentity.cc >-@@ -411,11 +411,11 @@ OpenSSLCertificate* OpenSSLCertificate::GetReference() const { >- std::string OpenSSLCertificate::ToPEMString() const { >- BIO* bio = BIO_new(BIO_s_mem()); >- if (!bio) { >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- if (!PEM_write_bio_X509(bio, x509_)) { >- BIO_free(bio); >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- BIO_write(bio, "\0", 1); >- char* buffer; >-@@ -432,11 +432,11 @@ void OpenSSLCertificate::ToDER(Buffer* der_buffer) const { >- // Calculates the DER representation of the certificate, from scratch. >- BIO* bio = BIO_new(BIO_s_mem()); >- if (!bio) { >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- if (!i2d_X509_bio(bio, x509_)) { >- BIO_free(bio); >-- FATAL() << "unreachable code"; >-+ RTC_FATAL() << "unreachable code"; >- } >- char* data; >- size_t length = BIO_get_mem_data(bio, &data); >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/test/rtp_file_reader.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/test/rtp_file_reader.cc >-index 03674875432..8d7207d4e8a 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/test/rtp_file_reader.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/test/rtp_file_reader.cc >-@@ -90,7 +90,7 @@ class InterleavedRtpFileReader : public RtpFileReaderImpl { >- uint32_t len = 0; >- TRY(ReadUint32(&len, file_)); >- if (packet->length < len) { >-- FATAL() << "Packet is too large to fit: " << len << " bytes vs " >-+ RTC_FATAL() << "Packet is too large to fit: " << len << " bytes vs " >- << packet->length >- << " bytes allocated. Consider increasing the buffer " >- "size"; >-@@ -178,7 +178,7 @@ class RtpDumpReader : public RtpFileReaderImpl { >- // Use 'len' here because a 'plen' of 0 specifies rtcp. >- len -= kPacketHeaderSize; >- if (packet->length < len) { >-- FATAL() << "Packet is too large to fit: " << len << " bytes vs " >-+ RTC_FATAL() << "Packet is too large to fit: " << len << " bytes vs " >- << packet->length >- << " bytes allocated. Consider increasing the buffer " >- "size"; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/voice_engine/utility.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/voice_engine/utility.cc >-index 939870245f1..5caa73ae451 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/voice_engine/utility.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/voice_engine/utility.cc >-@@ -58,7 +58,7 @@ void RemixAndResample(const int16_t* src_data, >- >- if (resampler->InitializeIfNeeded(sample_rate_hz, dst_frame->sample_rate_hz_, >- audio_ptr_num_channels) == -1) { >-- FATAL() << "InitializeIfNeeded failed: sample_rate_hz = " << sample_rate_hz >-+ RTC_FATAL() << "InitializeIfNeeded failed: sample_rate_hz = " << sample_rate_hz >- << ", dst_frame->sample_rate_hz_ = " << dst_frame->sample_rate_hz_ >- << ", audio_ptr_num_channels = " << audio_ptr_num_channels; >- } >-@@ -72,7 +72,7 @@ void RemixAndResample(const int16_t* src_data, >- dst_frame->mutable_data(), >- AudioFrame::kMaxDataSizeSamples); >- if (out_length == -1) { >-- FATAL() << "Resample failed: audio_ptr = " << audio_ptr >-+ RTC_FATAL() << "Resample failed: audio_ptr = " << audio_ptr >- << ", src_length = " << src_length >- << ", dst_frame->mutable_data() = " << dst_frame->mutable_data(); >- } >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0006-Disabling-VP8.patch b/Source/ThirdParty/libwebrtc/WebKit/0006-Disabling-VP8.patch >deleted file mode 100644 >index 9773bf0dab5..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0006-Disabling-VP8.patch >+++ /dev/null >@@ -1,100 +0,0 @@ >-From 201c211d31aa1e9e3b3cef70feff291512efde6d Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:56:52 -0800 >-Subject: [PATCH 6/8] Disabling VP8 >- >---- >- .../libwebrtc/Source/webrtc/media/engine/internaldecoderfactory.cc | 3 ++- >- .../libwebrtc/Source/webrtc/media/engine/internalencoderfactory.cc | 3 ++- >- .../libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc | 6 +++++- >- .../Source/webrtc/modules/video_coding/video_codec_initializer.cc | 6 ++++-- >- 4 files changed, 13 insertions(+), 5 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internaldecoderfactory.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internaldecoderfactory.cc >-index e8cecb79a43..57daca256c4 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internaldecoderfactory.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internaldecoderfactory.cc >-@@ -22,7 +22,8 @@ namespace webrtc { >- std::vector<SdpVideoFormat> InternalDecoderFactory::GetSupportedFormats() >- const { >- std::vector<SdpVideoFormat> formats; >-- formats.push_back(SdpVideoFormat(cricket::kVp8CodecName)); >-+ if (VP8Decoder::IsSupported()) >-+ formats.push_back(SdpVideoFormat(cricket::kVp8CodecName)); >- if (VP9Decoder::IsSupported()) >- formats.push_back(SdpVideoFormat(cricket::kVp9CodecName)); >- for (const SdpVideoFormat& h264_format : SupportedH264Codecs()) >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internalencoderfactory.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internalencoderfactory.cc >-index 5f8479cfb82..0390646add4 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internalencoderfactory.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/media/engine/internalencoderfactory.cc >-@@ -22,7 +22,8 @@ namespace webrtc { >- std::vector<SdpVideoFormat> InternalEncoderFactory::GetSupportedFormats() >- const { >- std::vector<SdpVideoFormat> supported_codecs; >-- supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName)); >-+ if (VP8Encoder::IsSupported()) >-+ supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName)); >- if (webrtc::VP9Encoder::IsSupported()) >- supported_codecs.push_back(SdpVideoFormat(cricket::kVp9CodecName)); >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >-index 2adbca9b712..418b8b7e5ff 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/qp_parser.cc >-@@ -17,13 +17,17 @@ >- namespace webrtc { >- >- bool QpParser::GetQp(const VCMEncodedFrame& frame, int* qp) { >-- switch (frame.CodecSpecific()->codecType) { >-+ switch (frame.CodecSpecific()->codecType) { >-+#if !RTC_DISABLE_VP8 >- case kVideoCodecVP8: >- // QP range: [0, 127]. >- return vp8::GetQp(frame.Buffer(), frame.Length(), qp); >-+#endif >-+#if !RTC_DISABLE_VP9 >- case kVideoCodecVP9: >- // QP range: [0, 255]. >- return vp9::GetQp(frame.Buffer(), frame.Length(), qp); >-+#endif >- default: >- return false; >- } >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >-index 3e1b0e1163b..89f6f0bad9d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/video_coding/video_codec_initializer.cc >-@@ -42,7 +42,7 @@ bool VideoCodecInitializer::SetupCodec( >- *codec = >- VideoEncoderConfigToVideoCodec(config, streams, settings.payload_name, >- settings.payload_type, nack_enabled); >-- >-+#if !defined(RTC_DISABLE_VP8) >- std::unique_ptr<TemporalLayersFactory> tl_factory; >- switch (codec->codecType) { >- case kVideoCodecVP8: { >-@@ -68,7 +68,7 @@ bool VideoCodecInitializer::SetupCodec( >- } >- } >- *bitrate_allocator = CreateBitrateAllocator(*codec, std::move(tl_factory)); >-- >-+#endif >- return true; >- } >- >-@@ -80,9 +80,11 @@ VideoCodecInitializer::CreateBitrateAllocator( >- >- switch (codec.codecType) { >- case kVideoCodecVP8: { >-+#if !defined(RTC_DISABLE_VP8) >- // Set up default VP8 temporal layer factory, if not provided. >- rate_allocator.reset( >- new SimulcastRateAllocator(codec, std::move(tl_factory))); >-+#endif >- } break; >- default: >- rate_allocator.reset(new DefaultVideoBitrateAllocator(codec)); >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0007-Fix-RTC_STRINGIZE.patch b/Source/ThirdParty/libwebrtc/WebKit/0007-Fix-RTC_STRINGIZE.patch >deleted file mode 100644 >index 2a56c84bb4e..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0007-Fix-RTC_STRINGIZE.patch >+++ /dev/null >@@ -1,38 +0,0 @@ >-From efa6c8d735872ad827a9ec5c3c7e09ab5cfac1c1 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:57:16 -0800 >-Subject: [PATCH 7/8] Fix RTC_STRINGIZE >- >---- >- Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h | 2 +- >- Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h | 2 +- >- 2 files changed, 2 insertions(+), 2 deletions(-) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >-index 513bc263651..718d9589348 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/location.h >-@@ -50,7 +50,7 @@ class Location { >- #define RTC_FROM_HERE RTC_FROM_HERE_WITH_FUNCTION(__FUNCTION__) >- >- #define RTC_FROM_HERE_WITH_FUNCTION(function_name) \ >-- ::rtc::Location(function_name, __FILE__ ":" STRINGIZE(__LINE__)) >-+ ::rtc::Location(function_name, __FILE__ ":" RTC_STRINGIZE(__LINE__)) >- >- } // namespace rtc >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >-index aee8d14551d..acf0ba404ca 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/stringize_macros.h >-@@ -33,6 +33,6 @@ >- // Then: >- // STRINGIZE(A) produces "FOO" >- // STRINGIZE(B(y)) produces "myobj->FunctionCall(y)" >--#define STRINGIZE(x) STRINGIZE_NO_EXPANSION(x) >-+#define RTC_STRINGIZE(x) STRINGIZE_NO_EXPANSION(x) >- >- #endif // RTC_BASE_STRINGIZE_MACROS_H_ >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0008-Fix-sanitizer.patch b/Source/ThirdParty/libwebrtc/WebKit/0008-Fix-sanitizer.patch >deleted file mode 100644 >index 18ae7715c54..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0008-Fix-sanitizer.patch >+++ /dev/null >@@ -1,60 +0,0 @@ >-From 826df71603f4e35466cb5330bd18920d503e80b2 Mon Sep 17 00:00:00 2001 >-From: Youenn Fablet <youenn@apple.com> >-Date: Thu, 14 Dec 2017 13:57:39 -0800 >-Subject: [PATCH 8/8] Fix sanitizer >- >---- >- .../libwebrtc/Source/webrtc/rtc_base/sanitizer.h | 16 ++++++++++++++++ >- 1 file changed, 16 insertions(+) >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/sanitizer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/sanitizer.h >-index 1b94e1edf47..96d024883fa 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/sanitizer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/sanitizer.h >-@@ -52,6 +52,10 @@ static inline void rtc_AsanPoison(const volatile void* ptr, >- size_t num_elements) { >- #if RTC_HAS_ASAN >- ASAN_POISON_MEMORY_REGION(ptr, element_size * num_elements); >-+#else >-+ (void)ptr; >-+ (void)element_size; >-+ (void)num_elements; >- #endif >- } >- >-@@ -63,6 +67,10 @@ static inline void rtc_AsanUnpoison(const volatile void* ptr, >- size_t num_elements) { >- #if RTC_HAS_ASAN >- ASAN_UNPOISON_MEMORY_REGION(ptr, element_size * num_elements); >-+#else >-+ (void)ptr; >-+ (void)element_size; >-+ (void)num_elements; >- #endif >- } >- >-@@ -73,6 +81,10 @@ static inline void rtc_MsanMarkUninitialized(const volatile void* ptr, >- size_t num_elements) { >- #if RTC_HAS_MSAN >- __msan_poison(ptr, element_size * num_elements); >-+#else >-+ (void)ptr; >-+ (void)element_size; >-+ (void)num_elements; >- #endif >- } >- >-@@ -84,6 +96,10 @@ static inline void rtc_MsanCheckInitialized(const volatile void* ptr, >- size_t num_elements) { >- #if RTC_HAS_MSAN >- __msan_check_mem_is_initialized(ptr, element_size * num_elements); >-+#else >-+ (void)ptr; >-+ (void)element_size; >-+ (void)num_elements; >- #endif >- } >- >--- >-2.13.5 (Apple Git-94) >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0009-Remove-dispatch_set_target_queue.patch b/Source/ThirdParty/libwebrtc/WebKit/0009-Remove-dispatch_set_target_queue.patch >deleted file mode 100644 >index c61406951b6..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0009-Remove-dispatch_set_target_queue.patch >+++ /dev/null >@@ -1,23 +0,0 @@ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >-index a13e088ede6..675b8005722 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/rtc_base/task_queue_gcd.cc >-@@ -139,7 +139,7 @@ class TaskQueue::Impl : public RefCountInterface { >- TaskQueue::Impl::Impl(const char* queue_name, >- TaskQueue* task_queue, >- Priority priority) >-- : queue_(dispatch_queue_create(queue_name, DISPATCH_QUEUE_SERIAL)), >-+ : queue_(dispatch_queue_create_with_target(queue_name, DISPATCH_QUEUE_SERIAL, dispatch_get_global_queue(TaskQueuePriorityToGCD(priority), 0))), >- context_(new QueueContext(task_queue)) { >- RTC_DCHECK(queue_name); >- RTC_CHECK(queue_); >-@@ -148,9 +148,6 @@ TaskQueue::Impl::Impl(const char* queue_name, >- // to the queue is released. This may run after the TaskQueue object has >- // been deleted. >- dispatch_set_finalizer_f(queue_, &QueueContext::DeleteContext); >-- >-- dispatch_set_target_queue( >-- queue_, dispatch_get_global_queue(TaskQueuePriorityToGCD(priority), 0)); >- } >- >- TaskQueue::Impl::~Impl() { >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0010-Fix-RTCVideoEncoderH264-CVPixelBuffer-leak.patch b/Source/ThirdParty/libwebrtc/WebKit/0010-Fix-RTCVideoEncoderH264-CVPixelBuffer-leak.patch >deleted file mode 100644 >index 83098c349c6..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0010-Fix-RTCVideoEncoderH264-CVPixelBuffer-leak.patch >+++ /dev/null >@@ -1,12 +0,0 @@ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-index 42f940426ae..16a841d9458 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/RTCVideoEncoderH264.mm >-@@ -429,6 +429,7 @@ - (NSInteger)encode:(RTCVideoFrame *)frame >- } >- _frameScaleBuffer.shrink_to_fit(); >- if (![rtcPixelBuffer cropAndScaleTo:pixelBuffer withTempBuffer:_frameScaleBuffer.data()]) { >-+ CVBufferRelease(pixelBuffer); >- return WEBRTC_VIDEO_CODEC_ERROR; >- } >- } >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0011-Fix-AudioDeviceID-array-leak.patch b/Source/ThirdParty/libwebrtc/WebKit/0011-Fix-AudioDeviceID-array-leak.patch >deleted file mode 100644 >index 0bed7f48b6c..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0011-Fix-AudioDeviceID-array-leak.patch >+++ /dev/null >@@ -1,56 +0,0 @@ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/mac/audio_device_mac.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/mac/audio_device_mac.cc >-index c585c32cafc..89ea9317c1f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/mac/audio_device_mac.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/modules/audio_device/mac/audio_device_mac.cc >-@@ -19,6 +19,7 @@ >- #include <ApplicationServices/ApplicationServices.h> >- #include <libkern/OSAtomic.h> // OSAtomicCompareAndSwap() >- #include <mach/mach.h> // mach_task_self() >-+#include <memory> // std::make_unique<>() and std::unique_ptr<>() >- #include <sys/sysctl.h> // sysctlbyname() >- >- namespace webrtc { >-@@ -1564,8 +1565,8 @@ int32_t AudioDeviceMac::GetNumberDevices(const AudioObjectPropertyScope scope, >- return 0; >- } >- >-- AudioDeviceID* deviceIds = (AudioDeviceID*)malloc(size); >- UInt32 numberDevices = size / sizeof(AudioDeviceID); >-+ auto deviceIds = std::make_unique<AudioDeviceID[]>(numberDevices); >- AudioBufferList* bufferList = NULL; >- UInt32 numberScopedDevices = 0; >- >-@@ -1597,7 +1598,7 @@ int32_t AudioDeviceMac::GetNumberDevices(const AudioObjectPropertyScope scope, >- bool listOK = true; >- >- WEBRTC_CA_LOG_ERR(AudioObjectGetPropertyData( >-- kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size, deviceIds)); >-+ kAudioObjectSystemObject, &propertyAddress, 0, NULL, &size, deviceIds.get())); >- if (err != noErr) { >- listOK = false; >- } else { >-@@ -1641,11 +1642,6 @@ int32_t AudioDeviceMac::GetNumberDevices(const AudioObjectPropertyScope scope, >- } >- >- if (!listOK) { >-- if (deviceIds) { >-- free(deviceIds); >-- deviceIds = NULL; >-- } >-- >- if (bufferList) { >- free(bufferList); >- bufferList = NULL; >-@@ -1654,12 +1650,6 @@ int32_t AudioDeviceMac::GetNumberDevices(const AudioObjectPropertyScope scope, >- return -1; >- } >- >-- // Happy ending >-- if (deviceIds) { >-- free(deviceIds); >-- deviceIds = NULL; >-- } >-- >- return numberScopedDevices; >- } >- >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0012-Add-WK-prefix-to-Objective-C-classes-and-protocols.patch b/Source/ThirdParty/libwebrtc/WebKit/0012-Add-WK-prefix-to-Objective-C-classes-and-protocols.patch >deleted file mode 100644 >index 5d78ef037a3..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0012-Add-WK-prefix-to-Objective-C-classes-and-protocols.patch >+++ /dev/null >@@ -1,1076 +0,0 @@ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >-index 1490c89ac5f..5e65230f321 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/WebKit/WebKitUtilities.mm >-@@ -33,6 +33,7 @@ >- #include <webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h> >- >- #if !defined(WEBRTC_IOS) >-+__attribute__((objc_runtime_name("WK_RTCUIApplicationStatusObserver"))) >- @interface RTCUIApplicationStatusObserver : NSObject >- >- + (instancetype)sharedInstance; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >-index a2064df5db9..8ee12b62499 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h >-@@ -12,6 +12,7 @@ >- >- #import <Foundation/Foundation.h> >- >-+__attribute__((objc_runtime_name("WK_RTCUIApplicationStatusObserver"))) >- @interface RTCUIApplicationStatusObserver : NSObject >- >- + (instancetype)sharedInstance; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLI420Renderer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLI420Renderer.h >-index e5987fe22a2..315b1f5a8da 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLI420Renderer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLI420Renderer.h >-@@ -13,5 +13,6 @@ >- #import "RTCMTLRenderer.h" >- >- NS_AVAILABLE(10_11, 9_0) >-+__attribute__((objc_runtime_name("WK_RTCMTLI420Renderer"))) >- @interface RTCMTLI420Renderer : RTCMTLRenderer >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.h >-index 866b7ea17ee..8bbcb204d25 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLNV12Renderer.h >-@@ -13,6 +13,7 @@ >- #import "RTCMTLRenderer.h" >- >- NS_AVAILABLE(10_11, 9_0) >-+__attribute__((objc_runtime_name("WK_RTCMTLNV12Renderer"))) >- @interface RTCMTLNV12Renderer : RTCMTLRenderer >- >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLRenderer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLRenderer.h >-index e279b098b55..110e2124656 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLRenderer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Metal/RTCMTLRenderer.h >-@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN >- /** >- * Protocol defining ability to render RTCVideoFrame in Metal enabled views. >- */ >-+__attribute__((objc_runtime_name("WK_RTCMTLRenderer"))) >- @protocol RTCMTLRenderer<NSObject> >- >- /** >-@@ -49,6 +50,7 @@ NS_ASSUME_NONNULL_BEGIN >- * Implementation of RTCMTLRenderer protocol for rendering native nv12 video frames. >- */ >- NS_AVAILABLE(10_11, 9_0) >-+__attribute__((objc_runtime_name("WK_RTCMTLRenderer"))) >- @interface RTCMTLRenderer : NSObject<RTCMTLRenderer> >- @end >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDtmfSender+Private.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDtmfSender+Private.h >-index 197aeb83a42..04f10e8b399 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDtmfSender+Private.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCDtmfSender+Private.h >-@@ -14,6 +14,7 @@ >- >- NS_ASSUME_NONNULL_BEGIN >- >-+__attribute__((objc_runtime_name("WK_RTCDtmfSender"))) >- @interface RTCDtmfSender : NSObject <RTCDtmfSender> >- >- @property(nonatomic, readonly) rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h >-index b0b6f044884..5b4570310d4 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCVideoRendererAdapter.h >-@@ -18,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN >- * adapter adapts calls made to that interface to the RTCVideoRenderer supplied >- * during construction. >- */ >-+__attribute__((objc_runtime_name("WK_RTCVideoRendererAdapter"))) >- @interface RTCVideoRendererAdapter : NSObject >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h >-index 74cfaeb861f..cb29b692640 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoDecoder.h >-@@ -14,6 +14,7 @@ >- #include "api/video_codecs/video_decoder.h" >- #include "media/base/codec.h" >- >-+__attribute__((objc_runtime_name("WK_RTCWrappedNativeVideoDecoder"))) >- @interface RTCWrappedNativeVideoDecoder : NSObject <RTCVideoDecoder> >- >- - (instancetype)initWithNativeDecoder:(std::unique_ptr<webrtc::VideoDecoder>)decoder; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h >-index 5b95d33eba9..29eff125a54 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/PeerConnection/RTCWrappedNativeVideoEncoder.h >-@@ -15,6 +15,7 @@ >- #include "api/video_codecs/video_encoder.h" >- #include "media/base/codec.h" >- >-+__attribute__((objc_runtime_name("WK_RTCWrappedNativeVideoEncoder"))) >- @interface RTCWrappedNativeVideoEncoder : NSObject <RTCVideoEncoder> >- >- - (instancetype)initWithNativeEncoder:(std::unique_ptr<webrtc::VideoEncoder>)encoder; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/UI/RTCEAGLVideoView.m b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/UI/RTCEAGLVideoView.m >-index 8f379c864ae..8f4da302fab 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/UI/RTCEAGLVideoView.m >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/UI/RTCEAGLVideoView.m >-@@ -23,6 +23,7 @@ >- // refreshes, which should be 30fps. We wrap the display link in order to avoid >- // a retain cycle since CADisplayLink takes a strong reference onto its target. >- // The timer is paused by default. >-+__attribute__((objc_runtime_name("WK_RTCDisplayLinkTimer"))) >- @interface RTCDisplayLinkTimer : NSObject >- >- @property(nonatomic) BOOL isPaused; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCAVFoundationVideoCapturerInternal.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCAVFoundationVideoCapturerInternal.h >-index 8b73a808639..217437aff2d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCAVFoundationVideoCapturerInternal.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCAVFoundationVideoCapturerInternal.h >-@@ -21,6 +21,7 @@ NS_ASSUME_NONNULL_BEGIN >- // It is meant to be owned by an instance of AVFoundationVideoCapturer. >- // The reason for this is because other webrtc objects own cricket::VideoCapturer, which is not >- // ref counted. To prevent bad behavior we do not expose this class directly. >-+__attribute__((objc_runtime_name("WK_RTCAVFoundationVideoCapturerInternal"))) >- @interface RTCAVFoundationVideoCapturerInternal >- : NSObject <AVCaptureVideoDataOutputSampleBufferDelegate> >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCDefaultShader.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCDefaultShader.h >-index ed5125e2e8e..cc2ff4e46be 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCDefaultShader.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCDefaultShader.h >-@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN >- * RTCEAGLVideoView if no external shader is specified. This shader will render >- * the video in a rectangle without any color or geometric transformations. >- */ >-+__attribute__((objc_runtime_name("WK_RTCDefaultShader"))) >- @interface RTCDefaultShader : NSObject<RTCVideoViewShading> >- >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCI420TextureCache.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCI420TextureCache.h >-index 19f1bc99934..6726a8842b7 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCI420TextureCache.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCI420TextureCache.h >-@@ -11,6 +11,7 @@ >- #import "RTCOpenGLDefines.h" >- #import "WebRTC/RTCVideoFrame.h" >- >-+__attribute__((objc_runtime_name("WK_RTCI420TextureCache"))) >- @interface RTCI420TextureCache : NSObject >- >- @property(nonatomic, readonly) GLuint yTexture; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCNV12TextureCache.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCNV12TextureCache.h >-index 9cba8232714..d59b73c9a93 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCNV12TextureCache.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/RTCNV12TextureCache.h >-@@ -14,6 +14,7 @@ >- >- NS_ASSUME_NONNULL_BEGIN >- >-+__attribute__((objc_runtime_name("WK_RTCNV12TextureCache"))) >- @interface RTCNV12TextureCache : NSObject >- >- @property(nonatomic, readonly) GLuint yTexture; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h >-index 85a89e6dd9a..163028eb29d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/Video/objc_frame_buffer.h >-@@ -15,6 +15,7 @@ >- >- #include "common_video/include/video_frame_buffer.h" >- >-+__attribute__((objc_runtime_name("WK_RTCVideoFrameBuffer"))) >- @protocol RTCVideoFrameBuffer; >- >- namespace webrtc { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_decoder_factory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_decoder_factory.h >-index a0106ff83fe..13467e3898e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_decoder_factory.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_decoder_factory.h >-@@ -15,6 +15,7 @@ >- #include "media/base/codec.h" >- #include "media/engine/webrtcvideodecoderfactory.h" >- >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderFactory"))) >- @protocol RTCVideoDecoderFactory; >- >- namespace webrtc { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.h >-index 6cdfc56f548..727922bfe4e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Classes/VideoToolbox/objc_video_encoder_factory.h >-@@ -16,6 +16,7 @@ >- #include "api/video_codecs/video_encoder_factory.h" >- #include "media/engine/webrtcvideoencoderfactory.h" >- >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderFactory"))) >- @protocol RTCVideoEncoderFactory; >- >- namespace webrtc { >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h >-index 6d369b34034..de73b477099 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h >-@@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN >- * counted video source interface. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAVFoundationVideoSource"))) >- @interface RTCAVFoundationVideoSource : RTCVideoSource >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >-index 354634ec39f..e44aa39ae55 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSession.h >-@@ -28,6 +28,7 @@ extern NSInteger const kRTCAudioSessionErrorConfiguration; >- // from AVAudioSession and handle them before calling these delegate methods, >- // at which point applications can perform additional processing if required. >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioSessionDelegate"))) >- @protocol RTCAudioSessionDelegate <NSObject> >- >- @optional >-@@ -91,6 +92,7 @@ RTC_EXPORT >- * case of this is when CallKit activates the audio session for the application >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioSessionActivationDelegate"))) >- @protocol RTCAudioSessionActivationDelegate <NSObject> >- >- /** Called when the audio session is activated outside of the app by iOS. */ >-@@ -109,6 +111,7 @@ RTC_EXPORT >- * activated only once. See |setActive:error:|. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioSession"))) >- @interface RTCAudioSession : NSObject <RTCAudioSessionActivationDelegate> >- >- /** Convenience property to access the AVAudioSession singleton. Callers should >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >-index 6a02751d294..0097246e7c8 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSessionConfiguration.h >-@@ -23,6 +23,7 @@ extern const double kRTCAudioSessionLowComplexityIOBufferDuration; >- >- // Struct to hold configuration values. >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioSessionConfiguration"))) >- @interface RTCAudioSessionConfiguration : NSObject >- >- @property(nonatomic, strong) NSString *category; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >-index 3db31573cb8..7287c31a738 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h >-@@ -16,6 +16,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioSource"))) >- @interface RTCAudioSource : RTCMediaSource >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >-index b83eede528c..bab1b1a0020 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h >-@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN >- @class RTCAudioSource; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCAudioTrack"))) >- @interface RTCAudioTrack : RTCMediaStreamTrack >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >-index 9018aec3d18..9f9a59fc87d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h >-@@ -20,6 +20,7 @@ >- * AVCaptureSession. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCCameraPreviewView"))) >- @interface RTCCameraPreviewView : UIView >- >- /** The capture session being rendered in the view. Capture session >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h >-index 31b405c5426..b2e012778f3 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCCameraVideoCapturer.h >-@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >- RTC_EXPORT >- // Camera capture that implements RTCVideoCapturer. Delivers frames to a RTCVideoCapturerDelegate >- // (usually RTCVideoSource). >-+__attribute__((objc_runtime_name("WK_RTCCameraVideoCapturer"))) >- @interface RTCCameraVideoCapturer : RTCVideoCapturer >- >- // Capture session that is used for capturing. Valid from initialization to dealloc. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >-index fcb62b94168..bf8e50c0504 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCConfiguration.h >-@@ -66,6 +66,7 @@ typedef NS_ENUM(NSInteger, RTCEncryptionKeyType) { >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCConfiguration"))) >- @interface RTCConfiguration : NSObject >- >- /** An array of Ice Servers available to be used by ICE. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >-index 893bd0a3365..1785513753a 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannel.h >-@@ -16,6 +16,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDataBuffer"))) >- @interface RTCDataBuffer : NSObject >- >- /** NSData representation of the underlying buffer. */ >-@@ -37,6 +38,7 @@ RTC_EXPORT >- >- @class RTCDataChannel; >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDataChannelDelegate"))) >- @protocol RTCDataChannelDelegate <NSObject> >- >- /** The data channel state changed. */ >-@@ -63,6 +65,7 @@ typedef NS_ENUM(NSInteger, RTCDataChannelState) { >- }; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDataChannel"))) >- @interface RTCDataChannel : NSObject >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >-index 65f59318447..0b8913ce549 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h >-@@ -16,6 +16,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDataChannelConfiguration"))) >- @interface RTCDataChannelConfiguration : NSObject >- >- /** Set to YES if ordered delivery is required. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >-index 3dddead60ef..2166277bc17 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDispatcher.h >-@@ -26,6 +26,7 @@ typedef NS_ENUM(NSInteger, RTCDispatcherQueueType) { >- * shared dispatch queue. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDispatcher"))) >- @interface RTCDispatcher : NSObject >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDtmfSender.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDtmfSender.h >-index c69af026b7c..b4b6c6cf7d6 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDtmfSender.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCDtmfSender.h >-@@ -15,6 +15,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDtmfSender"))) >- @protocol RTCDtmfSender <NSObject> >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h >-index 60c624e0d25..d4d3b54fee7 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h >-@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >- >- @class RTCEAGLVideoView; >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCEAGLVideoViewDelegate"))) >- @protocol RTCEAGLVideoViewDelegate >- >- - (void)videoView:(RTCEAGLVideoView *)videoView didChangeVideoSize:(CGSize)size; >-@@ -30,6 +31,7 @@ RTC_EXPORT >- * bounds using OpenGLES 2.0 or OpenGLES 3.0. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCEAGLVideoView"))) >- @interface RTCEAGLVideoView : UIView <RTCVideoRenderer> >- >- @property(nonatomic, weak) id<RTCEAGLVideoViewDelegate> delegate; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >-index 1e8a591b73f..33df4efcf0f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileLogger.h >-@@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN >- // For kRTCFileLoggerTypeApp, the oldest log is overwritten. >- // This class is not threadsafe. >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCFileLogger"))) >- @interface RTCFileLogger : NSObject >- >- // The severity level to capture. The default is kRTCFileLoggerSeverityInfo. >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h >-index 7b898e494cf..70f482e35c7 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCFileVideoCapturer.h >-@@ -26,6 +26,7 @@ typedef void (^RTCFileVideoCapturerErrorBlock)(NSError *error); >- RTC_EXPORT >- >- NS_CLASS_AVAILABLE_IOS(10) >-+__attribute__((objc_runtime_name("WK_RTCFileVideoCapturer"))) >- @interface RTCFileVideoCapturer : RTCVideoCapturer >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >-index 3b7f3e26e5a..902925203ea 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceCandidate.h >-@@ -15,6 +15,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCIceCandidate"))) >- @interface RTCIceCandidate : NSObject >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >-index 727da8acbeb..d1feda40fe7 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIceServer.h >-@@ -20,6 +20,7 @@ typedef NS_ENUM(NSUInteger, RTCTlsCertPolicy) { >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCIceServer"))) >- @interface RTCIceServer : NSObject >- >- /** URI(s) for this server represented as NSStrings. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >-index 9384b153683..11eb4dc6233 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCIntervalRange.h >-@@ -12,6 +12,7 @@ >- >- NS_ASSUME_NONNULL_BEGIN >- >-+__attribute__((objc_runtime_name("WK_RTCIntervalRange"))) >- @interface RTCIntervalRange : NSObject >- >- @property(nonatomic, readonly) NSInteger min; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >-index 14d996c1cec..bbc4c035f78 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h >-@@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN >- >- /** This does not currently conform to the spec. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCLegacyStatsReport"))) >- @interface RTCLegacyStatsReport : NSObject >- >- /** Time since 1970-01-01T00:00:00Z in milliseconds. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLNSVideoView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLNSVideoView.h >-index 4990e2529ef..b18fc777402 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLNSVideoView.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLNSVideoView.h >-@@ -12,6 +12,7 @@ >- #import "WebRTC/RTCVideoRenderer.h" >- >- NS_AVAILABLE_MAC(10.11) >-+__attribute__((objc_runtime_name("WK_RTCMTLNSVideoView"))) >- @interface RTCMTLNSVideoView : NSView<RTCVideoRenderer> >- + (BOOL)isMetalAvailable; >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLVideoView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLVideoView.h >-index 226c62a6a17..b62d0889b06 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLVideoView.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMTLVideoView.h >-@@ -31,6 +31,7 @@ NS_ASSUME_NONNULL_BEGIN >- NS_CLASS_AVAILABLE_IOS(9) >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMTLVideoView"))) >- @interface RTCMTLVideoView : UIView <RTCVideoRenderer> >- >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >-index 26a116888a4..e6321940c44 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaConstraints.h >-@@ -40,6 +40,7 @@ RTC_EXTERN NSString * const kRTCMediaConstraintsValueTrue; >- RTC_EXTERN NSString * const kRTCMediaConstraintsValueFalse; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMediaConstraints"))) >- @interface RTCMediaConstraints : NSObject >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >-index 6cfcb7d2ce8..1a4003b5283 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h >-@@ -22,6 +22,7 @@ typedef NS_ENUM(NSInteger, RTCSourceState) { >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMediaSource"))) >- @interface RTCMediaSource : NSObject >- >- /** The current state of the RTCMediaSource. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >-index b97960d436c..9cefde13c5f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStream.h >-@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >- @class RTCVideoTrack; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMediaStream"))) >- @interface RTCMediaStream : NSObject >- >- /** The audio tracks in this stream. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >-index c42f0cfb1a0..a1161c2ac2c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h >-@@ -26,6 +26,7 @@ RTC_EXTERN NSString * const kRTCMediaStreamTrackKindAudio; >- RTC_EXTERN NSString * const kRTCMediaStreamTrackKindVideo; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMediaStreamTrack"))) >- @interface RTCMediaStreamTrack : NSObject >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >-index f01bea9b71b..28b71d1f9e4 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h >-@@ -15,6 +15,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMetricsSampleInfo"))) >- @interface RTCMetricsSampleInfo : NSObject >- >- /** >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h >-index 9e6a9ce9483..e29ec9f3c9d 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h >-@@ -20,12 +20,14 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- @class RTCNSGLVideoView; >-+__attribute__((objc_runtime_name("WK_RTCNSGLVideoViewDelegate"))) >- @protocol RTCNSGLVideoViewDelegate >- >- - (void)videoView:(RTCNSGLVideoView *)videoView didChangeVideoSize:(CGSize)size; >- >- @end >- >-+__attribute__((objc_runtime_name("WK_RTCNSGLVideoView"))) >- @interface RTCNSGLVideoView : NSOpenGLView <RTCVideoRenderer> >- >- @property(nonatomic, weak) id<RTCNSGLVideoViewDelegate> delegate; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >-index a4c113b1d65..041232e341b 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h >-@@ -69,6 +69,7 @@ typedef NS_ENUM(NSInteger, RTCStatsOutputLevel) { >- @class RTCPeerConnection; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCPeerConnectionDelegate"))) >- @protocol RTCPeerConnectionDelegate <NSObject> >- >- /** Called when the SignalingState changed. */ >-@@ -109,6 +110,7 @@ RTC_EXPORT >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCPeerConnection"))) >- @interface RTCPeerConnection : NSObject >- >- /** The object that will be notifed about events such as state changes and >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >-index 56c399e27a8..8acaf43ce26 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h >-@@ -24,11 +24,15 @@ NS_ASSUME_NONNULL_BEGIN >- @class RTCVideoSource; >- @class RTCVideoTrack; >- @class RTCPeerConnectionFactoryOptions; >-+__attribute__((objc_runtime_name("WK_RTCPeerConnectionDelegate"))) >- @protocol RTCPeerConnectionDelegate; >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderFactory"))) >- @protocol RTCVideoDecoderFactory; >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderFactory"))) >- @protocol RTCVideoEncoderFactory; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCPeerConnectionFactory"))) >- @interface RTCPeerConnectionFactory : NSObject >- >- /* Initialize object with default H264 video encoder/decoder factories */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h >-index a65abc6c8b5..9a91ae218ae 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactoryOptions.h >-@@ -15,6 +15,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCPeerConnectionFactoryOptions"))) >- @interface RTCPeerConnectionFactoryOptions : NSObject >- >- @property(nonatomic, assign) BOOL disableEncryption; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >-index c7ca2f59c00..2725e53d31e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h >-@@ -33,6 +33,7 @@ RTC_EXTERN const NSString * const kRTCH264CodecName; >- >- /** Defined in http://w3c.github.io/webrtc-pc/#idl-def-RTCRtpCodecParameters */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpCodecParameters"))) >- @interface RTCRtpCodecParameters : NSObject >- >- /** The RTP payload type. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >-index a956f0d4c37..4d2e1e67152 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h >-@@ -15,6 +15,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpEncodingParameters"))) >- @interface RTCRtpEncodingParameters : NSObject >- >- /** Controls whether the encoding is currently transmitted. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >-index bdebf84884c..1972749d9a1 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpParameters.h >-@@ -17,6 +17,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpParameters"))) >- @interface RTCRtpParameters : NSObject >- >- /** The currently active encodings in the order of preference. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >-index 6156db9f932..324271876b7 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpReceiver.h >-@@ -26,6 +26,7 @@ typedef NS_ENUM(NSInteger, RTCRtpMediaType) { >- @class RTCRtpReceiver; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpReceiverDelegate"))) >- @protocol RTCRtpReceiverDelegate <NSObject> >- >- /** Called when the first RTP packet is received. >-@@ -46,6 +47,7 @@ RTC_EXPORT >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpReceiver"))) >- @protocol RTCRtpReceiver <NSObject> >- >- /** A unique identifier for this receiver. */ >-@@ -73,6 +75,7 @@ RTC_EXPORT >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpReceiver"))) >- @interface RTCRtpReceiver : NSObject <RTCRtpReceiver> >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >-index f6e91250267..bf2fbc6ac51 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCRtpSender.h >-@@ -18,6 +18,7 @@ >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpSender"))) >- @protocol RTCRtpSender <NSObject> >- >- /** A unique identifier for this sender. */ >-@@ -41,6 +42,7 @@ RTC_EXPORT >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpSender"))) >- @interface RTCRtpSender : NSObject <RTCRtpSender> >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >-index 41439804a8a..ba05e22066f 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCSessionDescription.h >-@@ -25,6 +25,7 @@ typedef NS_ENUM(NSInteger, RTCSdpType) { >- NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCSessionDescription"))) >- @interface RTCSessionDescription : NSObject >- >- /** The type of session description. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >-index 3addec83b1d..72215872bb9 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCapturer.h >-@@ -15,11 +15,13 @@ NS_ASSUME_NONNULL_BEGIN >- @class RTCVideoCapturer; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoCapturerDelegate"))) >- @protocol RTCVideoCapturerDelegate <NSObject> >- - (void)capturer:(RTCVideoCapturer *)capturer didCaptureVideoFrame:(RTCVideoFrame *)frame; >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoCapturer"))) >- @interface RTCVideoCapturer : NSObject >- >- @property(nonatomic, readonly, weak) id<RTCVideoCapturerDelegate> delegate; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >-index 470eb023260..345c22e53c2 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodec.h >-@@ -37,6 +37,7 @@ typedef NS_ENUM(NSUInteger, RTCVideoContentType) { >- >- /** Represents an encoded frame. Corresponds to webrtc::EncodedImage. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCEncodedImage"))) >- @interface RTCEncodedImage : NSObject >- >- @property(nonatomic, strong) NSData *buffer; >-@@ -58,6 +59,7 @@ RTC_EXPORT >- >- /** Information for header. Corresponds to webrtc::RTPFragmentationHeader. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCRtpFragmentationHeader"))) >- @interface RTCRtpFragmentationHeader : NSObject >- >- @property(nonatomic, strong) NSArray<NSNumber *> *fragmentationOffset; >-@@ -71,6 +73,7 @@ RTC_EXPORT >- * Corresponds to webrtc::CodecSpecificInfo. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCCodecSpecificInfo"))) >- @protocol RTCCodecSpecificInfo <NSObject> >- >- @end >-@@ -90,6 +93,7 @@ typedef NS_ENUM(NSUInteger, RTCVideoCodecMode) { >- >- /** Holds information to identify a codec. Corresponds to cricket::VideoCodec. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoCodecInfo"))) >- @interface RTCVideoCodecInfo : NSObject <NSCoding> >- >- - (instancetype)init NS_UNAVAILABLE; >-@@ -109,6 +113,7 @@ RTC_EXPORT >- >- /** Settings for encoder. Corresponds to webrtc::VideoCodec. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderSettings"))) >- @interface RTCVideoEncoderSettings : NSObject >- >- @property(nonatomic, strong) NSString *name; >-@@ -130,6 +135,7 @@ RTC_EXPORT >- >- /** QP thresholds for encoder. Corresponds to webrtc::VideoEncoder::QpThresholds. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderQpThresholds"))) >- @interface RTCVideoEncoderQpThresholds : NSObject >- >- - (instancetype)initWithThresholdsLow:(NSInteger)low high:(NSInteger)high; >-@@ -141,6 +147,7 @@ RTC_EXPORT >- >- /** Protocol for encoder implementations. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoder"))) >- @protocol RTCVideoEncoder <NSObject> >- >- - (void)setCallback:(RTCVideoEncoderCallback)callback; >-@@ -162,6 +169,7 @@ RTC_EXPORT >- >- /** Protocol for decoder implementations. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoder"))) >- @protocol RTCVideoDecoder <NSObject> >- >- - (void)setCallback:(RTCVideoDecoderCallback)callback; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >-index 0ef2c8a655c..9fb1cb71d99 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecFactory.h >-@@ -17,6 +17,7 @@ NS_ASSUME_NONNULL_BEGIN >- >- /** RTCVideoEncoderFactory is an Objective-C version of webrtc::VideoEncoderFactory. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderFactory"))) >- @protocol RTCVideoEncoderFactory <NSObject> >- >- - (nullable id<RTCVideoEncoder>)createEncoder:(RTCVideoCodecInfo *)info; >-@@ -26,6 +27,7 @@ RTC_EXPORT >- >- /** RTCVideoDecoderFactory is an Objective-C version of webrtc::VideoDecoderFactory. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderFactory"))) >- @protocol RTCVideoDecoderFactory <NSObject> >- >- - (nullable id<RTCVideoDecoder>)createDecoder:(RTCVideoCodecInfo *)info; >-@@ -39,6 +41,7 @@ RTC_EXPORT >- * codecs, create custom implementations of RTCVideoEncoderFactory and RTCVideoDecoderFactory. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDefaultVideoEncoderFactory"))) >- @interface RTCDefaultVideoEncoderFactory : NSObject <RTCVideoEncoderFactory> >- >- @property(nonatomic, retain) RTCVideoCodecInfo *preferredCodec; >-@@ -48,6 +51,7 @@ RTC_EXPORT >- @end >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCDefaultVideoDecoderFactory"))) >- @interface RTCDefaultVideoDecoderFactory : NSObject <RTCVideoDecoderFactory> >- @end >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >-index 1c307ebe84a..c8d7fc007f1 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoCodecH264.h >-@@ -20,6 +20,7 @@ typedef NS_ENUM(NSUInteger, RTCH264PacketizationMode) { >- }; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCCodecSpecificInfoH264"))) >- @interface RTCCodecSpecificInfoH264 : NSObject <RTCCodecSpecificInfo> >- >- @property(nonatomic, assign) RTCH264PacketizationMode packetizationMode; >-@@ -28,6 +29,7 @@ RTC_EXPORT >- >- /** Encoder. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderH264"))) >- @interface RTCVideoEncoderH264 : NSObject<RTCVideoEncoder> >- >- - (instancetype)initWithCodecInfo:(RTCVideoCodecInfo *)codecInfo; >-@@ -36,15 +38,18 @@ RTC_EXPORT >- >- /** Decoder. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderH264"))) >- @interface RTCVideoDecoderH264 : NSObject<RTCVideoDecoder> >- @end >- >- /** Encoder factory. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderFactoryH264"))) >- @interface RTCVideoEncoderFactoryH264 : NSObject<RTCVideoEncoderFactory> >- @end >- >- /** Decoder factory. */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderFactoryH264"))) >- @interface RTCVideoDecoderFactoryH264 : NSObject<RTCVideoDecoderFactory> >- @end >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >-index 962b6312f7f..3e19ef8909c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP8.h >-@@ -14,6 +14,7 @@ >- #import <WebRTC/RTCVideoCodec.h> >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderVP8"))) >- @interface RTCVideoDecoderVP8 : NSObject >- >- /* This returns a VP8 decoder that can be returned from a RTCVideoDecoderFactory injected into >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >-index faf66ef065b..3fe79bc4a52 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoDecoderVP9.h >-@@ -14,6 +14,7 @@ >- #import <WebRTC/RTCVideoCodec.h> >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoDecoderVP9"))) >- @interface RTCVideoDecoderVP9 : NSObject >- >- /* This returns a VP9 decoder that can be returned from a RTCVideoDecoderFactory injected into >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >-index e63b24dde75..52155b52551 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP8.h >-@@ -14,6 +14,7 @@ >- #import <WebRTC/RTCVideoCodec.h> >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderVP8"))) >- @interface RTCVideoEncoderVP8 : NSObject >- >- /* This returns a VP8 encoder that can be returned from a RTCVideoEncoderFactory injected into >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >-index cef8c82e96f..866e626a05e 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoEncoderVP9.h >-@@ -14,6 +14,7 @@ >- #import <WebRTC/RTCVideoCodec.h> >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoEncoderVP9"))) >- @interface RTCVideoEncoderVP9 : NSObject >- >- /* This returns a VP9 encoder that can be returned from a RTCVideoEncoderFactory injected into >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >-index dcc4c6e7b5b..5b8fba602df 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrame.h >-@@ -22,10 +22,12 @@ typedef NS_ENUM(NSInteger, RTCVideoRotation) { >- RTCVideoRotation_270 = 270, >- }; >- >-+__attribute__((objc_runtime_name("WK_RTCVideoFrameBuffer"))) >- @protocol RTCVideoFrameBuffer; >- >- // RTCVideoFrame is an ObjectiveC version of webrtc::VideoFrame. >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoFrame"))) >- @interface RTCVideoFrame : NSObject >- >- /** Width without rotation applied. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >-index 4a683b0c926..8b825d8050c 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoFrameBuffer.h >-@@ -13,10 +13,12 @@ >- >- NS_ASSUME_NONNULL_BEGIN >- >-+__attribute__((objc_runtime_name("WK_RTCI420Buffer"))) >- @protocol RTCI420Buffer; >- >- // RTCVideoFrameBuffer is an ObjectiveC version of webrtc::VideoFrameBuffer. >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoFrameBuffer"))) >- @protocol RTCVideoFrameBuffer <NSObject> >- >- @property(nonatomic, readonly) int width; >-@@ -27,6 +29,7 @@ RTC_EXPORT >- @end >- >- /** Protocol for RTCVideoFrameBuffers containing YUV planar data. */ >-+__attribute__((objc_runtime_name("WK_RTCYUVPlanarBuffer"))) >- @protocol RTCYUVPlanarBuffer <RTCVideoFrameBuffer> >- >- @property(nonatomic, readonly) int chromaWidth; >-@@ -48,6 +51,7 @@ RTC_EXPORT >- @end >- >- /** Extension of the YUV planar data buffer with mutable data access */ >-+__attribute__((objc_runtime_name("WK_RTCMutableYUVPlanarBuffer"))) >- @protocol RTCMutableYUVPlanarBuffer <RTCYUVPlanarBuffer> >- >- @property(nonatomic, readonly) uint8_t *mutableDataY; >-@@ -57,15 +61,18 @@ RTC_EXPORT >- @end >- >- /** Protocol for RTCYUVPlanarBuffers containing I420 data */ >-+__attribute__((objc_runtime_name("WK_RTCI420Buffer"))) >- @protocol RTCI420Buffer <RTCYUVPlanarBuffer> >- @end >- >- /** Extension of the I420 buffer with mutable data access */ >-+__attribute__((objc_runtime_name("WK_RTCMutableI420Buffer"))) >- @protocol RTCMutableI420Buffer <RTCI420Buffer, RTCMutableYUVPlanarBuffer> >- @end >- >- /** RTCVideoFrameBuffer containing a CVPixelBufferRef */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCCVPixelBuffer"))) >- @interface RTCCVPixelBuffer : NSObject <RTCVideoFrameBuffer> >- >- @property(nonatomic, readonly) CVPixelBufferRef pixelBuffer; >-@@ -95,11 +102,13 @@ RTC_EXPORT >- >- /** RTCI420Buffer implements the RTCI420Buffer protocol */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCI420Buffer"))) >- @interface RTCI420Buffer : NSObject <RTCI420Buffer> >- @end >- >- /** Mutable version of RTCI420Buffer */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCMutableI420Buffer"))) >- @interface RTCMutableI420Buffer : RTCI420Buffer <RTCMutableI420Buffer> >- @end >- >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoRenderer.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoRenderer.h >-index 5e2e820918a..c821a1e3008 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoRenderer.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoRenderer.h >-@@ -20,6 +20,7 @@ NS_ASSUME_NONNULL_BEGIN >- @class RTCVideoFrame; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoRenderer"))) >- @protocol RTCVideoRenderer <NSObject> >- >- /** The size of the frame. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >-index a9ebc06c88e..60075e3435a 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h >-@@ -18,6 +18,7 @@ NS_ASSUME_NONNULL_BEGIN >- >- RTC_EXPORT >- >-+__attribute__((objc_runtime_name("WK_RTCVideoSource"))) >- @interface RTCVideoSource : RTCMediaSource <RTCVideoCapturerDelegate> >- >- - (instancetype)init NS_UNAVAILABLE; >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >-index 899d7c34780..ecbdbb93c68 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoTrack.h >-@@ -14,11 +14,13 @@ >- >- NS_ASSUME_NONNULL_BEGIN >- >-+__attribute__((objc_runtime_name("WK_RTCVideoRenderer"))) >- @protocol RTCVideoRenderer; >- @class RTCPeerConnectionFactory; >- @class RTCVideoSource; >- >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoTrack"))) >- @interface RTCVideoTrack : RTCMediaStreamTrack >- >- /** The video source for this video track. */ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoViewShading.h b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoViewShading.h >-index 6f3ece94a1f..5e33ff235ca 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoViewShading.h >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoViewShading.h >-@@ -19,6 +19,7 @@ NS_ASSUME_NONNULL_BEGIN >- * rendering for the RTCEAGLVideoView/RTCNSGLVideoView. >- */ >- RTC_EXPORT >-+__attribute__((objc_runtime_name("WK_RTCVideoViewShading"))) >- @protocol RTCVideoViewShading <NSObject> >- >- /** Callback for I420 frames. Each plane is given as a texture. */ >diff --git a/Source/ThirdParty/libwebrtc/WebKit/0013-Fix-SafeSetError-use-after-move.patch b/Source/ThirdParty/libwebrtc/WebKit/0013-Fix-SafeSetError-use-after-move.patch >deleted file mode 100644 >index db7ce41afe6..00000000000 >--- a/Source/ThirdParty/libwebrtc/WebKit/0013-Fix-SafeSetError-use-after-move.patch >+++ /dev/null >@@ -1,27 +0,0 @@ >-diff --git a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc >-index 6281d57e3db..1bebb0509a1 100644 >---- a/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc >-+++ b/Source/ThirdParty/libwebrtc/Source/webrtc/pc/peerconnection.cc >-@@ -226,18 +226,19 @@ uint32_t ConvertIceTransportTypeToCandidateFilter( >- } >- >- // Helper to set an error and return from a method. >--bool SafeSetError(webrtc::RTCErrorType type, webrtc::RTCError* error) { >-+static bool SafeSetError(webrtc::RTCErrorType type, webrtc::RTCError* error) { >- if (error) { >- error->set_type(type); >- } >- return type == webrtc::RTCErrorType::NONE; >- } >- >--bool SafeSetError(webrtc::RTCError error, webrtc::RTCError* error_out) { >-+static bool SafeSetError(webrtc::RTCError&& error, webrtc::RTCError* error_out) { >-+ bool result = error.ok(); >- if (error_out) { >- *error_out = std::move(error); >- } >-- return error.ok(); >-+ return result; >- } >- >- std::string GetSignalingStateString( >diff --git a/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj b/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj >index 2e4ca280b99..6bc19ce4012 100644 >--- a/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj >+++ b/Source/ThirdParty/libwebrtc/libwebrtc.xcodeproj/project.pbxproj >@@ -21,6 +21,51 @@ > /* End PBXAggregateTarget section */ > > /* Begin PBXBuildFile section */ >+ 4102F68D21273206006AE8D7 /* rtcstatstraversal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F68421273204006AE8D7 /* rtcstatstraversal.h */; }; >+ 4102F68E21273206006AE8D7 /* jseptransportcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F68521273204006AE8D7 /* jseptransportcontroller.h */; }; >+ 4102F68F21273206006AE8D7 /* transportstats.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F68621273205006AE8D7 /* transportstats.cc */; }; >+ 4102F69021273206006AE8D7 /* jseptransportcontroller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F68721273205006AE8D7 /* jseptransportcontroller.cc */; }; >+ 4102F69121273206006AE8D7 /* rtpparametersconversion.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F68821273205006AE8D7 /* rtpparametersconversion.h */; }; >+ 4102F69221273206006AE8D7 /* rtcstatstraversal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F68921273205006AE8D7 /* rtcstatstraversal.cc */; }; >+ 4102F69321273206006AE8D7 /* rtpparametersconversion.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F68A21273206006AE8D7 /* rtpparametersconversion.cc */; }; >+ 4102F69421273206006AE8D7 /* transportstats.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F68B21273206006AE8D7 /* transportstats.h */; }; >+ 4102F69521273206006AE8D7 /* peerconnectioninternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F68C21273206006AE8D7 /* peerconnectioninternal.h */; }; >+ 4102F6A021273262006AE8D7 /* transport_feedback_packet_loss_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F69621273260006AE8D7 /* transport_feedback_packet_loss_tracker.h */; }; >+ 4102F6A121273262006AE8D7 /* remix_resample.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F69721273260006AE8D7 /* remix_resample.cc */; }; >+ 4102F6A221273262006AE8D7 /* audio_level.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F69821273260006AE8D7 /* audio_level.h */; }; >+ 4102F6A321273262006AE8D7 /* channel_proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F69921273261006AE8D7 /* channel_proxy.h */; }; >+ 4102F6A421273262006AE8D7 /* audio_level.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F69A21273261006AE8D7 /* audio_level.cc */; }; >+ 4102F6A521273262006AE8D7 /* channel.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F69B21273261006AE8D7 /* channel.h */; }; >+ 4102F6A621273262006AE8D7 /* channel_proxy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F69C21273261006AE8D7 /* channel_proxy.cc */; }; >+ 4102F6A721273262006AE8D7 /* remix_resample.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F69D21273261006AE8D7 /* remix_resample.h */; }; >+ 4102F6A821273262006AE8D7 /* channel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F69E21273262006AE8D7 /* channel.cc */; }; >+ 4102F6A921273262006AE8D7 /* transport_feedback_packet_loss_tracker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F69F21273262006AE8D7 /* transport_feedback_packet_loss_tracker.cc */; }; >+ 4102F6AB212732B1006AE8D7 /* rtp_payload_params.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6AA212732B0006AE8D7 /* rtp_payload_params.cc */; }; >+ 4102F6AE212732E7006AE8D7 /* expand_uma_logger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6AC212732E6006AE8D7 /* expand_uma_logger.cc */; }; >+ 4102F6AF212732E7006AE8D7 /* expand_uma_logger.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6AD212732E7006AE8D7 /* expand_uma_logger.h */; }; >+ 4102F6B221273331006AE8D7 /* mediaconfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6B021273330006AE8D7 /* mediaconfig.h */; }; >+ 4102F6B321273331006AE8D7 /* mediachannel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6B121273330006AE8D7 /* mediachannel.cc */; }; >+ 4102F6B921273382006AE8D7 /* packet_receiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6B521273381006AE8D7 /* packet_receiver.h */; }; >+ 4102F6BA21273382006AE8D7 /* audio_receive_stream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6B621273381006AE8D7 /* audio_receive_stream.cc */; }; >+ 4102F6BB21273382006AE8D7 /* degraded_call.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6B721273381006AE8D7 /* degraded_call.cc */; }; >+ 4102F6BC21273382006AE8D7 /* flexfec_receive_stream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6B821273381006AE8D7 /* flexfec_receive_stream.cc */; }; >+ 4102F6C8212733B7006AE8D7 /* video_send_stream_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6BE212733B5006AE8D7 /* video_send_stream_impl.h */; }; >+ 4102F6C9212733B7006AE8D7 /* video_quality_observer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6BF212733B6006AE8D7 /* video_quality_observer.cc */; }; >+ 4102F6CA212733B7006AE8D7 /* video_stream_encoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6C0212733B6006AE8D7 /* video_stream_encoder.h */; }; >+ 4102F6CB212733B7006AE8D7 /* video_stream_decoder_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6C1212733B6006AE8D7 /* video_stream_decoder_impl.cc */; }; >+ 4102F6CC212733B7006AE8D7 /* video_send_stream_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6C2212733B6006AE8D7 /* video_send_stream_impl.cc */; }; >+ 4102F6CE212733B7006AE8D7 /* video_stream_decoder_impl.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6C4212733B6006AE8D7 /* video_stream_decoder_impl.h */; }; >+ 4102F6CF212733B7006AE8D7 /* video_quality_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6C5212733B6006AE8D7 /* video_quality_observer.h */; }; >+ 4102F6DB21273416006AE8D7 /* video_stream_decoder_create.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6D121273414006AE8D7 /* video_stream_decoder_create.cc */; }; >+ 4102F6DC21273416006AE8D7 /* color_space.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6D221273414006AE8D7 /* color_space.cc */; }; >+ 4102F6DD21273416006AE8D7 /* video_sink_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6D321273415006AE8D7 /* video_sink_interface.h */; }; >+ 4102F6DE21273416006AE8D7 /* video_stream_decoder_create.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6D421273415006AE8D7 /* video_stream_decoder_create.h */; }; >+ 4102F6DF21273416006AE8D7 /* video_stream_encoder_create.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6D521273415006AE8D7 /* video_stream_encoder_create.cc */; }; >+ 4102F6E021273416006AE8D7 /* i010_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6D621273415006AE8D7 /* i010_buffer.cc */; }; >+ 4102F6E121273416006AE8D7 /* video_stream_encoder_settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6D721273415006AE8D7 /* video_stream_encoder_settings.h */; }; >+ 4102F6E221273416006AE8D7 /* color_space.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6D821273416006AE8D7 /* color_space.h */; }; >+ 4102F6E321273416006AE8D7 /* video_bitrate_allocation.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6D921273416006AE8D7 /* video_bitrate_allocation.cc */; }; >+ 4102F6E421273416006AE8D7 /* video_bitrate_allocator_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6DA21273416006AE8D7 /* video_bitrate_allocator_factory.h */; }; > 41109AAD1E5FA19200C0955A /* i420_buffer_pool.h in Headers */ = {isa = PBXBuildFile; fileRef = 41109AA61E5FA19200C0955A /* i420_buffer_pool.h */; }; > 41109AAE1E5FA19200C0955A /* video_frame_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 41109AA71E5FA19200C0955A /* video_frame_buffer.h */; }; > 41109AAF1E5FA19200C0955A /* frame_callback.h in Headers */ = {isa = PBXBuildFile; fileRef = 41109AA81E5FA19200C0955A /* frame_callback.h */; }; >@@ -31,6 +76,14 @@ > 4124554B1EF8874300F11809 /* video_frame_buffer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4124554A1EF8874300F11809 /* video_frame_buffer.cc */; }; > 412455561EF887FB00F11809 /* packetlossestimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 412455541EF887FA00F11809 /* packetlossestimator.cc */; }; > 412455571EF887FB00F11809 /* packetlossestimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 412455551EF887FA00F11809 /* packetlossestimator.h */; }; >+ 41299B8B2127365100B3414B /* pacer_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CD62127363C00C27CD6 /* pacer_controller.cc */; }; >+ 41299B8C2127365100B3414B /* send_time_history.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CD82127363D00C27CD6 /* send_time_history.cc */; }; >+ 41299B8D2127365100B3414B /* transport_feedback_adapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CD72127363C00C27CD6 /* transport_feedback_adapter.h */; }; >+ 41299B912127367B00B3414B /* isac_vad.c in Sources */ = {isa = PBXBuildFile; fileRef = 41299B8E2127367A00B3414B /* isac_vad.c */; }; >+ 41299B922127367B00B3414B /* isac_vad.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B8F2127367B00B3414B /* isac_vad.h */; }; >+ 41299B932127367B00B3414B /* pitch_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B902127367B00B3414B /* pitch_filter.h */; }; >+ 41299B962127369100B3414B /* fake_network_pipe.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41299B942127369000B3414B /* fake_network_pipe.cc */; }; >+ 41299B972127369100B3414B /* fake_network_pipe.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B952127369100B3414B /* fake_network_pipe.h */; }; > 413091F31EF8CF9200757C55 /* rtp_video_stream_receiver.h in Headers */ = {isa = PBXBuildFile; fileRef = 413091F11EF8CF9100757C55 /* rtp_video_stream_receiver.h */; }; > 413091F41EF8CF9200757C55 /* rtp_video_stream_receiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 413091F21EF8CF9100757C55 /* rtp_video_stream_receiver.cc */; }; > 413091F71EF8CFBD00757C55 /* iceserverparsing.h in Headers */ = {isa = PBXBuildFile; fileRef = 413091F51EF8CFBD00757C55 /* iceserverparsing.h */; }; >@@ -422,7 +475,159 @@ > 414D71141E4AE98C0023E526 /* user_socket.c in Sources */ = {isa = PBXBuildFile; fileRef = 414D71121E4AE9820023E526 /* user_socket.c */; }; > 414D71171E4AEAFB0023E526 /* sctp_indata.c in Sources */ = {isa = PBXBuildFile; fileRef = 414D71151E4AEACD0023E526 /* sctp_indata.c */; }; > 414D71191E4AEB110023E526 /* sctp_userspace.c in Sources */ = {isa = PBXBuildFile; fileRef = 414D71181E4AEB110023E526 /* sctp_userspace.c */; }; >+ 415F1FA621272FBA00064CBF /* adaptive_digital_gain_applier.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE421272F85001D5D7B /* adaptive_digital_gain_applier.cc */; }; >+ 415F1FA721272FBA00064CBF /* adaptive_digital_gain_applier.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BDB21272F84001D5D7B /* adaptive_digital_gain_applier.h */; }; >+ 415F1FA821272FBA00064CBF /* adaptive_mode_level_estimator_agc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE921272F86001D5D7B /* adaptive_mode_level_estimator_agc.cc */; }; >+ 415F1FA921272FBA00064CBF /* adaptive_mode_level_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BDC21272F84001D5D7B /* adaptive_mode_level_estimator.h */; }; >+ 415F1FAA21272FBA00064CBF /* compute_interpolated_gain_curve.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE621272F86001D5D7B /* compute_interpolated_gain_curve.cc */; }; >+ 415F1FAB21272FBA00064CBF /* compute_interpolated_gain_curve.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BDA21272F84001D5D7B /* compute_interpolated_gain_curve.h */; }; >+ 415F1FAC21272FBA00064CBF /* down_sampler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE821272F86001D5D7B /* down_sampler.cc */; }; >+ 415F1FAD21272FBA00064CBF /* fixed_digital_level_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE521272F86001D5D7B /* fixed_digital_level_estimator.cc */; }; >+ 415F1FAE21272FBA00064CBF /* fixed_digital_level_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BDF21272F84001D5D7B /* fixed_digital_level_estimator.h */; }; >+ 415F1FAF21272FBA00064CBF /* gain_applier.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BDE21272F84001D5D7B /* gain_applier.cc */; }; >+ 415F1FB021272FBA00064CBF /* gain_applier.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BE721272F86001D5D7B /* gain_applier.h */; }; >+ 415F1FB121272FBA00064CBF /* gain_curve_applier.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE021272F85001D5D7B /* gain_curve_applier.cc */; }; >+ 415F1FB221272FBA00064CBF /* interpolated_gain_curve.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BE121272F85001D5D7B /* interpolated_gain_curve.cc */; }; >+ 415F1FB321272FBA00064CBF /* limiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BEA21272F86001D5D7B /* limiter.h */; }; >+ 415F1FB421272FBA00064CBF /* noise_spectrum_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BE221272F85001D5D7B /* noise_spectrum_estimator.h */; }; >+ 415F1FB521272FBA00064CBF /* signal_classifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BEB21272F87001D5D7B /* signal_classifier.h */; }; >+ 415F1FB621272FBA00064CBF /* vad_with_level.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BE321272F85001D5D7B /* vad_with_level.h */; }; >+ 415F1FB721272FBA00064CBF /* vector_float_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BDD21272F84001D5D7B /* vector_float_frame.h */; }; >+ 415F1FBD2127304C00064CBF /* echo_control_mobile_proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FB92127304B00064CBF /* echo_control_mobile_proxy.h */; }; >+ 415F1FBE2127304C00064CBF /* echo_control_mobile_proxy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FBA2127304B00064CBF /* echo_control_mobile_proxy.cc */; }; >+ 415F1FBF2127304C00064CBF /* echo_cancellation_proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FBB2127304C00064CBF /* echo_cancellation_proxy.h */; }; >+ 415F1FC02127304C00064CBF /* echo_cancellation_proxy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FBC2127304C00064CBF /* echo_cancellation_proxy.cc */; }; >+ 415F1FC62127308F00064CBF /* audio_state.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FC52127308E00064CBF /* audio_state.cc */; }; >+ 415F1FCC212730F000064CBF /* echo_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FC8212730F000064CBF /* echo_control.h */; }; >+ 415F1FCD212730F000064CBF /* audio_mixer.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FC9212730F000064CBF /* audio_mixer.h */; }; >+ 415F1FCE212730F000064CBF /* audio_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FCA212730F000064CBF /* audio_frame.cc */; }; >+ 415F1FCF212730F000064CBF /* audio_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FCB212730F000064CBF /* audio_frame.h */; }; >+ 416D3BDB212731C200775F09 /* adaptive_agc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46E212731A4008F9353 /* adaptive_agc.cc */; }; >+ 416D3BDC212731C200775F09 /* adaptive_agc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B464212731A2008F9353 /* adaptive_agc.h */; }; >+ 416D3BDD212731C200775F09 /* adaptive_mode_level_estimator_agc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B462212731A1008F9353 /* adaptive_mode_level_estimator_agc.h */; }; >+ 416D3BDE212731C200775F09 /* adaptive_mode_level_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B45F212731A1008F9353 /* adaptive_mode_level_estimator.cc */; }; >+ 416D3BDF212731C200775F09 /* agc2_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B46D212731A4008F9353 /* agc2_common.h */; }; >+ 416D3BE0212731C200775F09 /* biquad_filter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B45E212731A0008F9353 /* biquad_filter.cc */; }; >+ 416D3BE1212731C200775F09 /* biquad_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B463212731A2008F9353 /* biquad_filter.h */; }; >+ 416D3BE2212731C200775F09 /* down_sampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B460212731A1008F9353 /* down_sampler.h */; }; >+ 416D3BE3212731C200775F09 /* fixed_gain_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B465212731A2008F9353 /* fixed_gain_controller.cc */; }; >+ 416D3BE4212731C200775F09 /* fixed_gain_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B467212731A3008F9353 /* fixed_gain_controller.h */; }; >+ 416D3BE5212731C200775F09 /* gain_curve_applier.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B469212731A3008F9353 /* gain_curve_applier.h */; }; >+ 416D3BE6212731C200775F09 /* limiter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B470212731A6008F9353 /* limiter.cc */; }; >+ 416D3BE7212731C200775F09 /* noise_level_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B461212731A1008F9353 /* noise_level_estimator.cc */; }; >+ 416D3BE8212731C200775F09 /* noise_spectrum_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46A212731A3008F9353 /* noise_spectrum_estimator.cc */; }; >+ 416D3BE9212731C200775F09 /* saturation_protector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B468212731A3008F9353 /* saturation_protector.cc */; }; >+ 416D3BEA212731C200775F09 /* saturation_protector.h in Headers */ = {isa = PBXBuildFile; fileRef = 41D6B46B212731A3008F9353 /* saturation_protector.h */; }; >+ 416D3BEB212731C200775F09 /* signal_classifier.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46F212731A4008F9353 /* signal_classifier.cc */; }; >+ 416D3BEC212731C200775F09 /* vad_with_level.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B46C212731A4008F9353 /* vad_with_level.cc */; }; >+ 416D3BED212731C200775F09 /* vector_float_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41D6B466212731A2008F9353 /* vector_float_frame.cc */; }; > 417DA4581EF9CD0D00E869DB /* RTCUIApplicationStatusObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 417DA4561EF9CD0A00E869DB /* RTCUIApplicationStatusObserver.h */; }; >+ 4192413A2127372400634FCF /* features_extraction.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241312127372200634FCF /* features_extraction.cc */; }; >+ 4192413B2127372400634FCF /* features_extraction.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241322127372200634FCF /* features_extraction.h */; }; >+ 4192413C2127372400634FCF /* pitch_search.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241332127372300634FCF /* pitch_search.h */; }; >+ 4192413D2127372400634FCF /* fft_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241342127372300634FCF /* fft_util.cc */; }; >+ 4192413E2127372400634FCF /* lp_residual.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241352127372300634FCF /* lp_residual.cc */; }; >+ 4192413F2127372400634FCF /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241362127372300634FCF /* common.h */; }; >+ 419241402127372400634FCF /* lp_residual.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241372127372400634FCF /* lp_residual.h */; }; >+ 419241412127372400634FCF /* pitch_search.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241382127372400634FCF /* pitch_search.cc */; }; >+ 419241422127372400634FCF /* fft_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241392127372400634FCF /* fft_util.h */; }; >+ 419241432127372800634FCF /* pitch_info.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B9B212736DE00B3414B /* pitch_info.h */; }; >+ 419241442127372800634FCF /* pitch_search_internal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41299B9A212736DE00B3414B /* pitch_search_internal.cc */; }; >+ 419241452127372800634FCF /* pitch_search_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B99212736DE00B3414B /* pitch_search_internal.h */; }; >+ 419241462127372800634FCF /* rnn.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41299B9C212736DE00B3414B /* rnn.cc */; }; >+ 419241472127372800634FCF /* spectral_features_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 41299B9D212736DF00B3414B /* spectral_features_internal.h */; }; >+ 419241522127376F00634FCF /* regatheringcontroller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241482127376D00634FCF /* regatheringcontroller.cc */; }; >+ 419241532127376F00634FCF /* fakedtlstransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241492127376D00634FCF /* fakedtlstransport.h */; }; >+ 419241542127376F00634FCF /* basicasyncresolverfactory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192414A2127376D00634FCF /* basicasyncresolverfactory.cc */; }; >+ 419241552127376F00634FCF /* regatheringcontroller.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192414B2127376D00634FCF /* regatheringcontroller.h */; }; >+ 419241562127376F00634FCF /* fakecandidatepair.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192414C2127376E00634FCF /* fakecandidatepair.h */; }; >+ 419241572127376F00634FCF /* udptransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192414D2127376E00634FCF /* udptransport.h */; }; >+ 419241582127376F00634FCF /* fakepackettransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192414E2127376E00634FCF /* fakepackettransport.h */; }; >+ 419241592127376F00634FCF /* fakeicetransport.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192414F2127376E00634FCF /* fakeicetransport.h */; }; >+ 4192415A2127376F00634FCF /* icetransportinternal.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241502127376E00634FCF /* icetransportinternal.h */; }; >+ 4192415B2127376F00634FCF /* basicasyncresolverfactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241512127376E00634FCF /* basicasyncresolverfactory.h */; }; >+ 419241612127385B00634FCF /* rw_lock_wrapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192415D2127385A00634FCF /* rw_lock_wrapper.cc */; }; >+ 419241622127385B00634FCF /* rw_lock_posix.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192415E2127385B00634FCF /* rw_lock_posix.h */; }; >+ 419241632127385B00634FCF /* rw_lock_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192415F2127385B00634FCF /* rw_lock_wrapper.h */; }; >+ 419241642127385B00634FCF /* rw_lock_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241602127385B00634FCF /* rw_lock_posix.cc */; }; >+ 4192416C2127389B00634FCF /* quality_scaling_experiment.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241662127389A00634FCF /* quality_scaling_experiment.h */; }; >+ 4192416D2127389B00634FCF /* congestion_controller_experiment.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241672127389A00634FCF /* congestion_controller_experiment.h */; }; >+ 4192416E2127389B00634FCF /* field_trial_parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241682127389A00634FCF /* field_trial_parser.cc */; }; >+ 4192416F2127389B00634FCF /* field_trial_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241692127389B00634FCF /* field_trial_parser.h */; }; >+ 419241702127389B00634FCF /* quality_scaling_experiment.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192416A2127389B00634FCF /* quality_scaling_experiment.cc */; }; >+ 419241712127389B00634FCF /* congestion_controller_experiment.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192416B2127389B00634FCF /* congestion_controller_experiment.cc */; }; >+ 41924175212738C200634FCF /* callfactoryinterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 41924172212738C200634FCF /* callfactoryinterface.h */; }; >+ 41924176212738C200634FCF /* transport.h in Headers */ = {isa = PBXBuildFile; fileRef = 41924173212738C200634FCF /* transport.h */; }; >+ 41924177212738C200634FCF /* transport.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41924174212738C200634FCF /* transport.cc */; }; >+ 41924179212738FB00634FCF /* rtc_event_log_impl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41924178212738FB00634FCF /* rtc_event_log_impl.cc */; }; >+ 4192417D2127392300634FCF /* timestamp_extrapolator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192417B2127392300634FCF /* timestamp_extrapolator.cc */; }; >+ 4192417E2127392300634FCF /* timestamp_extrapolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192417C2127392300634FCF /* timestamp_extrapolator.h */; }; >+ 419241812127497100634FCF /* bad_variant_access.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192417F2127497100634FCF /* bad_variant_access.cc */; }; >+ 419241822127497100634FCF /* bad_variant_access.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241802127497100634FCF /* bad_variant_access.h */; }; >+ 419241852127499300634FCF /* packet_queue_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241832127499300634FCF /* packet_queue_interface.h */; }; >+ 419241862127499300634FCF /* packet_queue_interface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241842127499300634FCF /* packet_queue_interface.cc */; }; >+ 4192418B212749C800634FCF /* send_time_history.h in Headers */ = {isa = PBXBuildFile; fileRef = 41924187212749C700634FCF /* send_time_history.h */; }; >+ 4192418C212749C800634FCF /* send_side_congestion_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41924188212749C700634FCF /* send_side_congestion_controller.cc */; }; >+ 4192418D212749C800634FCF /* pacer_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 41924189212749C800634FCF /* pacer_controller.h */; }; >+ 4192418E212749C800634FCF /* transport_feedback_adapter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192418A212749C800634FCF /* transport_feedback_adapter.cc */; }; >+ 419241902127581000634FCF /* fec_private_tables_bursty.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192418F2127581000634FCF /* fec_private_tables_bursty.cc */; }; >+ 419241982127586500634FCF /* rnn_vad_weights.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241932127586400634FCF /* rnn_vad_weights.h */; }; >+ 419241992127586500634FCF /* rnn_vad_weights.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241942127586400634FCF /* rnn_vad_weights.cc */; }; >+ 4192419A2127586500634FCF /* kiss_fft.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241952127586500634FCF /* kiss_fft.cc */; }; >+ 4192419B2127586500634FCF /* kiss_fft.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241962127586500634FCF /* kiss_fft.h */; }; >+ 4192419C2127586500634FCF /* rnn_activations.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241972127586500634FCF /* rnn_activations.h */; }; >+ 4192419F2127588300634FCF /* audio_codec_pair_id.h in Headers */ = {isa = PBXBuildFile; fileRef = 4192419D2127588200634FCF /* audio_codec_pair_id.h */; }; >+ 419241A02127588300634FCF /* audio_codec_pair_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4192419E2127588200634FCF /* audio_codec_pair_id.cc */; }; >+ 419241A8212758D300634FCF /* spectral_features_internal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241A1212758D200634FCF /* spectral_features_internal.cc */; }; >+ 419241A9212758D300634FCF /* symmetric_matrix_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241A2212758D200634FCF /* symmetric_matrix_buffer.h */; }; >+ 419241AA212758D300634FCF /* rnn.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241A3212758D200634FCF /* rnn.h */; }; >+ 419241AB212758D300634FCF /* spectral_features.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241A4212758D200634FCF /* spectral_features.h */; }; >+ 419241AC212758D300634FCF /* sequence_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241A5212758D200634FCF /* sequence_buffer.h */; }; >+ 419241AD212758D300634FCF /* spectral_features.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241A6212758D200634FCF /* spectral_features.cc */; }; >+ 419241AE212758D300634FCF /* ring_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241A7212758D300634FCF /* ring_buffer.h */; }; >+ 419241B02127590200634FCF /* rtp_generic_frame_descriptor_extension.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241AF2127590200634FCF /* rtp_generic_frame_descriptor_extension.cc */; }; >+ 419241C02127593F00634FCF /* loss_rate_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241B22127593C00634FCF /* loss_rate_filter.h */; }; >+ 419241C12127593F00634FCF /* data_transfer_tracker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241B32127593D00634FCF /* data_transfer_tracker.cc */; }; >+ 419241C22127593F00634FCF /* windowed_filter.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241B42127593D00634FCF /* windowed_filter.h */; }; >+ 419241C32127593F00634FCF /* bbr_network_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241B52127593D00634FCF /* bbr_network_controller.h */; }; >+ 419241C42127593F00634FCF /* bandwidth_sampler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241B62127593D00634FCF /* bandwidth_sampler.cc */; }; >+ 419241C52127593F00634FCF /* loss_rate_filter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241B72127593D00634FCF /* loss_rate_filter.cc */; }; >+ 419241C62127593F00634FCF /* bbr_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241B82127593E00634FCF /* bbr_factory.h */; }; >+ 419241C72127593F00634FCF /* bbr_network_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241B92127593E00634FCF /* bbr_network_controller.cc */; }; >+ 419241C82127593F00634FCF /* packet_number_indexed_queue.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241BA2127593E00634FCF /* packet_number_indexed_queue.h */; }; >+ 419241C92127593F00634FCF /* bbr_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241BB2127593E00634FCF /* bbr_factory.cc */; }; >+ 419241CA2127593F00634FCF /* rtt_stats.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241BC2127593E00634FCF /* rtt_stats.cc */; }; >+ 419241CB2127593F00634FCF /* rtt_stats.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241BD2127593E00634FCF /* rtt_stats.h */; }; >+ 419241CC2127593F00634FCF /* bandwidth_sampler.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241BE2127593F00634FCF /* bandwidth_sampler.h */; }; >+ 419241CD2127593F00634FCF /* data_transfer_tracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241BF2127593F00634FCF /* data_transfer_tracker.h */; }; >+ 419241D02127597D00634FCF /* simulated_network.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241CE2127597C00634FCF /* simulated_network.cc */; }; >+ 419241D12127597D00634FCF /* simulated_network.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241CF2127597C00634FCF /* simulated_network.h */; }; >+ 419241D3212759A100634FCF /* fec_private_tables_random.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241D2212759A100634FCF /* fec_private_tables_random.cc */; }; >+ 419241DD21275A3000634FCF /* time_delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241D521275A2F00634FCF /* time_delta.h */; }; >+ 419241DE21275A3000634FCF /* data_rate.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241D621275A2F00634FCF /* data_rate.h */; }; >+ 419241DF21275A3000634FCF /* data_size.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241D721275A2F00634FCF /* data_size.cc */; }; >+ 419241E021275A3000634FCF /* timestamp.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241D821275A2F00634FCF /* timestamp.h */; }; >+ 419241E121275A3000634FCF /* data_rate.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241D921275A2F00634FCF /* data_rate.cc */; }; >+ 419241E221275A3000634FCF /* time_delta.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241DA21275A3000634FCF /* time_delta.cc */; }; >+ 419241E321275A3000634FCF /* timestamp.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241DB21275A3000634FCF /* timestamp.cc */; }; >+ 419241E421275A3000634FCF /* data_size.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241DC21275A3000634FCF /* data_size.h */; }; >+ 419241E721275A7600634FCF /* field_trial_units.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241E521275A7600634FCF /* field_trial_units.h */; }; >+ 419241E821275A7600634FCF /* field_trial_units.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241E621275A7600634FCF /* field_trial_units.cc */; }; >+ 419241ED21275AFA00634FCF /* simulcast_utility.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241E921275AF900634FCF /* simulcast_utility.h */; }; >+ 419241EE21275AFA00634FCF /* simulcast_rate_allocator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241EA21275AFA00634FCF /* simulcast_rate_allocator.cc */; }; >+ 419241EF21275AFA00634FCF /* simulcast_utility.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241EB21275AFA00634FCF /* simulcast_utility.cc */; }; >+ 419241F021275AFA00634FCF /* simulcast_rate_allocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241EC21275AFA00634FCF /* simulcast_rate_allocator.h */; }; >+ 419241F121275B2B00634FCF /* simulcast_encoder_adapter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F9BFB12051C93500ABF0B9 /* simulcast_encoder_adapter.cc */; }; >+ 419241F421275C3200634FCF /* vp8_encoder_simulcast_proxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 419241F221275C3100634FCF /* vp8_encoder_simulcast_proxy.h */; }; >+ 419241F521275C3200634FCF /* vp8_encoder_simulcast_proxy.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419241F321275C3200634FCF /* vp8_encoder_simulcast_proxy.cc */; }; >+ 4192423D212768BD00634FCF /* objc_frame_buffer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4192421D2127664D00634FCF /* objc_frame_buffer.mm */; }; >+ 4192423E21276B5A00634FCF /* VideoToolBoxEncoderFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 419C84AE1FE304C60040C30F /* VideoToolBoxEncoderFactory.cpp */; }; >+ 4192424121276F0200634FCF /* VideoToolBoxDecoderFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 419C84AF1FE304C70040C30F /* VideoToolBoxDecoderFactory.cpp */; }; >+ 419242422127718D00634FCF /* video_encoder_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 419242052127664500634FCF /* video_encoder_factory.mm */; }; >+ 419242432127719300634FCF /* video_decoder_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 419242032127664200634FCF /* video_decoder_factory.mm */; }; >+ 41924244212771B700634FCF /* objc_video_encoder_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 419242172127664B00634FCF /* objc_video_encoder_factory.mm */; }; >+ 41924245212771BB00634FCF /* objc_video_decoder_factory.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4192421A2127664C00634FCF /* objc_video_decoder_factory.mm */; }; >+ 41924246212771DC00634FCF /* objc_video_frame.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4192421E2127664D00634FCF /* objc_video_frame.mm */; }; > 419C829A1FE20CA10040C30F /* interval_budget.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419C82991FE20CA10040C30F /* interval_budget.cc */; }; > 419C829D1FE20D1C0040C30F /* audio_processing_statistics.cc in Sources */ = {isa = PBXBuildFile; fileRef = 419C829B1FE20D1B0040C30F /* audio_processing_statistics.cc */; }; > 419C829E1FE20D1C0040C30F /* audio_processing_statistics.h in Headers */ = {isa = PBXBuildFile; fileRef = 419C829C1FE20D1C0040C30F /* audio_processing_statistics.h */; }; >@@ -650,6 +855,34 @@ > 419C84C01FE319440040C30F /* audio_encoder_ilbc.h in Headers */ = {isa = PBXBuildFile; fileRef = 419C84BB1FE319440040C30F /* audio_encoder_ilbc.h */; }; > 419C84C11FE31A0B0040C30F /* encoder_vcp.h in Headers */ = {isa = PBXBuildFile; fileRef = 419C849C1FE2FEC00040C30F /* encoder_vcp.h */; }; > 419C84CB1FE3252E0040C30F /* curve25519.c in Sources */ = {isa = PBXBuildFile; fileRef = 419C847C1FE256B90040C30F /* curve25519.c */; }; >+ 41A08BAB212681C8001D5D7B /* encoded_frame.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F263C72126818A00274F59 /* encoded_frame.cc */; }; >+ 41A08BAC212681C8001D5D7B /* encoded_frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C22126818900274F59 /* encoded_frame.h */; }; >+ 41A08BAD212681C8001D5D7B /* i010_buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263BF2126818900274F59 /* i010_buffer.h */; }; >+ 41A08BAE212681C8001D5D7B /* video_bitrate_allocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C42126818900274F59 /* video_bitrate_allocation.h */; }; >+ 41A08BAF212681C8001D5D7B /* video_bitrate_allocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C12126818900274F59 /* video_bitrate_allocator.h */; }; >+ 41A08BB0212681C8001D5D7B /* video_source_interface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F263C62126818A00274F59 /* video_source_interface.cc */; }; >+ 41A08BB1212681C8001D5D7B /* video_source_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263BE2126818800274F59 /* video_source_interface.h */; }; >+ 41A08BB2212681C8001D5D7B /* video_stream_decoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C52126818A00274F59 /* video_stream_decoder.h */; }; >+ 41A08BB3212681C8001D5D7B /* video_stream_encoder_create.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C02126818900274F59 /* video_stream_encoder_create.h */; }; >+ 41A08BB4212681C8001D5D7B /* video_stream_encoder_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263C32126818900274F59 /* video_stream_encoder_interface.h */; }; >+ 41A08BB5212681C8001D5D7B /* video_stream_encoder_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263BD2126818800274F59 /* video_stream_encoder_observer.h */; }; >+ 41A08BB821268A7D001D5D7B /* memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BB721268A7D001D5D7B /* memory.h */; }; >+ 41A08BBD21269553001D5D7B /* rtc_event_ice_candidate_pair_config.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BB921269552001D5D7B /* rtc_event_ice_candidate_pair_config.cc */; }; >+ 41A08BBE21269553001D5D7B /* rtc_event_ice_candidate_pair.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BBA21269552001D5D7B /* rtc_event_ice_candidate_pair.h */; }; >+ 41A08BBF21269553001D5D7B /* rtc_event_ice_candidate_pair_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BBB21269552001D5D7B /* rtc_event_ice_candidate_pair_config.h */; }; >+ 41A08BC021269553001D5D7B /* rtc_event_ice_candidate_pair.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BBC21269553001D5D7B /* rtc_event_ice_candidate_pair.cc */; }; >+ 41A08BC321269577001D5D7B /* icelogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BC121269576001D5D7B /* icelogger.h */; }; >+ 41A08BC421269577001D5D7B /* icelogger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BC221269576001D5D7B /* icelogger.cc */; }; >+ 41A08BC7212695DE001D5D7B /* bad_optional_access.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BC5212695DE001D5D7B /* bad_optional_access.h */; }; >+ 41A08BC8212695DE001D5D7B /* bad_optional_access.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BC6212695DE001D5D7B /* bad_optional_access.cc */; }; >+ 41A08BCB2126961F001D5D7B /* raw_logging.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BC92126961F001D5D7B /* raw_logging.h */; }; >+ 41A08BCC21269620001D5D7B /* raw_logging.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BCA2126961F001D5D7B /* raw_logging.cc */; }; >+ 41A08BCF21272EE2001D5D7B /* gain_controller2.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BCD21272EE1001D5D7B /* gain_controller2.h */; }; >+ 41A08BD021272EE2001D5D7B /* gain_controller2.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BCE21272EE1001D5D7B /* gain_controller2.cc */; }; >+ 41A08BD321272EFA001D5D7B /* round_robin_packet_queue.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BD121272EFA001D5D7B /* round_robin_packet_queue.h */; }; >+ 41A08BD421272EFA001D5D7B /* round_robin_packet_queue.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BD221272EFA001D5D7B /* round_robin_packet_queue.cc */; }; >+ 41A08BD721272F1D001D5D7B /* congestion_window_pushback_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A08BD521272F1C001D5D7B /* congestion_window_pushback_controller.h */; }; >+ 41A08BD821272F1D001D5D7B /* congestion_window_pushback_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41A08BD621272F1C001D5D7B /* congestion_window_pushback_controller.cc */; }; > 41A391731EFC447C00C4516A /* sha1-altivec.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A3914F1EFC446E00C4516A /* sha1-altivec.c */; }; > 41A391741EFC447C00C4516A /* sha1.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A391501EFC446E00C4516A /* sha1.c */; }; > 41A391751EFC447C00C4516A /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A391511EFC446E00C4516A /* sha256.c */; }; >@@ -709,10 +942,86 @@ > 41A3921B1EFC5AB800C4516A /* x25519-asm-x86_64.S in Sources */ = {isa = PBXBuildFile; fileRef = 41A392191EFC5AB800C4516A /* x25519-asm-x86_64.S */; }; > 41A392201EFC5CF500C4516A /* e_aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A3918C1EFC44EA00C4516A /* e_aes.c */; }; > 41A392211EFC5CFA00C4516A /* aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 41A391EB1EFC493000C4516A /* aes.c */; }; >+ 41AF2D13212CD6AC00D033D5 /* RTCVideoCodecH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAB520630108009D5141 /* RTCVideoCodecH264.mm */; }; >+ 41AF2D14212CD6AF00D033D5 /* RTCVideoDecoderH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 413A23F81FE1987C00373E99 /* RTCVideoDecoderH264.mm */; }; >+ 41D6B45321273159008F9353 /* call_config.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FD72127313F00064CBF /* call_config.cc */; }; >+ 41D6B45421273159008F9353 /* call_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FDA2127313F00064CBF /* call_config.h */; }; >+ 41D6B45521273159008F9353 /* degraded_call.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FD22127313E00064CBF /* degraded_call.h */; }; >+ 41D6B45621273159008F9353 /* packet_receiver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FD82127313F00064CBF /* packet_receiver.cc */; }; >+ 41D6B45721273159008F9353 /* receive_time_calculator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FD02127313D00064CBF /* receive_time_calculator.cc */; }; >+ 41D6B45821273159008F9353 /* receive_time_calculator.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FD52127313E00064CBF /* receive_time_calculator.h */; }; >+ 41D6B45921273159008F9353 /* rtp_bitrate_configurator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FD92127313F00064CBF /* rtp_bitrate_configurator.cc */; }; >+ 41D6B45A21273159008F9353 /* rtp_payload_params.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FD12127313E00064CBF /* rtp_payload_params.h */; }; >+ 41D6B45B21273159008F9353 /* rtp_video_sender_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FD62127313E00064CBF /* rtp_video_sender_interface.h */; }; >+ 41D6B45C21273159008F9353 /* rtp_video_sender.cc in Sources */ = {isa = PBXBuildFile; fileRef = 415F1FD32127313E00064CBF /* rtp_video_sender.cc */; }; >+ 41D6B45D21273159008F9353 /* rtp_video_sender.h in Headers */ = {isa = PBXBuildFile; fileRef = 415F1FD42127313E00064CBF /* rtp_video_sender.h */; }; > 41DDB24D21265BD700296D47 /* fixed_array.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB24B21265BD700296D47 /* fixed_array.h */; }; > 41DDB24E21265BD700296D47 /* inlined_vector.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB24C21265BD700296D47 /* inlined_vector.h */; }; >- 41DDB25121265BE900296D47 /* optional.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB24F21265BE900296D47 /* optional.h */; }; >+ 41DDB25121265BE900296D47 /* optional.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB24F21265BE900296D47 /* optional.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 41DDB25221265BE900296D47 /* optional.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB25021265BE900296D47 /* optional.cc */; }; >+ 41DDB254212678E400296D47 /* platform_thread_types.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB253212678E300296D47 /* platform_thread_types.cc */; }; >+ 41DDB2562126790A00296D47 /* socket.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB2552126790A00296D47 /* socket.cc */; }; >+ 41DDB2592126792800296D47 /* zero_memory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB2572126792800296D47 /* zero_memory.cc */; }; >+ 41DDB25A2126792800296D47 /* zero_memory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB2582126792800296D47 /* zero_memory.h */; }; >+ 41DDB261212679A300296D47 /* opensslutility.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB25B2126799F00296D47 /* opensslutility.h */; }; >+ 41DDB262212679A300296D47 /* opensslsessioncache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB25C212679A000296D47 /* opensslsessioncache.cc */; }; >+ 41DDB263212679A300296D47 /* opensslsessioncache.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB25D212679A000296D47 /* opensslsessioncache.h */; }; >+ 41DDB264212679A300296D47 /* opensslcertificate.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB25E212679A100296D47 /* opensslcertificate.cc */; }; >+ 41DDB265212679A300296D47 /* opensslutility.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB25F212679A200296D47 /* opensslutility.cc */; }; >+ 41DDB266212679A300296D47 /* opensslcertificate.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB260212679A200296D47 /* opensslcertificate.h */; }; >+ 41DDB26C212679D200296D47 /* string_builder.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB268212679D100296D47 /* string_builder.h */; }; >+ 41DDB26D212679D200296D47 /* audio_format_to_string.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB269212679D100296D47 /* audio_format_to_string.h */; }; >+ 41DDB26E212679D200296D47 /* string_builder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB26A212679D200296D47 /* string_builder.cc */; }; >+ 41DDB26F212679D200296D47 /* audio_format_to_string.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB26B212679D200296D47 /* audio_format_to_string.cc */; }; >+ 41E02C782127347400C27CD6 /* contributing_sources.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6EB21273460006AE8D7 /* contributing_sources.cc */; }; >+ 41E02C792127347400C27CD6 /* rtp_generic_frame_descriptor_extension.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6E82127345F006AE8D7 /* rtp_generic_frame_descriptor_extension.h */; }; >+ 41E02C7A2127347400C27CD6 /* rtp_generic_frame_descriptor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6E52127345E006AE8D7 /* rtp_generic_frame_descriptor.cc */; }; >+ 41E02C7B2127347400C27CD6 /* rtp_generic_frame_descriptor.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6E62127345F006AE8D7 /* rtp_generic_frame_descriptor.h */; }; >+ 41E02C7C2127347400C27CD6 /* rtp_packet_to_send.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6E92127345F006AE8D7 /* rtp_packet_to_send.cc */; }; >+ 41E02C7D2127347400C27CD6 /* rtp_video_header.cc in Sources */ = {isa = PBXBuildFile; fileRef = 4102F6E72127345F006AE8D7 /* rtp_video_header.cc */; }; >+ 41E02C7E2127347400C27CD6 /* rtp_video_header.h in Headers */ = {isa = PBXBuildFile; fileRef = 4102F6EA2127345F006AE8D7 /* rtp_video_header.h */; }; >+ 41E02C87212734B900C27CD6 /* decoder_database.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C7F212734B800C27CD6 /* decoder_database.h */; }; >+ 41E02C88212734B900C27CD6 /* encoder_database.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C80212734B800C27CD6 /* encoder_database.cc */; }; >+ 41E02C89212734B900C27CD6 /* encoder_database.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C81212734B800C27CD6 /* encoder_database.h */; }; >+ 41E02C8A212734B900C27CD6 /* fec_controller_default.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C82212734B800C27CD6 /* fec_controller_default.cc */; }; >+ 41E02C8B212734B900C27CD6 /* decoder_database.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C83212734B800C27CD6 /* decoder_database.cc */; }; >+ 41E02C8C212734B900C27CD6 /* fec_controller_default.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C84212734B900C27CD6 /* fec_controller_default.h */; }; >+ 41E02C8D212734B900C27CD6 /* video_coding_defines.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C85212734B900C27CD6 /* video_coding_defines.cc */; }; >+ 41E02C8E212734B900C27CD6 /* fec_rate_table.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C86212734B900C27CD6 /* fec_rate_table.h */; }; >+ 41E02CA42127352D00C27CD6 /* probe_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C902127352900C27CD6 /* probe_controller.h */; }; >+ 41E02CA52127352D00C27CD6 /* delay_based_bwe.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C912127352900C27CD6 /* delay_based_bwe.cc */; }; >+ 41E02CA62127352D00C27CD6 /* acknowledged_bitrate_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C922127352A00C27CD6 /* acknowledged_bitrate_estimator.h */; }; >+ 41E02CA72127352D00C27CD6 /* probe_bitrate_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C932127352A00C27CD6 /* probe_bitrate_estimator.h */; }; >+ 41E02CA82127352D00C27CD6 /* acknowledged_bitrate_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C942127352A00C27CD6 /* acknowledged_bitrate_estimator.cc */; }; >+ 41E02CA92127352D00C27CD6 /* goog_cc_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C952127352A00C27CD6 /* goog_cc_factory.cc */; }; >+ 41E02CAA2127352D00C27CD6 /* goog_cc_network_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C962127352A00C27CD6 /* goog_cc_network_control.h */; }; >+ 41E02CAB2127352D00C27CD6 /* delay_based_bwe.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C972127352A00C27CD6 /* delay_based_bwe.h */; }; >+ 41E02CAC2127352D00C27CD6 /* bitrate_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C982127352B00C27CD6 /* bitrate_estimator.h */; }; >+ 41E02CAD2127352D00C27CD6 /* alr_detector.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C992127352B00C27CD6 /* alr_detector.h */; }; >+ 41E02CAE2127352D00C27CD6 /* bitrate_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C9A2127352B00C27CD6 /* bitrate_estimator.cc */; }; >+ 41E02CAF2127352D00C27CD6 /* median_slope_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C9B2127352B00C27CD6 /* median_slope_estimator.h */; }; >+ 41E02CB02127352D00C27CD6 /* trendline_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C9C2127352B00C27CD6 /* trendline_estimator.cc */; }; >+ 41E02CB12127352D00C27CD6 /* median_slope_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C9D2127352B00C27CD6 /* median_slope_estimator.cc */; }; >+ 41E02CB22127352D00C27CD6 /* probe_bitrate_estimator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02C9E2127352C00C27CD6 /* probe_bitrate_estimator.cc */; }; >+ 41E02CB32127352D00C27CD6 /* trendline_estimator.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02C9F2127352C00C27CD6 /* trendline_estimator.h */; }; >+ 41E02CB42127352D00C27CD6 /* probe_controller.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CA02127352C00C27CD6 /* probe_controller.cc */; }; >+ 41E02CB52127352D00C27CD6 /* alr_detector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CA12127352C00C27CD6 /* alr_detector.cc */; }; >+ 41E02CB62127352D00C27CD6 /* goog_cc_network_control.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CA22127352C00C27CD6 /* goog_cc_network_control.cc */; }; >+ 41E02CB72127352D00C27CD6 /* delay_increase_detector_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CA32127352D00C27CD6 /* delay_increase_detector_interface.h */; }; >+ 41E02CBD2127356A00C27CD6 /* sslcertificate.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CB82127356900C27CD6 /* sslcertificate.h */; }; >+ 41E02CBE2127356A00C27CD6 /* sslcertificate.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CB92127356A00C27CD6 /* sslcertificate.cc */; }; >+ 41E02CBF2127356A00C27CD6 /* weak_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CBA2127356A00C27CD6 /* weak_ptr.h */; }; >+ 41E02CC02127356A00C27CD6 /* data_rate_limiter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CBB2127356A00C27CD6 /* data_rate_limiter.cc */; }; >+ 41E02CC12127356A00C27CD6 /* data_rate_limiter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CBC2127356A00C27CD6 /* data_rate_limiter.h */; }; >+ 41E02CC42127358800C27CD6 /* builtin_video_encoder_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CC22127358700C27CD6 /* builtin_video_encoder_factory.cc */; }; >+ 41E02CC52127358800C27CD6 /* video_encoder_config.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CC32127358800C27CD6 /* video_encoder_config.cc */; }; >+ 41E02CCC212735B700C27CD6 /* bitrate_settings.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CC7212735B600C27CD6 /* bitrate_settings.cc */; }; >+ 41E02CCD212735B700C27CD6 /* network_types.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CC8212735B700C27CD6 /* network_types.cc */; }; >+ 41E02CCE212735B700C27CD6 /* network_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CC9212735B700C27CD6 /* network_types.h */; }; >+ 41E02CCF212735B700C27CD6 /* network_control.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CCA212735B700C27CD6 /* network_control.h */; }; >+ 41E02CD0212735B700C27CD6 /* bitrate_settings.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CCB212735B700C27CD6 /* bitrate_settings.h */; }; >+ 41E02CD32127360700C27CD6 /* sample_counter.h in Headers */ = {isa = PBXBuildFile; fileRef = 41E02CD12127360600C27CD6 /* sample_counter.h */; }; >+ 41E02CD42127360700C27CD6 /* sample_counter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41E02CD22127360700C27CD6 /* sample_counter.cc */; }; > 41EA53A51EFC2C14002FF04C /* hmac.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EA53A41EFC2BFD002FF04C /* hmac.c */; }; > 41EA53AB1EFC2C4D002FF04C /* digest.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EA53A71EFC2C4D002FF04C /* digest.c */; }; > 41EA53AC1EFC2C4D002FF04C /* digests.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EA53A81EFC2C4D002FF04C /* digests.c */; }; >@@ -757,12 +1066,10 @@ > 41EA541A1EFC2D53002FF04C /* md5.c in Sources */ = {isa = PBXBuildFile; fileRef = 41EA54181EFC2D53002FF04C /* md5.c */; }; > 41ECEAB620630108009D5141 /* RTCVideoCodec+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAB320630107009D5141 /* RTCVideoCodec+Private.h */; }; > 41ECEAB720630108009D5141 /* RTCVideoCodec.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAB420630107009D5141 /* RTCVideoCodec.mm */; }; >- 41ECEAB820630108009D5141 /* RTCVideoCodecH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAB520630108009D5141 /* RTCVideoCodecH264.mm */; }; > 41ECEABC206403C2009D5141 /* WebKitUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEABB206403C1009D5141 /* WebKitUtilities.h */; }; > 41ECEABE20640498009D5141 /* WebKitUtilities.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEABD20640498009D5141 /* WebKitUtilities.mm */; }; > 41ECEAC120640F28009D5141 /* NSString+StdString.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEABF20640F27009D5141 /* NSString+StdString.h */; }; > 41ECEAC220640F28009D5141 /* NSString+StdString.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAC020640F28009D5141 /* NSString+StdString.mm */; }; >- 41ECEAC3206411E2009D5141 /* RTCVideoDecoderH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 413A23F81FE1987C00373E99 /* RTCVideoDecoderH264.mm */; }; > 41ECEAC4206411E5009D5141 /* RTCVideoEncoderH264.mm in Sources */ = {isa = PBXBuildFile; fileRef = 413A23F41FE1987B00373E99 /* RTCVideoEncoderH264.mm */; }; > 41ECEAC620641303009D5141 /* RTCCVPixelBuffer.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAC520641302009D5141 /* RTCCVPixelBuffer.mm */; }; > 41ECEAC820641328009D5141 /* RTCEncodedImage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAC720641328009D5141 /* RTCEncodedImage.mm */; }; >@@ -782,6 +1089,56 @@ > 41ECEAFC20646664009D5141 /* EncoderUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAF920646663009D5141 /* EncoderUtilities.h */; }; > 41ECEAFD20646664009D5141 /* VideoProcessingSoftLink.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41ECEAFA20646663009D5141 /* VideoProcessingSoftLink.cpp */; }; > 41ECEAFE20646664009D5141 /* VideoProcessingSoftLink.h in Headers */ = {isa = PBXBuildFile; fileRef = 41ECEAFB20646664009D5141 /* VideoProcessingSoftLink.h */; }; >+ 41F2635F21267ADF00274F59 /* builtin_video_decoder_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27321267AC000296D47 /* builtin_video_decoder_factory.cc */; }; >+ 41F2636021267ADF00274F59 /* builtin_video_decoder_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27621267AC100296D47 /* builtin_video_decoder_factory.h */; }; >+ 41F2636121267ADF00274F59 /* builtin_video_encoder_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27721267AC100296D47 /* builtin_video_encoder_factory.h */; }; >+ 41F2636221267ADF00274F59 /* sdp_video_format.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27A21267AC200296D47 /* sdp_video_format.cc */; }; >+ 41F2636321267ADF00274F59 /* video_codec.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27021267AC000296D47 /* video_codec.cc */; }; >+ 41F2636421267ADF00274F59 /* video_codec.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27121267AC000296D47 /* video_codec.h */; }; >+ 41F2636521267ADF00274F59 /* video_decoder_software_fallback_wrapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27421267AC100296D47 /* video_decoder_software_fallback_wrapper.cc */; }; >+ 41F2636621267ADF00274F59 /* video_decoder_software_fallback_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27821267AC100296D47 /* video_decoder_software_fallback_wrapper.h */; }; >+ 41F2636721267ADF00274F59 /* video_decoder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27221267AC000296D47 /* video_decoder.cc */; }; >+ 41F2636821267ADF00274F59 /* video_encoder_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27B21267AC200296D47 /* video_encoder_config.h */; }; >+ 41F2636921267ADF00274F59 /* video_encoder_software_fallback_wrapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41DDB27521267AC100296D47 /* video_encoder_software_fallback_wrapper.cc */; }; >+ 41F2636A21267ADF00274F59 /* video_encoder_software_fallback_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 41DDB27921267AC200296D47 /* video_encoder_software_fallback_wrapper.h */; }; >+ 41F2636E21267B3E00274F59 /* fft4g.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2636C21267B3D00274F59 /* fft4g.c */; }; >+ 41F2636F21267B3E00274F59 /* fft4g.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2636D21267B3E00274F59 /* fft4g.h */; }; >+ 41F2637221267B4A00274F59 /* spl_sqrt_floor.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2637021267B4A00274F59 /* spl_sqrt_floor.h */; }; >+ 41F2637321267B4A00274F59 /* spl_sqrt_floor.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637121267B4A00274F59 /* spl_sqrt_floor.c */; }; >+ 41F2637D21267B7700274F59 /* peerconnectioninterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637421267B7500274F59 /* peerconnectioninterface.cc */; }; >+ 41F2637E21267B7700274F59 /* audio_options.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637521267B7600274F59 /* audio_options.cc */; }; >+ 41F2637F21267B7700274F59 /* fec_controller.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2637621267B7600274F59 /* fec_controller.h */; }; >+ 41F2638021267B7700274F59 /* datachannelinterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637721267B7600274F59 /* datachannelinterface.cc */; }; >+ 41F2638121267B7700274F59 /* audio_options.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2637821267B7600274F59 /* audio_options.h */; }; >+ 41F2638221267B7700274F59 /* bitrate_constraints.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2637921267B7700274F59 /* bitrate_constraints.h */; }; >+ 41F2638321267B7700274F59 /* rtpreceiverinterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637A21267B7700274F59 /* rtpreceiverinterface.cc */; }; >+ 41F2638421267B7700274F59 /* jsepicecandidate.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637B21267B7700274F59 /* jsepicecandidate.cc */; }; >+ 41F2638521267B7700274F59 /* rtptransceiverinterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2637C21267B7700274F59 /* rtptransceiverinterface.cc */; }; >+ 41F2638921267F4000274F59 /* fft.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2638721267F4000274F59 /* fft.h */; }; >+ 41F2638A21267F4000274F59 /* fft.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2638821267F4000274F59 /* fft.c */; }; >+ 41F2638D21267F4900274F59 /* g711.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2638B21267F4900274F59 /* g711.c */; }; >+ 41F2638E21267F4900274F59 /* g711.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2638C21267F4900274F59 /* g711.h */; }; >+ 41F2639221267F5300274F59 /* g722_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2638F21267F5200274F59 /* g722_encode.c */; }; >+ 41F2639321267F5300274F59 /* g722_enc_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2639021267F5300274F59 /* g722_enc_dec.h */; }; >+ 41F2639421267F5300274F59 /* g722_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2639121267F5300274F59 /* g722_decode.c */; }; >+ 41F2639821267F5E00274F59 /* pa_memorybarrier.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2639521267F5E00274F59 /* pa_memorybarrier.h */; }; >+ 41F2639921267F5E00274F59 /* pa_ringbuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2639621267F5E00274F59 /* pa_ringbuffer.h */; }; >+ 41F2639A21267F5E00274F59 /* pa_ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 41F2639721267F5E00274F59 /* pa_ringbuffer.c */; }; >+ 41F2639E2126800000274F59 /* aligned_malloc.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F2639B21267FFF00274F59 /* aligned_malloc.cc */; }; >+ 41F2639F2126800000274F59 /* aligned_malloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2639C21267FFF00274F59 /* aligned_malloc.h */; }; >+ 41F263A02126800000274F59 /* aligned_array.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F2639D2126800000274F59 /* aligned_array.h */; }; >+ 41F263AC212680A800274F59 /* file_wrapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F263A3212680A600274F59 /* file_wrapper.cc */; }; >+ 41F263AD212680A800274F59 /* ignore_warnings.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263A4212680A600274F59 /* ignore_warnings.h */; }; >+ 41F263AE212680A800274F59 /* fallthrough.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263A5212680A700274F59 /* fallthrough.h */; }; >+ 41F263AF212680A800274F59 /* inline.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263A6212680A700274F59 /* inline.h */; }; >+ 41F263B0212680A800274F59 /* unused.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263A7212680A700274F59 /* unused.h */; }; >+ 41F263B1212680A800274F59 /* asm_defines.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263A9212680A700274F59 /* asm_defines.h */; }; >+ 41F263B2212680A800274F59 /* file_wrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263AA212680A800274F59 /* file_wrapper.h */; }; >+ 41F263B3212680A800274F59 /* arch.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263AB212680A800274F59 /* arch.h */; }; >+ 41F263B72126810C00274F59 /* base64.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F263B52126810B00274F59 /* base64.cc */; }; >+ 41F263B82126810C00274F59 /* base64.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263B62126810C00274F59 /* base64.h */; }; >+ 41F263BB2126811500274F59 /* sigslot.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F263B92126811400274F59 /* sigslot.cc */; }; >+ 41F263BC2126811500274F59 /* sigslot.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F263BA2126811400274F59 /* sigslot.h */; }; > 41F411AD1EF8D91F00343C26 /* null_aec_dump_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F411AC1EF8D91E00343C26 /* null_aec_dump_factory.cc */; }; > 41F411B01EF8DA0100343C26 /* rtcerror.cc in Sources */ = {isa = PBXBuildFile; fileRef = 41F411AE1EF8DA0000343C26 /* rtcerror.cc */; }; > 41F411B11EF8DA0200343C26 /* rtcerror.h in Headers */ = {isa = PBXBuildFile; fileRef = 41F411AF1EF8DA0000343C26 /* rtcerror.h */; }; >@@ -2819,6 +3176,59 @@ > /* Begin PBXFileReference section */ > 37119A8020CCB6DD002C6DC9 /* Version.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Version.xcconfig; sourceTree = "<group>"; }; > 37119A8120CCB6DD002C6DC9 /* WebKitTargetConditionals.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = WebKitTargetConditionals.xcconfig; sourceTree = "<group>"; }; >+ 4102F68421273204006AE8D7 /* rtcstatstraversal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtcstatstraversal.h; sourceTree = "<group>"; }; >+ 4102F68521273204006AE8D7 /* jseptransportcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jseptransportcontroller.h; sourceTree = "<group>"; }; >+ 4102F68621273205006AE8D7 /* transportstats.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transportstats.cc; sourceTree = "<group>"; }; >+ 4102F68721273205006AE8D7 /* jseptransportcontroller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jseptransportcontroller.cc; sourceTree = "<group>"; }; >+ 4102F68821273205006AE8D7 /* rtpparametersconversion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtpparametersconversion.h; sourceTree = "<group>"; }; >+ 4102F68921273205006AE8D7 /* rtcstatstraversal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtcstatstraversal.cc; sourceTree = "<group>"; }; >+ 4102F68A21273206006AE8D7 /* rtpparametersconversion.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtpparametersconversion.cc; sourceTree = "<group>"; }; >+ 4102F68B21273206006AE8D7 /* transportstats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transportstats.h; sourceTree = "<group>"; }; >+ 4102F68C21273206006AE8D7 /* peerconnectioninternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = peerconnectioninternal.h; sourceTree = "<group>"; }; >+ 4102F69621273260006AE8D7 /* transport_feedback_packet_loss_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transport_feedback_packet_loss_tracker.h; sourceTree = "<group>"; }; >+ 4102F69721273260006AE8D7 /* remix_resample.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remix_resample.cc; sourceTree = "<group>"; }; >+ 4102F69821273260006AE8D7 /* audio_level.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_level.h; sourceTree = "<group>"; }; >+ 4102F69921273261006AE8D7 /* channel_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = channel_proxy.h; sourceTree = "<group>"; }; >+ 4102F69A21273261006AE8D7 /* audio_level.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio_level.cc; sourceTree = "<group>"; }; >+ 4102F69B21273261006AE8D7 /* channel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = channel.h; sourceTree = "<group>"; }; >+ 4102F69C21273261006AE8D7 /* channel_proxy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = channel_proxy.cc; sourceTree = "<group>"; }; >+ 4102F69D21273261006AE8D7 /* remix_resample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remix_resample.h; sourceTree = "<group>"; }; >+ 4102F69E21273262006AE8D7 /* channel.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = channel.cc; sourceTree = "<group>"; }; >+ 4102F69F21273262006AE8D7 /* transport_feedback_packet_loss_tracker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transport_feedback_packet_loss_tracker.cc; sourceTree = "<group>"; }; >+ 4102F6AA212732B0006AE8D7 /* rtp_payload_params.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtp_payload_params.cc; path = call/rtp_payload_params.cc; sourceTree = "<group>"; }; >+ 4102F6AC212732E6006AE8D7 /* expand_uma_logger.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expand_uma_logger.cc; sourceTree = "<group>"; }; >+ 4102F6AD212732E7006AE8D7 /* expand_uma_logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expand_uma_logger.h; sourceTree = "<group>"; }; >+ 4102F6B021273330006AE8D7 /* mediaconfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mediaconfig.h; path = base/mediaconfig.h; sourceTree = "<group>"; }; >+ 4102F6B121273330006AE8D7 /* mediachannel.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mediachannel.cc; path = base/mediachannel.cc; sourceTree = "<group>"; }; >+ 4102F6B521273381006AE8D7 /* packet_receiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = packet_receiver.h; path = call/packet_receiver.h; sourceTree = "<group>"; }; >+ 4102F6B621273381006AE8D7 /* audio_receive_stream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_receive_stream.cc; path = call/audio_receive_stream.cc; sourceTree = "<group>"; }; >+ 4102F6B721273381006AE8D7 /* degraded_call.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = degraded_call.cc; path = call/degraded_call.cc; sourceTree = "<group>"; }; >+ 4102F6B821273381006AE8D7 /* flexfec_receive_stream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = flexfec_receive_stream.cc; path = call/flexfec_receive_stream.cc; sourceTree = "<group>"; }; >+ 4102F6BE212733B5006AE8D7 /* video_send_stream_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_send_stream_impl.h; sourceTree = "<group>"; }; >+ 4102F6BF212733B6006AE8D7 /* video_quality_observer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_quality_observer.cc; sourceTree = "<group>"; }; >+ 4102F6C0212733B6006AE8D7 /* video_stream_encoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_stream_encoder.h; sourceTree = "<group>"; }; >+ 4102F6C1212733B6006AE8D7 /* video_stream_decoder_impl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_stream_decoder_impl.cc; sourceTree = "<group>"; }; >+ 4102F6C2212733B6006AE8D7 /* video_send_stream_impl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_send_stream_impl.cc; sourceTree = "<group>"; }; >+ 4102F6C4212733B6006AE8D7 /* video_stream_decoder_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_stream_decoder_impl.h; sourceTree = "<group>"; }; >+ 4102F6C5212733B6006AE8D7 /* video_quality_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_quality_observer.h; sourceTree = "<group>"; }; >+ 4102F6D121273414006AE8D7 /* video_stream_decoder_create.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_stream_decoder_create.cc; sourceTree = "<group>"; }; >+ 4102F6D221273414006AE8D7 /* color_space.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = color_space.cc; sourceTree = "<group>"; }; >+ 4102F6D321273415006AE8D7 /* video_sink_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_sink_interface.h; sourceTree = "<group>"; }; >+ 4102F6D421273415006AE8D7 /* video_stream_decoder_create.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_stream_decoder_create.h; sourceTree = "<group>"; }; >+ 4102F6D521273415006AE8D7 /* video_stream_encoder_create.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_stream_encoder_create.cc; sourceTree = "<group>"; }; >+ 4102F6D621273415006AE8D7 /* i010_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = i010_buffer.cc; sourceTree = "<group>"; }; >+ 4102F6D721273415006AE8D7 /* video_stream_encoder_settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_stream_encoder_settings.h; sourceTree = "<group>"; }; >+ 4102F6D821273416006AE8D7 /* color_space.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color_space.h; sourceTree = "<group>"; }; >+ 4102F6D921273416006AE8D7 /* video_bitrate_allocation.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_bitrate_allocation.cc; sourceTree = "<group>"; }; >+ 4102F6DA21273416006AE8D7 /* video_bitrate_allocator_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_bitrate_allocator_factory.h; sourceTree = "<group>"; }; >+ 4102F6E52127345E006AE8D7 /* rtp_generic_frame_descriptor.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rtp_generic_frame_descriptor.cc; sourceTree = "<group>"; }; >+ 4102F6E62127345F006AE8D7 /* rtp_generic_frame_descriptor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtp_generic_frame_descriptor.h; sourceTree = "<group>"; }; >+ 4102F6E72127345F006AE8D7 /* rtp_video_header.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rtp_video_header.cc; sourceTree = "<group>"; }; >+ 4102F6E82127345F006AE8D7 /* rtp_generic_frame_descriptor_extension.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtp_generic_frame_descriptor_extension.h; sourceTree = "<group>"; }; >+ 4102F6E92127345F006AE8D7 /* rtp_packet_to_send.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rtp_packet_to_send.cc; sourceTree = "<group>"; }; >+ 4102F6EA2127345F006AE8D7 /* rtp_video_header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rtp_video_header.h; sourceTree = "<group>"; }; >+ 4102F6EB21273460006AE8D7 /* contributing_sources.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = contributing_sources.cc; sourceTree = "<group>"; }; >+ 41053B4D212CD8EC004DAC6C /* UIDevice+H264Profile.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "UIDevice+H264Profile.mm"; path = "Video/UIDevice+H264Profile.mm"; sourceTree = "<group>"; }; > 41109AA61E5FA19200C0955A /* i420_buffer_pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = i420_buffer_pool.h; path = include/i420_buffer_pool.h; sourceTree = "<group>"; }; > 41109AA71E5FA19200C0955A /* video_frame_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = video_frame_buffer.h; path = include/video_frame_buffer.h; sourceTree = "<group>"; }; > 41109AA81E5FA19200C0955A /* frame_callback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = frame_callback.h; path = include/frame_callback.h; sourceTree = "<group>"; }; >@@ -2829,6 +3239,16 @@ > 4124554A1EF8874300F11809 /* video_frame_buffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_frame_buffer.cc; sourceTree = "<group>"; }; > 412455541EF887FA00F11809 /* packetlossestimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = packetlossestimator.cc; sourceTree = "<group>"; }; > 412455551EF887FA00F11809 /* packetlossestimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packetlossestimator.h; sourceTree = "<group>"; }; >+ 41299B8E2127367A00B3414B /* isac_vad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = isac_vad.c; path = source/isac_vad.c; sourceTree = "<group>"; }; >+ 41299B8F2127367B00B3414B /* isac_vad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = isac_vad.h; path = source/isac_vad.h; sourceTree = "<group>"; }; >+ 41299B902127367B00B3414B /* pitch_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pitch_filter.h; path = source/pitch_filter.h; sourceTree = "<group>"; }; >+ 41299B942127369000B3414B /* fake_network_pipe.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = fake_network_pipe.cc; path = call/fake_network_pipe.cc; sourceTree = "<group>"; }; >+ 41299B952127369100B3414B /* fake_network_pipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fake_network_pipe.h; path = call/fake_network_pipe.h; sourceTree = "<group>"; }; >+ 41299B99212736DE00B3414B /* pitch_search_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pitch_search_internal.h; sourceTree = "<group>"; }; >+ 41299B9A212736DE00B3414B /* pitch_search_internal.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pitch_search_internal.cc; sourceTree = "<group>"; }; >+ 41299B9B212736DE00B3414B /* pitch_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pitch_info.h; sourceTree = "<group>"; }; >+ 41299B9C212736DE00B3414B /* rnn.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rnn.cc; sourceTree = "<group>"; }; >+ 41299B9D212736DF00B3414B /* spectral_features_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = spectral_features_internal.h; sourceTree = "<group>"; }; > 413091F11EF8CF9100757C55 /* rtp_video_stream_receiver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtp_video_stream_receiver.h; sourceTree = "<group>"; }; > 413091F21EF8CF9100757C55 /* rtp_video_stream_receiver.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtp_video_stream_receiver.cc; sourceTree = "<group>"; }; > 413091F51EF8CFBD00757C55 /* iceserverparsing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iceserverparsing.h; sourceTree = "<group>"; }; >@@ -2969,7 +3389,6 @@ > 413A21C11FE18D9D00373E99 /* copyonwritebuffer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = copyonwritebuffer.cc; path = rtc_base/copyonwritebuffer.cc; sourceTree = "<group>"; }; > 413A21C21FE18D9E00373E99 /* asyncudpsocket.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = asyncudpsocket.cc; path = rtc_base/asyncudpsocket.cc; sourceTree = "<group>"; }; > 413A21C31FE18D9E00373E99 /* callback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = callback.h; path = rtc_base/callback.h; sourceTree = "<group>"; }; >- 413A21C41FE18D9F00373E99 /* event_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = event_unittest.cc; path = rtc_base/event_unittest.cc; sourceTree = "<group>"; }; > 413A21C51FE18D9F00373E99 /* helpers_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = helpers_unittest.cc; path = rtc_base/helpers_unittest.cc; sourceTree = "<group>"; }; > 413A21C61FE18DA000373E99 /* natsocketfactory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = natsocketfactory.cc; path = rtc_base/natsocketfactory.cc; sourceTree = "<group>"; }; > 413A21C71FE18DA100373E99 /* optionsfile_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = optionsfile_unittest.cc; path = rtc_base/optionsfile_unittest.cc; sourceTree = "<group>"; }; >@@ -3142,7 +3561,6 @@ > 413A227A1FE18DF800373E99 /* ifaddrs_converter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ifaddrs_converter.h; path = rtc_base/ifaddrs_converter.h; sourceTree = "<group>"; }; > 413A227B1FE18DF800373E99 /* physicalsocketserver_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = physicalsocketserver_unittest.cc; path = rtc_base/physicalsocketserver_unittest.cc; sourceTree = "<group>"; }; > 413A227C1FE18DF800373E99 /* nullsocketserver_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = nullsocketserver_unittest.cc; path = rtc_base/nullsocketserver_unittest.cc; sourceTree = "<group>"; }; >- 413A227D1FE18DF900373E99 /* event_tracer_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = event_tracer_unittest.cc; path = rtc_base/event_tracer_unittest.cc; sourceTree = "<group>"; }; > 413A227E1FE18DF900373E99 /* openssladapter_unittest.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = openssladapter_unittest.cc; path = rtc_base/openssladapter_unittest.cc; sourceTree = "<group>"; }; > 413A227F1FE18DF900373E99 /* nullsocketserver.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = nullsocketserver.cc; path = rtc_base/nullsocketserver.cc; sourceTree = "<group>"; }; > 413A22801FE18DFA00373E99 /* stream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = stream.cc; path = rtc_base/stream.cc; sourceTree = "<group>"; }; >@@ -3353,8 +3771,154 @@ > 414D71121E4AE9820023E526 /* user_socket.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = user_socket.c; sourceTree = "<group>"; }; > 414D71151E4AEACD0023E526 /* sctp_indata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sctp_indata.c; sourceTree = "<group>"; }; > 414D71181E4AEB110023E526 /* sctp_userspace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sctp_userspace.c; sourceTree = "<group>"; }; >+ 415F1FB92127304B00064CBF /* echo_control_mobile_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = echo_control_mobile_proxy.h; sourceTree = "<group>"; }; >+ 415F1FBA2127304B00064CBF /* echo_control_mobile_proxy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_control_mobile_proxy.cc; sourceTree = "<group>"; }; >+ 415F1FBB2127304C00064CBF /* echo_cancellation_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = echo_cancellation_proxy.h; sourceTree = "<group>"; }; >+ 415F1FBC2127304C00064CBF /* echo_cancellation_proxy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = echo_cancellation_proxy.cc; sourceTree = "<group>"; }; >+ 415F1FC52127308E00064CBF /* audio_state.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_state.cc; path = call/audio_state.cc; sourceTree = "<group>"; }; >+ 415F1FC8212730F000064CBF /* echo_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = echo_control.h; path = audio/echo_control.h; sourceTree = "<group>"; }; >+ 415F1FC9212730F000064CBF /* audio_mixer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_mixer.h; path = audio/audio_mixer.h; sourceTree = "<group>"; }; >+ 415F1FCA212730F000064CBF /* audio_frame.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_frame.cc; path = audio/audio_frame.cc; sourceTree = "<group>"; }; >+ 415F1FCB212730F000064CBF /* audio_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_frame.h; path = audio/audio_frame.h; sourceTree = "<group>"; }; >+ 415F1FD02127313D00064CBF /* receive_time_calculator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = receive_time_calculator.cc; path = call/receive_time_calculator.cc; sourceTree = "<group>"; }; >+ 415F1FD12127313E00064CBF /* rtp_payload_params.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rtp_payload_params.h; path = call/rtp_payload_params.h; sourceTree = "<group>"; }; >+ 415F1FD22127313E00064CBF /* degraded_call.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = degraded_call.h; path = call/degraded_call.h; sourceTree = "<group>"; }; >+ 415F1FD32127313E00064CBF /* rtp_video_sender.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rtp_video_sender.cc; path = call/rtp_video_sender.cc; sourceTree = "<group>"; }; >+ 415F1FD42127313E00064CBF /* rtp_video_sender.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rtp_video_sender.h; path = call/rtp_video_sender.h; sourceTree = "<group>"; }; >+ 415F1FD52127313E00064CBF /* receive_time_calculator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = receive_time_calculator.h; path = call/receive_time_calculator.h; sourceTree = "<group>"; }; >+ 415F1FD62127313E00064CBF /* rtp_video_sender_interface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = rtp_video_sender_interface.h; path = call/rtp_video_sender_interface.h; sourceTree = "<group>"; }; >+ 415F1FD72127313F00064CBF /* call_config.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = call_config.cc; path = call/call_config.cc; sourceTree = "<group>"; }; >+ 415F1FD82127313F00064CBF /* packet_receiver.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packet_receiver.cc; path = call/packet_receiver.cc; sourceTree = "<group>"; }; >+ 415F1FD92127313F00064CBF /* rtp_bitrate_configurator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = rtp_bitrate_configurator.cc; path = call/rtp_bitrate_configurator.cc; sourceTree = "<group>"; }; >+ 415F1FDA2127313F00064CBF /* call_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = call_config.h; path = call/call_config.h; sourceTree = "<group>"; }; > 416D2F101FA8CC0400097345 /* VideoProcessing.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = VideoProcessing.framework; path = System/Library/PrivateFrameworks/VideoProcessing.framework; sourceTree = SDKROOT; }; > 417DA4561EF9CD0A00E869DB /* RTCUIApplicationStatusObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RTCUIApplicationStatusObserver.h; path = Source/webrtc/sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h; sourceTree = SOURCE_ROOT; }; >+ 419241312127372200634FCF /* features_extraction.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = features_extraction.cc; sourceTree = "<group>"; }; >+ 419241322127372200634FCF /* features_extraction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = features_extraction.h; sourceTree = "<group>"; }; >+ 419241332127372300634FCF /* pitch_search.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pitch_search.h; sourceTree = "<group>"; }; >+ 419241342127372300634FCF /* fft_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fft_util.cc; sourceTree = "<group>"; }; >+ 419241352127372300634FCF /* lp_residual.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lp_residual.cc; sourceTree = "<group>"; }; >+ 419241362127372300634FCF /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = "<group>"; }; >+ 419241372127372400634FCF /* lp_residual.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lp_residual.h; sourceTree = "<group>"; }; >+ 419241382127372400634FCF /* pitch_search.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = pitch_search.cc; sourceTree = "<group>"; }; >+ 419241392127372400634FCF /* fft_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fft_util.h; sourceTree = "<group>"; }; >+ 419241482127376D00634FCF /* regatheringcontroller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regatheringcontroller.cc; sourceTree = "<group>"; }; >+ 419241492127376D00634FCF /* fakedtlstransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fakedtlstransport.h; sourceTree = "<group>"; }; >+ 4192414A2127376D00634FCF /* basicasyncresolverfactory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = basicasyncresolverfactory.cc; sourceTree = "<group>"; }; >+ 4192414B2127376D00634FCF /* regatheringcontroller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regatheringcontroller.h; sourceTree = "<group>"; }; >+ 4192414C2127376E00634FCF /* fakecandidatepair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fakecandidatepair.h; sourceTree = "<group>"; }; >+ 4192414D2127376E00634FCF /* udptransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = udptransport.h; sourceTree = "<group>"; }; >+ 4192414E2127376E00634FCF /* fakepackettransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fakepackettransport.h; sourceTree = "<group>"; }; >+ 4192414F2127376E00634FCF /* fakeicetransport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fakeicetransport.h; sourceTree = "<group>"; }; >+ 419241502127376E00634FCF /* icetransportinternal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icetransportinternal.h; sourceTree = "<group>"; }; >+ 419241512127376E00634FCF /* basicasyncresolverfactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = basicasyncresolverfactory.h; sourceTree = "<group>"; }; >+ 4192415D2127385A00634FCF /* rw_lock_wrapper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rw_lock_wrapper.cc; sourceTree = "<group>"; }; >+ 4192415E2127385B00634FCF /* rw_lock_posix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rw_lock_posix.h; sourceTree = "<group>"; }; >+ 4192415F2127385B00634FCF /* rw_lock_wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rw_lock_wrapper.h; sourceTree = "<group>"; }; >+ 419241602127385B00634FCF /* rw_lock_posix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rw_lock_posix.cc; sourceTree = "<group>"; }; >+ 419241662127389A00634FCF /* quality_scaling_experiment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quality_scaling_experiment.h; sourceTree = "<group>"; }; >+ 419241672127389A00634FCF /* congestion_controller_experiment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = congestion_controller_experiment.h; sourceTree = "<group>"; }; >+ 419241682127389A00634FCF /* field_trial_parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = field_trial_parser.cc; sourceTree = "<group>"; }; >+ 419241692127389B00634FCF /* field_trial_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = field_trial_parser.h; sourceTree = "<group>"; }; >+ 4192416A2127389B00634FCF /* quality_scaling_experiment.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = quality_scaling_experiment.cc; sourceTree = "<group>"; }; >+ 4192416B2127389B00634FCF /* congestion_controller_experiment.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = congestion_controller_experiment.cc; sourceTree = "<group>"; }; >+ 41924172212738C200634FCF /* callfactoryinterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = callfactoryinterface.h; sourceTree = "<group>"; }; >+ 41924173212738C200634FCF /* transport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = transport.h; sourceTree = "<group>"; }; >+ 41924174212738C200634FCF /* transport.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transport.cc; sourceTree = "<group>"; }; >+ 41924178212738FB00634FCF /* rtc_event_log_impl.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtc_event_log_impl.cc; path = rtc_event_log/rtc_event_log_impl.cc; sourceTree = "<group>"; }; >+ 4192417B2127392300634FCF /* timestamp_extrapolator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timestamp_extrapolator.cc; sourceTree = "<group>"; }; >+ 4192417C2127392300634FCF /* timestamp_extrapolator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamp_extrapolator.h; sourceTree = "<group>"; }; >+ 4192417F2127497100634FCF /* bad_variant_access.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bad_variant_access.cc; path = types/bad_variant_access.cc; sourceTree = "<group>"; }; >+ 419241802127497100634FCF /* bad_variant_access.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bad_variant_access.h; path = types/bad_variant_access.h; sourceTree = "<group>"; }; >+ 419241832127499300634FCF /* packet_queue_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packet_queue_interface.h; sourceTree = "<group>"; }; >+ 419241842127499300634FCF /* packet_queue_interface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = packet_queue_interface.cc; sourceTree = "<group>"; }; >+ 41924187212749C700634FCF /* send_time_history.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = send_time_history.h; sourceTree = "<group>"; }; >+ 41924188212749C700634FCF /* send_side_congestion_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = send_side_congestion_controller.cc; sourceTree = "<group>"; }; >+ 41924189212749C800634FCF /* pacer_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pacer_controller.h; sourceTree = "<group>"; }; >+ 4192418A212749C800634FCF /* transport_feedback_adapter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = transport_feedback_adapter.cc; sourceTree = "<group>"; }; >+ 4192418F2127581000634FCF /* fec_private_tables_bursty.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fec_private_tables_bursty.cc; sourceTree = "<group>"; }; >+ 419241932127586400634FCF /* rnn_vad_weights.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rnn_vad_weights.h; path = src/rnn_vad_weights.h; sourceTree = "<group>"; }; >+ 419241942127586400634FCF /* rnn_vad_weights.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rnn_vad_weights.cc; path = src/rnn_vad_weights.cc; sourceTree = "<group>"; }; >+ 419241952127586500634FCF /* kiss_fft.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kiss_fft.cc; path = src/kiss_fft.cc; sourceTree = "<group>"; }; >+ 419241962127586500634FCF /* kiss_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kiss_fft.h; path = src/kiss_fft.h; sourceTree = "<group>"; }; >+ 419241972127586500634FCF /* rnn_activations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rnn_activations.h; path = src/rnn_activations.h; sourceTree = "<group>"; }; >+ 4192419D2127588200634FCF /* audio_codec_pair_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_codec_pair_id.h; path = audio_codecs/audio_codec_pair_id.h; sourceTree = "<group>"; }; >+ 4192419E2127588200634FCF /* audio_codec_pair_id.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_codec_pair_id.cc; path = audio_codecs/audio_codec_pair_id.cc; sourceTree = "<group>"; }; >+ 419241A1212758D200634FCF /* spectral_features_internal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spectral_features_internal.cc; sourceTree = "<group>"; }; >+ 419241A2212758D200634FCF /* symmetric_matrix_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symmetric_matrix_buffer.h; sourceTree = "<group>"; }; >+ 419241A3212758D200634FCF /* rnn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rnn.h; sourceTree = "<group>"; }; >+ 419241A4212758D200634FCF /* spectral_features.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spectral_features.h; sourceTree = "<group>"; }; >+ 419241A5212758D200634FCF /* sequence_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sequence_buffer.h; sourceTree = "<group>"; }; >+ 419241A6212758D200634FCF /* spectral_features.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spectral_features.cc; sourceTree = "<group>"; }; >+ 419241A7212758D300634FCF /* ring_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ring_buffer.h; sourceTree = "<group>"; }; >+ 419241AF2127590200634FCF /* rtp_generic_frame_descriptor_extension.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtp_generic_frame_descriptor_extension.cc; sourceTree = "<group>"; }; >+ 419241B22127593C00634FCF /* loss_rate_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = loss_rate_filter.h; sourceTree = "<group>"; }; >+ 419241B32127593D00634FCF /* data_transfer_tracker.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_transfer_tracker.cc; sourceTree = "<group>"; }; >+ 419241B42127593D00634FCF /* windowed_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = windowed_filter.h; sourceTree = "<group>"; }; >+ 419241B52127593D00634FCF /* bbr_network_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bbr_network_controller.h; sourceTree = "<group>"; }; >+ 419241B62127593D00634FCF /* bandwidth_sampler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bandwidth_sampler.cc; sourceTree = "<group>"; }; >+ 419241B72127593D00634FCF /* loss_rate_filter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = loss_rate_filter.cc; sourceTree = "<group>"; }; >+ 419241B82127593E00634FCF /* bbr_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bbr_factory.h; sourceTree = "<group>"; }; >+ 419241B92127593E00634FCF /* bbr_network_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bbr_network_controller.cc; sourceTree = "<group>"; }; >+ 419241BA2127593E00634FCF /* packet_number_indexed_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = packet_number_indexed_queue.h; sourceTree = "<group>"; }; >+ 419241BB2127593E00634FCF /* bbr_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bbr_factory.cc; sourceTree = "<group>"; }; >+ 419241BC2127593E00634FCF /* rtt_stats.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtt_stats.cc; sourceTree = "<group>"; }; >+ 419241BD2127593E00634FCF /* rtt_stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtt_stats.h; sourceTree = "<group>"; }; >+ 419241BE2127593F00634FCF /* bandwidth_sampler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bandwidth_sampler.h; sourceTree = "<group>"; }; >+ 419241BF2127593F00634FCF /* data_transfer_tracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_transfer_tracker.h; sourceTree = "<group>"; }; >+ 419241CE2127597C00634FCF /* simulated_network.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = simulated_network.cc; path = call/simulated_network.cc; sourceTree = "<group>"; }; >+ 419241CF2127597C00634FCF /* simulated_network.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = simulated_network.h; path = call/simulated_network.h; sourceTree = "<group>"; }; >+ 419241D2212759A100634FCF /* fec_private_tables_random.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fec_private_tables_random.cc; sourceTree = "<group>"; }; >+ 419241D521275A2F00634FCF /* time_delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time_delta.h; sourceTree = "<group>"; }; >+ 419241D621275A2F00634FCF /* data_rate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_rate.h; sourceTree = "<group>"; }; >+ 419241D721275A2F00634FCF /* data_size.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_size.cc; sourceTree = "<group>"; }; >+ 419241D821275A2F00634FCF /* timestamp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timestamp.h; sourceTree = "<group>"; }; >+ 419241D921275A2F00634FCF /* data_rate.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = data_rate.cc; sourceTree = "<group>"; }; >+ 419241DA21275A3000634FCF /* time_delta.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time_delta.cc; sourceTree = "<group>"; }; >+ 419241DB21275A3000634FCF /* timestamp.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timestamp.cc; sourceTree = "<group>"; }; >+ 419241DC21275A3000634FCF /* data_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = data_size.h; sourceTree = "<group>"; }; >+ 419241E521275A7600634FCF /* field_trial_units.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = field_trial_units.h; sourceTree = "<group>"; }; >+ 419241E621275A7600634FCF /* field_trial_units.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = field_trial_units.cc; sourceTree = "<group>"; }; >+ 419241E921275AF900634FCF /* simulcast_utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simulcast_utility.h; sourceTree = "<group>"; }; >+ 419241EA21275AFA00634FCF /* simulcast_rate_allocator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simulcast_rate_allocator.cc; sourceTree = "<group>"; }; >+ 419241EB21275AFA00634FCF /* simulcast_utility.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = simulcast_utility.cc; sourceTree = "<group>"; }; >+ 419241EC21275AFA00634FCF /* simulcast_rate_allocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = simulcast_rate_allocator.h; sourceTree = "<group>"; }; >+ 419241F221275C3100634FCF /* vp8_encoder_simulcast_proxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vp8_encoder_simulcast_proxy.h; path = engine/vp8_encoder_simulcast_proxy.h; sourceTree = "<group>"; }; >+ 419241F321275C3200634FCF /* vp8_encoder_simulcast_proxy.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = vp8_encoder_simulcast_proxy.cc; path = engine/vp8_encoder_simulcast_proxy.cc; sourceTree = "<group>"; }; >+ 419241FB2127664100634FCF /* audio_device_module.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_device_module.h; sourceTree = "<group>"; }; >+ 419241FC2127664100634FCF /* audio_device_module.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = audio_device_module.mm; sourceTree = "<group>"; }; >+ 419241FD2127664100634FCF /* video_capturer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_capturer.mm; sourceTree = "<group>"; }; >+ 419241FE2127664100634FCF /* video_renderer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_renderer.mm; sourceTree = "<group>"; }; >+ 419241FF2127664100634FCF /* video_frame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_frame.mm; sourceTree = "<group>"; }; >+ 419242002127664200634FCF /* video_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_frame.h; sourceTree = "<group>"; }; >+ 419242012127664200634FCF /* video_decoder_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_decoder_factory.h; sourceTree = "<group>"; }; >+ 419242022127664200634FCF /* video_renderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_renderer.h; sourceTree = "<group>"; }; >+ 419242032127664200634FCF /* video_decoder_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_decoder_factory.mm; sourceTree = "<group>"; }; >+ 419242042127664500634FCF /* video_encoder_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_encoder_factory.h; sourceTree = "<group>"; }; >+ 419242052127664500634FCF /* video_encoder_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_encoder_factory.mm; sourceTree = "<group>"; }; >+ 419242062127664600634FCF /* video_capturer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_capturer.h; sourceTree = "<group>"; }; >+ 419242072127664600634FCF /* video_frame_buffer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = video_frame_buffer.mm; sourceTree = "<group>"; }; >+ 419242082127664700634FCF /* video_frame_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video_frame_buffer.h; sourceTree = "<group>"; }; >+ 419242172127664B00634FCF /* objc_video_encoder_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_video_encoder_factory.mm; sourceTree = "<group>"; }; >+ 419242182127664B00634FCF /* objc_video_decoder_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_video_decoder_factory.h; sourceTree = "<group>"; }; >+ 419242192127664B00634FCF /* objc_video_frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_video_frame.h; sourceTree = "<group>"; }; >+ 4192421A2127664C00634FCF /* objc_video_decoder_factory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_video_decoder_factory.mm; sourceTree = "<group>"; }; >+ 4192421B2127664C00634FCF /* objc_frame_buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_frame_buffer.h; sourceTree = "<group>"; }; >+ 4192421C2127664C00634FCF /* objc_video_track_source.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_video_track_source.h; sourceTree = "<group>"; }; >+ 4192421D2127664D00634FCF /* objc_frame_buffer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_frame_buffer.mm; sourceTree = "<group>"; }; >+ 4192421E2127664D00634FCF /* objc_video_frame.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_video_frame.mm; sourceTree = "<group>"; }; >+ 4192421F2127664D00634FCF /* objc_video_renderer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_video_renderer.mm; sourceTree = "<group>"; }; >+ 419242202127664D00634FCF /* objc_video_track_source.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = objc_video_track_source.mm; sourceTree = "<group>"; }; >+ 419242212127664E00634FCF /* objc_video_renderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_video_renderer.h; sourceTree = "<group>"; }; >+ 419242222127664E00634FCF /* objc_video_encoder_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objc_video_encoder_factory.h; sourceTree = "<group>"; }; >+ 4192422F2127665900634FCF /* audio_device_ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = audio_device_ios.mm; path = audio/audio_device_ios.mm; sourceTree = "<group>"; }; >+ 419242302127665900634FCF /* audio_session_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_session_observer.h; path = audio/audio_session_observer.h; sourceTree = "<group>"; }; >+ 419242312127665900634FCF /* audio_device_module_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_device_module_ios.h; path = audio/audio_device_module_ios.h; sourceTree = "<group>"; }; >+ 419242322127665A00634FCF /* audio_device_ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_device_ios.h; path = audio/audio_device_ios.h; sourceTree = "<group>"; }; >+ 419242332127665A00634FCF /* audio_device_module_ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = audio_device_module_ios.mm; path = audio/audio_device_module_ios.mm; sourceTree = "<group>"; }; >+ 419242342127665A00634FCF /* voice_processing_audio_unit.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = voice_processing_audio_unit.mm; path = audio/voice_processing_audio_unit.mm; sourceTree = "<group>"; }; >+ 419242352127665A00634FCF /* voice_processing_audio_unit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = voice_processing_audio_unit.h; path = audio/voice_processing_audio_unit.h; sourceTree = "<group>"; }; >+ 4192423F21276D4700634FCF /* RTCPeerConnectionFactory.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RTCPeerConnectionFactory.mm; path = PeerConnection/RTCPeerConnectionFactory.mm; sourceTree = "<group>"; }; > 419C82991FE20CA10040C30F /* interval_budget.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = interval_budget.cc; sourceTree = "<group>"; }; > 419C829B1FE20D1B0040C30F /* audio_processing_statistics.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = audio_processing_statistics.cc; path = include/audio_processing_statistics.cc; sourceTree = "<group>"; }; > 419C829C1FE20D1C0040C30F /* audio_processing_statistics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = audio_processing_statistics.h; path = include/audio_processing_statistics.h; sourceTree = "<group>"; }; >@@ -3586,6 +4150,41 @@ > 419C84B91FE319440040C30F /* audio_decoder_ilbc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_decoder_ilbc.h; sourceTree = "<group>"; }; > 419C84BA1FE319440040C30F /* audio_decoder_ilbc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio_decoder_ilbc.cc; sourceTree = "<group>"; }; > 419C84BB1FE319440040C30F /* audio_encoder_ilbc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_encoder_ilbc.h; sourceTree = "<group>"; }; >+ 41A08BB721268A7D001D5D7B /* memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memory.h; path = memory/memory.h; sourceTree = "<group>"; }; >+ 41A08BB921269552001D5D7B /* rtc_event_ice_candidate_pair_config.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtc_event_ice_candidate_pair_config.cc; path = rtc_event_log/events/rtc_event_ice_candidate_pair_config.cc; sourceTree = "<group>"; }; >+ 41A08BBA21269552001D5D7B /* rtc_event_ice_candidate_pair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rtc_event_ice_candidate_pair.h; path = rtc_event_log/events/rtc_event_ice_candidate_pair.h; sourceTree = "<group>"; }; >+ 41A08BBB21269552001D5D7B /* rtc_event_ice_candidate_pair_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rtc_event_ice_candidate_pair_config.h; path = rtc_event_log/events/rtc_event_ice_candidate_pair_config.h; sourceTree = "<group>"; }; >+ 41A08BBC21269553001D5D7B /* rtc_event_ice_candidate_pair.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = rtc_event_ice_candidate_pair.cc; path = rtc_event_log/events/rtc_event_ice_candidate_pair.cc; sourceTree = "<group>"; }; >+ 41A08BC121269576001D5D7B /* icelogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = icelogger.h; path = rtc_event_log/icelogger.h; sourceTree = "<group>"; }; >+ 41A08BC221269576001D5D7B /* icelogger.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = icelogger.cc; path = rtc_event_log/icelogger.cc; sourceTree = "<group>"; }; >+ 41A08BC5212695DE001D5D7B /* bad_optional_access.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = bad_optional_access.h; path = types/bad_optional_access.h; sourceTree = "<group>"; }; >+ 41A08BC6212695DE001D5D7B /* bad_optional_access.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = bad_optional_access.cc; path = types/bad_optional_access.cc; sourceTree = "<group>"; }; >+ 41A08BC92126961F001D5D7B /* raw_logging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = raw_logging.h; path = base/internal/raw_logging.h; sourceTree = "<group>"; }; >+ 41A08BCA2126961F001D5D7B /* raw_logging.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = raw_logging.cc; path = base/internal/raw_logging.cc; sourceTree = "<group>"; }; >+ 41A08BCD21272EE1001D5D7B /* gain_controller2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gain_controller2.h; sourceTree = "<group>"; }; >+ 41A08BCE21272EE1001D5D7B /* gain_controller2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gain_controller2.cc; sourceTree = "<group>"; }; >+ 41A08BD121272EFA001D5D7B /* round_robin_packet_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = round_robin_packet_queue.h; sourceTree = "<group>"; }; >+ 41A08BD221272EFA001D5D7B /* round_robin_packet_queue.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = round_robin_packet_queue.cc; sourceTree = "<group>"; }; >+ 41A08BD521272F1C001D5D7B /* congestion_window_pushback_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = congestion_window_pushback_controller.h; sourceTree = "<group>"; }; >+ 41A08BD621272F1C001D5D7B /* congestion_window_pushback_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = congestion_window_pushback_controller.cc; sourceTree = "<group>"; }; >+ 41A08BDA21272F84001D5D7B /* compute_interpolated_gain_curve.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compute_interpolated_gain_curve.h; sourceTree = "<group>"; }; >+ 41A08BDB21272F84001D5D7B /* adaptive_digital_gain_applier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adaptive_digital_gain_applier.h; sourceTree = "<group>"; }; >+ 41A08BDC21272F84001D5D7B /* adaptive_mode_level_estimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adaptive_mode_level_estimator.h; sourceTree = "<group>"; }; >+ 41A08BDD21272F84001D5D7B /* vector_float_frame.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vector_float_frame.h; sourceTree = "<group>"; }; >+ 41A08BDE21272F84001D5D7B /* gain_applier.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gain_applier.cc; sourceTree = "<group>"; }; >+ 41A08BDF21272F84001D5D7B /* fixed_digital_level_estimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fixed_digital_level_estimator.h; sourceTree = "<group>"; }; >+ 41A08BE021272F85001D5D7B /* gain_curve_applier.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gain_curve_applier.cc; sourceTree = "<group>"; }; >+ 41A08BE121272F85001D5D7B /* interpolated_gain_curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = interpolated_gain_curve.cc; sourceTree = "<group>"; }; >+ 41A08BE221272F85001D5D7B /* noise_spectrum_estimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = noise_spectrum_estimator.h; sourceTree = "<group>"; }; >+ 41A08BE321272F85001D5D7B /* vad_with_level.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vad_with_level.h; sourceTree = "<group>"; }; >+ 41A08BE421272F85001D5D7B /* adaptive_digital_gain_applier.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = adaptive_digital_gain_applier.cc; sourceTree = "<group>"; }; >+ 41A08BE521272F86001D5D7B /* fixed_digital_level_estimator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fixed_digital_level_estimator.cc; sourceTree = "<group>"; }; >+ 41A08BE621272F86001D5D7B /* compute_interpolated_gain_curve.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = compute_interpolated_gain_curve.cc; sourceTree = "<group>"; }; >+ 41A08BE721272F86001D5D7B /* gain_applier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gain_applier.h; sourceTree = "<group>"; }; >+ 41A08BE821272F86001D5D7B /* down_sampler.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = down_sampler.cc; sourceTree = "<group>"; }; >+ 41A08BE921272F86001D5D7B /* adaptive_mode_level_estimator_agc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = adaptive_mode_level_estimator_agc.cc; sourceTree = "<group>"; }; >+ 41A08BEA21272F86001D5D7B /* limiter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = limiter.h; sourceTree = "<group>"; }; >+ 41A08BEB21272F87001D5D7B /* signal_classifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = signal_classifier.h; sourceTree = "<group>"; }; > 41A391451EFC446E00C4516A /* sha1-586.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = "sha1-586.pl"; sourceTree = "<group>"; }; > 41A391461EFC446E00C4516A /* sha1-armv4-large.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = "sha1-armv4-large.pl"; sourceTree = "<group>"; }; > 41A391471EFC446E00C4516A /* sha1-armv8.pl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.perl; path = "sha1-armv8.pl"; sourceTree = "<group>"; }; >@@ -3682,10 +4281,101 @@ > 41A3920F1EFC4AFE00C4516A /* windows.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = windows.c; sourceTree = "<group>"; }; > 41A392181EFC5AB800C4516A /* x25519-asm-arm.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "x25519-asm-arm.S"; sourceTree = "<group>"; }; > 41A392191EFC5AB800C4516A /* x25519-asm-x86_64.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = "x25519-asm-x86_64.S"; sourceTree = "<group>"; }; >+ 41AF2D11212CD40300D033D5 /* UIDevice+H264Profile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "UIDevice+H264Profile.h"; path = "Video/UIDevice+H264Profile.h"; sourceTree = "<group>"; }; >+ 41D6B45E212731A0008F9353 /* biquad_filter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = biquad_filter.cc; sourceTree = "<group>"; }; >+ 41D6B45F212731A1008F9353 /* adaptive_mode_level_estimator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = adaptive_mode_level_estimator.cc; sourceTree = "<group>"; }; >+ 41D6B460212731A1008F9353 /* down_sampler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = down_sampler.h; sourceTree = "<group>"; }; >+ 41D6B461212731A1008F9353 /* noise_level_estimator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = noise_level_estimator.cc; sourceTree = "<group>"; }; >+ 41D6B462212731A1008F9353 /* adaptive_mode_level_estimator_agc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adaptive_mode_level_estimator_agc.h; sourceTree = "<group>"; }; >+ 41D6B463212731A2008F9353 /* biquad_filter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = biquad_filter.h; sourceTree = "<group>"; }; >+ 41D6B464212731A2008F9353 /* adaptive_agc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adaptive_agc.h; sourceTree = "<group>"; }; >+ 41D6B465212731A2008F9353 /* fixed_gain_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fixed_gain_controller.cc; sourceTree = "<group>"; }; >+ 41D6B466212731A2008F9353 /* vector_float_frame.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vector_float_frame.cc; sourceTree = "<group>"; }; >+ 41D6B467212731A3008F9353 /* fixed_gain_controller.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fixed_gain_controller.h; sourceTree = "<group>"; }; >+ 41D6B468212731A3008F9353 /* saturation_protector.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = saturation_protector.cc; sourceTree = "<group>"; }; >+ 41D6B469212731A3008F9353 /* gain_curve_applier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gain_curve_applier.h; sourceTree = "<group>"; }; >+ 41D6B46A212731A3008F9353 /* noise_spectrum_estimator.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = noise_spectrum_estimator.cc; sourceTree = "<group>"; }; >+ 41D6B46B212731A3008F9353 /* saturation_protector.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = saturation_protector.h; sourceTree = "<group>"; }; >+ 41D6B46C212731A4008F9353 /* vad_with_level.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vad_with_level.cc; sourceTree = "<group>"; }; >+ 41D6B46D212731A4008F9353 /* agc2_common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = agc2_common.h; sourceTree = "<group>"; }; >+ 41D6B46E212731A4008F9353 /* adaptive_agc.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = adaptive_agc.cc; sourceTree = "<group>"; }; >+ 41D6B46F212731A4008F9353 /* signal_classifier.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = signal_classifier.cc; sourceTree = "<group>"; }; >+ 41D6B470212731A6008F9353 /* limiter.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = limiter.cc; sourceTree = "<group>"; }; > 41DDB24B21265BD700296D47 /* fixed_array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fixed_array.h; path = container/fixed_array.h; sourceTree = "<group>"; }; > 41DDB24C21265BD700296D47 /* inlined_vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inlined_vector.h; path = container/inlined_vector.h; sourceTree = "<group>"; }; > 41DDB24F21265BE900296D47 /* optional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = optional.h; path = types/optional.h; sourceTree = "<group>"; }; > 41DDB25021265BE900296D47 /* optional.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = optional.cc; path = types/optional.cc; sourceTree = "<group>"; }; >+ 41DDB253212678E300296D47 /* platform_thread_types.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = platform_thread_types.cc; path = rtc_base/platform_thread_types.cc; sourceTree = "<group>"; }; >+ 41DDB2552126790A00296D47 /* socket.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = socket.cc; path = rtc_base/socket.cc; sourceTree = "<group>"; }; >+ 41DDB2572126792800296D47 /* zero_memory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = zero_memory.cc; path = rtc_base/zero_memory.cc; sourceTree = "<group>"; }; >+ 41DDB2582126792800296D47 /* zero_memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = zero_memory.h; path = rtc_base/zero_memory.h; sourceTree = "<group>"; }; >+ 41DDB25B2126799F00296D47 /* opensslutility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opensslutility.h; path = rtc_base/opensslutility.h; sourceTree = "<group>"; }; >+ 41DDB25C212679A000296D47 /* opensslsessioncache.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opensslsessioncache.cc; path = rtc_base/opensslsessioncache.cc; sourceTree = "<group>"; }; >+ 41DDB25D212679A000296D47 /* opensslsessioncache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opensslsessioncache.h; path = rtc_base/opensslsessioncache.h; sourceTree = "<group>"; }; >+ 41DDB25E212679A100296D47 /* opensslcertificate.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opensslcertificate.cc; path = rtc_base/opensslcertificate.cc; sourceTree = "<group>"; }; >+ 41DDB25F212679A200296D47 /* opensslutility.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = opensslutility.cc; path = rtc_base/opensslutility.cc; sourceTree = "<group>"; }; >+ 41DDB260212679A200296D47 /* opensslcertificate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opensslcertificate.h; path = rtc_base/opensslcertificate.h; sourceTree = "<group>"; }; >+ 41DDB268212679D100296D47 /* string_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_builder.h; sourceTree = "<group>"; }; >+ 41DDB269212679D100296D47 /* audio_format_to_string.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_format_to_string.h; sourceTree = "<group>"; }; >+ 41DDB26A212679D200296D47 /* string_builder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_builder.cc; sourceTree = "<group>"; }; >+ 41DDB26B212679D200296D47 /* audio_format_to_string.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio_format_to_string.cc; sourceTree = "<group>"; }; >+ 41DDB27021267AC000296D47 /* video_codec.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_codec.cc; path = video_codecs/video_codec.cc; sourceTree = "<group>"; }; >+ 41DDB27121267AC000296D47 /* video_codec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = video_codec.h; path = video_codecs/video_codec.h; sourceTree = "<group>"; }; >+ 41DDB27221267AC000296D47 /* video_decoder.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_decoder.cc; path = video_codecs/video_decoder.cc; sourceTree = "<group>"; }; >+ 41DDB27321267AC000296D47 /* builtin_video_decoder_factory.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = builtin_video_decoder_factory.cc; path = video_codecs/builtin_video_decoder_factory.cc; sourceTree = "<group>"; }; >+ 41DDB27421267AC100296D47 /* video_decoder_software_fallback_wrapper.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_decoder_software_fallback_wrapper.cc; path = video_codecs/video_decoder_software_fallback_wrapper.cc; sourceTree = "<group>"; }; >+ 41DDB27521267AC100296D47 /* video_encoder_software_fallback_wrapper.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = video_encoder_software_fallback_wrapper.cc; path = video_codecs/video_encoder_software_fallback_wrapper.cc; sourceTree = "<group>"; }; >+ 41DDB27621267AC100296D47 /* builtin_video_decoder_factory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = builtin_video_decoder_factory.h; path = video_codecs/builtin_video_decoder_factory.h; sourceTree = "<group>"; }; >+ 41DDB27721267AC100296D47 /* builtin_video_encoder_factory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = builtin_video_encoder_factory.h; path = video_codecs/builtin_video_encoder_factory.h; sourceTree = "<group>"; }; >+ 41DDB27821267AC100296D47 /* video_decoder_software_fallback_wrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = video_decoder_software_fallback_wrapper.h; path = video_codecs/video_decoder_software_fallback_wrapper.h; sourceTree = "<group>"; }; >+ 41DDB27921267AC200296D47 /* video_encoder_software_fallback_wrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = video_encoder_software_fallback_wrapper.h; path = video_codecs/video_encoder_software_fallback_wrapper.h; sourceTree = "<group>"; }; >+ 41DDB27A21267AC200296D47 /* sdp_video_format.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = sdp_video_format.cc; path = video_codecs/sdp_video_format.cc; sourceTree = "<group>"; }; >+ 41DDB27B21267AC200296D47 /* video_encoder_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = video_encoder_config.h; path = video_codecs/video_encoder_config.h; sourceTree = "<group>"; }; >+ 41E02C7F212734B800C27CD6 /* decoder_database.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder_database.h; sourceTree = "<group>"; }; >+ 41E02C80212734B800C27CD6 /* encoder_database.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = encoder_database.cc; sourceTree = "<group>"; }; >+ 41E02C81212734B800C27CD6 /* encoder_database.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encoder_database.h; sourceTree = "<group>"; }; >+ 41E02C82212734B800C27CD6 /* fec_controller_default.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fec_controller_default.cc; sourceTree = "<group>"; }; >+ 41E02C83212734B800C27CD6 /* decoder_database.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder_database.cc; sourceTree = "<group>"; }; >+ 41E02C84212734B900C27CD6 /* fec_controller_default.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fec_controller_default.h; sourceTree = "<group>"; }; >+ 41E02C85212734B900C27CD6 /* video_coding_defines.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video_coding_defines.cc; sourceTree = "<group>"; }; >+ 41E02C86212734B900C27CD6 /* fec_rate_table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fec_rate_table.h; sourceTree = "<group>"; }; >+ 41E02C902127352900C27CD6 /* probe_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = probe_controller.h; sourceTree = "<group>"; }; >+ 41E02C912127352900C27CD6 /* delay_based_bwe.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = delay_based_bwe.cc; sourceTree = "<group>"; }; >+ 41E02C922127352A00C27CD6 /* acknowledged_bitrate_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = acknowledged_bitrate_estimator.h; sourceTree = "<group>"; }; >+ 41E02C932127352A00C27CD6 /* probe_bitrate_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = probe_bitrate_estimator.h; sourceTree = "<group>"; }; >+ 41E02C942127352A00C27CD6 /* acknowledged_bitrate_estimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = acknowledged_bitrate_estimator.cc; sourceTree = "<group>"; }; >+ 41E02C952127352A00C27CD6 /* goog_cc_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = goog_cc_factory.cc; sourceTree = "<group>"; }; >+ 41E02C962127352A00C27CD6 /* goog_cc_network_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = goog_cc_network_control.h; sourceTree = "<group>"; }; >+ 41E02C972127352A00C27CD6 /* delay_based_bwe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delay_based_bwe.h; sourceTree = "<group>"; }; >+ 41E02C982127352B00C27CD6 /* bitrate_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitrate_estimator.h; sourceTree = "<group>"; }; >+ 41E02C992127352B00C27CD6 /* alr_detector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alr_detector.h; sourceTree = "<group>"; }; >+ 41E02C9A2127352B00C27CD6 /* bitrate_estimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bitrate_estimator.cc; sourceTree = "<group>"; }; >+ 41E02C9B2127352B00C27CD6 /* median_slope_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = median_slope_estimator.h; sourceTree = "<group>"; }; >+ 41E02C9C2127352B00C27CD6 /* trendline_estimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trendline_estimator.cc; sourceTree = "<group>"; }; >+ 41E02C9D2127352B00C27CD6 /* median_slope_estimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = median_slope_estimator.cc; sourceTree = "<group>"; }; >+ 41E02C9E2127352C00C27CD6 /* probe_bitrate_estimator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = probe_bitrate_estimator.cc; sourceTree = "<group>"; }; >+ 41E02C9F2127352C00C27CD6 /* trendline_estimator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trendline_estimator.h; sourceTree = "<group>"; }; >+ 41E02CA02127352C00C27CD6 /* probe_controller.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = probe_controller.cc; sourceTree = "<group>"; }; >+ 41E02CA12127352C00C27CD6 /* alr_detector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = alr_detector.cc; sourceTree = "<group>"; }; >+ 41E02CA22127352C00C27CD6 /* goog_cc_network_control.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = goog_cc_network_control.cc; sourceTree = "<group>"; }; >+ 41E02CA32127352D00C27CD6 /* delay_increase_detector_interface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = delay_increase_detector_interface.h; sourceTree = "<group>"; }; >+ 41E02CB82127356900C27CD6 /* sslcertificate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sslcertificate.h; path = rtc_base/sslcertificate.h; sourceTree = "<group>"; }; >+ 41E02CB92127356A00C27CD6 /* sslcertificate.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sslcertificate.cc; path = rtc_base/sslcertificate.cc; sourceTree = "<group>"; }; >+ 41E02CBA2127356A00C27CD6 /* weak_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = weak_ptr.h; path = rtc_base/weak_ptr.h; sourceTree = "<group>"; }; >+ 41E02CBB2127356A00C27CD6 /* data_rate_limiter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = data_rate_limiter.cc; path = rtc_base/data_rate_limiter.cc; sourceTree = "<group>"; }; >+ 41E02CBC2127356A00C27CD6 /* data_rate_limiter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = data_rate_limiter.h; path = rtc_base/data_rate_limiter.h; sourceTree = "<group>"; }; >+ 41E02CC22127358700C27CD6 /* builtin_video_encoder_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = builtin_video_encoder_factory.cc; path = video_codecs/builtin_video_encoder_factory.cc; sourceTree = "<group>"; }; >+ 41E02CC32127358800C27CD6 /* video_encoder_config.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = video_encoder_config.cc; path = video_codecs/video_encoder_config.cc; sourceTree = "<group>"; }; >+ 41E02CC7212735B600C27CD6 /* bitrate_settings.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bitrate_settings.cc; sourceTree = "<group>"; }; >+ 41E02CC8212735B700C27CD6 /* network_types.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = network_types.cc; sourceTree = "<group>"; }; >+ 41E02CC9212735B700C27CD6 /* network_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = network_types.h; sourceTree = "<group>"; }; >+ 41E02CCA212735B700C27CD6 /* network_control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = network_control.h; sourceTree = "<group>"; }; >+ 41E02CCB212735B700C27CD6 /* bitrate_settings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitrate_settings.h; sourceTree = "<group>"; }; >+ 41E02CD12127360600C27CD6 /* sample_counter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sample_counter.h; path = rtc_base/numerics/sample_counter.h; sourceTree = "<group>"; }; >+ 41E02CD22127360700C27CD6 /* sample_counter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sample_counter.cc; path = rtc_base/numerics/sample_counter.cc; sourceTree = "<group>"; }; >+ 41E02CD62127363C00C27CD6 /* pacer_controller.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pacer_controller.cc; sourceTree = "<group>"; }; >+ 41E02CD72127363C00C27CD6 /* transport_feedback_adapter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = transport_feedback_adapter.h; sourceTree = "<group>"; }; >+ 41E02CD82127363D00C27CD6 /* send_time_history.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = send_time_history.cc; sourceTree = "<group>"; }; > 41EA53A41EFC2BFD002FF04C /* hmac.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hmac.c; sourceTree = "<group>"; }; > 41EA53A71EFC2C4D002FF04C /* digest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = digest.c; sourceTree = "<group>"; }; > 41EA53A81EFC2C4D002FF04C /* digests.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = digests.c; sourceTree = "<group>"; }; >@@ -3766,6 +4456,56 @@ > 41ECEAF920646663009D5141 /* EncoderUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EncoderUtilities.h; sourceTree = "<group>"; }; > 41ECEAFA20646663009D5141 /* VideoProcessingSoftLink.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VideoProcessingSoftLink.cpp; sourceTree = "<group>"; }; > 41ECEAFB20646664009D5141 /* VideoProcessingSoftLink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoProcessingSoftLink.h; sourceTree = "<group>"; }; >+ 41F2636C21267B3D00274F59 /* fft4g.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fft4g.c; path = fft4g/fft4g.c; sourceTree = "<group>"; }; >+ 41F2636D21267B3E00274F59 /* fft4g.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft4g.h; path = fft4g/fft4g.h; sourceTree = "<group>"; }; >+ 41F2637021267B4A00274F59 /* spl_sqrt_floor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spl_sqrt_floor.h; path = spl_sqrt_floor/spl_sqrt_floor.h; sourceTree = "<group>"; }; >+ 41F2637121267B4A00274F59 /* spl_sqrt_floor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = spl_sqrt_floor.c; path = spl_sqrt_floor/spl_sqrt_floor.c; sourceTree = "<group>"; }; >+ 41F2637421267B7500274F59 /* peerconnectioninterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = peerconnectioninterface.cc; sourceTree = "<group>"; }; >+ 41F2637521267B7600274F59 /* audio_options.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = audio_options.cc; sourceTree = "<group>"; }; >+ 41F2637621267B7600274F59 /* fec_controller.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fec_controller.h; sourceTree = "<group>"; }; >+ 41F2637721267B7600274F59 /* datachannelinterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = datachannelinterface.cc; sourceTree = "<group>"; }; >+ 41F2637821267B7600274F59 /* audio_options.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audio_options.h; sourceTree = "<group>"; }; >+ 41F2637921267B7700274F59 /* bitrate_constraints.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitrate_constraints.h; sourceTree = "<group>"; }; >+ 41F2637A21267B7700274F59 /* rtpreceiverinterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtpreceiverinterface.cc; sourceTree = "<group>"; }; >+ 41F2637B21267B7700274F59 /* jsepicecandidate.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsepicecandidate.cc; sourceTree = "<group>"; }; >+ 41F2637C21267B7700274F59 /* rtptransceiverinterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtptransceiverinterface.cc; sourceTree = "<group>"; }; >+ 41F2638721267F4000274F59 /* fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fft.h; path = fft/fft.h; sourceTree = "<group>"; }; >+ 41F2638821267F4000274F59 /* fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fft.c; path = fft/fft.c; sourceTree = "<group>"; }; >+ 41F2638B21267F4900274F59 /* g711.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = g711.c; path = g711/g711.c; sourceTree = "<group>"; }; >+ 41F2638C21267F4900274F59 /* g711.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = g711.h; path = g711/g711.h; sourceTree = "<group>"; }; >+ 41F2638F21267F5200274F59 /* g722_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = g722_encode.c; path = g722/g722_encode.c; sourceTree = "<group>"; }; >+ 41F2639021267F5300274F59 /* g722_enc_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = g722_enc_dec.h; path = g722/g722_enc_dec.h; sourceTree = "<group>"; }; >+ 41F2639121267F5300274F59 /* g722_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = g722_decode.c; path = g722/g722_decode.c; sourceTree = "<group>"; }; >+ 41F2639521267F5E00274F59 /* pa_memorybarrier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pa_memorybarrier.h; path = portaudio/pa_memorybarrier.h; sourceTree = "<group>"; }; >+ 41F2639621267F5E00274F59 /* pa_ringbuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pa_ringbuffer.h; path = portaudio/pa_ringbuffer.h; sourceTree = "<group>"; }; >+ 41F2639721267F5E00274F59 /* pa_ringbuffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pa_ringbuffer.c; path = portaudio/pa_ringbuffer.c; sourceTree = "<group>"; }; >+ 41F2639B21267FFF00274F59 /* aligned_malloc.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = aligned_malloc.cc; path = rtc_base/memory/aligned_malloc.cc; sourceTree = "<group>"; }; >+ 41F2639C21267FFF00274F59 /* aligned_malloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aligned_malloc.h; path = rtc_base/memory/aligned_malloc.h; sourceTree = "<group>"; }; >+ 41F2639D2126800000274F59 /* aligned_array.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aligned_array.h; path = rtc_base/memory/aligned_array.h; sourceTree = "<group>"; }; >+ 41F263A3212680A600274F59 /* file_wrapper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_wrapper.cc; sourceTree = "<group>"; }; >+ 41F263A4212680A600274F59 /* ignore_warnings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ignore_warnings.h; sourceTree = "<group>"; }; >+ 41F263A5212680A700274F59 /* fallthrough.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fallthrough.h; sourceTree = "<group>"; }; >+ 41F263A6212680A700274F59 /* inline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = inline.h; sourceTree = "<group>"; }; >+ 41F263A7212680A700274F59 /* unused.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unused.h; sourceTree = "<group>"; }; >+ 41F263A8212680A700274F59 /* BUILD.gn */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = BUILD.gn; sourceTree = "<group>"; }; >+ 41F263A9212680A700274F59 /* asm_defines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asm_defines.h; sourceTree = "<group>"; }; >+ 41F263AA212680A800274F59 /* file_wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file_wrapper.h; sourceTree = "<group>"; }; >+ 41F263AB212680A800274F59 /* arch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arch.h; sourceTree = "<group>"; }; >+ 41F263B52126810B00274F59 /* base64.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = base64.cc; path = base64/base64.cc; sourceTree = "<group>"; }; >+ 41F263B62126810C00274F59 /* base64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = base64.h; path = base64/base64.h; sourceTree = "<group>"; }; >+ 41F263B92126811400274F59 /* sigslot.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = sigslot.cc; path = sigslot/sigslot.cc; sourceTree = "<group>"; }; >+ 41F263BA2126811400274F59 /* sigslot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sigslot.h; path = sigslot/sigslot.h; sourceTree = "<group>"; }; >+ 41F263BD2126818800274F59 /* video_stream_encoder_observer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_stream_encoder_observer.h; sourceTree = "<group>"; }; >+ 41F263BE2126818800274F59 /* video_source_interface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_source_interface.h; sourceTree = "<group>"; }; >+ 41F263BF2126818900274F59 /* i010_buffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = i010_buffer.h; sourceTree = "<group>"; }; >+ 41F263C02126818900274F59 /* video_stream_encoder_create.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_stream_encoder_create.h; sourceTree = "<group>"; }; >+ 41F263C12126818900274F59 /* video_bitrate_allocator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_bitrate_allocator.h; sourceTree = "<group>"; }; >+ 41F263C22126818900274F59 /* encoded_frame.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = encoded_frame.h; sourceTree = "<group>"; }; >+ 41F263C32126818900274F59 /* video_stream_encoder_interface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_stream_encoder_interface.h; sourceTree = "<group>"; }; >+ 41F263C42126818900274F59 /* video_bitrate_allocation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_bitrate_allocation.h; sourceTree = "<group>"; }; >+ 41F263C52126818A00274F59 /* video_stream_decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video_stream_decoder.h; sourceTree = "<group>"; }; >+ 41F263C62126818A00274F59 /* video_source_interface.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = video_source_interface.cc; sourceTree = "<group>"; }; >+ 41F263C72126818A00274F59 /* encoded_frame.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = encoded_frame.cc; sourceTree = "<group>"; }; > 41F411AC1EF8D91E00343C26 /* null_aec_dump_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = null_aec_dump_factory.cc; path = Source/webrtc/modules/audio_processing/aec_dump/null_aec_dump_factory.cc; sourceTree = SOURCE_ROOT; }; > 41F411AE1EF8DA0000343C26 /* rtcerror.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rtcerror.cc; sourceTree = "<group>"; }; > 41F411AF1EF8DA0000343C26 /* rtcerror.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rtcerror.h; sourceTree = "<group>"; }; >@@ -5686,6 +6426,20 @@ > 412455581EF88AD900F11809 /* video_codecs */ = { > isa = PBXGroup; > children = ( >+ 41E02CC22127358700C27CD6 /* builtin_video_encoder_factory.cc */, >+ 41E02CC32127358800C27CD6 /* video_encoder_config.cc */, >+ 41DDB27321267AC000296D47 /* builtin_video_decoder_factory.cc */, >+ 41DDB27621267AC100296D47 /* builtin_video_decoder_factory.h */, >+ 41DDB27721267AC100296D47 /* builtin_video_encoder_factory.h */, >+ 41DDB27A21267AC200296D47 /* sdp_video_format.cc */, >+ 41DDB27021267AC000296D47 /* video_codec.cc */, >+ 41DDB27121267AC000296D47 /* video_codec.h */, >+ 41DDB27421267AC100296D47 /* video_decoder_software_fallback_wrapper.cc */, >+ 41DDB27821267AC100296D47 /* video_decoder_software_fallback_wrapper.h */, >+ 41DDB27221267AC000296D47 /* video_decoder.cc */, >+ 41DDB27B21267AC200296D47 /* video_encoder_config.h */, >+ 41DDB27521267AC100296D47 /* video_encoder_software_fallback_wrapper.cc */, >+ 41DDB27921267AC200296D47 /* video_encoder_software_fallback_wrapper.h */, > 4145F6191FE1F38B00EB9CAF /* sdp_video_format.h */, > 4145E48B1EF88B9600FCF6E6 /* video_decoder.h */, > 4145F61A1FE1F38C00EB9CAF /* video_decoder_factory.h */, >@@ -5696,6 +6450,34 @@ > name = video_codecs; > sourceTree = "<group>"; > }; >+ 41299B98212736B200B3414B /* rnn_vad */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241362127372300634FCF /* common.h */, >+ 419241312127372200634FCF /* features_extraction.cc */, >+ 419241322127372200634FCF /* features_extraction.h */, >+ 419241342127372300634FCF /* fft_util.cc */, >+ 419241392127372400634FCF /* fft_util.h */, >+ 419241352127372300634FCF /* lp_residual.cc */, >+ 419241372127372400634FCF /* lp_residual.h */, >+ 41299B9B212736DE00B3414B /* pitch_info.h */, >+ 41299B9A212736DE00B3414B /* pitch_search_internal.cc */, >+ 41299B99212736DE00B3414B /* pitch_search_internal.h */, >+ 419241382127372400634FCF /* pitch_search.cc */, >+ 419241332127372300634FCF /* pitch_search.h */, >+ 419241A7212758D300634FCF /* ring_buffer.h */, >+ 41299B9C212736DE00B3414B /* rnn.cc */, >+ 419241A3212758D200634FCF /* rnn.h */, >+ 419241A5212758D200634FCF /* sequence_buffer.h */, >+ 419241A1212758D200634FCF /* spectral_features_internal.cc */, >+ 41299B9D212736DF00B3414B /* spectral_features_internal.h */, >+ 419241A6212758D200634FCF /* spectral_features.cc */, >+ 419241A4212758D200634FCF /* spectral_features.h */, >+ 419241A2212758D200634FCF /* symmetric_matrix_buffer.h */, >+ ); >+ path = rnn_vad; >+ sourceTree = "<group>"; >+ }; > 4130922A1EF8D73500757C55 /* aec_dump */ = { > isa = PBXGroup; > children = ( >@@ -5722,10 +6504,11 @@ > 413A21431FE18D0100373E99 /* rtc_base */ = { > isa = PBXGroup; > children = ( >- 413A21801FE18D7A00373E99 /* DEPS */, >- 41F9BFC82051DD8E00ABF0B9 /* experiments */, >- 419C83411FE246380040C30F /* numerics */, >- 413A21FD1FE18DBB00373E99 /* OWNERS */, >+ 4192417A2127390C00634FCF /* time */, >+ 419241652127387900634FCF /* experiments */, >+ 41F2639D2126800000274F59 /* aligned_array.h */, >+ 41F2639B21267FFF00274F59 /* aligned_malloc.cc */, >+ 41F2639C21267FFF00274F59 /* aligned_malloc.h */, > 413A22921FE18E0000373E99 /* arraysize.h */, > 413A214D1FE18D5000373E99 /* asyncinvoker-inl.h */, > 413A22391FE18DD700373E99 /* asyncinvoker.cc */, >@@ -5736,76 +6519,78 @@ > 413A21501FE18D5100373E99 /* asyncresolverinterface.h */, > 413A22431FE18DDC00373E99 /* asyncsocket.cc */, > 413A220B1FE18DC100373E99 /* asyncsocket.h */, >+ 413A22741FE18DF600373E99 /* asynctcpsocket_unittest.cc */, > 413A22581FE18DE500373E99 /* asynctcpsocket.cc */, > 413A21641FE18D5F00373E99 /* asynctcpsocket.h */, >- 413A22741FE18DF600373E99 /* asynctcpsocket_unittest.cc */, >+ 413A22911FE18E0000373E99 /* asyncudpsocket_unittest.cc */, > 413A21C21FE18D9E00373E99 /* asyncudpsocket.cc */, > 413A215C1FE18D5800373E99 /* asyncudpsocket.h */, >- 413A22911FE18E0000373E99 /* asyncudpsocket_unittest.cc */, >- 413A21981FE18D8A00373E99 /* atomicops.h */, > 413A225D1FE18DE600373E99 /* atomicops_unittest.cc */, >+ 413A21981FE18D8A00373E99 /* atomicops.h */, > 413A21811FE18D7B00373E99 /* base64_unittest.cc */, >- 413A22091FE18DC000373E99 /* bind.h */, > 413A222F1FE18DD200373E99 /* bind_unittest.cc */, >+ 413A22091FE18DC000373E99 /* bind.h */, >+ 413A22571FE18DE400373E99 /* bitbuffer_unittest.cc */, > 413A21E71FE18DB100373E99 /* bitbuffer.cc */, > 413A22241FE18DCD00373E99 /* bitbuffer.h */, >- 413A22571FE18DE400373E99 /* bitbuffer_unittest.cc */, >+ 413A221C1FE18DC800373E99 /* bitrateallocationstrategy_unittest.cc */, > 413A214A1FE18D4E00373E99 /* bitrateallocationstrategy.cc */, > 413A21D21FE18DA700373E99 /* bitrateallocationstrategy.h */, >- 413A221C1FE18DC800373E99 /* bitrateallocationstrategy_unittest.cc */, >- 413A223B1FE18DD900373E99 /* buffer.h */, > 413A22131FE18DC400373E99 /* buffer_unittest.cc */, >+ 413A223B1FE18DD900373E99 /* buffer.h */, >+ 413A21711FE18D6D00373E99 /* bufferqueue_unittest.cc */, > 413A22481FE18DDE00373E99 /* bufferqueue.cc */, > 413A21D71FE18DAA00373E99 /* bufferqueue.h */, >- 413A21711FE18D6D00373E99 /* bufferqueue_unittest.cc */, > 413A228F1FE18DFF00373E99 /* BUILD.gn */, >+ 413A21C01FE18D9D00373E99 /* bytebuffer_unittest.cc */, > 413A22A01FE18E0600373E99 /* bytebuffer.cc */, > 413A22511FE18DE100373E99 /* bytebuffer.h */, >- 413A21C01FE18D9D00373E99 /* bytebuffer_unittest.cc */, >- 413A21EA1FE18DB300373E99 /* byteorder.h */, > 413A22361FE18DD500373E99 /* byteorder_unittest.cc */, >+ 413A21EA1FE18DB300373E99 /* byteorder.h */, >+ 413A218A1FE18D8200373E99 /* callback_unittest.cc */, > 413A21C31FE18D9E00373E99 /* callback.h */, > 413A21B71FE18D9900373E99 /* callback.h.pump */, >- 413A218A1FE18D8200373E99 /* callback_unittest.cc */, > 413A22201FE18DCA00373E99 /* checks.cc */, > 413A21FB1FE18DBA00373E99 /* checks.h */, > 413A22321FE18DD300373E99 /* compile_assert_c.h */, > 413A22191FE18DC600373E99 /* constructormagic.h */, >+ 413A22961FE18E0200373E99 /* copyonwritebuffer_unittest.cc */, > 413A21C11FE18D9D00373E99 /* copyonwritebuffer.cc */, > 413A22591FE18DE500373E99 /* copyonwritebuffer.h */, >- 413A22961FE18E0200373E99 /* copyonwritebuffer_unittest.cc */, >+ 413A22611FE18DE800373E99 /* cpu_time_unittest.cc */, > 413A21B81FE18D9900373E99 /* cpu_time.cc */, > 413A22901FE18E0000373E99 /* cpu_time.h */, >- 413A22611FE18DE800373E99 /* cpu_time_unittest.cc */, >+ 413A22651FE18DEB00373E99 /* crc32_unittest.cc */, > 413A21EF1FE18DB500373E99 /* crc32.cc */, > 413A21511FE18D5200373E99 /* crc32.h */, >- 413A22651FE18DEB00373E99 /* crc32_unittest.cc */, >+ 413A21D01FE18DA700373E99 /* criticalsection_unittest.cc */, > 413A22351FE18DD500373E99 /* criticalsection.cc */, > 413A22161FE18DC500373E99 /* criticalsection.h */, >- 413A21D01FE18DA700373E99 /* criticalsection_unittest.cc */, > 413A21CE1FE18DA500373E99 /* cryptstring.cc */, > 413A21D51FE18DA900373E99 /* cryptstring.h */, >+ 41E02CBB2127356A00C27CD6 /* data_rate_limiter.cc */, >+ 41E02CBC2127356A00C27CD6 /* data_rate_limiter.h */, > 413A21FA1FE18DBA00373E99 /* deprecation.h */, >+ 413A21801FE18D7A00373E99 /* DEPS */, > 413A21F41FE18DB700373E99 /* dscp.h */, >- 413A22641FE18DEB00373E99 /* event.cc */, >- 413A22521FE18DE200373E99 /* event.h */, > 413A223C1FE18DD900373E99 /* event_tracer.cc */, > 413A222B1FE18DCF00373E99 /* event_tracer.h */, >- 413A227D1FE18DF900373E99 /* event_tracer_unittest.cc */, >- 413A21C41FE18D9F00373E99 /* event_unittest.cc */, >+ 413A22641FE18DEB00373E99 /* event.cc */, >+ 413A22521FE18DE200373E99 /* event.h */, >+ 41F9BFC82051DD8E00ABF0B9 /* experiments */, > 413A21BC1FE18D9B00373E99 /* fakeclock.cc */, > 413A222C1FE18DD000373E99 /* fakeclock.h */, > 413A215D1FE18D5900373E99 /* fakenetwork.h */, > 413A22791FE18DF800373E99 /* fakesslidentity.cc */, > 413A21A31FE18D9000373E99 /* fakesslidentity.h */, >- 413A21911FE18D8500373E99 /* file.cc */, >- 413A21821FE18D7C00373E99 /* file.h */, > 413A22851FE18DFC00373E99 /* file_posix.cc */, > 413A218B1FE18D8200373E99 /* file_unittest.cc */, > 413A21521FE18D5200373E99 /* file_win.cc */, >+ 413A21911FE18D8500373E99 /* file.cc */, >+ 413A21821FE18D7C00373E99 /* file.h */, >+ 413A225A1FE18DE500373E99 /* filerotatingstream_unittest.cc */, > 413A22871FE18DFD00373E99 /* filerotatingstream.cc */, > 413A218C1FE18D8300373E99 /* filerotatingstream.h */, >- 413A225A1FE18DE500373E99 /* filerotatingstream_unittest.cc */, > 413A22621FE18DE900373E99 /* fileutils.cc */, > 413A226A1FE18DF000373E99 /* fileutils.h */, > 413A22171FE18DC600373E99 /* firewallsocketserver.cc */, >@@ -5813,58 +6598,58 @@ > 413A21611FE18D5B00373E99 /* flags.cc */, > 413A22691FE18DEF00373E99 /* flags.h */, > 413A21471FE18D4D00373E99 /* format_macros.h */, >- 413A21451FE18D4C00373E99 /* function_view.h */, > 413A21891FE18D8100373E99 /* function_view_unittest.cc */, >+ 413A21451FE18D4C00373E99 /* function_view.h */, > 413A21AC1FE18D9400373E99 /* gtest_prod_util.h */, >- 413A21951FE18D8800373E99 /* gunit.h */, > 413A220A1FE18DC000373E99 /* gunit_prod.h */, >+ 413A21951FE18D8800373E99 /* gunit.h */, >+ 413A21C51FE18D9F00373E99 /* helpers_unittest.cc */, > 413A221B1FE18DC700373E99 /* helpers.cc */, > 413A21831FE18D7D00373E99 /* helpers.h */, >- 413A21C51FE18D9F00373E99 /* helpers_unittest.cc */, >+ 413A21E61FE18DB100373E99 /* httpbase_unittest.cc */, > 413A21B21FE18D9700373E99 /* httpbase.cc */, > 413A22601FE18DE700373E99 /* httpbase.h */, >- 413A21E61FE18DB100373E99 /* httpbase_unittest.cc */, >+ 413A21B31FE18D9700373E99 /* httpcommon_unittest.cc */, > 413A225F1FE18DE700373E99 /* httpcommon-inl.h */, > 413A221A1FE18DC700373E99 /* httpcommon.cc */, > 413A22421FE18DDB00373E99 /* httpcommon.h */, >- 413A21B31FE18D9700373E99 /* httpcommon_unittest.cc */, >+ 413A21541FE18D5300373E99 /* httpserver_unittest.cc */, > 413A21FE1FE18DBC00373E99 /* httpserver.cc */, > 413A21701FE18D6C00373E99 /* httpserver.h */, >- 413A21541FE18D5300373E99 /* httpserver_unittest.cc */, >- 413A22971FE18E0200373E99 /* ifaddrs-android.cc */, >- 413A216F1FE18D6B00373E99 /* ifaddrs-android.h */, > 413A22211FE18DCB00373E99 /* ifaddrs_converter.cc */, > 413A227A1FE18DF800373E99 /* ifaddrs_converter.h */, >+ 413A22971FE18E0200373E99 /* ifaddrs-android.cc */, >+ 413A216F1FE18D6B00373E99 /* ifaddrs-android.h */, > 413A22931FE18E0100373E99 /* ignore_wundef.h */, >+ 413A216A1FE18D6700373E99 /* ipaddress_unittest.cc */, > 413A229B1FE18E0400373E99 /* ipaddress.cc */, > 413A214E1FE18D5000373E99 /* ipaddress.h */, >- 413A216A1FE18D6700373E99 /* ipaddress_unittest.cc */, >+ 413A21F21FE18DB600373E99 /* json_unittest.cc */, > 413A21DC1FE18DAD00373E99 /* json.cc */, > 413A21EC1FE18DB400373E99 /* json.h */, >- 413A21F21FE18DB600373E99 /* json_unittest.cc */, > 413A22121FE18DC400373E99 /* keep_ref_until_done.h */, > 413A22991FE18E0300373E99 /* location.cc */, > 413A229A1FE18E0400373E99 /* location.h */, >- 413A21721FE18D6D00373E99 /* logging.cc */, >- 413A21DE1FE18DAE00373E99 /* logging.h */, > 413A21671FE18D6300373E99 /* logging_mac.mm */, > 413A21E01FE18DAE00373E99 /* logging_unittest.cc */, >+ 413A21721FE18D6D00373E99 /* logging.cc */, >+ 413A21DE1FE18DAE00373E99 /* logging.h */, > 413A226B1FE18DF000373E99 /* logsinks.cc */, > 413A21FF1FE18DBC00373E99 /* logsinks.h */, > 413A21D81FE18DAB00373E99 /* macifaddrs_converter.cc */, > 413A21E41FE18DB000373E99 /* macutils.cc */, > 413A22441FE18DDC00373E99 /* macutils.h */, >+ 413A21F01FE18DB500373E99 /* memory_usage_unittest.cc */, > 413A222D1FE18DD100373E99 /* memory_usage.cc */, > 413A21B41FE18D9700373E99 /* memory_usage.h */, >- 413A21F01FE18DB500373E99 /* memory_usage_unittest.cc */, >+ 413A21E11FE18DAF00373E99 /* messagedigest_unittest.cc */, > 413A21A41FE18D9000373E99 /* messagedigest.cc */, > 413A21A51FE18D9100373E99 /* messagedigest.h */, >- 413A21E11FE18DAF00373E99 /* messagedigest_unittest.cc */, > 413A22181FE18DC600373E99 /* messagehandler.cc */, > 413A215F1FE18D5A00373E99 /* messagehandler.h */, >+ 413A217A1FE18D7500373E99 /* messagequeue_unittest.cc */, > 413A21561FE18D5400373E99 /* messagequeue.cc */, > 413A22561FE18DE400373E99 /* messagequeue.h */, >- 413A217A1FE18D7500373E99 /* messagequeue_unittest.cc */, > 413A21C81FE18DA100373E99 /* nat_unittest.cc */, > 413A21531FE18D5300373E99 /* natserver.cc */, > 413A216B1FE18D6800373E99 /* natserver.h */, >@@ -5876,45 +6661,54 @@ > 413A214F1FE18D5100373E99 /* nethelper.h */, > 413A224E1FE18DE000373E99 /* nethelpers.cc */, > 413A22371FE18DD600373E99 /* nethelpers.h */, >- 413A22941FE18E0100373E99 /* network.cc */, >- 413A22041FE18DBE00373E99 /* network.h */, > 413A22231FE18DCC00373E99 /* network_constants.h */, > 413A22681FE18DEE00373E99 /* network_unittest.cc */, >+ 413A22941FE18E0100373E99 /* network.cc */, >+ 413A22041FE18DBE00373E99 /* network.h */, > 413A22381FE18DD600373E99 /* networkmonitor.cc */, > 413A22291FE18DCF00373E99 /* networkmonitor.h */, > 413A21691FE18D6500373E99 /* networkroute.h */, > 413A220C1FE18DC100373E99 /* noop.cc */, > 413A229C1FE18E0400373E99 /* noop.mm */, >+ 413A227C1FE18DF800373E99 /* nullsocketserver_unittest.cc */, > 413A227F1FE18DF900373E99 /* nullsocketserver.cc */, > 413A226D1FE18DF100373E99 /* nullsocketserver.h */, >- 413A227C1FE18DF800373E99 /* nullsocketserver_unittest.cc */, >- 413A21E21FE18DAF00373E99 /* onetimeevent.h */, >+ 419C83411FE246380040C30F /* numerics */, > 413A21621FE18D5D00373E99 /* onetimeevent_unittest.cc */, >+ 413A21E21FE18DAF00373E99 /* onetimeevent.h */, > 413A22751FE18DF600373E99 /* openssl.h */, >+ 413A227E1FE18DF900373E99 /* openssladapter_unittest.cc */, > 413A219A1FE18D8B00373E99 /* openssladapter.cc */, > 413A21DB1FE18DAC00373E99 /* openssladapter.h */, >- 413A227E1FE18DF900373E99 /* openssladapter_unittest.cc */, >+ 41DDB25E212679A100296D47 /* opensslcertificate.cc */, >+ 41DDB260212679A200296D47 /* opensslcertificate.h */, > 413A22401FE18DDB00373E99 /* openssldigest.cc */, > 413A218E1FE18D8400373E99 /* openssldigest.h */, > 413A21681FE18D6400373E99 /* opensslidentity.cc */, > 413A22491FE18DDF00373E99 /* opensslidentity.h */, >+ 41DDB25C212679A000296D47 /* opensslsessioncache.cc */, >+ 41DDB25D212679A000296D47 /* opensslsessioncache.h */, > 413A218D1FE18D8300373E99 /* opensslstreamadapter.cc */, > 413A22631FE18DEA00373E99 /* opensslstreamadapter.h */, >+ 41DDB25F212679A200296D47 /* opensslutility.cc */, >+ 41DDB25B2126799F00296D47 /* opensslutility.h */, >+ 413A21C71FE18DA100373E99 /* optionsfile_unittest.cc */, > 413A21F61FE18DB800373E99 /* optionsfile.cc */, > 413A21F11FE18DB600373E99 /* optionsfile.h */, >- 413A21C71FE18DA100373E99 /* optionsfile_unittest.cc */, >+ 413A21FD1FE18DBB00373E99 /* OWNERS */, >+ 413A219D1FE18D8D00373E99 /* pathutils_unittest.cc */, > 413A21E81FE18DB200373E99 /* pathutils.cc */, > 413A223D1FE18DD900373E99 /* pathutils.h */, >- 413A219D1FE18D8D00373E99 /* pathutils_unittest.cc */, >+ 413A227B1FE18DF800373E99 /* physicalsocketserver_unittest.cc */, > 413A21E91FE18DB200373E99 /* physicalsocketserver.cc */, > 413A22981FE18E0300373E99 /* physicalsocketserver.h */, >- 413A227B1FE18DF800373E99 /* physicalsocketserver_unittest.cc */, > 413A22071FE18DBF00373E99 /* platform_file.cc */, > 413A21791FE18D7400373E99 /* platform_file.h */, >- 413A21CA1FE18DA300373E99 /* platform_thread.cc */, >- 413A22531FE18DE200373E99 /* platform_thread.h */, >+ 41DDB253212678E300296D47 /* platform_thread_types.cc */, > 413A21C91FE18DA200373E99 /* platform_thread_types.h */, > 413A21D11FE18DA700373E99 /* platform_thread_unittest.cc */, >+ 413A21CA1FE18DA300373E99 /* platform_thread.cc */, >+ 413A22531FE18DE200373E99 /* platform_thread.h */, > 413A22731FE18DF600373E99 /* protobuf_utils.h */, > 413A214B1FE18D4E00373E99 /* proxy_unittest.cc */, > 413A226F1FE18DF200373E99 /* proxyinfo.cc */, >@@ -5923,118 +6717,125 @@ > 413A22721FE18DF500373E99 /* proxyserver.h */, > 413A21A61FE18D9100373E99 /* race_checker.cc */, > 413A229D1FE18E0500373E99 /* race_checker.h */, >+ 413A21661FE18D6200373E99 /* random_unittest.cc */, > 413A22781FE18DF700373E99 /* random.cc */, > 413A21F81FE18DB900373E99 /* random.h */, >- 413A21661FE18D6200373E99 /* random_unittest.cc */, >+ 413A229E1FE18E0500373E99 /* rate_limiter_unittest.cc */, > 413A223A1FE18DD800373E99 /* rate_limiter.cc */, > 413A220D1FE18DC200373E99 /* rate_limiter.h */, >- 413A229E1FE18E0500373E99 /* rate_limiter_unittest.cc */, >+ 413A21731FE18D6E00373E99 /* rate_statistics_unittest.cc */, > 413A22051FE18DBE00373E99 /* rate_statistics.cc */, > 413A21B91FE18D9A00373E99 /* rate_statistics.h */, >- 413A21731FE18D6E00373E99 /* rate_statistics_unittest.cc */, >+ 413A221F1FE18DC900373E99 /* ratetracker_unittest.cc */, > 413A220F1FE18DC200373E99 /* ratetracker.cc */, > 413A21AF1FE18D9500373E99 /* ratetracker.h */, >- 413A221F1FE18DC900373E99 /* ratetracker_unittest.cc */, > 413A21AD1FE18D9400373E99 /* refcount.h */, >- 413A22141FE18DC400373E99 /* refcountedobject.h */, > 413A21CD1FE18DA500373E99 /* refcountedobject_unittest.cc */, >+ 413A22141FE18DC400373E99 /* refcountedobject.h */, > 413A21CC1FE18DA400373E99 /* refcounter.h */, >- 413A22541FE18DE300373E99 /* rollingaccumulator.h */, > 413A217B1FE18D7600373E99 /* rollingaccumulator_unittest.cc */, >+ 413A22541FE18DE300373E99 /* rollingaccumulator.h */, >+ 413A22881FE18DFD00373E99 /* rtccertificate_unittest.cc */, > 413A21BB1FE18D9B00373E99 /* rtccertificate.cc */, > 413A21CF1FE18DA600373E99 /* rtccertificate.h */, >- 413A22881FE18DFD00373E99 /* rtccertificate_unittest.cc */, >+ 413A21851FE18D7E00373E99 /* rtccertificategenerator_unittest.cc */, > 413A21651FE18D6100373E99 /* rtccertificategenerator.cc */, > 413A21861FE18D7F00373E99 /* rtccertificategenerator.h */, >- 413A21851FE18D7E00373E99 /* rtccertificategenerator_unittest.cc */, > 413A21D41FE18DA900373E99 /* sanitizer.h */, > 413A21B01FE18D9600373E99 /* scoped_ref_ptr.h */, >- 413A217E1FE18D7800373E99 /* sequenced_task_checker.h */, > 413A224A1FE18DDF00373E99 /* sequenced_task_checker_impl.cc */, > 413A225B1FE18DE600373E99 /* sequenced_task_checker_impl.h */, > 413A21BD1FE18D9C00373E99 /* sequenced_task_checker_unittest.cc */, >+ 413A217E1FE18D7800373E99 /* sequenced_task_checker.h */, >+ 413A22221FE18DCB00373E99 /* signalthread_unittest.cc */, > 413A22081FE18DC000373E99 /* signalthread.cc */, > 413A222E1FE18DD100373E99 /* signalthread.h */, >- 413A22221FE18DCB00373E99 /* signalthread_unittest.cc */, >- 413A21761FE18D7100373E99 /* sigslot.h */, > 413A21A21FE18D8F00373E99 /* sigslot_unittest.cc */, >+ 413A21761FE18D7100373E99 /* sigslot.h */, > 413A21DF1FE18DAE00373E99 /* sigslotrepeater.h */, >- 413A22671FE18DEC00373E99 /* sigslottester.h */, > 413A22461FE18DDD00373E99 /* sigslottester_unittest.cc */, >- 413A21881FE18D8000373E99 /* socket.h */, >+ 413A22671FE18DEC00373E99 /* sigslottester.h */, > 413A21BA1FE18D9A00373E99 /* socket_unittest.cc */, > 413A21871FE18D8000373E99 /* socket_unittest.h */, >+ 41DDB2552126790A00296D47 /* socket.cc */, >+ 413A21881FE18D8000373E99 /* socket.h */, > 413A219B1FE18D8B00373E99 /* socketadapters.cc */, > 413A220E1FE18DC200373E99 /* socketadapters.h */, >+ 413A22101FE18DC300373E99 /* socketaddress_unittest.cc */, > 413A22151FE18DC500373E99 /* socketaddress.cc */, > 413A22761FE18DF700373E99 /* socketaddress.h */, >- 413A22101FE18DC300373E99 /* socketaddress_unittest.cc */, > 413A21F91FE18DB900373E99 /* socketaddresspair.cc */, > 413A22771FE18DF700373E99 /* socketaddresspair.h */, > 413A216C1FE18D6900373E99 /* socketfactory.h */, > 413A22661FE18DEC00373E99 /* socketserver.h */, > 413A217C1FE18D7700373E99 /* socketstream.cc */, > 413A22001FE18DBC00373E99 /* socketstream.h */, >+ 413A22341FE18DD400373E99 /* ssladapter_unittest.cc */, > 413A22251FE18DCD00373E99 /* ssladapter.cc */, > 413A224F1FE18DE100373E99 /* ssladapter.h */, >- 413A22341FE18DD400373E99 /* ssladapter_unittest.cc */, >+ 41E02CB92127356A00C27CD6 /* sslcertificate.cc */, >+ 41E02CB82127356900C27CD6 /* sslcertificate.h */, > 413A229F1FE18E0600373E99 /* sslfingerprint.cc */, > 413A225C1FE18DE600373E99 /* sslfingerprint.h */, >+ 413A226C1FE18DF000373E99 /* sslidentity_unittest.cc */, > 413A21601FE18D5B00373E99 /* sslidentity.cc */, > 413A218F1FE18D8400373E99 /* sslidentity.h */, >- 413A226C1FE18DF000373E99 /* sslidentity_unittest.cc */, > 413A223F1FE18DDA00373E99 /* sslroots.h */, >+ 413A21EB1FE18DB300373E99 /* sslstreamadapter_unittest.cc */, > 413A21AA1FE18D9300373E99 /* sslstreamadapter.cc */, > 413A226E1FE18DF100373E99 /* sslstreamadapter.h */, >- 413A21EB1FE18DB300373E99 /* sslstreamadapter_unittest.cc */, >+ 413A22501FE18DE100373E99 /* stream_unittest.cc */, > 413A22801FE18DFA00373E99 /* stream.cc */, > 413A21A81FE18D9200373E99 /* stream.h */, >- 413A22501FE18DE100373E99 /* stream_unittest.cc */, >+ 413A21781FE18D7300373E99 /* string_to_number_unittest.cc */, > 413A22831FE18DFC00373E99 /* string_to_number.cc */, > 413A22111FE18DC300373E99 /* string_to_number.h */, >- 413A21781FE18D7300373E99 /* string_to_number_unittest.cc */, >+ 413A22031FE18DBE00373E99 /* stringencode_unittest.cc */, > 413A215B1FE18D5700373E99 /* stringencode.cc */, > 413A21961FE18D8900373E99 /* stringencode.h */, >- 413A22031FE18DBE00373E99 /* stringencode_unittest.cc */, >- 413A225E1FE18DE700373E99 /* stringize_macros.h */, > 413A22471FE18DDD00373E99 /* stringize_macros_unittest.cc */, >+ 413A225E1FE18DE700373E99 /* stringize_macros.h */, >+ 41DDB267212679AE00296D47 /* strings */, >+ 413A22311FE18DD300373E99 /* stringutils_unittest.cc */, > 413A21BF1FE18D9C00373E99 /* stringutils.cc */, > 413A21771FE18D7200373E99 /* stringutils.h */, >- 413A22311FE18DD300373E99 /* stringutils_unittest.cc */, >- 413A21F31FE18DB700373E99 /* swap_queue.h */, > 413A21971FE18D8900373E99 /* swap_queue_unittest.cc */, >- 413A21E51FE18DB100373E99 /* task_queue.h */, >+ 413A21F31FE18DB700373E99 /* swap_queue.h */, >+ 4192415C2127379200634FCF /* synchronization */, >+ 41F263A22126808800274F59 /* system */, > 413A228B1FE18DFE00373E99 /* task_queue_gcd.cc */, > 413A21741FE18D7000373E99 /* task_queue_libevent.cc */, > 413A21D91FE18DAB00373E99 /* task_queue_posix.cc */, > 413A222A1FE18DCF00373E99 /* task_queue_posix.h */, > 413A21B11FE18D9600373E99 /* task_queue_unittest.cc */, > 413A219E1FE18D8D00373E99 /* task_queue_win.cc */, >+ 413A21E51FE18DB100373E99 /* task_queue.h */, > 413A21A91FE18D9200373E99 /* template_util.h */, > 413A21441FE18D4C00373E99 /* testbase64.h */, >+ 413A22811FE18DFB00373E99 /* testclient_unittest.cc */, > 413A21D31FE18DA800373E99 /* testclient.cc */, > 413A22821FE18DFB00373E99 /* testclient.h */, >- 413A22811FE18DFB00373E99 /* testclient_unittest.cc */, > 413A21491FE18D4E00373E99 /* testechoserver.cc */, > 413A21D61FE18DAA00373E99 /* testechoserver.h */, > 413A219F1FE18D8E00373E99 /* testutils.cc */, > 413A22861FE18DFC00373E99 /* testutils.h */, >- 413A21901FE18D8500373E99 /* thread.cc */, >- 413A21EE1FE18DB400373E99 /* thread.h */, >- 413A216E1FE18D6A00373E99 /* thread_annotations.h */, >+ 41F263B4212680E800274F59 /* third_party */, > 413A22841FE18DFC00373E99 /* thread_annotations_unittest.cc */, >- 413A21931FE18D8700373E99 /* thread_checker.h */, >+ 413A216E1FE18D6A00373E99 /* thread_annotations.h */, > 413A21FC1FE18DBB00373E99 /* thread_checker_impl.cc */, > 413A215E1FE18D5900373E99 /* thread_checker_impl.h */, > 413A21B61FE18D9800373E99 /* thread_checker_unittest.cc */, >+ 413A21931FE18D8700373E99 /* thread_checker.h */, > 413A228A1FE18DFE00373E99 /* thread_darwin.mm */, > 413A22261FE18DCD00373E99 /* thread_unittest.cc */, >+ 413A21901FE18D8500373E99 /* thread.cc */, >+ 413A21EE1FE18DB400373E99 /* thread.h */, >+ 413A224B1FE18DDF00373E99 /* timestampaligner_unittest.cc */, > 413A22281FE18DCE00373E99 /* timestampaligner.cc */, > 413A22011FE18DBD00373E99 /* timestampaligner.h */, >- 413A224B1FE18DDF00373E99 /* timestampaligner_unittest.cc */, >+ 413A228E1FE18DFF00373E99 /* timeutils_unittest.cc */, > 413A22701FE18DF300373E99 /* timeutils.cc */, > 413A21F51FE18DB700373E99 /* timeutils.h */, >- 413A228E1FE18DFF00373E99 /* timeutils_unittest.cc */, > 413A21AB1FE18D9300373E99 /* trace_event.h */, > 413A21F71FE18DB800373E99 /* type_traits.h */, > 413A224C1FE18DE000373E99 /* unittest_main.cc */, >@@ -6043,8 +6844,11 @@ > 413A21DA1FE18DAC00373E99 /* virtualsocket_unittest.cc */, > 413A21BE1FE18D9C00373E99 /* virtualsocketserver.cc */, > 413A21631FE18D5E00373E99 /* virtualsocketserver.h */, >- 413A21941FE18D8800373E99 /* weak_ptr.cc */, > 413A22711FE18DF400373E99 /* weak_ptr_unittest.cc */, >+ 413A21941FE18D8800373E99 /* weak_ptr.cc */, >+ 41E02CBA2127356A00C27CD6 /* weak_ptr.h */, >+ 41DDB2572126792800296D47 /* zero_memory.cc */, >+ 41DDB2582126792800296D47 /* zero_memory.h */, > ); > name = rtc_base; > sourceTree = "<group>"; >@@ -6129,10 +6933,11 @@ > 413AD19F21265ADF003F7263 /* absl */ = { > isa = PBXGroup; > children = ( >- 41DDB24A21265BA800296D47 /* types */, >- 41DDB24521265B8200296D47 /* container */, >- 413AD1A621265B35003F7263 /* base */, > 413AD1A021265AFA003F7263 /* algorithm */, >+ 413AD1A621265B35003F7263 /* base */, >+ 41DDB24521265B8200296D47 /* container */, >+ 41A08BB621268A6A001D5D7B /* memory */, >+ 41DDB24A21265BA800296D47 /* types */, > ); > name = absl; > path = "abseil-cpp/absl"; >@@ -6150,6 +6955,8 @@ > 413AD1A621265B35003F7263 /* base */ = { > isa = PBXGroup; > children = ( >+ 41A08BCA2126961F001D5D7B /* raw_logging.cc */, >+ 41A08BC92126961F001D5D7B /* raw_logging.h */, > 413AD1A921265B59003F7263 /* casts.h */, > 413AD1A821265B59003F7263 /* dynamic_annotations.cc */, > 413AD1AA21265B59003F7263 /* macros.h */, >@@ -6275,6 +7082,8 @@ > 4145E4931EF890E500FCF6E6 /* Video */ = { > isa = PBXGroup; > children = ( >+ 41AF2D11212CD40300D033D5 /* UIDevice+H264Profile.h */, >+ 41053B4D212CD8EC004DAC6C /* UIDevice+H264Profile.mm */, > 41ECEAC520641302009D5141 /* RTCCVPixelBuffer.mm */, > 41ECEACE2064136F009D5141 /* RTCI420Buffer+Private.h */, > 41ECEACD2064136F009D5141 /* RTCI420Buffer.mm */, >@@ -6336,6 +7145,158 @@ > name = Common; > sourceTree = "<group>"; > }; >+ 4192415C2127379200634FCF /* synchronization */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241602127385B00634FCF /* rw_lock_posix.cc */, >+ 4192415E2127385B00634FCF /* rw_lock_posix.h */, >+ 4192415D2127385A00634FCF /* rw_lock_wrapper.cc */, >+ 4192415F2127385B00634FCF /* rw_lock_wrapper.h */, >+ ); >+ name = synchronization; >+ path = rtc_base/synchronization; >+ sourceTree = "<group>"; >+ }; >+ 419241652127387900634FCF /* experiments */ = { >+ isa = PBXGroup; >+ children = ( >+ 4192416B2127389B00634FCF /* congestion_controller_experiment.cc */, >+ 419241672127389A00634FCF /* congestion_controller_experiment.h */, >+ 419241682127389A00634FCF /* field_trial_parser.cc */, >+ 419241692127389B00634FCF /* field_trial_parser.h */, >+ 419241E621275A7600634FCF /* field_trial_units.cc */, >+ 419241E521275A7600634FCF /* field_trial_units.h */, >+ 4192416A2127389B00634FCF /* quality_scaling_experiment.cc */, >+ 419241662127389A00634FCF /* quality_scaling_experiment.h */, >+ ); >+ name = experiments; >+ path = rtc_base/experiments; >+ sourceTree = "<group>"; >+ }; >+ 4192417A2127390C00634FCF /* time */ = { >+ isa = PBXGroup; >+ children = ( >+ 4192417B2127392300634FCF /* timestamp_extrapolator.cc */, >+ 4192417C2127392300634FCF /* timestamp_extrapolator.h */, >+ ); >+ name = time; >+ path = rtc_base/time; >+ sourceTree = "<group>"; >+ }; >+ 419241912127583900634FCF /* rnnnoise */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241922127585000634FCF /* src */, >+ ); >+ name = rnnnoise; >+ path = rnnoise; >+ sourceTree = "<group>"; >+ }; >+ 419241922127585000634FCF /* src */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241952127586500634FCF /* kiss_fft.cc */, >+ 419241962127586500634FCF /* kiss_fft.h */, >+ 419241972127586500634FCF /* rnn_activations.h */, >+ 419241942127586400634FCF /* rnn_vad_weights.cc */, >+ 419241932127586400634FCF /* rnn_vad_weights.h */, >+ ); >+ name = src; >+ sourceTree = "<group>"; >+ }; >+ 419241B12127591C00634FCF /* bbr */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241B62127593D00634FCF /* bandwidth_sampler.cc */, >+ 419241BE2127593F00634FCF /* bandwidth_sampler.h */, >+ 419241BB2127593E00634FCF /* bbr_factory.cc */, >+ 419241B82127593E00634FCF /* bbr_factory.h */, >+ 419241B92127593E00634FCF /* bbr_network_controller.cc */, >+ 419241B52127593D00634FCF /* bbr_network_controller.h */, >+ 419241B32127593D00634FCF /* data_transfer_tracker.cc */, >+ 419241BF2127593F00634FCF /* data_transfer_tracker.h */, >+ 419241B72127593D00634FCF /* loss_rate_filter.cc */, >+ 419241B22127593C00634FCF /* loss_rate_filter.h */, >+ 419241BA2127593E00634FCF /* packet_number_indexed_queue.h */, >+ 419241BC2127593E00634FCF /* rtt_stats.cc */, >+ 419241BD2127593E00634FCF /* rtt_stats.h */, >+ 419241B42127593D00634FCF /* windowed_filter.h */, >+ ); >+ path = bbr; >+ sourceTree = "<group>"; >+ }; >+ 419241D421275A1800634FCF /* units */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241D921275A2F00634FCF /* data_rate.cc */, >+ 419241D621275A2F00634FCF /* data_rate.h */, >+ 419241D721275A2F00634FCF /* data_size.cc */, >+ 419241DC21275A3000634FCF /* data_size.h */, >+ 419241DA21275A3000634FCF /* time_delta.cc */, >+ 419241D521275A2F00634FCF /* time_delta.h */, >+ 419241DB21275A3000634FCF /* timestamp.cc */, >+ 419241D821275A2F00634FCF /* timestamp.h */, >+ ); >+ path = units; >+ sourceTree = "<group>"; >+ }; >+ 419241F7212765EE00634FCF /* Native */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241F82127660E00634FCF /* api */, >+ 419241FA2127661700634FCF /* src */, >+ ); >+ name = Native; >+ path = sdk/objc/Framework/Native; >+ sourceTree = "<group>"; >+ }; >+ 419241F82127660E00634FCF /* api */ = { >+ isa = PBXGroup; >+ children = ( >+ 419241FB2127664100634FCF /* audio_device_module.h */, >+ 419241FC2127664100634FCF /* audio_device_module.mm */, >+ 419242062127664600634FCF /* video_capturer.h */, >+ 419241FD2127664100634FCF /* video_capturer.mm */, >+ 419242012127664200634FCF /* video_decoder_factory.h */, >+ 419242032127664200634FCF /* video_decoder_factory.mm */, >+ 419242042127664500634FCF /* video_encoder_factory.h */, >+ 419242052127664500634FCF /* video_encoder_factory.mm */, >+ 419242082127664700634FCF /* video_frame_buffer.h */, >+ 419242072127664600634FCF /* video_frame_buffer.mm */, >+ 419242002127664200634FCF /* video_frame.h */, >+ 419241FF2127664100634FCF /* video_frame.mm */, >+ 419242022127664200634FCF /* video_renderer.h */, >+ 419241FE2127664100634FCF /* video_renderer.mm */, >+ ); >+ path = api; >+ sourceTree = "<group>"; >+ }; >+ 419241FA2127661700634FCF /* src */ = { >+ isa = PBXGroup; >+ children = ( >+ 419242322127665A00634FCF /* audio_device_ios.h */, >+ 4192422F2127665900634FCF /* audio_device_ios.mm */, >+ 419242312127665900634FCF /* audio_device_module_ios.h */, >+ 419242332127665A00634FCF /* audio_device_module_ios.mm */, >+ 419242302127665900634FCF /* audio_session_observer.h */, >+ 419242352127665A00634FCF /* voice_processing_audio_unit.h */, >+ 419242342127665A00634FCF /* voice_processing_audio_unit.mm */, >+ 4192421B2127664C00634FCF /* objc_frame_buffer.h */, >+ 4192421D2127664D00634FCF /* objc_frame_buffer.mm */, >+ 419242182127664B00634FCF /* objc_video_decoder_factory.h */, >+ 4192421A2127664C00634FCF /* objc_video_decoder_factory.mm */, >+ 419242222127664E00634FCF /* objc_video_encoder_factory.h */, >+ 419242172127664B00634FCF /* objc_video_encoder_factory.mm */, >+ 419242192127664B00634FCF /* objc_video_frame.h */, >+ 4192421E2127664D00634FCF /* objc_video_frame.mm */, >+ 419242212127664E00634FCF /* objc_video_renderer.h */, >+ 4192421F2127664D00634FCF /* objc_video_renderer.mm */, >+ 4192421C2127664C00634FCF /* objc_video_track_source.h */, >+ 419242202127664D00634FCF /* objc_video_track_source.mm */, >+ ); >+ path = src; >+ sourceTree = "<group>"; >+ }; > 419C82E71FE20E7D0040C30F /* opus */ = { > isa = PBXGroup; > children = ( >@@ -6416,6 +7377,8 @@ > 419C834B1FE246640040C30F /* safe_compare.h */, > 419C83471FE246630040C30F /* safe_conversions.h */, > 419C83481FE246630040C30F /* safe_minmax.h */, >+ 41E02CD22127360700C27CD6 /* sample_counter.cc */, >+ 41E02CD12127360600C27CD6 /* sample_counter.h */, > ); > name = numerics; > sourceTree = "<group>"; >@@ -6549,6 +7512,59 @@ > path = audio_codecs/ilbc; > sourceTree = "<group>"; > }; >+ 41A08BB621268A6A001D5D7B /* memory */ = { >+ isa = PBXGroup; >+ children = ( >+ 41A08BB721268A7D001D5D7B /* memory.h */, >+ ); >+ name = memory; >+ sourceTree = "<group>"; >+ }; >+ 41A08BD921272F3E001D5D7B /* agc2 */ = { >+ isa = PBXGroup; >+ children = ( >+ 41299B98212736B200B3414B /* rnn_vad */, >+ 41D6B46E212731A4008F9353 /* adaptive_agc.cc */, >+ 41D6B464212731A2008F9353 /* adaptive_agc.h */, >+ 41A08BE421272F85001D5D7B /* adaptive_digital_gain_applier.cc */, >+ 41A08BDB21272F84001D5D7B /* adaptive_digital_gain_applier.h */, >+ 41A08BE921272F86001D5D7B /* adaptive_mode_level_estimator_agc.cc */, >+ 41D6B462212731A1008F9353 /* adaptive_mode_level_estimator_agc.h */, >+ 41D6B45F212731A1008F9353 /* adaptive_mode_level_estimator.cc */, >+ 41A08BDC21272F84001D5D7B /* adaptive_mode_level_estimator.h */, >+ 41D6B46D212731A4008F9353 /* agc2_common.h */, >+ 41D6B45E212731A0008F9353 /* biquad_filter.cc */, >+ 41D6B463212731A2008F9353 /* biquad_filter.h */, >+ 41A08BE621272F86001D5D7B /* compute_interpolated_gain_curve.cc */, >+ 41A08BDA21272F84001D5D7B /* compute_interpolated_gain_curve.h */, >+ 41A08BE821272F86001D5D7B /* down_sampler.cc */, >+ 41D6B460212731A1008F9353 /* down_sampler.h */, >+ 41A08BE521272F86001D5D7B /* fixed_digital_level_estimator.cc */, >+ 41A08BDF21272F84001D5D7B /* fixed_digital_level_estimator.h */, >+ 41D6B465212731A2008F9353 /* fixed_gain_controller.cc */, >+ 41D6B467212731A3008F9353 /* fixed_gain_controller.h */, >+ 41A08BDE21272F84001D5D7B /* gain_applier.cc */, >+ 41A08BE721272F86001D5D7B /* gain_applier.h */, >+ 41A08BE021272F85001D5D7B /* gain_curve_applier.cc */, >+ 41D6B469212731A3008F9353 /* gain_curve_applier.h */, >+ 41A08BE121272F85001D5D7B /* interpolated_gain_curve.cc */, >+ 41A08BEA21272F86001D5D7B /* limiter.h */, >+ 41D6B470212731A6008F9353 /* limiter.cc */, >+ 41D6B461212731A1008F9353 /* noise_level_estimator.cc */, >+ 41D6B46A212731A3008F9353 /* noise_spectrum_estimator.cc */, >+ 41A08BE221272F85001D5D7B /* noise_spectrum_estimator.h */, >+ 41D6B468212731A3008F9353 /* saturation_protector.cc */, >+ 41D6B46B212731A3008F9353 /* saturation_protector.h */, >+ 41D6B46F212731A4008F9353 /* signal_classifier.cc */, >+ 41A08BEB21272F87001D5D7B /* signal_classifier.h */, >+ 41D6B46C212731A4008F9353 /* vad_with_level.cc */, >+ 41A08BE321272F85001D5D7B /* vad_with_level.h */, >+ 41D6B466212731A2008F9353 /* vector_float_frame.cc */, >+ 41A08BDD21272F84001D5D7B /* vector_float_frame.h */, >+ ); >+ path = agc2; >+ sourceTree = "<group>"; >+ }; > 41A391431EFC446E00C4516A /* sha */ = { > isa = PBXGroup; > children = ( >@@ -6811,12 +7827,81 @@ > 41DDB24A21265BA800296D47 /* types */ = { > isa = PBXGroup; > children = ( >+ 4192417F2127497100634FCF /* bad_variant_access.cc */, >+ 419241802127497100634FCF /* bad_variant_access.h */, >+ 41A08BC6212695DE001D5D7B /* bad_optional_access.cc */, >+ 41A08BC5212695DE001D5D7B /* bad_optional_access.h */, > 41DDB25021265BE900296D47 /* optional.cc */, > 41DDB24F21265BE900296D47 /* optional.h */, > ); > name = types; > sourceTree = "<group>"; > }; >+ 41DDB267212679AE00296D47 /* strings */ = { >+ isa = PBXGroup; >+ children = ( >+ 41DDB26B212679D200296D47 /* audio_format_to_string.cc */, >+ 41DDB269212679D100296D47 /* audio_format_to_string.h */, >+ 41DDB26A212679D200296D47 /* string_builder.cc */, >+ 41DDB268212679D100296D47 /* string_builder.h */, >+ ); >+ name = strings; >+ path = rtc_base/strings; >+ sourceTree = "<group>"; >+ }; >+ 41E02C8F212734E800C27CD6 /* goog_cc */ = { >+ isa = PBXGroup; >+ children = ( >+ 41E02C942127352A00C27CD6 /* acknowledged_bitrate_estimator.cc */, >+ 41E02C922127352A00C27CD6 /* acknowledged_bitrate_estimator.h */, >+ 41E02CA12127352C00C27CD6 /* alr_detector.cc */, >+ 41E02C992127352B00C27CD6 /* alr_detector.h */, >+ 41E02C9A2127352B00C27CD6 /* bitrate_estimator.cc */, >+ 41E02C982127352B00C27CD6 /* bitrate_estimator.h */, >+ 41E02C912127352900C27CD6 /* delay_based_bwe.cc */, >+ 41E02C972127352A00C27CD6 /* delay_based_bwe.h */, >+ 41E02CA32127352D00C27CD6 /* delay_increase_detector_interface.h */, >+ 41E02C952127352A00C27CD6 /* goog_cc_factory.cc */, >+ 41E02CA22127352C00C27CD6 /* goog_cc_network_control.cc */, >+ 41E02C962127352A00C27CD6 /* goog_cc_network_control.h */, >+ 41E02C9D2127352B00C27CD6 /* median_slope_estimator.cc */, >+ 41E02C9B2127352B00C27CD6 /* median_slope_estimator.h */, >+ 41E02C9E2127352C00C27CD6 /* probe_bitrate_estimator.cc */, >+ 41E02C932127352A00C27CD6 /* probe_bitrate_estimator.h */, >+ 41E02CA02127352C00C27CD6 /* probe_controller.cc */, >+ 41E02C902127352900C27CD6 /* probe_controller.h */, >+ 41E02C9C2127352B00C27CD6 /* trendline_estimator.cc */, >+ 41E02C9F2127352C00C27CD6 /* trendline_estimator.h */, >+ ); >+ path = goog_cc; >+ sourceTree = "<group>"; >+ }; >+ 41E02CC62127359F00C27CD6 /* transport */ = { >+ isa = PBXGroup; >+ children = ( >+ 41E02CC7212735B600C27CD6 /* bitrate_settings.cc */, >+ 41E02CCB212735B700C27CD6 /* bitrate_settings.h */, >+ 41E02CCA212735B700C27CD6 /* network_control.h */, >+ 41E02CC8212735B700C27CD6 /* network_types.cc */, >+ 41E02CC9212735B700C27CD6 /* network_types.h */, >+ ); >+ path = transport; >+ sourceTree = "<group>"; >+ }; >+ 41E02CD52127362300C27CD6 /* rtp */ = { >+ isa = PBXGroup; >+ children = ( >+ 41924189212749C800634FCF /* pacer_controller.h */, >+ 41924188212749C700634FCF /* send_side_congestion_controller.cc */, >+ 41924187212749C700634FCF /* send_time_history.h */, >+ 4192418A212749C800634FCF /* transport_feedback_adapter.cc */, >+ 41E02CD62127363C00C27CD6 /* pacer_controller.cc */, >+ 41E02CD82127363D00C27CD6 /* send_time_history.cc */, >+ 41E02CD72127363C00C27CD6 /* transport_feedback_adapter.h */, >+ ); >+ path = rtp; >+ sourceTree = "<group>"; >+ }; > 41EA53A21EFC2BAF002FF04C /* fipsmodule */ = { > isa = PBXGroup; > children = ( >@@ -6972,6 +8057,7 @@ > 41ECEAB2206300E3009D5141 /* PeerConnection */ = { > isa = PBXGroup; > children = ( >+ 4192423F21276D4700634FCF /* RTCPeerConnectionFactory.mm */, > 41ECEAC720641328009D5141 /* RTCEncodedImage.mm */, > 41ECEAD9206414A6009D5141 /* RTCRtpFragmentationHeader.mm */, > 41ECEAB320630107009D5141 /* RTCVideoCodec+Private.h */, >@@ -6987,6 +8073,63 @@ > name = PeerConnection; > sourceTree = "<group>"; > }; >+ 41F2636B21267B2300274F59 /* third_party */ = { >+ isa = PBXGroup; >+ children = ( >+ 41F2637121267B4A00274F59 /* spl_sqrt_floor.c */, >+ 41F2637021267B4A00274F59 /* spl_sqrt_floor.h */, >+ 41F2636C21267B3D00274F59 /* fft4g.c */, >+ 41F2636D21267B3E00274F59 /* fft4g.h */, >+ ); >+ path = third_party; >+ sourceTree = "<group>"; >+ }; >+ 41F2638621267F2500274F59 /* third_party */ = { >+ isa = PBXGroup; >+ children = ( >+ 41F2639521267F5E00274F59 /* pa_memorybarrier.h */, >+ 41F2639721267F5E00274F59 /* pa_ringbuffer.c */, >+ 41F2639621267F5E00274F59 /* pa_ringbuffer.h */, >+ 41F2639121267F5300274F59 /* g722_decode.c */, >+ 41F2639021267F5300274F59 /* g722_enc_dec.h */, >+ 41F2638F21267F5200274F59 /* g722_encode.c */, >+ 41F2638B21267F4900274F59 /* g711.c */, >+ 41F2638C21267F4900274F59 /* g711.h */, >+ 41F2638821267F4000274F59 /* fft.c */, >+ 41F2638721267F4000274F59 /* fft.h */, >+ ); >+ path = third_party; >+ sourceTree = "<group>"; >+ }; >+ 41F263A22126808800274F59 /* system */ = { >+ isa = PBXGroup; >+ children = ( >+ 41F263AB212680A800274F59 /* arch.h */, >+ 41F263A9212680A700274F59 /* asm_defines.h */, >+ 41F263A8212680A700274F59 /* BUILD.gn */, >+ 41F263A5212680A700274F59 /* fallthrough.h */, >+ 41F263A3212680A600274F59 /* file_wrapper.cc */, >+ 41F263AA212680A800274F59 /* file_wrapper.h */, >+ 41F263A4212680A600274F59 /* ignore_warnings.h */, >+ 41F263A6212680A700274F59 /* inline.h */, >+ 41F263A7212680A700274F59 /* unused.h */, >+ ); >+ name = system; >+ path = rtc_base/system; >+ sourceTree = "<group>"; >+ }; >+ 41F263B4212680E800274F59 /* third_party */ = { >+ isa = PBXGroup; >+ children = ( >+ 41F263B92126811400274F59 /* sigslot.cc */, >+ 41F263BA2126811400274F59 /* sigslot.h */, >+ 41F263B52126810B00274F59 /* base64.cc */, >+ 41F263B62126810C00274F59 /* base64.h */, >+ ); >+ name = third_party; >+ path = rtc_base/third_party; >+ sourceTree = "<group>"; >+ }; > 41F411BD1EF8DB8200343C26 /* vp8 */ = { > isa = PBXGroup; > children = ( >@@ -7539,7 +8682,9 @@ > 5C4B48AB1E42C1E3002651C8 /* fakevideorenderer.h */, > 4145E4BD1EF894F500FCF6E6 /* h264_profile_level_id.cc */, > 4145E4BC1EF894F100FCF6E6 /* h264_profile_level_id.h */, >+ 4102F6B121273330006AE8D7 /* mediachannel.cc */, > 5C4B48AD1E42C1E3002651C8 /* mediachannel.h */, >+ 4102F6B021273330006AE8D7 /* mediaconfig.h */, > 5C4B48AE1E42C1E3002651C8 /* mediaconstants.cc */, > 5C4B48AF1E42C1E3002651C8 /* mediaconstants.h */, > 5C4B48B01E42C1E3002651C8 /* mediaengine.cc */, >@@ -7570,6 +8715,8 @@ > 5C4B484B1E42C199002651C8 /* engine */ = { > isa = PBXGroup; > children = ( >+ 419241F321275C3200634FCF /* vp8_encoder_simulcast_proxy.cc */, >+ 419241F221275C3100634FCF /* vp8_encoder_simulcast_proxy.h */, > 41F411C61EF972F100343C26 /* adm_helpers.cc */, > 41F411C51EF972EC00343C26 /* adm_helpers.h */, > 5CD284C01E6A5FFC0094FDC8 /* apm_helpers.cc */, >@@ -7768,6 +8915,7 @@ > children = ( > 5C4B4B5A1E431C63002651C8 /* Classes */, > 413A24001FE198BE00373E99 /* Headers */, >+ 419241F7212765EE00634FCF /* Native */, > ); > name = Framework; > sourceTree = "<group>"; >@@ -7804,6 +8952,7 @@ > 5C4B4C221E431F81002651C8 /* common_audio */ = { > isa = PBXGroup; > children = ( >+ 41F2636B21267B2300274F59 /* third_party */, > 5CDD87431E43BAE900621E92 /* resampler */, > 5CDD86091E43B8A300621E92 /* signal_processing */, > 5CDD86C41E43BA1800621E92 /* vad */, >@@ -7947,6 +9096,7 @@ > 5C63F8CB1E416CC3002CA531 /* third_party */ = { > isa = PBXGroup; > children = ( >+ 419241912127583900634FCF /* rnnnoise */, > 413AD19E21265ACB003F7263 /* abseil-cpp */, > 5C63FC631E4184C0002CA531 /* boringssl */, > 5C63F8CC1E416CEB002CA531 /* jsoncpp */, >@@ -8001,19 +9151,26 @@ > 5C63F8E21E41732B002CA531 /* api */ = { > isa = PBXGroup; > children = ( >+ 41F9BF792051C7FD00ABF0B9 /* array_view.h */, > 5CD2853B1E6A61BE0094FDC8 /* audio_codecs */, >+ 415F1FCA212730F000064CBF /* audio_frame.cc */, >+ 415F1FCB212730F000064CBF /* audio_frame.h */, >+ 415F1FC9212730F000064CBF /* audio_mixer.h */, >+ 41F2637521267B7600274F59 /* audio_options.cc */, >+ 41F2637821267B7600274F59 /* audio_options.h */, >+ 41F2637921267B7700274F59 /* bitrate_constraints.h */, > 5CDD8C451E43C57900621E92 /* call */, >- 4145E4C01EF8962800FCF6E6 /* stats */, >- 5CD284601E6A57DD0094FDC8 /* video */, >- 412455581EF88AD900F11809 /* video_codecs */, >- 41F9BF792051C7FD00ABF0B9 /* array_view.h */, > 419C830E1FE2427F0040C30F /* candidate.cc */, > 41F9BF772051C7FD00ABF0B9 /* candidate.h */, > 41F9BF822051C80000ABF0B9 /* cryptoparams.h */, >+ 41F2637721267B7600274F59 /* datachannelinterface.cc */, > 5C63F8E71E41737B002CA531 /* datachannelinterface.h */, > 5C63F8EB1E41737B002CA531 /* dtmfsenderinterface.h */, >+ 415F1FC8212730F000064CBF /* echo_control.h */, >+ 41F2637621267B7600274F59 /* fec_controller.h */, > 41F9BF782051C7FD00ABF0B9 /* jsep.cc */, > 5C63F8EF1E41737B002CA531 /* jsep.h */, >+ 41F2637B21267B7700274F59 /* jsepicecandidate.cc */, > 5C63F8F11E41737B002CA531 /* jsepicecandidate.h */, > 5C63F8F31E41737B002CA531 /* jsepsessiondescription.h */, > 5C63F8F61E41737B002CA531 /* mediaconstraintsinterface.cc */, >@@ -8026,6 +9183,7 @@ > 5CD286311E6A67BF0094FDC8 /* mediatypes.h */, > 5C63F9021E41737B002CA531 /* notifier.h */, > 5C63F9081E41737B002CA531 /* peerconnectionfactoryproxy.h */, >+ 41F2637421267B7500274F59 /* peerconnectioninterface.cc */, > 5C63F9091E41737B002CA531 /* peerconnectioninterface.h */, > 5C63F90A1E41737B002CA531 /* peerconnectionproxy.h */, > 419C830F1FE2427F0040C30F /* proxy.cc */, >@@ -8038,14 +9196,21 @@ > 41F9BF7F2051C7FF00ABF0B9 /* rtp_headers.h */, > 419C83111FE2427F0040C30F /* rtpparameters.cc */, > 5C63F9151E41737B002CA531 /* rtpparameters.h */, >+ 41F2637A21267B7700274F59 /* rtpreceiverinterface.cc */, > 5C63F9181E41737B002CA531 /* rtpreceiverinterface.h */, > 5C63F91B1E41737B002CA531 /* rtpsenderinterface.h */, >+ 41F2637C21267B7700274F59 /* rtptransceiverinterface.cc */, > 41F9BF802051C7FF00ABF0B9 /* rtptransceiverinterface.h */, > 41F9BF842051C80000ABF0B9 /* setremotedescriptionobserverinterface.h */, >+ 4145E4C01EF8962800FCF6E6 /* stats */, > 5C63F9211E41737B002CA531 /* statstypes.cc */, > 5C63F9221E41737B002CA531 /* statstypes.h */, >+ 41E02CC62127359F00C27CD6 /* transport */, > 41F9BF832051C80000ABF0B9 /* turncustomizer.h */, > 5C63F9241E41737B002CA531 /* umametrics.h */, >+ 419241D421275A1800634FCF /* units */, >+ 5CD284601E6A57DD0094FDC8 /* video */, >+ 412455581EF88AD900F11809 /* video_codecs */, > 5C63F9281E41737B002CA531 /* videosourceproxy.h */, > ); > path = api; >@@ -8065,6 +9230,8 @@ > children = ( > 5C63F98A1E4174F6002CA531 /* asyncstuntcpsocket.cc */, > 5C63F98B1E4174F6002CA531 /* asyncstuntcpsocket.h */, >+ 4192414A2127376D00634FCF /* basicasyncresolverfactory.cc */, >+ 419241512127376E00634FCF /* basicasyncresolverfactory.h */, > 5C63F98C1E4174F6002CA531 /* basicpacketsocketfactory.cc */, > 5C63F98D1E4174F6002CA531 /* basicpacketsocketfactory.h */, > 5C63F98F1E4174F6002CA531 /* candidatepairinterface.h */, >@@ -8072,8 +9239,13 @@ > 419C83D41FE247F10040C30F /* dtlstransport.h */, > 419C83D51FE247F10040C30F /* dtlstransportinternal.cc */, > 419C83D61FE247F10040C30F /* dtlstransportinternal.h */, >+ 4192414C2127376E00634FCF /* fakecandidatepair.h */, >+ 419241492127376D00634FCF /* fakedtlstransport.h */, >+ 4192414F2127376E00634FCF /* fakeicetransport.h */, >+ 4192414E2127376E00634FCF /* fakepackettransport.h */, > 5C63F9951E4174F6002CA531 /* fakeportallocator.h */, > 419C83D71FE247F20040C30F /* icetransportinternal.cc */, >+ 419241502127376E00634FCF /* icetransportinternal.h */, > 5C63F9971E4174F6002CA531 /* p2pconstants.cc */, > 5C63F9981E4174F6002CA531 /* p2pconstants.h */, > 5C63F99C1E4174F6002CA531 /* p2ptransportchannel.cc */, >@@ -8093,6 +9265,8 @@ > 5C63F9A61E4174F6002CA531 /* portinterface.h */, > 5C63F9A81E4174F6002CA531 /* pseudotcp.cc */, > 5C63F9A91E4174F6002CA531 /* pseudotcp.h */, >+ 419241482127376D00634FCF /* regatheringcontroller.cc */, >+ 4192414B2127376D00634FCF /* regatheringcontroller.h */, > 5C63F9AB1E4174F6002CA531 /* relayport.cc */, > 5C63F9AC1E4174F6002CA531 /* relayport.h */, > 5C63F9AE1E4174F6002CA531 /* relayserver.cc */, >@@ -8122,6 +9296,7 @@ > 5C63F9DA1E4174F6002CA531 /* turnserver.h */, > 5C63F9DB1E4174F6002CA531 /* udpport.h */, > 419C83D31FE247F00040C30F /* udptransport.cc */, >+ 4192414D2127376E00634FCF /* udptransport.h */, > ); > path = base; > sourceTree = "<group>"; >@@ -8152,6 +9327,8 @@ > 5CD284711E6A5D080094FDC8 /* jsepsessiondescription.cc */, > 41F9BFDD2051DE1700ABF0B9 /* jseptransport.cc */, > 41F9BFDB2051DE1600ABF0B9 /* jseptransport.h */, >+ 4102F68721273205006AE8D7 /* jseptransportcontroller.cc */, >+ 4102F68521273204006AE8D7 /* jseptransportcontroller.h */, > 5CD284CA1E6A60570094FDC8 /* localaudiosource.cc */, > 5CD284CB1E6A60570094FDC8 /* localaudiosource.h */, > 5C63FA4B1E41761F002CA531 /* mediasession.cc */, >@@ -8165,6 +9342,7 @@ > 5CD284D41E6A60570094FDC8 /* peerconnection.h */, > 5CD2847D1E6A5E740094FDC8 /* peerconnectionfactory.cc */, > 5CD2847E1E6A5E740094FDC8 /* peerconnectionfactory.h */, >+ 4102F68C21273206006AE8D7 /* peerconnectioninternal.h */, > 41F9BFDC2051DE1700ABF0B9 /* peerconnectionwrapper.cc */, > 41F9BFDA2051DE1600ABF0B9 /* peerconnectionwrapper.h */, > 5CD284D91E6A60570094FDC8 /* remoteaudiosource.cc */, >@@ -8173,8 +9351,12 @@ > 5C63FA511E41761F002CA531 /* rtcpmuxfilter.h */, > 5CD284DB1E6A60570094FDC8 /* rtcstatscollector.cc */, > 5CD284DC1E6A60570094FDC8 /* rtcstatscollector.h */, >+ 4102F68921273205006AE8D7 /* rtcstatstraversal.cc */, >+ 4102F68421273204006AE8D7 /* rtcstatstraversal.h */, > 419C82C71FE20E2B0040C30F /* rtpmediautils.cc */, > 419C82C81FE20E2C0040C30F /* rtpmediautils.h */, >+ 4102F68A21273206006AE8D7 /* rtpparametersconversion.cc */, >+ 4102F68821273205006AE8D7 /* rtpparametersconversion.h */, > 5CD284DD1E6A60570094FDC8 /* rtpreceiver.cc */, > 5CD284DE1E6A60570094FDC8 /* rtpreceiver.h */, > 5CD284DF1E6A60570094FDC8 /* rtpsender.cc */, >@@ -8202,6 +9384,8 @@ > 5CD284E51E6A60570094FDC8 /* streamcollection.h */, > 5CD284E61E6A60570094FDC8 /* trackmediainfomap.cc */, > 5CD284E71E6A60570094FDC8 /* trackmediainfomap.h */, >+ 4102F68621273205006AE8D7 /* transportstats.cc */, >+ 4102F68B21273206006AE8D7 /* transportstats.h */, > 5CD284E81E6A60570094FDC8 /* videocapturertracksource.cc */, > 5CD284E91E6A60570094FDC8 /* videocapturertracksource.h */, > 5CD284EA1E6A60570094FDC8 /* videotrack.cc */, >@@ -8320,15 +9504,36 @@ > 5CD284601E6A57DD0094FDC8 /* video */ = { > isa = PBXGroup; > children = ( >+ 4102F6D221273414006AE8D7 /* color_space.cc */, >+ 4102F6D821273416006AE8D7 /* color_space.h */, >+ 41F263C72126818A00274F59 /* encoded_frame.cc */, >+ 41F263C22126818900274F59 /* encoded_frame.h */, >+ 4102F6D621273415006AE8D7 /* i010_buffer.cc */, >+ 41F263BF2126818900274F59 /* i010_buffer.h */, > 5CD284611E6A57F40094FDC8 /* i420_buffer.cc */, > 5CD284621E6A57F40094FDC8 /* i420_buffer.h */, >+ 4102F6D921273416006AE8D7 /* video_bitrate_allocation.cc */, >+ 41F263C42126818900274F59 /* video_bitrate_allocation.h */, >+ 4102F6DA21273416006AE8D7 /* video_bitrate_allocator_factory.h */, >+ 41F263C12126818900274F59 /* video_bitrate_allocator.h */, > 419C840D1FE249AA0040C30F /* video_content_type.cc */, > 419C840F1FE249AB0040C30F /* video_content_type.h */, >- 5CD284641E6A57F40094FDC8 /* video_frame.cc */, >- 5CD284651E6A57F40094FDC8 /* video_frame.h */, > 4124554A1EF8874300F11809 /* video_frame_buffer.cc */, > 5CD284631E6A57F40094FDC8 /* video_frame_buffer.h */, >+ 5CD284641E6A57F40094FDC8 /* video_frame.cc */, >+ 5CD284651E6A57F40094FDC8 /* video_frame.h */, > 5CD284661E6A57F40094FDC8 /* video_rotation.h */, >+ 4102F6D321273415006AE8D7 /* video_sink_interface.h */, >+ 41F263C62126818A00274F59 /* video_source_interface.cc */, >+ 41F263BE2126818800274F59 /* video_source_interface.h */, >+ 4102F6D121273414006AE8D7 /* video_stream_decoder_create.cc */, >+ 4102F6D421273415006AE8D7 /* video_stream_decoder_create.h */, >+ 41F263C52126818A00274F59 /* video_stream_decoder.h */, >+ 4102F6D521273415006AE8D7 /* video_stream_encoder_create.cc */, >+ 41F263C02126818900274F59 /* video_stream_encoder_create.h */, >+ 41F263C32126818900274F59 /* video_stream_encoder_interface.h */, >+ 41F263BD2126818800274F59 /* video_stream_encoder_observer.h */, >+ 4102F6D721273415006AE8D7 /* video_stream_encoder_settings.h */, > 419C840C1FE249A90040C30F /* video_timing.cc */, > 419C840E1FE249AA0040C30F /* video_timing.h */, > ); >@@ -8360,6 +9565,8 @@ > 419C835A1FE246770040C30F /* isac */, > 419C83EB1FE248770040C30F /* L16 */, > 419C82E71FE20E7D0040C30F /* opus */, >+ 4192419E2127588200634FCF /* audio_codec_pair_id.cc */, >+ 4192419D2127588200634FCF /* audio_codec_pair_id.h */, > 5CD2853D1E6A61D20094FDC8 /* audio_decoder.cc */, > 5CD2853E1E6A61D20094FDC8 /* audio_decoder.h */, > 5CD2853C1E6A61D20094FDC8 /* audio_decoder_factory.h */, >@@ -8506,6 +9713,7 @@ > 5CDD83681E4399E400621E92 /* modules */ = { > isa = PBXGroup; > children = ( >+ 41F2638621267F2500274F59 /* third_party */, > 5CDD84051E439AF200621E92 /* audio_coding */, > 5C119FEF1E4573CA004F0987 /* audio_device */, > 5CD284811E6A5F2B0094FDC8 /* audio_mixer */, >@@ -8524,6 +9732,14 @@ > 5CDD83691E4399F400621E92 /* video_coding */ = { > isa = PBXGroup; > children = ( >+ 41E02C83212734B800C27CD6 /* decoder_database.cc */, >+ 41E02C7F212734B800C27CD6 /* decoder_database.h */, >+ 41E02C80212734B800C27CD6 /* encoder_database.cc */, >+ 41E02C81212734B800C27CD6 /* encoder_database.h */, >+ 41E02C82212734B800C27CD6 /* fec_controller_default.cc */, >+ 41E02C84212734B900C27CD6 /* fec_controller_default.h */, >+ 41E02C86212734B900C27CD6 /* fec_rate_table.h */, >+ 41E02C85212734B900C27CD6 /* video_coding_defines.cc */, > 5CDD853D1E43B3F800621E92 /* codecs */, > 5CDD836A1E439A0D00621E92 /* utility */, > 5CDD83891E439A6F00621E92 /* codec_timer.cc */, >@@ -8593,6 +9809,10 @@ > 5CDD836A1E439A0D00621E92 /* utility */ = { > isa = PBXGroup; > children = ( >+ 419241EA21275AFA00634FCF /* simulcast_rate_allocator.cc */, >+ 419241EC21275AFA00634FCF /* simulcast_rate_allocator.h */, >+ 419241EB21275AFA00634FCF /* simulcast_utility.cc */, >+ 419241E921275AF900634FCF /* simulcast_utility.h */, > 5CD285371E6A61980094FDC8 /* default_video_bitrate_allocator.cc */, > 5CD285381E6A61980094FDC8 /* default_video_bitrate_allocator.h */, > 5CDD836B1E439A3500621E92 /* frame_dropper.cc */, >@@ -8645,6 +9865,7 @@ > 5CDD84881E43AEC900621E92 /* audio_processing */ = { > isa = PBXGroup; > children = ( >+ 41A08BD921272F3E001D5D7B /* agc2 */, > 5CDD86A91E43B9B900621E92 /* aec */, > 5CD2855F1E6A63050094FDC8 /* aec3 */, > 4130922A1EF8D73500757C55 /* aec_dump */, >@@ -8665,10 +9886,16 @@ > 5CDD848F1E43AF1300621E92 /* echo_cancellation_impl.h */, > 5CDD84901E43AF1300621E92 /* echo_control_mobile_impl.cc */, > 5CDD84911E43AF1300621E92 /* echo_control_mobile_impl.h */, >+ 415F1FBC2127304C00064CBF /* echo_cancellation_proxy.cc */, >+ 415F1FBB2127304C00064CBF /* echo_cancellation_proxy.h */, >+ 415F1FBA2127304B00064CBF /* echo_control_mobile_proxy.cc */, >+ 415F1FB92127304B00064CBF /* echo_control_mobile_proxy.h */, > 5CDD84921E43AF1300621E92 /* gain_control_for_experimental_agc.cc */, > 5CDD84931E43AF1300621E92 /* gain_control_for_experimental_agc.h */, > 5CDD84941E43AF1300621E92 /* gain_control_impl.cc */, > 5CDD84951E43AF1300621E92 /* gain_control_impl.h */, >+ 41A08BCE21272EE1001D5D7B /* gain_controller2.cc */, >+ 41A08BCD21272EE1001D5D7B /* gain_controller2.h */, > 5CDD84981E43AF1300621E92 /* level_estimator_impl.cc */, > 5CDD84991E43AF1300621E92 /* level_estimator_impl.h */, > 5CD2855B1E6A62ED0094FDC8 /* low_cut_filter.cc */, >@@ -8748,37 +9975,58 @@ > 5CDD851A1E43B38F00621E92 /* call */ = { > isa = PBXGroup; > children = ( >+ 4102F6B621273381006AE8D7 /* audio_receive_stream.cc */, > 5CD2849D1E6A5F9F0094FDC8 /* audio_receive_stream.h */, > 5CD2849E1E6A5F9F0094FDC8 /* audio_send_stream.cc */, > 5CD2849F1E6A5F9F0094FDC8 /* audio_send_stream.h */, >+ 415F1FC52127308E00064CBF /* audio_state.cc */, > 5CD284A01E6A5F9F0094FDC8 /* audio_state.h */, > 5CDD851C1E43B39C00621E92 /* bitrate_allocator.cc */, > 5CDD851D1E43B39C00621E92 /* bitrate_allocator.h */, >+ 415F1FD72127313F00064CBF /* call_config.cc */, >+ 415F1FDA2127313F00064CBF /* call_config.h */, > 5CDD85221E43B39C00621E92 /* call.cc */, > 5CD284A61E6A5F9F0094FDC8 /* call.h */, > 4145E4E11EF8CD7200FCF6E6 /* callfactory.cc */, > 4145E4E31EF8CD7C00FCF6E6 /* callfactory.h */, >- 5CDD85261E43B39C00621E92 /* flexfec_receive_stream.h */, >+ 4102F6B721273381006AE8D7 /* degraded_call.cc */, >+ 415F1FD22127313E00064CBF /* degraded_call.h */, >+ 41299B942127369000B3414B /* fake_network_pipe.cc */, >+ 41299B952127369100B3414B /* fake_network_pipe.h */, > 5CD284A81E6A5F9F0094FDC8 /* flexfec_receive_stream_impl.cc */, > 5CD284A91E6A5F9F0094FDC8 /* flexfec_receive_stream_impl.h */, >+ 4102F6B821273381006AE8D7 /* flexfec_receive_stream.cc */, >+ 5CDD85261E43B39C00621E92 /* flexfec_receive_stream.h */, >+ 415F1FD82127313F00064CBF /* packet_receiver.cc */, >+ 4102F6B521273381006AE8D7 /* packet_receiver.h */, >+ 415F1FD02127313D00064CBF /* receive_time_calculator.cc */, >+ 415F1FD52127313E00064CBF /* receive_time_calculator.h */, > 419C82A61FE20DC80040C30F /* rtcp_demuxer.cc */, > 419C829F1FE20DC60040C30F /* rtcp_demuxer.h */, > 419C82AA1FE20DCA0040C30F /* rtcp_packet_sink_interface.h */, >+ 415F1FD92127313F00064CBF /* rtp_bitrate_configurator.cc */, > 419C82A11FE20DC70040C30F /* rtp_config.cc */, > 419C82A51FE20DC80040C30F /* rtp_config.h */, > 413092001EF8D0A600757C55 /* rtp_demuxer.cc */, > 413091FF1EF8D0A400757C55 /* rtp_demuxer.h */, > 419C82A31FE20DC70040C30F /* rtp_packet_sink_interface.h */, >+ 4102F6AA212732B0006AE8D7 /* rtp_payload_params.cc */, >+ 415F1FD12127313E00064CBF /* rtp_payload_params.h */, > 419C82AC1FE20DCB0040C30F /* rtp_rtcp_demuxer_helper.cc */, > 419C82A21FE20DC70040C30F /* rtp_rtcp_demuxer_helper.h */, >+ 419C82AD1FE20DCB0040C30F /* rtp_stream_receiver_controller_interface.h */, > 419C82A91FE20DCA0040C30F /* rtp_stream_receiver_controller.cc */, > 419C82AE1FE20DCC0040C30F /* rtp_stream_receiver_controller.h */, >- 419C82AD1FE20DCB0040C30F /* rtp_stream_receiver_controller_interface.h */, >+ 413092171EF8D63900757C55 /* rtp_transport_controller_send_interface.h */, > 413092181EF8D63F00757C55 /* rtp_transport_controller_send.cc */, > 413092161EF8D63400757C55 /* rtp_transport_controller_send.h */, >- 413092171EF8D63900757C55 /* rtp_transport_controller_send_interface.h */, >+ 415F1FD62127313E00064CBF /* rtp_video_sender_interface.h */, >+ 415F1FD32127313E00064CBF /* rtp_video_sender.cc */, >+ 415F1FD42127313E00064CBF /* rtp_video_sender.h */, > 419C82A41FE20DC80040C30F /* rtx_receive_stream.cc */, > 419C82AF1FE20DCC0040C30F /* rtx_receive_stream.h */, >+ 419241CE2127597C00634FCF /* simulated_network.cc */, >+ 419241CF2127597C00634FCF /* simulated_network.h */, > 41F9BF9D2051C86900ABF0B9 /* ssrc_binding_observer.h */, > 5CD284AE1E6A5F9F0094FDC8 /* syncable.cc */, > 5CD284AF1E6A5F9F0094FDC8 /* syncable.h */, >@@ -8814,6 +10062,13 @@ > 5CDD85591E43B5AE00621E92 /* video */ = { > isa = PBXGroup; > children = ( >+ 4102F6BF212733B6006AE8D7 /* video_quality_observer.cc */, >+ 4102F6C5212733B6006AE8D7 /* video_quality_observer.h */, >+ 4102F6C2212733B6006AE8D7 /* video_send_stream_impl.cc */, >+ 4102F6BE212733B5006AE8D7 /* video_send_stream_impl.h */, >+ 4102F6C1212733B6006AE8D7 /* video_stream_decoder_impl.cc */, >+ 4102F6C4212733B6006AE8D7 /* video_stream_decoder_impl.h */, >+ 4102F6C0212733B6006AE8D7 /* video_stream_encoder.h */, > 5CDD855C1E43B5C000621E92 /* call_stats.cc */, > 5CDD855D1E43B5C000621E92 /* call_stats.h */, > 5CDD85601E43B5C000621E92 /* encoder_rtcp_feedback.cc */, >@@ -9095,6 +10350,9 @@ > 5CDD876F1E43BB8D00621E92 /* source */ = { > isa = PBXGroup; > children = ( >+ 41299B8E2127367A00B3414B /* isac_vad.c */, >+ 41299B8F2127367B00B3414B /* isac_vad.h */, >+ 41299B902127367B00B3414B /* pitch_filter.h */, > 5CDD87731E43BC0500621E92 /* arith_routines.c */, > 5CDD87741E43BC0500621E92 /* arith_routines.h */, > 5CDD87711E43BC0500621E92 /* arith_routines_hist.c */, >@@ -9177,11 +10435,14 @@ > 5CDD87FA1E43BE2600621E92 /* source */ = { > isa = PBXGroup; > children = ( >- 5CDD88EB1E43BF2500621E92 /* rtcp_packet */, >+ 419241D2212759A100634FCF /* fec_private_tables_random.cc */, >+ 419241AF2127590200634FCF /* rtp_generic_frame_descriptor_extension.cc */, > 5CDD87FC1E43BE3C00621E92 /* byte_io.h */, >+ 4102F6EB21273460006AE8D7 /* contributing_sources.cc */, > 5CDD87FE1E43BE3C00621E92 /* dtmf_queue.cc */, > 5CDD87FF1E43BE3C00621E92 /* dtmf_queue.h */, > 5CDD88001E43BE3C00621E92 /* fec_private_tables_bursty.h */, >+ 4192418F2127581000634FCF /* fec_private_tables_bursty.cc */, > 5CDD88011E43BE3C00621E92 /* fec_private_tables_random.h */, > 5CDD88021E43BE3C00621E92 /* fec_test_helper.cc */, > 5CDD88031E43BE3C00621E92 /* fec_test_helper.h */, >@@ -9189,10 +10450,10 @@ > 5CDD88061E43BE3C00621E92 /* flexfec_header_reader_writer.h */, > 5CDD880A1E43BE3C00621E92 /* flexfec_receiver.cc */, > 5CDD880C1E43BE3C00621E92 /* flexfec_sender.cc */, >- 5CDD880F1E43BE3C00621E92 /* forward_error_correction.cc */, >- 5CDD88101E43BE3C00621E92 /* forward_error_correction.h */, > 5CDD880D1E43BE3C00621E92 /* forward_error_correction_internal.cc */, > 5CDD880E1E43BE3C00621E92 /* forward_error_correction_internal.h */, >+ 5CDD880F1E43BE3C00621E92 /* forward_error_correction.cc */, >+ 5CDD88101E43BE3C00621E92 /* forward_error_correction.h */, > 5CDD88151E43BE3C00621E92 /* packet_loss_stats.cc */, > 5CDD88161E43BE3C00621E92 /* packet_loss_stats.h */, > 5CDD88181E43BE3C00621E92 /* playout_delay_oracle.cc */, >@@ -9202,20 +10463,19 @@ > 5CDD881E1E43BE3C00621E92 /* remote_ntp_time_estimator.cc */, > 5CD285F81E6A64520094FDC8 /* rtcp_nack_stats.cc */, > 5CD285F91E6A64520094FDC8 /* rtcp_nack_stats.h */, >+ 5CDD88EB1E43BF2500621E92 /* rtcp_packet */, > 5CDD88211E43BE3C00621E92 /* rtcp_packet.cc */, > 5CDD88221E43BE3C00621E92 /* rtcp_packet.h */, > 5CDD88241E43BE3C00621E92 /* rtcp_receiver.cc */, > 5CDD88251E43BE3C00621E92 /* rtcp_receiver.h */, > 5CDD88271E43BE3C00621E92 /* rtcp_sender.cc */, > 5CDD88281E43BE3C00621E92 /* rtcp_sender.h */, >- 419C82F61FE20EFB0040C30F /* rtcp_transceiver.cc */, >- 419C82FA1FE20EFD0040C30F /* rtcp_transceiver.h */, > 419C82F91FE20EFD0040C30F /* rtcp_transceiver_config.cc */, > 419C82F81FE20EFC0040C30F /* rtcp_transceiver_config.h */, > 419C82F71FE20EFC0040C30F /* rtcp_transceiver_impl.cc */, > 419C82FC1FE20EFE0040C30F /* rtcp_transceiver_impl.h */, >- 5CDD883A1E43BE3C00621E92 /* rtp_format.cc */, >- 5CDD883B1E43BE3C00621E92 /* rtp_format.h */, >+ 419C82F61FE20EFB0040C30F /* rtcp_transceiver.cc */, >+ 419C82FA1FE20EFD0040C30F /* rtcp_transceiver.h */, > 5CDD882E1E43BE3C00621E92 /* rtp_format_h264.cc */, > 5CDD882F1E43BE3C00621E92 /* rtp_format_h264.h */, > 5CDD88301E43BE3C00621E92 /* rtp_format_video_generic.cc */, >@@ -9224,17 +10484,23 @@ > 5CDD88361E43BE3C00621E92 /* rtp_format_vp8.h */, > 5CDD88381E43BE3C00621E92 /* rtp_format_vp9.cc */, > 5CDD88391E43BE3C00621E92 /* rtp_format_vp9.h */, >+ 5CDD883A1E43BE3C00621E92 /* rtp_format.cc */, >+ 5CDD883B1E43BE3C00621E92 /* rtp_format.h */, >+ 4102F6E82127345F006AE8D7 /* rtp_generic_frame_descriptor_extension.h */, >+ 4102F6E52127345E006AE8D7 /* rtp_generic_frame_descriptor.cc */, >+ 4102F6E62127345F006AE8D7 /* rtp_generic_frame_descriptor.h */, > 4145E4DB1EF8CCEE00FCF6E6 /* rtp_header_extension_map.cc */, > 5CDD883F1E43BE3C00621E92 /* rtp_header_extensions.cc */, > 5CDD88401E43BE3C00621E92 /* rtp_header_extensions.h */, > 5CDD88411E43BE3C00621E92 /* rtp_header_parser.cc */, >- 5CDD88481E43BE3C00621E92 /* rtp_packet.cc */, >- 5CDD88491E43BE3C00621E92 /* rtp_packet.h */, > 5CDD88431E43BE3C00621E92 /* rtp_packet_history.cc */, > 5CDD88441E43BE3C00621E92 /* rtp_packet_history.h */, > 419C82FE1FE20F010040C30F /* rtp_packet_received.cc */, > 5CDD88451E43BE3C00621E92 /* rtp_packet_received.h */, >+ 4102F6E92127345F006AE8D7 /* rtp_packet_to_send.cc */, > 5CDD88461E43BE3C00621E92 /* rtp_packet_to_send.h */, >+ 5CDD88481E43BE3C00621E92 /* rtp_packet.cc */, >+ 5CDD88491E43BE3C00621E92 /* rtp_packet.h */, > 5CDD884B1E43BE3C00621E92 /* rtp_payload_registry.cc */, > 5CDD884C1E43BE3C00621E92 /* rtp_receiver_audio.cc */, > 5CDD884D1E43BE3C00621E92 /* rtp_receiver_audio.h */, >@@ -9247,14 +10513,16 @@ > 5CDD88541E43BE3C00621E92 /* rtp_rtcp_config.h */, > 5CDD88561E43BE3C00621E92 /* rtp_rtcp_impl.cc */, > 5CDD88571E43BE3C00621E92 /* rtp_rtcp_impl.h */, >- 5CDD885D1E43BE3C00621E92 /* rtp_sender.cc */, >- 5CDD885E1E43BE3C00621E92 /* rtp_sender.h */, > 5CDD88581E43BE3C00621E92 /* rtp_sender_audio.cc */, > 5CDD88591E43BE3C00621E92 /* rtp_sender_audio.h */, > 5CDD885B1E43BE3C00621E92 /* rtp_sender_video.cc */, > 5CDD885C1E43BE3C00621E92 /* rtp_sender_video.h */, >+ 5CDD885D1E43BE3C00621E92 /* rtp_sender.cc */, >+ 5CDD885E1E43BE3C00621E92 /* rtp_sender.h */, > 5CDD885F1E43BE3C00621E92 /* rtp_utility.cc */, > 5CDD88601E43BE3C00621E92 /* rtp_utility.h */, >+ 4102F6E72127345F006AE8D7 /* rtp_video_header.cc */, >+ 4102F6EA2127345F006AE8D7 /* rtp_video_header.h */, > 5CDD88641E43BE3C00621E92 /* time_util.cc */, > 5CDD88651E43BE3C00621E92 /* time_util.h */, > 5CDD88661E43BE3C00621E92 /* tmmbr_help.cc */, >@@ -9330,6 +10598,8 @@ > 5CDD89881E43BF8A00621E92 /* neteq */ = { > isa = PBXGroup; > children = ( >+ 4102F6AC212732E6006AE8D7 /* expand_uma_logger.cc */, >+ 4102F6AD212732E7006AE8D7 /* expand_uma_logger.h */, > 5CDD8A5F1E43C00000621E92 /* tools */, > 5CDD89891E43BFB300621E92 /* accelerate.cc */, > 5CDD898A1E43BFB300621E92 /* accelerate.h */, >@@ -9440,7 +10710,8 @@ > 5CDD8ABB1E43C22200621E92 /* audio */ = { > isa = PBXGroup; > children = ( >- 5CD2854A1E6A62090094FDC8 /* utility */, >+ 4102F69A21273261006AE8D7 /* audio_level.cc */, >+ 4102F69821273260006AE8D7 /* audio_level.h */, > 5CDD8ABD1E43C23900621E92 /* audio_receive_stream.cc */, > 5CDD8ABE1E43C23900621E92 /* audio_receive_stream.h */, > 5CDD8AC01E43C23900621E92 /* audio_send_stream.cc */, >@@ -9449,11 +10720,20 @@ > 5CDD8AC41E43C23900621E92 /* audio_state.h */, > 41F9BF992051C84B00ABF0B9 /* audio_transport_impl.cc */, > 41F9BF9A2051C84B00ABF0B9 /* audio_transport_impl.h */, >+ 4102F69C21273261006AE8D7 /* channel_proxy.cc */, >+ 4102F69921273261006AE8D7 /* channel_proxy.h */, >+ 4102F69E21273262006AE8D7 /* channel.cc */, >+ 4102F69B21273261006AE8D7 /* channel.h */, > 5CDD8AC61E43C23900621E92 /* conversion.h */, > 419C83B11FE2472D0040C30F /* null_audio_poller.cc */, > 419C83B21FE2472E0040C30F /* null_audio_poller.h */, >+ 4102F69721273260006AE8D7 /* remix_resample.cc */, >+ 4102F69D21273261006AE8D7 /* remix_resample.h */, > 419C83331FE245E90040C30F /* time_interval.cc */, > 419C83321FE245E90040C30F /* time_interval.h */, >+ 4102F69F21273262006AE8D7 /* transport_feedback_packet_loss_tracker.cc */, >+ 4102F69621273260006AE8D7 /* transport_feedback_packet_loss_tracker.h */, >+ 5CD2854A1E6A62090094FDC8 /* utility */, > ); > path = audio; > sourceTree = "<group>"; >@@ -9619,6 +10899,9 @@ > 5CDD8C451E43C57900621E92 /* call */ = { > isa = PBXGroup; > children = ( >+ 41924172212738C200634FCF /* callfactoryinterface.h */, >+ 41924174212738C200634FCF /* transport.cc */, >+ 41924173212738C200634FCF /* transport.h */, > 5CDD8C491E43C58E00621E92 /* audio_sink.h */, > ); > path = call; >@@ -9963,6 +11246,8 @@ > 5CDD8F951E43CCA200621E92 /* pacing */ = { > isa = PBXGroup; > children = ( >+ 41A08BD221272EFA001D5D7B /* round_robin_packet_queue.cc */, >+ 41A08BD121272EFA001D5D7B /* round_robin_packet_queue.h */, > 5CDD8F981E43CCBE00621E92 /* bitrate_prober.cc */, > 5CDD8F991E43CCBE00621E92 /* bitrate_prober.h */, > 419C82991FE20CA10040C30F /* interval_budget.cc */, >@@ -9972,6 +11257,8 @@ > 419C83281FE245CB0040C30F /* pacer.h */, > 419C83261FE245CB0040C30F /* packet_queue.cc */, > 419C832A1FE245CC0040C30F /* packet_queue.h */, >+ 419241842127499300634FCF /* packet_queue_interface.cc */, >+ 419241832127499300634FCF /* packet_queue_interface.h */, > 5CDD8F9C1E43CCBE00621E92 /* packet_router.cc */, > 5CDD8F9D1E43CCBE00621E92 /* packet_router.h */, > ); >@@ -9981,6 +11268,11 @@ > 5CDD8FA61E43CCE100621E92 /* congestion_controller */ = { > isa = PBXGroup; > children = ( >+ 419241B12127591C00634FCF /* bbr */, >+ 41E02CD52127362300C27CD6 /* rtp */, >+ 41E02C8F212734E800C27CD6 /* goog_cc */, >+ 41A08BD621272F1C001D5D7B /* congestion_window_pushback_controller.cc */, >+ 41A08BD521272F1C001D5D7B /* congestion_window_pushback_controller.h */, > 413091FD1EF8D06D00757C55 /* receive_side_congestion_controller.cc */, > 413092141EF8D5ED00757C55 /* send_side_congestion_controller.cc */, > 5CDD8FB01E43CD0700621E92 /* transport_feedback_adapter.cc */, >@@ -10044,6 +11336,13 @@ > 5CDD90341E43CF3700621E92 /* rtc_event_log */ = { > isa = PBXGroup; > children = ( >+ 41924178212738FB00634FCF /* rtc_event_log_impl.cc */, >+ 41A08BC221269576001D5D7B /* icelogger.cc */, >+ 41A08BC121269576001D5D7B /* icelogger.h */, >+ 41A08BB921269552001D5D7B /* rtc_event_ice_candidate_pair_config.cc */, >+ 41A08BBB21269552001D5D7B /* rtc_event_ice_candidate_pair_config.h */, >+ 41A08BBC21269553001D5D7B /* rtc_event_ice_candidate_pair.cc */, >+ 41A08BBA21269552001D5D7B /* rtc_event_ice_candidate_pair.h */, > 419C83211FE244FE0040C30F /* events */, > 419C84201FE24B960040C30F /* output */, > 5CDD903E1E43CF6100621E92 /* rtc_event_log.cc */, >@@ -10415,9 +11714,11 @@ > files = ( > 5CDD8B6D1E43C2B500621E92 /* abs_quant.h in Headers */, > 5CDD8B6B1E43C2B500621E92 /* abs_quant_loop.h in Headers */, >+ 41F2636A21267ADF00274F59 /* video_encoder_software_fallback_wrapper.h in Headers */, > 5CDD89F91E43BFB300621E92 /* accelerate.h in Headers */, > 5CDD85041E43B1EA00621E92 /* acm_codec_database.h in Headers */, > 5CDD850A1E43B1EA00621E92 /* acm_receiver.h in Headers */, >+ 41E02CD0212735B700C27CD6 /* bitrate_settings.h in Headers */, > 5CDD850C1E43B1EA00621E92 /* acm_resampler.h in Headers */, > 5C4B48D81E42C1E3002651C8 /* adaptedvideotracksource.h in Headers */, > 5CD285A51E6A63430094FDC8 /* adaptive_fir_filter.h in Headers */, >@@ -10440,20 +11741,28 @@ > 5CDD87021E43BA7500621E92 /* agc.h in Headers */, > 5CDD87001E43BA7500621E92 /* agc_manager_direct.h in Headers */, > 5CDD8FD21E43CD6600621E92 /* aimd_rate_control.h in Headers */, >+ 41D6B45421273159008F9353 /* call_config.h in Headers */, >+ 4192417E2127392300634FCF /* timestamp_extrapolator.h in Headers */, > 5C0885281E4A99D200403995 /* alloc.h in Headers */, > 41F9BFCC2051DDA200ABF0B9 /* alr_experiment.h in Headers */, > 5CDD86ED1E43BA6D00621E92 /* analog_agc.h in Headers */, > 5CDD87E61E43BDA100621E92 /* apm_data_dumper.h in Headers */, > 5CD284C31E6A5FFC0094FDC8 /* apm_helpers.h in Headers */, > 5CDD893C1E43BF3A00621E92 /* app.h in Headers */, >+ 4102F6E221273416006AE8D7 /* color_space.h in Headers */, > 5CDD87AA1E43BC0500621E92 /* arith_routines.h in Headers */, > 41433D011F79B33400387B4D /* arith_routins.h in Headers */, > 41F9BF872051C80100ABF0B9 /* array_view.h in Headers */, > 413A23E41FE18E0800373E99 /* arraysize.h in Headers */, >+ 415F1FBF2127304C00064CBF /* echo_cancellation_proxy.h in Headers */, > 5C63F8D91E416D53002CA531 /* assertions.h in Headers */, >+ 41E02C8E212734B900C27CD6 /* fec_rate_table.h in Headers */, >+ 41E02CAA2127352D00C27CD6 /* goog_cc_network_control.h in Headers */, >+ 41DDB261212679A300296D47 /* opensslutility.h in Headers */, > 413A22A81FE18E0600373E99 /* asyncinvoker-inl.h in Headers */, > 413A22B01FE18E0700373E99 /* asyncinvoker.h in Headers */, > 413A23A81FE18E0800373E99 /* asyncpacketsocket.h in Headers */, >+ 41A08BAD212681C8001D5D7B /* i010_buffer.h in Headers */, > 413A22AB1FE18E0600373E99 /* asyncresolverinterface.h in Headers */, > 413A235E1FE18E0700373E99 /* asyncsocket.h in Headers */, > 5C63F9E11E4174F6002CA531 /* asyncstuntcpsocket.h in Headers */, >@@ -10466,7 +11775,10 @@ > 5CDD84161E439B2900621E92 /* audio_decoder.h in Headers */, > 5CD285451E6A61D20094FDC8 /* audio_decoder.h in Headers */, > 5CD285431E6A61D20094FDC8 /* audio_decoder_factory.h in Headers */, >+ 41DDB25A2126792800296D47 /* zero_memory.h in Headers */, > 41F9BF982051C82100ABF0B9 /* audio_decoder_factory_template.h in Headers */, >+ 41A08BB2212681C8001D5D7B /* video_stream_decoder.h in Headers */, >+ 419241852127499300634FCF /* packet_queue_interface.h in Headers */, > 419C83E81FE248350040C30F /* audio_decoder_g711.h in Headers */, > 4140B8321E4E3396007409E6 /* audio_decoder_g722.h in Headers */, > 413AD1A321265B10003F7263 /* algorithm.h in Headers */, >@@ -10479,6 +11791,7 @@ > 5CDD8C0A1E43C34600621E92 /* audio_decoder_isac_t.h in Headers */, > 5CDD8C091E43C34600621E92 /* audio_decoder_isac_t_impl.h in Headers */, > 419C83F01FE2488D0040C30F /* audio_decoder_L16.h in Headers */, >+ 416D3BE5212731C200775F09 /* gain_curve_applier.h in Headers */, > 5CDD8C611E43C60900621E92 /* audio_decoder_opus.h in Headers */, > 419C82F21FE20EB50040C30F /* audio_decoder_opus.h in Headers */, > 4140B8231E4E3383007409E6 /* audio_decoder_pcm.h in Headers */, >@@ -10487,8 +11800,11 @@ > 5C119FFC1E457400004F0987 /* audio_device_buffer.h in Headers */, > 5C119FFD1E457400004F0987 /* audio_device_config.h in Headers */, > 4145F6141FE1E16F00EB9CAF /* audio_device_data_observer.h in Headers */, >+ 41F2638221267B7700274F59 /* bitrate_constraints.h in Headers */, >+ 4192419B2127586500634FCF /* kiss_fft.h in Headers */, > 4145F6121FE1E16F00EB9CAF /* audio_device_defines.h in Headers */, > 5C11A01E1E457578004F0987 /* audio_device_dummy.h in Headers */, >+ 41D6B45521273159008F9353 /* degraded_call.h in Headers */, > 5C119FFF1E457400004F0987 /* audio_device_generic.h in Headers */, > 5CFD537C1E4BA4F500482908 /* audio_device_ios.h in Headers */, > 5C11A00C1E457448004F0987 /* audio_device_mac.h in Headers */, >@@ -10503,6 +11819,7 @@ > 419C83401FE246230040C30F /* audio_encoder_g722.h in Headers */, > 419C833C1FE246230040C30F /* audio_encoder_g722_config.h in Headers */, > 5CDD8B711E43C2B500621E92 /* audio_encoder_ilbc.h in Headers */, >+ 41E02CC12127356A00C27CD6 /* data_rate_limiter.h in Headers */, > 419C84C01FE319440040C30F /* audio_encoder_ilbc.h in Headers */, > 419C84BC1FE319440040C30F /* audio_encoder_ilbc_config.h in Headers */, > 419C83661FE246CA0040C30F /* audio_encoder_isac.h in Headers */, >@@ -10517,6 +11834,7 @@ > 4140B8211E4E3383007409E6 /* audio_encoder_pcm.h in Headers */, > 5CDD8FFF1E43CE3A00621E92 /* audio_encoder_pcm16b.h in Headers */, > 5CD285471E6A61D20094FDC8 /* audio_format.h in Headers */, >+ 415F1FCD212730F000064CBF /* audio_mixer.h in Headers */, > 5CDD841A1E439B2900621E92 /* audio_format_conversion.h in Headers */, > 5CD284931E6A5F410094FDC8 /* audio_frame_manipulator.h in Headers */, > 5CD2854E1E6A62130094FDC8 /* audio_frame_operations.h in Headers */, >@@ -10526,27 +11844,35 @@ > 5CDD8A021E43BFB300621E92 /* audio_multi_vector.h in Headers */, > 5CDD8F7A1E43CBE000621E92 /* audio_network_adaptor_impl.h in Headers */, > 5CDD8FEA1E43CDCA00621E92 /* audio_processing.h in Headers */, >+ 419241C32127593F00634FCF /* bbr_network_controller.h in Headers */, > 5CDD84AC1E43AF1300621E92 /* audio_processing_impl.h in Headers */, > 419C829E1FE20D1C0040C30F /* audio_processing_statistics.h in Headers */, > 5CDD8ACD1E43C23900621E92 /* audio_receive_stream.h in Headers */, >+ 41299B972127369100B3414B /* fake_network_pipe.h in Headers */, > 5CD284B01E6A5F9F0094FDC8 /* audio_receive_stream.h in Headers */, >+ 4102F6CF212733B7006AE8D7 /* video_quality_observer.h in Headers */, > 5C4B4C5D1E431F9C002651C8 /* audio_ring_buffer.h in Headers */, > 5CDD8AD01E43C23900621E92 /* audio_send_stream.h in Headers */, > 5CD284B21E6A5F9F0094FDC8 /* audio_send_stream.h in Headers */, > 5CFD53801E4BA4F500482908 /* audio_session_observer.h in Headers */, > 5CDD8C4F1E43C58E00621E92 /* audio_sink.h in Headers */, >+ 41D6B45D21273159008F9353 /* rtp_video_sender.h in Headers */, > 5CDD8A921E43C00F00621E92 /* audio_sink.h in Headers */, > 5CDD8AD31E43C23900621E92 /* audio_state.h in Headers */, > 5CD284B31E6A5F9F0094FDC8 /* audio_state.h in Headers */, >+ 419241472127372800634FCF /* spectral_features_internal.h in Headers */, > 41F9BF9C2051C84C00ABF0B9 /* audio_transport_impl.h in Headers */, > 41F9BFA02051C88500ABF0B9 /* audio_util.h in Headers */, > 5CDD8A051E43BFB300621E92 /* audio_vector.h in Headers */, > 5C4B48D91E42C1E3002651C8 /* audiosource.h in Headers */, >+ 415F1FCC212730F000064CBF /* echo_control.h in Headers */, > 5CD284F11E6A60570094FDC8 /* audiotrack.h in Headers */, >+ 41F2638E21267F4900274F59 /* g711.h in Headers */, > 5CDD8B731E43C2B500621E92 /* augmented_cb_corr.h in Headers */, > 5C0885291E4A99D200403995 /* auth.h in Headers */, > 5C63F8DA1E416D53002CA531 /* autolink.h in Headers */, > 41DDB24E21265BD700296D47 /* inlined_vector.h in Headers */, >+ 41F2639921267F5E00274F59 /* pa_ringbuffer.h in Headers */, > 41DDB25121265BE900296D47 /* optional.h in Headers */, > 5CDD8A081E43BFB300621E92 /* background_noise.h in Headers */, > 5CDD87AF1E43BC0500621E92 /* bandwidth_estimator.h in Headers */, >@@ -10554,6 +11880,7 @@ > 5CDD8C0D1E43C34600621E92 /* bandwidth_info.h in Headers */, > 5C63F9E31E4174F6002CA531 /* basicpacketsocketfactory.h in Headers */, > 5C4B4D0A1E4322F6002651C8 /* basicportallocator.h in Headers */, >+ 41F2639821267F5E00274F59 /* pa_memorybarrier.h in Headers */, > 413A235C1FE18E0700373E99 /* bind.h in Headers */, > 413A23771FE18E0700373E99 /* bitbuffer.h in Headers */, > 41109AB01E5FA19200C0955A /* bitrate_adjuster.h in Headers */, >@@ -10584,6 +11911,7 @@ > 4145E4E61EF8CD7D00FCF6E6 /* callfactory.h in Headers */, > 41F9BF852051C80100ABF0B9 /* candidate.h in Headers */, > 5C63F9E51E4174F6002CA531 /* candidatepairinterface.h in Headers */, >+ 4102F6A021273262006AE8D7 /* transport_feedback_packet_loss_tracker.h in Headers */, > 5CD285B31E6A63430094FDC8 /* cascaded_biquad_filter.h in Headers */, > 5CDD8B771E43C2B500621E92 /* cb_construct.h in Headers */, > 5CDD8B7D1E43C2B500621E92 /* cb_mem_energy.h in Headers */, >@@ -10597,40 +11925,54 @@ > 5CDD8B851E43C2B500621E92 /* chebyshev.h in Headers */, > 413A234F1FE18E0700373E99 /* checks.h in Headers */, > 5C08852A1E4A99D200403995 /* cipher.h in Headers */, >+ 41924175212738C200634FCF /* callfactoryinterface.h in Headers */, > 5CDD86A21E43B99400621E92 /* circular_buffer.h in Headers */, >+ 41F2639321267F5300274F59 /* g722_enc_dec.h in Headers */, > 5C4B48DC1E42C1E3002651C8 /* codec.h in Headers */, >+ 41E02C7E2127347400C27CD6 /* rtp_video_header.h in Headers */, > 5CDD87B01E43BC0500621E92 /* codec.h in Headers */, > 41433CF31F79B33400387B4D /* codec.h in Headers */, > 5CDD85161E43B1EA00621E92 /* codec_manager.h in Headers */, > 5CDD83C91E439A6F00621E92 /* codec_timer.h in Headers */, >+ 4102F6CA212733B7006AE8D7 /* video_stream_encoder.h in Headers */, >+ 4102F68D21273206006AE8D7 /* rtcstatstraversal.h in Headers */, > 5CDD8A0E1E43BFB300621E92 /* comfort_noise.h in Headers */, >+ 41299B922127367B00B3414B /* isac_vad.h in Headers */, > 5CD285B51E6A63430094FDC8 /* comfort_noise_generator.h in Headers */, > 5CDD87271E43BABE00621E92 /* common.h in Headers */, > 5CDD84AD1E43AF1300621E92 /* common.h in Headers */, > 5CDD8C861E43C66000621E92 /* common.h in Headers */, > 5CDD89421E43BF3A00621E92 /* common_header.h in Headers */, > 5C6CDD4C1E413598009754E3 /* common_types.h in Headers */, >+ 416D3BE2212731C200775F09 /* down_sampler.h in Headers */, > 5CDD8B871E43C2B500621E92 /* comp_corr.h in Headers */, >+ 41F2636121267ADF00274F59 /* builtin_video_encoder_factory.h in Headers */, > 413A23851FE18E0700373E99 /* compile_assert_c.h in Headers */, > 5CDD86461E43B8B500621E92 /* complex_fft_tables.h in Headers */, > 5CDD89451E43BF3A00621E92 /* compound_packet.h in Headers */, > 5CDD8FEC1E43CDCA00621E92 /* config.h in Headers */, > 5C63F8DB1E416D53002CA531 /* config.h in Headers */, >+ 4192419C2127586500634FCF /* rnn_activations.h in Headers */, > 5CDD8A941E43C00F00621E92 /* constant_pcm_packet_source.h in Headers */, > 5C4B48781E42C1BA002651C8 /* constants.h in Headers */, > 5CDD8B8A1E43C2B500621E92 /* constants.h in Headers */, > 413A236C1FE18E0700373E99 /* constructormagic.h in Headers */, > 5CDD8F861E43CBE000621E92 /* controller.h in Headers */, >+ 415F1FB621272FBA00064CBF /* vad_with_level.h in Headers */, > 5CDD8F841E43CBE000621E92 /* controller_manager.h in Headers */, > 5CDD8AD41E43C23900621E92 /* conversion.h in Headers */, > 41F9BFB42051C93600ABF0B9 /* convert_legacy_video_factory.h in Headers */, > 413A23AC1FE18E0800373E99 /* copyonwritebuffer.h in Headers */, >+ 41E02CA42127352D00C27CD6 /* probe_controller.h in Headers */, > 413A23E21FE18E0800373E99 /* cpu_time.h in Headers */, > 5CDD87B21E43BC0500621E92 /* crc.h in Headers */, >+ 4102F6DD21273416006AE8D7 /* video_sink_interface.h in Headers */, > 413A22AC1FE18E0600373E99 /* crc32.h in Headers */, > 5CDD8B8C1E43C2B500621E92 /* create_augmented_vec.h in Headers */, >+ 419241CD2127593F00634FCF /* data_transfer_tracker.h in Headers */, > 413A23691FE18E0700373E99 /* criticalsection.h in Headers */, > 5CDD8A101E43BFB300621E92 /* cross_correlation.h in Headers */, >+ 419241A9212758D300634FCF /* symmetric_matrix_buffer.h in Headers */, > 5C08852B1E4A99D200403995 /* crypto_kernel.h in Headers */, > 5C08852C1E4A99D200403995 /* crypto_types.h in Headers */, > 5C4B48DD1E42C1E3002651C8 /* cryptoparams.h in Headers */, >@@ -10644,7 +11986,9 @@ > 419C83F81FE248F10040C30F /* decimator.h in Headers */, > 5CDD8A171E43BFB300621E92 /* decision_logic.h in Headers */, > 5CDD8B901E43C2B500621E92 /* decode.h in Headers */, >+ 41A08BB821268A7D001D5D7B /* memory.h in Headers */, > 5CDD8B8E1E43C2B500621E92 /* decode_residual.h in Headers */, >+ 4102F69421273206006AE8D7 /* transportstats.h in Headers */, > 419C849D1FE2FEC00040C30F /* decoder.h in Headers */, > 5CDD8A1A1E43BFB300621E92 /* decoder_database.h in Headers */, > 5CDD8B921E43C2B500621E92 /* decoder_interpolate_lsf.h in Headers */, >@@ -10652,6 +11996,7 @@ > 5CD284981E6A5F410094FDC8 /* default_output_rate_calculator.h in Headers */, > 419C843B1FE24E800040C30F /* default_temporal_layers.h in Headers */, > 5CD2853A1E6A61980094FDC8 /* default_video_bitrate_allocator.h in Headers */, >+ 41F2637F21267B7700274F59 /* fec_controller.h in Headers */, > 5CDD85FB1E43B84E00621E92 /* defines.h in Headers */, > 5CDD8A1B1E43BFB300621E92 /* defines.h in Headers */, > 5CDD8B931E43C2B500621E92 /* defines.h in Headers */, >@@ -10662,10 +12007,12 @@ > 5CDD8A211E43BFB300621E92 /* delay_peak_detector.h in Headers */, > 413A234E1FE18E0700373E99 /* deprecation.h in Headers */, > 5C4B48DE1E42C1E3002651C8 /* device.h in Headers */, >+ 4192418B212749C800634FCF /* send_time_history.h in Headers */, > 5CDD86EF1E43BA6D00621E92 /* digital_agc.h in Headers */, > 5CDD89481E43BF3A00621E92 /* dlrr.h in Headers */, > 5CDD8B951E43C2B500621E92 /* do_plc.h in Headers */, > 412455441EF87C0F00F11809 /* dot_product_with_scale.h in Headers */, >+ 41F2636621267ADF00274F59 /* video_decoder_software_fallback_wrapper.h in Headers */, > 4145E4D51EF8CC7600FCF6E6 /* downsampled_render_buffer.h in Headers */, > 413A23481FE18E0700373E99 /* dscp.h in Headers */, > 5CDD8A241E43BFB300621E92 /* dsp_helper.h in Headers */, >@@ -10683,8 +12030,10 @@ > 5CDD84AF1E43AF1300621E92 /* echo_cancellation_impl.h in Headers */, > 5CD285B91E6A63430094FDC8 /* echo_canceller3.h in Headers */, > 5CDD85EB1E43B81000621E92 /* echo_control_mobile.h in Headers */, >+ 41E02CCF212735B700C27CD6 /* network_control.h in Headers */, > 5CDD84B11E43AF1300621E92 /* echo_control_mobile_impl.h in Headers */, > 5CD285BB1E6A63430094FDC8 /* echo_path_delay_estimator.h in Headers */, >+ 419241632127385B00634FCF /* rw_lock_wrapper.h in Headers */, > 5CD285BD1E6A63430094FDC8 /* echo_path_variability.h in Headers */, > 5CD285C11E6A63430094FDC8 /* echo_remover.h in Headers */, > 5CD285BF1E6A63430094FDC8 /* echo_remover_metrics.h in Headers */, >@@ -10700,6 +12049,7 @@ > 5CDD8B991E43C2B500621E92 /* energy_inverse.h in Headers */, > 5CDD8B9B1E43C2B500621E92 /* enh_upsample.h in Headers */, > 5CDD8B9F1E43C2B500621E92 /* enhancer.h in Headers */, >+ 4102F6C8212733B7006AE8D7 /* video_send_stream_impl.h in Headers */, > 5CDD8B9D1E43C2B500621E92 /* enhancer_interface.h in Headers */, > 41433D131F79B33400387B4D /* entropy_coding.h in Headers */, > 5CDD87B91E43BC0500621E92 /* entropy_coding.h in Headers */, >@@ -10708,6 +12058,7 @@ > 5C08852E1E4A99D200403995 /* err.h in Headers */, > 413A23A51FE18E0800373E99 /* event.h in Headers */, > 5CD286151E6A66130094FDC8 /* event_log_writer.h in Headers */, >+ 419241C22127593F00634FCF /* windowed_filter.h in Headers */, > 5C4B4CCF1E4320A9002651C8 /* event_timer_posix.h in Headers */, > 413A237E1FE18E0700373E99 /* event_tracer.h in Headers */, > 419C83501FE246650040C30F /* exp_filter.h in Headers */, >@@ -10715,21 +12066,29 @@ > 5CDD894B1E43BF3A00621E92 /* extended_jitter_report.h in Headers */, > 5CDD894E1E43BF3A00621E92 /* extended_reports.h in Headers */, > 5CDD8A981E43C00F00621E92 /* fake_decode_from_file.h in Headers */, >+ 41E02CCE212735B700C27CD6 /* network_types.h in Headers */, >+ 41F2638921267F4000274F59 /* fft.h in Headers */, >+ 415F1FB321272FBA00064CBF /* limiter.h in Headers */, > 413A237F1FE18E0700373E99 /* fakeclock.h in Headers */, >+ 41924176212738C200634FCF /* transport.h in Headers */, > 5C4B48DF1E42C1E3002651C8 /* fakemediaengine.h in Headers */, > 413A22B71FE18E0700373E99 /* fakenetwork.h in Headers */, > 5C4B48E01E42C1E3002651C8 /* fakenetworkinterface.h in Headers */, >+ 419241D12127597D00634FCF /* simulated_network.h in Headers */, > 5C63F9EB1E4174F6002CA531 /* fakeportallocator.h in Headers */, > 5C4B48E11E42C1E3002651C8 /* fakertp.h in Headers */, > 413A22F81FE18E0700373E99 /* fakesslidentity.h in Headers */, > 5C4B48E21E42C1E3002651C8 /* fakevideocapturer.h in Headers */, > 5C4B48E31E42C1E3002651C8 /* fakevideorenderer.h in Headers */, > 5C63F8DC1E416D53002CA531 /* features.h in Headers */, >+ 41299B8D2127365100B3414B /* transport_feedback_adapter.h in Headers */, >+ 41E02CB32127352D00C27CD6 /* trendline_estimator.h in Headers */, > 419C830B1FE20F3C0040C30F /* fec_controller_rplr_based.h in Headers */, > 5CDD88791E43BE3C00621E92 /* fec_private_tables_bursty.h in Headers */, > 5CDD887A1E43BE3C00621E92 /* fec_private_tables_random.h in Headers */, > 5CDD887C1E43BE3C00621E92 /* fec_test_helper.h in Headers */, > 5CDD87BB1E43BC0500621E92 /* fft.h in Headers */, >+ 41F2639F2126800000274F59 /* aligned_malloc.h in Headers */, > 41433D221F79B33400387B4D /* fft.h in Headers */, > 41F9BFD32051DDE500ABF0B9 /* fft_buffer.h in Headers */, > 5CD285C81E6A63430094FDC8 /* fft_data.h in Headers */, >@@ -10742,6 +12101,9 @@ > 41433CED1F79B33400387B4D /* filterbank_internal.h in Headers */, > 41433D0D1F79B33400387B4D /* filterbank_tables.h in Headers */, > 5CDD8BA11E43C2B500621E92 /* filtered_cb_vecs.h in Headers */, >+ 419241AE212758D300634FCF /* ring_buffer.h in Headers */, >+ 4192416C2127389B00634FCF /* quality_scaling_experiment.h in Headers */, >+ 419241CC2127593F00634FCF /* bandwidth_sampler.h in Headers */, > 5C11A0041E457400004F0987 /* fine_audio_buffer.h in Headers */, > 5CDD89511E43BF3A00621E92 /* fir.h in Headers */, > 5C4B4C6E1E431F9C002651C8 /* fir_filter.h in Headers */, >@@ -10755,6 +12117,7 @@ > 5CD284BA1E6A5F9F0094FDC8 /* flexfec_receive_stream_impl.h in Headers */, > 419C83CB1FE247B40040C30F /* flexfec_receiver.h in Headers */, > 419C83CE1FE247B40040C30F /* flexfec_sender.h in Headers */, >+ 419241592127376F00634FCF /* fakeicetransport.h in Headers */, > 413A22A31FE18E0600373E99 /* format_macros.h in Headers */, > 5CDD88891E43BE3C00621E92 /* forward_error_correction.h in Headers */, > 5CDD88871E43BE3C00621E92 /* forward_error_correction_internal.h in Headers */, >@@ -10764,13 +12127,19 @@ > 5CDD83D21E439A6F00621E92 /* frame_buffer2.h in Headers */, > 41109AAF1E5FA19200C0955A /* frame_callback.h in Headers */, > 5CDD8BA31E43C2B500621E92 /* frame_classify.h in Headers */, >+ 41A08BAF212681C8001D5D7B /* video_bitrate_allocator.h in Headers */, > 5CD2849B1E6A5F410094FDC8 /* frame_combiner.h in Headers */, >+ 419241562127376F00634FCF /* fakecandidatepair.h in Headers */, > 5CDD837A1E439A3500621E92 /* frame_dropper.h in Headers */, >+ 419241552127376F00634FCF /* regatheringcontroller.h in Headers */, > 5CDD8F911E43CBE000621E92 /* frame_length_controller.h in Headers */, >+ 419241F421275C3200634FCF /* vp8_encoder_simulcast_proxy.h in Headers */, > 5CDD83D41E439A6F00621E92 /* frame_object.h in Headers */, > 413A22A21FE18E0600373E99 /* function_view.h in Headers */, > 4140B8251E4E3383007409E6 /* g711_interface.h in Headers */, >+ 416D3BE1212731C200775F09 /* biquad_filter.h in Headers */, > 4140B8391E4E3396007409E6 /* g722_interface.h in Headers */, >+ 41E02CBF2127356A00C27CD6 /* weak_ptr.h in Headers */, > 5CDD86F01E43BA6D00621E92 /* gain_control.h in Headers */, > 5CDD84B31E43AF1300621E92 /* gain_control_for_experimental_agc.h in Headers */, > 5CDD84B51E43AF1300621E92 /* gain_control_impl.h in Headers */, >@@ -10780,7 +12149,9 @@ > 5CDD83D61E439A6F00621E92 /* generic_decoder.h in Headers */, > 5CDD83D81E439A6F00621E92 /* generic_encoder.h in Headers */, > 5CDD8BA91E43C2B500621E92 /* get_cd_vec.h in Headers */, >+ 415F1FB521272FBA00064CBF /* signal_classifier.h in Headers */, > 5CDD8BAB1E43C2B500621E92 /* get_lsp_poly.h in Headers */, >+ 4192416D2127389B00634FCF /* congestion_controller_experiment.h in Headers */, > 5CDD8BAD1E43C2B500621E92 /* get_sync_seq.h in Headers */, > 413A21411FE0F0EF00373E99 /* getopt_s.h in Headers */, > 5CDD872A1E43BABE00621E92 /* gmm.h in Headers */, >@@ -10794,6 +12165,7 @@ > 4145E4BE1EF894F600FCF6E6 /* h264_profile_level_id.h in Headers */, > 5CD285EB1E6A639F0094FDC8 /* h264_sprop_parameter_sets.h in Headers */, > 5CDD83DA1E439A6F00621E92 /* h264_sps_pps_tracker.h in Headers */, >+ 4102F6B921273382006AE8D7 /* packet_receiver.h in Headers */, > 413A22D81FE18E0700373E99 /* helpers.h in Headers */, > 41ECEAD72064147C009D5141 /* helpers.h in Headers */, > 5CDD83DC1E439A6F00621E92 /* histogram.h in Headers */, >@@ -10801,6 +12173,7 @@ > 5CDD8BAF1E43C2B500621E92 /* hp_input.h in Headers */, > 5CDD8BB11E43C2B500621E92 /* hp_output.h in Headers */, > 413A23B31FE18E0800373E99 /* httpbase.h in Headers */, >+ 41F2636821267ADF00274F59 /* video_encoder_config.h in Headers */, > 413A23B21FE18E0800373E99 /* httpcommon-inl.h in Headers */, > 413A23951FE18E0800373E99 /* httpcommon.h in Headers */, > 413A22C81FE18E0700373E99 /* httpserver.h in Headers */, >@@ -10813,6 +12186,7 @@ > 5CDD8BB41E43C2B500621E92 /* ilbc.h in Headers */, > 41109AB11E5FA19200C0955A /* incoming_video_stream.h in Headers */, > 5CDD8BB61E43C2B500621E92 /* index_conv_dec.h in Headers */, >+ 41E02C89212734B900C27CD6 /* encoder_database.h in Headers */, > 5CDD8BB81E43C2B500621E92 /* index_conv_enc.h in Headers */, > 5CDD8BBA1E43C2B500621E92 /* init_decode.h in Headers */, > 5CDD8BBC1E43C2B500621E92 /* init_encode.h in Headers */, >@@ -10828,8 +12202,11 @@ > 419C83311FE245CD0040C30F /* interval_budget.h in Headers */, > 413A22A91FE18E0600373E99 /* ipaddress.h in Headers */, > 41433CFF1F79B33400387B4D /* isac_fix_type.h in Headers */, >+ 41DDB266212679A300296D47 /* opensslcertificate.h in Headers */, >+ 419241402127372400634FCF /* lp_residual.h in Headers */, > 5CDD87C11E43BC0500621E92 /* isac_float_type.h in Headers */, > 5CDD837C1E439A3500621E92 /* ivf_file_writer.h in Headers */, >+ 41A08BB4212681C8001D5D7B /* video_stream_encoder_interface.h in Headers */, > 5CDD83E21E439A6F00621E92 /* jitter_buffer.h in Headers */, > 5CDD83E01E439A6F00621E92 /* jitter_buffer_common.h in Headers */, > 5CDD83E41E439A6F00621E92 /* jitter_estimator.h in Headers */, >@@ -10855,6 +12232,8 @@ > 5CDD8BC21E43C2B500621E92 /* lpc_encode.h in Headers */, > 5CDD87C81E43BC0500621E92 /* lpc_gain_swb_tables.h in Headers */, > 41433D181F79B33400387B4D /* lpc_masking_model.h in Headers */, >+ 41F263B1212680A800274F59 /* asm_defines.h in Headers */, >+ 41E02CA72127352D00C27CD6 /* probe_bitrate_estimator.h in Headers */, > 5CDD87CA1E43BC0500621E92 /* lpc_shape_swb12_tables.h in Headers */, > 5CDD87CC1E43BC0500621E92 /* lpc_shape_swb16_tables.h in Headers */, > 41433D281F79B33400387B4D /* lpc_tables.h in Headers */, >@@ -10863,6 +12242,7 @@ > 5CDD8BC61E43C2B500621E92 /* lsf_interpolate_to_poly_dec.h in Headers */, > 5CDD8BC81E43C2B500621E92 /* lsf_interpolate_to_poly_enc.h in Headers */, > 5CDD8BCA1E43C2B500621E92 /* lsf_to_lsp.h in Headers */, >+ 416D3BDF212731C200775F09 /* agc2_common.h in Headers */, > 5CDD8BCC1E43C2B500621E92 /* lsf_to_poly.h in Headers */, > 5CDD8BCE1E43C2B500621E92 /* lsp_to_lsf.h in Headers */, > 413A23971FE18E0800373E99 /* macutils.h in Headers */, >@@ -10882,6 +12262,7 @@ > 5C63F94E1E41737B002CA531 /* mediastreaminterface.h in Headers */, > 5CD284FD1E6A60570094FDC8 /* mediastreamobserver.h in Headers */, > 5C63F9511E41737B002CA531 /* mediastreamproxy.h in Headers */, >+ 41A08BAC212681C8001D5D7B /* encoded_frame.h in Headers */, > 5CD284FE1E6A60570094FDC8 /* mediastreamtrack.h in Headers */, > 5C63F9531E41737B002CA531 /* mediastreamtrackproxy.h in Headers */, > 5CD286331E6A67BF0094FDC8 /* mediatypes.h in Headers */, >@@ -10891,9 +12272,11 @@ > 413A22B91FE18E0700373E99 /* messagehandler.h in Headers */, > 413A23A91FE18E0800373E99 /* messagequeue.h in Headers */, > 5CDD87071E43BA7500621E92 /* mock_agc.h in Headers */, >+ 4192413C2127372400634FCF /* pitch_search.h in Headers */, > 5C11A0051E457400004F0987 /* mock_audio_device_buffer.h in Headers */, > 5CDD8FED1E43CDCA00621E92 /* mock_audio_processing.h in Headers */, > 419C83561FE246650040C30F /* mod_ops.h in Headers */, >+ 41A08BCF21272EE2001D5D7B /* gain_controller2.h in Headers */, > 5CDD837E1E439A3500621E92 /* moving_average.h in Headers */, > 5CD286111E6A64C90094FDC8 /* moving_max.h in Headers */, > 419C83551FE246650040C30F /* moving_max_counter.h in Headers */, >@@ -10906,6 +12289,7 @@ > 5CDD8A331E43BFB300621E92 /* nack_tracker.h in Headers */, > 4145E4B71EF8943E00FCF6E6 /* nalu_rewriter.h in Headers */, > 413A22C41FE18E0700373E99 /* natserver.h in Headers */, >+ 41E02CAD2127352D00C27CD6 /* alr_detector.h in Headers */, > 413A22D91FE18E0700373E99 /* natsocketfactory.h in Headers */, > 413A22E71FE18E0700373E99 /* nattypes.h in Headers */, > 5CDD8BD21E43C2B500621E92 /* nearest_neighbor.h in Headers */, >@@ -10919,6 +12303,7 @@ > 413A23761FE18E0700373E99 /* network_constants.h in Headers */, > 413A237C1FE18E0700373E99 /* networkmonitor.h in Headers */, > 413A22C21FE18E0700373E99 /* networkroute.h in Headers */, >+ 419241C02127593F00634FCF /* loss_rate_filter.h in Headers */, > 5CDD872B1E43BABE00621E92 /* noise_gmm_tables.h in Headers */, > 5CDD85FF1E43B84E00621E92 /* noise_suppression.h in Headers */, > 5CDD84EA1E43B0B600621E92 /* noise_suppression_impl.h in Headers */, >@@ -10928,7 +12313,9 @@ > 5C63F9541E41737B002CA531 /* notifier.h in Headers */, > 5CDD86011E43B84E00621E92 /* ns_core.h in Headers */, > 41ECEAC120640F28009D5141 /* NSString+StdString.h in Headers */, >+ 41F263B82126810C00274F59 /* base64.h in Headers */, > 5CDD86061E43B84E00621E92 /* nsx_core.h in Headers */, >+ 41A08BCB2126961F001D5D7B /* raw_logging.h in Headers */, > 5CDD86071E43B84E00621E92 /* nsx_defines.h in Headers */, > 419C83B41FE2472E0040C30F /* null_audio_poller.h in Headers */, > 5C0885311E4A99D200403995 /* null_auth.h in Headers */, >@@ -10950,12 +12337,14 @@ > 5CDD85A51E43B5C000621E92 /* overuse_frame_detector.h in Headers */, > 5C63F9EE1E4174F6002CA531 /* p2pconstants.h in Headers */, > 5C63F9F31E4174F6002CA531 /* p2ptransportchannel.h in Headers */, >+ 415F1FB721272FBA00064CBF /* vector_float_frame.h in Headers */, > 5CDD8FA31E43CCBE00621E92 /* paced_sender.h in Headers */, > 419C832E1FE245CD0040C30F /* pacer.h in Headers */, > 5CDD8BD41E43C2B500621E92 /* pack_bits.h in Headers */, > 5CDD83EF1E439A6F00621E92 /* packet.h in Headers */, > 5CDD8AB01E43C00F00621E92 /* packet.h in Headers */, > 5CDD8A431E43BFB300621E92 /* packet.h in Headers */, >+ 415F1FAE21272FBA00064CBF /* fixed_digital_level_estimator.h in Headers */, > 5CDD8A411E43BFB300621E92 /* packet_buffer.h in Headers */, > 5CDD83ED1E439A6F00621E92 /* packet_buffer.h in Headers */, > 5CDD888D1E43BE3C00621E92 /* packet_loss_stats.h in Headers */, >@@ -10968,6 +12357,7 @@ > 419C83D91FE247F20040C30F /* packettransportinternal.h in Headers */, > 413A23901FE18E0800373E99 /* pathutils.h in Headers */, > 5C4B48841E42C1BA002651C8 /* payload_type_mapper.h in Headers */, >+ 41D6B45B21273159008F9353 /* rtp_video_sender_interface.h in Headers */, > 5CDD90011E43CE3A00621E92 /* pcm16b.h in Headers */, > 5CD285001E6A60570094FDC8 /* peerconnection.h in Headers */, > 5CD284801E6A5E740094FDC8 /* peerconnectionfactory.h in Headers */, >@@ -10978,7 +12368,9 @@ > 419C834E1FE246650040C30F /* percentile_filter.h in Headers */, > 413A23EA1FE18E0800373E99 /* physicalsocketserver.h in Headers */, > 5CDD872E1E43BABE00621E92 /* pitch_based_vad.h in Headers */, >+ 415F1FB021272FBA00064CBF /* gain_applier.h in Headers */, > 41433CF11F79B33400387B4D /* pitch_estimator.h in Headers */, >+ 419241ED21275AFA00634FCF /* simulcast_utility.h in Headers */, > 5CDD87D11E43BC0500621E92 /* pitch_estimator.h in Headers */, > 5CDD87D41E43BC0600621E92 /* pitch_gain_tables.h in Headers */, > 41433D231F79B33400387B4D /* pitch_gain_tables.h in Headers */, >@@ -10994,10 +12386,14 @@ > 5CDD8BD61E43C2B500621E92 /* poly_to_lsf.h in Headers */, > 5CDD8BD81E43C2B500621E92 /* poly_to_lsp.h in Headers */, > 5C63F9F81E4174F6002CA531 /* port.h in Headers */, >+ 415F1FBD2127304C00064CBF /* echo_control_mobile_proxy.h in Headers */, >+ 419241C62127593F00634FCF /* bbr_factory.h in Headers */, > 5C63F9FB1E4174F6002CA531 /* portallocator.h in Headers */, > 5C63F9FC1E4174F6002CA531 /* portinterface.h in Headers */, >+ 4102F6E421273416006AE8D7 /* video_bitrate_allocator_factory.h in Headers */, > 5CDD8A461E43BFB300621E92 /* post_decode_vad.h in Headers */, > 5CDD835A1E43257200621E92 /* pps_parser.h in Headers */, >+ 415F1FB421272FBA00064CBF /* noise_spectrum_estimator.h in Headers */, > 5CDD8A481E43BFB300621E92 /* preemptive_expand.h in Headers */, > 5CDD84E61E43B04D00621E92 /* process_thread_impl.h in Headers */, > 5CDD835D1E43257200621E92 /* profile_level_id.h in Headers */, >@@ -11006,23 +12402,29 @@ > 413A231F1FE18E0700373E99 /* proxyinfo.h in Headers */, > 413A23C51FE18E0800373E99 /* proxyserver.h in Headers */, > 5C63F9FF1E4174F6002CA531 /* pseudotcp.h in Headers */, >+ 41D6B45A21273159008F9353 /* rtp_payload_params.h in Headers */, > 5CDD89591E43BF3A00621E92 /* psfb.h in Headers */, > 5CDD87561E43BAF500621E92 /* push_sinc_resampler.h in Headers */, > 4130920A1EF8D11200757C55 /* qp_parser.h in Headers */, >+ 4102F68E21273206006AE8D7 /* jseptransportcontroller.h in Headers */, > 5CDD83821E439A3500621E92 /* quality_scaler.h in Headers */, > 5CD2862B1E6A66C80094FDC8 /* quality_threshold.h in Headers */, > 413A23EF1FE18E0800373E99 /* race_checker.h in Headers */, > 413A234C1FE18E0700373E99 /* random.h in Headers */, >+ 41E02C7B2127347400C27CD6 /* rtp_generic_frame_descriptor.h in Headers */, > 5CDD8A4B1E43BFB300621E92 /* random_vector.h in Headers */, > 5CDD895C1E43BF3A00621E92 /* rapid_resync_request.h in Headers */, >+ 41E02C8C212734B900C27CD6 /* fec_controller_default.h in Headers */, > 413A23601FE18E0700373E99 /* rate_limiter.h in Headers */, > 413A230D1FE18E0700373E99 /* rate_statistics.h in Headers */, > 413A23041FE18E0700373E99 /* ratetracker.h in Headers */, > 5C0885331E4A99D200403995 /* rdb.h in Headers */, > 5C0885341E4A99D200403995 /* rdbx.h in Headers */, >+ 4102F69521273206006AE8D7 /* peerconnectioninternal.h in Headers */, > 5C63F8DF1E416D53002CA531 /* reader.h in Headers */, > 5C4B4C781E431F9C002651C8 /* real_fourier.h in Headers */, > 5C4B4C731E431F9C002651C8 /* real_fourier_ooura.h in Headers */, >+ 419241C82127593F00634FCF /* packet_number_indexed_queue.h in Headers */, > 419C83CA1FE247B40040C30F /* receive_statistics.h in Headers */, > 5CDD88921E43BE3C00621E92 /* receive_statistics_impl.h in Headers */, > 5CDD85AB1E43B5C000621E92 /* receive_statistics_proxy.h in Headers */, >@@ -11034,21 +12436,29 @@ > 413A23671FE18E0700373E99 /* refcountedobject.h in Headers */, > 413A23201FE18E0700373E99 /* refcounter.h in Headers */, > 5CDD8BDA1E43C2B500621E92 /* refiner.h in Headers */, >+ 41F263AF212680A800274F59 /* inline.h in Headers */, > 5C63FA021E4174F6002CA531 /* relayport.h in Headers */, > 5C63FA051E4174F6002CA531 /* relayserver.h in Headers */, >+ 4102F69121273206006AE8D7 /* rtpparametersconversion.h in Headers */, > 5CDD89621E43BF3A00621E92 /* remb.h in Headers */, >+ 4192419F2127588300634FCF /* audio_codec_pair_id.h in Headers */, > 5CDD8FDC1E43CD6600621E92 /* remote_bitrate_estimator_abs_send_time.h in Headers */, > 5CDD8FDE1E43CD6600621E92 /* remote_bitrate_estimator_single_stream.h in Headers */, >+ 41F2636F21267B3E00274F59 /* fft4g.h in Headers */, > 5CDD8FE21E43CD6600621E92 /* remote_estimator_proxy.h in Headers */, > 419C83C51FE247B40040C30F /* remote_ntp_time_estimator.h in Headers */, > 5CD285061E6A60570094FDC8 /* remoteaudiosource.h in Headers */, > 4145E4DA1EF8CC9B00FCF6E6 /* render_buffer.h in Headers */, > 5CD285D61E6A63430094FDC8 /* render_delay_buffer.h in Headers */, >+ 4192416F2127389B00634FCF /* field_trial_parser.h in Headers */, > 5CD285DA1E6A63430094FDC8 /* render_delay_controller.h in Headers */, > 5CD285D81E6A63430094FDC8 /* render_delay_controller_metrics.h in Headers */, >+ 4192415B2127376F00634FCF /* basicasyncresolverfactory.h in Headers */, >+ 41A08BC7212695DE001D5D7B /* bad_optional_access.h in Headers */, > 5CDD84BC1E43AF1300621E92 /* render_queue_item_verifier.h in Headers */, > 5CD285DC1E6A63430094FDC8 /* render_signal_analyzer.h in Headers */, > 5CDD85191E43B1EA00621E92 /* rent_a_codec.h in Headers */, >+ 41F263BC2126811500274F59 /* sigslot.h in Headers */, > 5CDD89651E43BF3A00621E92 /* report_block.h in Headers */, > 5CDD85AF1E43B5C000621E92 /* report_block_stats.h in Headers */, > 5CDD86651E43B8B500621E92 /* resample_by_2_internal.h in Headers */, >@@ -11057,20 +12467,26 @@ > 5CD285DE1E6A63430094FDC8 /* residual_echo_estimator.h in Headers */, > 5C4B4C7B1E431F9C002651C8 /* ring_buffer.h in Headers */, > 5CDD84C01E43AF1300621E92 /* rms_level.h in Headers */, >+ 41A08BAE212681C8001D5D7B /* video_bitrate_allocation.h in Headers */, > 413A23A71FE18E0800373E99 /* rollingaccumulator.h in Headers */, > 5CDD896B1E43BF3A00621E92 /* rrtr.h in Headers */, >+ 4102F6A521273262006AE8D7 /* channel.h in Headers */, > 419C83AC1FE247080040C30F /* rtc_event.h in Headers */, > 41F9BFA92051C8E200ABF0B9 /* rtc_event_alr_state.h in Headers */, > 419C839D1FE246F90040C30F /* rtc_event_audio_network_adaptation.h in Headers */, >+ 41F2638121267B7700274F59 /* audio_options.h in Headers */, > 419C83981FE246F90040C30F /* rtc_event_audio_playout.h in Headers */, > 419C83A11FE246F90040C30F /* rtc_event_audio_receive_stream_config.h in Headers */, > 419C838E1FE246F90040C30F /* rtc_event_audio_send_stream_config.h in Headers */, > 419C83931FE246F90040C30F /* rtc_event_bwe_update_delay_based.h in Headers */, > 419C83971FE246F90040C30F /* rtc_event_bwe_update_loss_based.h in Headers */, > 5CDD904C1E43CF6100621E92 /* rtc_event_log.h in Headers */, >+ 4102F6A721273262006AE8D7 /* remix_resample.h in Headers */, >+ 41E02C87212734B900C27CD6 /* decoder_database.h in Headers */, > 41F411BB1EF8DA9600343C26 /* rtc_event_log_factory.h in Headers */, > 41F411BA1EF8DA9600343C26 /* rtc_event_log_factory_interface.h in Headers */, > 419C84231FE24BA60040C30F /* rtc_event_log_output_file.h in Headers */, >+ 415F1FCF212730F000064CBF /* audio_frame.h in Headers */, > 419C839F1FE246F90040C30F /* rtc_event_probe_cluster_created.h in Headers */, > 419C83A01FE246F90040C30F /* rtc_event_probe_result_failure.h in Headers */, > 419C839A1FE246F90040C30F /* rtc_event_probe_result_success.h in Headers */, >@@ -11109,21 +12525,32 @@ > 413A24491FE1991A00373E99 /* RTCMacros.h in Headers */, > 413A24681FE1991A00373E99 /* RTCMediaConstraints.h in Headers */, > 413A24511FE1991A00373E99 /* RTCMediaSource.h in Headers */, >+ 419241452127372800634FCF /* pitch_search_internal.h in Headers */, > 413A24541FE1991A00373E99 /* RTCMediaStream.h in Headers */, >+ 415F1FA921272FBA00064CBF /* adaptive_mode_level_estimator.h in Headers */, > 413A24471FE1991A00373E99 /* RTCMediaStreamTrack.h in Headers */, > 413A24641FE1991A00373E99 /* RTCMetrics.h in Headers */, > 413A246A1FE1991A00373E99 /* RTCMetricsSampleInfo.h in Headers */, > 413A24671FE1991A00373E99 /* RTCMTLNSVideoView.h in Headers */, > 413A24711FE1991A00373E99 /* RTCMTLVideoView.h in Headers */, >+ 4102F6A321273262006AE8D7 /* channel_proxy.h in Headers */, > 413A24591FE1991A00373E99 /* RTCNSGLVideoView.h in Headers */, >+ 41E02C792127347400C27CD6 /* rtp_generic_frame_descriptor_extension.h in Headers */, >+ 41F263B2212680A800274F59 /* file_wrapper.h in Headers */, > 5CDD8A501E43BFB300621E92 /* rtcp.h in Headers */, > 419C82B21FE20DCD0040C30F /* rtcp_demuxer.h in Headers */, >+ 41F2637221267B4A00274F59 /* spl_sqrt_floor.h in Headers */, > 5CD285FB1E6A64520094FDC8 /* rtcp_nack_stats.h in Headers */, > 5CDD88981E43BE3C00621E92 /* rtcp_packet.h in Headers */, > 419C82BD1FE20DCD0040C30F /* rtcp_packet_sink_interface.h in Headers */, > 5CDD889B1E43BE3C00621E92 /* rtcp_receiver.h in Headers */, >+ 41F263A02126800000274F59 /* aligned_array.h in Headers */, >+ 4192418D212749C800634FCF /* pacer_controller.h in Headers */, > 5CDD889E1E43BE3C00621E92 /* rtcp_sender.h in Headers */, >+ 416D3BEA212731C200775F09 /* saturation_protector.h in Headers */, >+ 41DDB26C212679D200296D47 /* string_builder.h in Headers */, > 419C83031FE20F020040C30F /* rtcp_transceiver.h in Headers */, >+ 41A08BD321272EFA001D5D7B /* round_robin_packet_queue.h in Headers */, > 419C83011FE20F020040C30F /* rtcp_transceiver_config.h in Headers */, > 419C83051FE20F020040C30F /* rtcp_transceiver_impl.h in Headers */, > 413A243E1FE1991A00373E99 /* RTCPeerConnection.h in Headers */, >@@ -11135,8 +12562,11 @@ > 413A245C1FE1991A00373E99 /* RTCRtpSender.h in Headers */, > 413A244A1FE1991A00373E99 /* RTCSessionDescription.h in Headers */, > 413A24661FE1991A00373E99 /* RTCSSLAdapter.h in Headers */, >+ 41E02CAF2127352D00C27CD6 /* median_slope_estimator.h in Headers */, > 4145E4C81EF896D700FCF6E6 /* rtcstats.h in Headers */, > 4145E4C71EF896D700FCF6E6 /* rtcstats_objects.h in Headers */, >+ 419241E721275A7600634FCF /* field_trial_units.h in Headers */, >+ 41A08BC321269577001D5D7B /* icelogger.h in Headers */, > 5CD285081E6A60570094FDC8 /* rtcstatscollector.h in Headers */, > 4145E4C51EF896D700FCF6E6 /* rtcstatscollectorcallback.h in Headers */, > 4145E4C61EF896D700FCF6E6 /* rtcstatsreport.h in Headers */, >@@ -11151,18 +12581,23 @@ > 413A24601FE1991A00373E99 /* RTCVideoDecoderVP9.h in Headers */, > 413A246E1FE1991A00373E99 /* RTCVideoEncoderVP8.h in Headers */, > 413A24461FE1991A00373E99 /* RTCVideoEncoderVP9.h in Headers */, >+ 41E02CA62127352D00C27CD6 /* acknowledged_bitrate_estimator.h in Headers */, > 413A244F1FE1991A00373E99 /* RTCVideoFrame.h in Headers */, > 413A24411FE1991A00373E99 /* RTCVideoFrameBuffer.h in Headers */, > 413A246F1FE1991A00373E99 /* RTCVideoRenderer.h in Headers */, >+ 41D6B45821273159008F9353 /* receive_time_calculator.h in Headers */, > 413A24611FE1991A00373E99 /* RTCVideoSource.h in Headers */, > 413A24501FE1991A00373E99 /* RTCVideoTrack.h in Headers */, > 413A243A1FE1991A00373E99 /* RTCVideoViewShading.h in Headers */, > 41ECEAE3206416FF009D5141 /* RTCWrappedNativeVideoDecoder.h in Headers */, > 41ECEAE1206416FF009D5141 /* RTCWrappedNativeVideoEncoder.h in Headers */, >+ 419241982127586500634FCF /* rnn_vad_weights.h in Headers */, > 419C82B81FE20DCD0040C30F /* rtp_config.h in Headers */, > 419C83C91FE247B40040C30F /* rtp_cvo.h in Headers */, > 413092011EF8D0A600757C55 /* rtp_demuxer.h in Headers */, > 5CDD8AB71E43C00F00621E92 /* rtp_file_source.h in Headers */, >+ 41DDB26D212679D200296D47 /* audio_format_to_string.h in Headers */, >+ 41F263AD212680A800274F59 /* ignore_warnings.h in Headers */, > 5CDD88B11E43BE3C00621E92 /* rtp_format.h in Headers */, > 5CDD88A51E43BE3C00621E92 /* rtp_format_h264.h in Headers */, > 5CDD88A71E43BE3C00621E92 /* rtp_format_video_generic.h in Headers */, >@@ -11175,7 +12610,9 @@ > 419C83CC1FE247B40040C30F /* rtp_header_parser.h in Headers */, > 41F9BF8D2051C80100ABF0B9 /* rtp_headers.h in Headers */, > 5CDD88BF1E43BE3D00621E92 /* rtp_packet.h in Headers */, >+ 419241422127372400634FCF /* fft_util.h in Headers */, > 5CDD88BA1E43BE3D00621E92 /* rtp_packet_history.h in Headers */, >+ 41F263B0212680A800274F59 /* unused.h in Headers */, > 5CDD88BB1E43BE3D00621E92 /* rtp_packet_received.h in Headers */, > 419C82B61FE20DCD0040C30F /* rtp_packet_sink_interface.h in Headers */, > 5CDD88BC1E43BE3D00621E92 /* rtp_packet_to_send.h in Headers */, >@@ -11183,9 +12620,12 @@ > 419C83C71FE247B40040C30F /* rtp_receiver.h in Headers */, > 5CDD88C31E43BE3D00621E92 /* rtp_receiver_audio.h in Headers */, > 5CDD88C51E43BE3D00621E92 /* rtp_receiver_impl.h in Headers */, >+ 41A08BD721272F1D001D5D7B /* congestion_window_pushback_controller.h in Headers */, > 5CDD88C71E43BE3D00621E92 /* rtp_receiver_strategy.h in Headers */, > 5CDD88C91E43BE3D00621E92 /* rtp_receiver_video.h in Headers */, > 419C83C31FE247B40040C30F /* rtp_rtcp.h in Headers */, >+ 4102F6A221273262006AE8D7 /* audio_level.h in Headers */, >+ 4102F6DE21273416006AE8D7 /* video_stream_decoder_create.h in Headers */, > 5CDD88CA1E43BE3D00621E92 /* rtp_rtcp_config.h in Headers */, > 419C83C81FE247B40040C30F /* rtp_rtcp_defines.h in Headers */, > 419C82B51FE20DCD0040C30F /* rtp_rtcp_demuxer_helper.h in Headers */, >@@ -11204,12 +12644,14 @@ > 5CDD896D1E43BF3A00621E92 /* rtpfb.h in Headers */, > 419C82CA1FE20E2C0040C30F /* rtpmediautils.h in Headers */, > 5C63F9661E41737B002CA531 /* rtpparameters.h in Headers */, >+ 41F2636421267ADF00274F59 /* video_codec.h in Headers */, > 5CD2850A1E6A60570094FDC8 /* rtpreceiver.h in Headers */, > 5C63F9691E41737B002CA531 /* rtpreceiverinterface.h in Headers */, > 5CD2850C1E6A60570094FDC8 /* rtpsender.h in Headers */, > 5C63F96C1E41737B002CA531 /* rtpsenderinterface.h in Headers */, > 419C82DA1FE20E590040C30F /* rtptransceiver.h in Headers */, > 41F9BF8E2051C80100ABF0B9 /* rtptransceiverinterface.h in Headers */, >+ 41DDB263212679A300296D47 /* opensslsessioncache.h in Headers */, > 4145E4CE1EF8CB9500FCF6E6 /* rtptransport.h in Headers */, > 419C82E51FE20E590040C30F /* rtptransportinternal.h in Headers */, > 419C82DB1FE20E590040C30F /* rtptransportinternaladapter.h in Headers */, >@@ -11222,11 +12664,13 @@ > 413A23281FE18E0700373E99 /* sanitizer.h in Headers */, > 413A23051FE18E0700373E99 /* scoped_ref_ptr.h in Headers */, > 41F9BFB62051C93600ABF0B9 /* scopedvideodecoder.h in Headers */, >+ 41A08BB1212681C8001D5D7B /* video_source_interface.h in Headers */, > 41F9BFB72051C93600ABF0B9 /* scopedvideoencoder.h in Headers */, > 419C84361FE24E800040C30F /* screenshare_layers.h in Headers */, > 5CD2863D1E6A681C0094FDC8 /* sctptransport.h in Headers */, > 5CD2863E1E6A681C0094FDC8 /* sctptransportinternal.h in Headers */, > 5CD2850E1E6A60570094FDC8 /* sctputils.h in Headers */, >+ 41E02CD32127360700C27CD6 /* sample_counter.h in Headers */, > 5CDD89701E43BF3A00621E92 /* sdes.h in Headers */, > 4145F61D1FE1F38D00EB9CAF /* sdp_video_format.h in Headers */, > 419C82DD1FE20E590040C30F /* sdputils.h in Headers */, >@@ -11239,10 +12683,13 @@ > 5CDD83FC1E439A6F00621E92 /* session_info.h in Headers */, > 41F9BFDF2051DE1800ABF0B9 /* sessiondescription.h in Headers */, > 41F9BF922051C80100ABF0B9 /* setremotedescriptionobserverinterface.h in Headers */, >+ 41A08BBF21269553001D5D7B /* rtc_event_ice_candidate_pair_config.h in Headers */, > 41433D081F79B33400387B4D /* settings.h in Headers */, > 5CDD87D71E43BC0600621E92 /* settings.h in Headers */, > 5CD285E01E6A63430094FDC8 /* shadow_filter_update_gain.h in Headers */, > 41F9BFC52051CAE500ABF0B9 /* signal_processing_library.h in Headers */, >+ 415F1FAB21272FBA00064CBF /* compute_interpolated_gain_curve.h in Headers */, >+ 419241F021275AFA00634FCF /* simulcast_rate_allocator.h in Headers */, > 413A23811FE18E0700373E99 /* signalthread.h in Headers */, > 413A22CD1FE18E0700373E99 /* sigslot.h in Headers */, > 413A23331FE18E0700373E99 /* sigslotrepeater.h in Headers */, >@@ -11257,7 +12704,9 @@ > 5CDD8BE61E43C2B500621E92 /* smooth.h in Headers */, > 5CDD8BE41E43C2B500621E92 /* smooth_out_data.h in Headers */, > 5CD285F71E6A63F60094FDC8 /* smoothing_filter.h in Headers */, >+ 419241582127376F00634FCF /* fakepackettransport.h in Headers */, > 413A22DD1FE18E0700373E99 /* socket.h in Headers */, >+ 415F1FA721272FBA00064CBF /* adaptive_digital_gain_applier.h in Headers */, > 413A22DC1FE18E0700373E99 /* socket_unittest.h in Headers */, > 413A23611FE18E0700373E99 /* socketadapters.h in Headers */, > 413A23C91FE18E0800373E99 /* socketaddress.h in Headers */, >@@ -11265,6 +12714,9 @@ > 413A22C51FE18E0700373E99 /* socketfactory.h in Headers */, > 413A23B91FE18E0800373E99 /* socketserver.h in Headers */, > 413A23531FE18E0700373E99 /* socketstream.h in Headers */, >+ 419241DE21275A3000634FCF /* data_rate.h in Headers */, >+ 4192413B2127372400634FCF /* features_extraction.h in Headers */, >+ 416D3BDC212731C200775F09 /* adaptive_agc.h in Headers */, > 5CDD8BE81E43C2B500621E92 /* sort_sq.h in Headers */, > 5C4B4C7E1E431F9C002651C8 /* sparse_fir_filter.h in Headers */, > 5CDD87D91E43BC0600621E92 /* spectrum_ar_model_tables.h in Headers */, >@@ -11279,7 +12731,9 @@ > 419C82E21FE20E590040C30F /* srtptransport.h in Headers */, > 413A23AF1FE18E0800373E99 /* sslfingerprint.h in Headers */, > 413A22E41FE18E0700373E99 /* sslidentity.h in Headers */, >+ 419241822127497100634FCF /* bad_variant_access.h in Headers */, > 413A23921FE18E0800373E99 /* sslroots.h in Headers */, >+ 416D3BDD212731C200775F09 /* adaptive_mode_level_estimator_agc.h in Headers */, > 413A23C11FE18E0800373E99 /* sslstreamadapter.h in Headers */, > 41F9BF9E2051C86900ABF0B9 /* ssrc_binding_observer.h in Headers */, > 5CDD87371E43BABE00621E92 /* standalone_vad.h in Headers */, >@@ -11292,14 +12746,17 @@ > 5C63F9731E41737B002CA531 /* statstypes.h in Headers */, > 413A22FD1FE18E0700373E99 /* stream.h in Headers */, > 5CDD85C01E43B5C000621E92 /* stream_synchronization.h in Headers */, >+ 4102F6CE212733B7006AE8D7 /* video_stream_decoder_impl.h in Headers */, > 5CD285111E6A60570094FDC8 /* streamcollection.h in Headers */, > 5C4B48F51E42C1E3002651C8 /* streamparams.h in Headers */, > 413A23641FE18E0700373E99 /* string_to_number.h in Headers */, >+ 419241CB2127593F00634FCF /* rtt_stats.h in Headers */, > 413A22EB1FE18E0700373E99 /* stringencode.h in Headers */, > 413A23B11FE18E0800373E99 /* stringize_macros.h in Headers */, > 413A22CE1FE18E0700373E99 /* stringutils.h in Headers */, > 41433CF01F79B33400387B4D /* structs.h in Headers */, > 5CDD87DA1E43BC0600621E92 /* structs.h in Headers */, >+ 419241AA212758D300634FCF /* rnn.h in Headers */, > 5C63FA0C1E4174F6002CA531 /* stun.h in Headers */, > 5C63FA0F1E4174F6002CA531 /* stunport.h in Headers */, > 5C63FA121E4174F6002CA531 /* stunrequest.h in Headers */, >@@ -11311,6 +12768,7 @@ > 5CD285E71E6A63430094FDC8 /* suppression_gain.h in Headers */, > 5CDD8BF01E43C2B500621E92 /* swap_bytes.h in Headers */, > 413A23471FE18E0700373E99 /* swap_queue.h in Headers */, >+ 4102F6AF212732E7006AE8D7 /* expand_uma_logger.h in Headers */, > 5CDD8A551E43BFB300621E92 /* sync_buffer.h in Headers */, > 5CD284BF1E6A5F9F0094FDC8 /* syncable.h in Headers */, > 5CDD89791E43BF3A00621E92 /* target_bitrate.h in Headers */, >@@ -11319,20 +12777,28 @@ > 5C63FA181E4174F6002CA531 /* tcpport.h in Headers */, > 413A22FE1FE18E0700373E99 /* template_util.h in Headers */, > 419C843D1FE24E800040C30F /* temporal_layers.h in Headers */, >+ 419241E421275A3000634FCF /* data_size.h in Headers */, > 413A22A11FE18E0600373E99 /* testbase64.h in Headers */, > 413A23D51FE18E0800373E99 /* testclient.h in Headers */, > 413A232A1FE18E0700373E99 /* testechoserver.h in Headers */, > 5C63FA191E4174F6002CA531 /* testrelayserver.h in Headers */, >+ 41299B932127367B00B3414B /* pitch_filter.h in Headers */, > 5C63FA1A1E4174F6002CA531 /* teststunserver.h in Headers */, > 5C63FA1B1E4174F6002CA531 /* testturnserver.h in Headers */, >+ 41E02CBD2127356A00C27CD6 /* sslcertificate.h in Headers */, > 413A23D91FE18E0800373E99 /* testutils.h in Headers */, > 413A23421FE18E0700373E99 /* thread.h in Headers */, > 413A22C61FE18E0700373E99 /* thread_annotations.h in Headers */, >+ 41E02CAB2127352D00C27CD6 /* delay_based_bwe.h in Headers */, >+ 41E02CB72127352D00C27CD6 /* delay_increase_detector_interface.h in Headers */, > 413A22E81FE18E0700373E99 /* thread_checker.h in Headers */, >+ 4192415A2127376F00634FCF /* icetransportinternal.h in Headers */, > 413A22B81FE18E0700373E99 /* thread_checker_impl.h in Headers */, > 5CDD84C41E43AF1300621E92 /* three_band_filter_bank.h in Headers */, > 5CDD8A581E43BFB300621E92 /* tick_timer.h in Headers */, > 419C83341FE245EA0040C30F /* time_interval.h in Headers */, >+ 41F2636021267ADF00274F59 /* builtin_video_decoder_factory.h in Headers */, >+ 419241432127372800634FCF /* pitch_info.h in Headers */, > 5CDD8A5B1E43BFB300621E92 /* time_stretch.h in Headers */, > 5CDD88DB1E43BE3D00621E92 /* time_util.h in Headers */, > 5CDD83FE1E439A6F00621E92 /* timestamp_map.h in Headers */, >@@ -11343,6 +12809,7 @@ > 5CDD897B1E43BF3A00621E92 /* tmmb_item.h in Headers */, > 5CDD897E1E43BF3A00621E92 /* tmmbn.h in Headers */, > 5CDD89811E43BF3A00621E92 /* tmmbr.h in Headers */, >+ 419241AB212758D300634FCF /* spectral_features.h in Headers */, > 5CDD88DD1E43BE3D00621E92 /* tmmbr_help.h in Headers */, > 413A23001FE18E0700373E99 /* trace_event.h in Headers */, > 5CD285131E6A60570094FDC8 /* trackmediainfomap.h in Headers */, >@@ -11351,7 +12818,9 @@ > 5C63FA1E1E4174F6002CA531 /* transport.h in Headers */, > 5CDD85C21E43B5C000621E92 /* transport_adapter.h in Headers */, > 5CDD89841E43BF3A00621E92 /* transport_feedback.h in Headers */, >+ 4192413F2127372400634FCF /* common.h in Headers */, > 5CDD8FBC1E43CD0700621E92 /* transport_feedback_adapter.h in Headers */, >+ 4102F6B221273331006AE8D7 /* mediaconfig.h in Headers */, > 5C63FA261E4174F6002CA531 /* transportdescription.h in Headers */, > 5C63FA291E4174F6002CA531 /* transportdescriptionfactory.h in Headers */, > 5C63FA2A1E4174F6002CA531 /* transportinfo.h in Headers */, >@@ -11365,6 +12834,7 @@ > 5C63FA311E4174F6002CA531 /* udpport.h in Headers */, > 413A246B1FE1991A00373E99 /* UIDevice+RTCDevice.h in Headers */, > 5CDD88E01E43BE3D00621E92 /* ulpfec_generator.h in Headers */, >+ 416D3BE4212731C200775F09 /* fixed_gain_controller.h in Headers */, > 5CDD88E31E43BE3D00621E92 /* ulpfec_header_reader_writer.h in Headers */, > 419C83C61FE247B40040C30F /* ulpfec_receiver.h in Headers */, > 5CDD88E51E43BE3D00621E92 /* ulpfec_receiver_impl.h in Headers */, >@@ -11375,6 +12845,7 @@ > 5CDD87091E43BA7500621E92 /* utility.h in Headers */, > 5CDD87DF1E43BC2E00621E92 /* utility.h in Headers */, > 5CDD873B1E43BABE00621E92 /* vad_audio_proc.h in Headers */, >+ 41A08BBE21269553001D5D7B /* rtc_event_ice_candidate_pair.h in Headers */, > 5CDD87381E43BABE00621E92 /* vad_audio_proc_internal.h in Headers */, > 5CDD873E1E43BABE00621E92 /* vad_circular_buffer.h in Headers */, > 5CDD86D71E43BA2800621E92 /* vad_core.h in Headers */, >@@ -11382,6 +12853,7 @@ > 5CDD86DD1E43BA2800621E92 /* vad_gmm.h in Headers */, > 5CDD86E01E43BA2800621E92 /* vad_sp.h in Headers */, > 5C63F8E01E416D53002CA531 /* value.h in Headers */, >+ 419241532127376F00634FCF /* fakedtlstransport.h in Headers */, > 41F9BFD82051DDE500ABF0B9 /* vector_buffer.h in Headers */, > 5CDD84021E439A6F00621E92 /* video_coding_impl.h in Headers */, > 419C84131FE249AB0040C30F /* video_content_type.h in Headers */, >@@ -11391,19 +12863,27 @@ > 4145F61F1FE1F38D00EB9CAF /* video_encoder_factory.h in Headers */, > 5CD2846B1E6A57F40094FDC8 /* video_frame.h in Headers */, > 41109AAE1E5FA19200C0955A /* video_frame_buffer.h in Headers */, >+ 41A08BB3212681C8001D5D7B /* video_stream_encoder_create.h in Headers */, > 5CD284691E6A57F40094FDC8 /* video_frame_buffer.h in Headers */, >+ 419241DD21275A3000634FCF /* time_delta.h in Headers */, > 419C82C41FE20DCD0040C30F /* video_receive_stream.h in Headers */, >+ 41F263AE212680A800274F59 /* fallthrough.h in Headers */, >+ 41E02CAC2127352D00C27CD6 /* bitrate_estimator.h in Headers */, > 5CDD85CB1E43B5C000621E92 /* video_receive_stream.h in Headers */, > 5C4B4C211E431F75002651C8 /* video_render_frames.h in Headers */, > 5CD2846C1E6A57F40094FDC8 /* video_rotation.h in Headers */, > 419C82BA1FE20DCD0040C30F /* video_send_stream.h in Headers */, > 5CDD85CE1E43B5C000621E92 /* video_send_stream.h in Headers */, >+ 41A08BB5212681C8001D5D7B /* video_stream_encoder_observer.h in Headers */, > 5CDD85D01E43B5C000621E92 /* video_stream_decoder.h in Headers */, > 419C84121FE249AB0040C30F /* video_timing.h in Headers */, >+ 419241622127385B00634FCF /* rw_lock_posix.h in Headers */, > 5C4B48FD1E42C1E3002651C8 /* videoadapter.h in Headers */, > 5C4B49001E42C1E3002651C8 /* videobroadcaster.h in Headers */, > 5C4B49031E42C1E3002651C8 /* videocapturer.h in Headers */, >+ 419241E021275A3000634FCF /* timestamp.h in Headers */, > 5C4B49041E42C1E3002651C8 /* videocapturerfactory.h in Headers */, >+ 419241572127376F00634FCF /* udptransport.h in Headers */, > 5CD285151E6A60570094FDC8 /* videocapturertracksource.h in Headers */, > 5C4B49071E42C1E3002651C8 /* videocommon.h in Headers */, > 41ECEAFE20646664009D5141 /* VideoProcessingSoftLink.h in Headers */, >@@ -11414,6 +12894,7 @@ > 5CD285171E6A60570094FDC8 /* videotrack.h in Headers */, > 5CD285191E6A60570094FDC8 /* videotracksource.h in Headers */, > 413A22BC1FE18E0700373E99 /* virtualsocketserver.h in Headers */, >+ 41F263B3212680A800274F59 /* arch.h in Headers */, > 5CDD87411E43BABE00621E92 /* voice_activity_detector.h in Headers */, > 5CDD84C81E43AF1300621E92 /* voice_detection_impl.h in Headers */, > 5CDD87421E43BABE00621E92 /* voice_gmm_tables.h in Headers */, >@@ -11426,10 +12907,12 @@ > 5C4B4C811E431F9C002651C8 /* wav_file.h in Headers */, > 5C4B4C841E431F9C002651C8 /* wav_header.h in Headers */, > 41ECEABC206403C2009D5141 /* WebKitUtilities.h in Headers */, >+ 419241AC212758D300634FCF /* sequence_buffer.h in Headers */, > 5CDD8CAB1E43C6F700621E92 /* webrtc_cng.h in Headers */, > 4145E4911EF88EF700FCF6E6 /* webrtc_libyuv.h in Headers */, > 41F9BFC72051DCE900ABF0B9 /* webrtc_vad.h in Headers */, > 5C4B488E1E42C1BA002651C8 /* webrtcmediaengine.h in Headers */, >+ 4102F6E121273416006AE8D7 /* video_stream_encoder_settings.h in Headers */, > 5CD2847A1E6A5D550094FDC8 /* webrtcsdp.h in Headers */, > 5CD2851B1E6A60570094FDC8 /* webrtcsessiondescriptionfactory.h in Headers */, > 5C4B48911E42C1BA002651C8 /* webrtcvideocapturer.h in Headers */, >@@ -11651,7 +13134,7 @@ > ); > runOnlyForDeploymentPostprocessing = 0; > shellPath = /bin/sh; >- shellScript = "PRIVATE_HEADERS_FOLDER_PATH=usr/local/include\n\nif [[ \"${DEPLOYMENT_LOCATION}\" == \"NO\" ]]; then\n PRIVATE_HEADERS_PATH=\"${TARGET_BUILD_DIR%/}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nelse\n PRIVATE_HEADERS_PATH=\"${DSTROOT}${INSTALL_PATH_PREFIX%/}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nfi;\n\nmkdir -p \"${PRIVATE_HEADERS_PATH}\"\n\nrsync -av --no-owner --no-group --prune-empty-dirs --exclude \".svn\" --exclude \"usr\" --include \"*/\" --include \"*.h\" --exclude \"*\" \"${SRCROOT}/Source/webrtc\" \"${PRIVATE_HEADERS_PATH}\"\n"; >+ shellScript = "PRIVATE_HEADERS_FOLDER_PATH=usr/local/include\n\nif [[ \"${DEPLOYMENT_LOCATION}\" == \"NO\" ]]; then\n PRIVATE_HEADERS_PATH=\"${TARGET_BUILD_DIR%/}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nelse\n PRIVATE_HEADERS_PATH=\"${DSTROOT}${INSTALL_PATH_PREFIX%/}/${PRIVATE_HEADERS_FOLDER_PATH}\"\nfi;\n\nmkdir -p \"${PRIVATE_HEADERS_PATH}\"\n\nrsync -av --no-owner --no-group --prune-empty-dirs --exclude \".svn\" --exclude \"usr\" --include \"*/\" --include \"*.h\" --exclude \"*\" \"${SRCROOT}/Source/webrtc\" \"${PRIVATE_HEADERS_PATH}\"\n\nrsync -av --no-owner --no-group --prune-empty-dirs --exclude \".svn\" --exclude \"usr\" --include \"*/\" --include \"*.h\" --exclude \"*\" \"${SRCROOT}/Source/third_party/abseil-cpp/absl\" \"${PRIVATE_HEADERS_PATH}\"\n"; > }; > 5CD286461E6E154E0094FDC8 /* Check for Weak VTables and Externals */ = { > isa = PBXShellScriptBuildPhase; >@@ -12227,6 +13710,7 @@ > isa = PBXSourcesBuildPhase; > buildActionMask = 2147483647; > files = ( >+ 415F1FB121272FBA00064CBF /* gain_curve_applier.cc in Sources */, > 5CDD8B6C1E43C2B500621E92 /* abs_quant.c in Sources */, > 5CDD8B6A1E43C2B500621E92 /* abs_quant_loop.c in Sources */, > 5CDD89F81E43BFB300621E92 /* accelerate.cc in Sources */, >@@ -12234,18 +13718,23 @@ > 5CDD85091E43B1EA00621E92 /* acm_receiver.cc in Sources */, > 5CDD850B1E43B1EA00621E92 /* acm_resampler.cc in Sources */, > 5C4B48D71E42C1E3002651C8 /* adaptedvideotracksource.cc in Sources */, >+ 419241C52127593F00634FCF /* loss_rate_filter.cc in Sources */, >+ 419241542127376F00634FCF /* basicasyncresolverfactory.cc in Sources */, > 5CD285A41E6A63430094FDC8 /* adaptive_fir_filter.cc in Sources */, > 41F411C71EF97BAC00343C26 /* adm_helpers.cc in Sources */, > 5CD285A81E6A63430094FDC8 /* aec3_common.cc in Sources */, > 5CD285AA1E6A63430094FDC8 /* aec3_fft.cc in Sources */, >+ 41F263B72126810C00274F59 /* base64.cc in Sources */, > 5CDD86BC1E43B9C200621E92 /* aec_core.cc in Sources */, > 5CDD86BB1E43B9C200621E92 /* aec_core_sse2.cc in Sources */, > 413092131EF8D51100757C55 /* aec_dump.cc in Sources */, > 5CDD86BE1E43B9C200621E92 /* aec_resampler.cc in Sources */, > 5CD285A61E6A63430094FDC8 /* aec_state.cc in Sources */, >+ 415F1FC02127304C00064CBF /* echo_cancellation_proxy.cc in Sources */, > 5CDD85E71E43B81000621E92 /* aecm_core.cc in Sources */, > 5CDD85E41E43B81000621E92 /* aecm_core_c.cc in Sources */, > 5CDD87011E43BA7500621E92 /* agc.cc in Sources */, >+ 41F2639221267F5300274F59 /* g722_encode.c in Sources */, > 5CDD86FF1E43BA7500621E92 /* agc_manager_direct.cc in Sources */, > 5CDD8FD11E43CD6600621E92 /* aimd_rate_control.cc in Sources */, > 41F9BFCB2051DDA200ABF0B9 /* alr_experiment.cc in Sources */, >@@ -12253,15 +13742,22 @@ > 5CDD87E51E43BDA100621E92 /* apm_data_dumper.cc in Sources */, > 5CD284C21E6A5FFC0094FDC8 /* apm_helpers.cc in Sources */, > 5CDD893B1E43BF3A00621E92 /* app.cc in Sources */, >+ 419241642127385B00634FCF /* rw_lock_posix.cc in Sources */, > 5CDD87A91E43BC0500621E92 /* arith_routines.c in Sources */, > 41433D0A1F79B33400387B4D /* arith_routines.c in Sources */, >+ 4102F6AB212732B1006AE8D7 /* rtp_payload_params.cc in Sources */, >+ 41299B8C2127365100B3414B /* send_time_history.cc in Sources */, > 5CDD87A71E43BC0500621E92 /* arith_routines_hist.c in Sources */, > 41433D291F79B33400387B4D /* arith_routines_hist.c in Sources */, >+ 41E02C8B212734B900C27CD6 /* decoder_database.cc in Sources */, >+ 41F2638A21267F4000274F59 /* fft.c in Sources */, > 5CDD87A81E43BC0500621E92 /* arith_routines_logist.c in Sources */, >+ 41E02C88212734B900C27CD6 /* encoder_database.cc in Sources */, > 41433D0F1F79B33400387B4D /* arith_routines_logist.c in Sources */, > 413A238C1FE18E0700373E99 /* asyncinvoker.cc in Sources */, > 413A216D1FE18D6A00373E99 /* asyncpacketsocket.cc in Sources */, > 413A23551FE18E0700373E99 /* asyncresolverinterface.cc in Sources */, >+ 41299B8B2127365100B3414B /* pacer_controller.cc in Sources */, > 413A23961FE18E0800373E99 /* asyncsocket.cc in Sources */, > 5C63F9E01E4174F6002CA531 /* asyncstuntcpsocket.cc in Sources */, > 413A23AB1FE18E0800373E99 /* asynctcpsocket.cc in Sources */, >@@ -12269,6 +13765,7 @@ > 5CDD84A91E43AF1300621E92 /* audio_buffer.cc in Sources */, > 5CDD85101E43B1EA00621E92 /* audio_coding_module.cc in Sources */, > 5C4B4C591E431F9C002651C8 /* audio_converter.cc in Sources */, >+ 41DDB26E212679D200296D47 /* string_builder.cc in Sources */, > 5CD285441E6A61D20094FDC8 /* audio_decoder.cc in Sources */, > 419C83E91FE248350040C30F /* audio_decoder_g711.cc in Sources */, > 4140B8311E4E3396007409E6 /* audio_decoder_g722.cc in Sources */, >@@ -12276,7 +13773,9 @@ > 5CDD8B6E1E43C2B500621E92 /* audio_decoder_ilbc.cc in Sources */, > 419C84BF1FE319440040C30F /* audio_decoder_ilbc.cc in Sources */, > 5CDD87AB1E43BC0500621E92 /* audio_decoder_isac.cc in Sources */, >+ 4192419A2127586500634FCF /* kiss_fft.cc in Sources */, > 419C835C1FE246BB0040C30F /* audio_decoder_isac_fix.cc in Sources */, >+ 419241EE21275AFA00634FCF /* simulcast_rate_allocator.cc in Sources */, > 419C836A1FE246CA0040C30F /* audio_decoder_isac_float.cc in Sources */, > 41433CF91F79B33400387B4D /* audio_decoder_isacfix.cc in Sources */, > 419C83F21FE2488D0040C30F /* audio_decoder_L16.cc in Sources */, >@@ -12285,6 +13784,8 @@ > 4140B8221E4E3383007409E6 /* audio_decoder_pcm.cc in Sources */, > 5CDD8FFC1E43CE3A00621E92 /* audio_decoder_pcm16b.cc in Sources */, > 5C119FFB1E457400004F0987 /* audio_device_buffer.cc in Sources */, >+ 419241E221275A3000634FCF /* time_delta.cc in Sources */, >+ 41F2639421267F5300274F59 /* g722_decode.c in Sources */, > 5C11A01D1E457578004F0987 /* audio_device_dummy.cc in Sources */, > 5C119FFE1E457400004F0987 /* audio_device_generic.cc in Sources */, > 5C11A00B1E457448004F0987 /* audio_device_mac.cc in Sources */, >@@ -12292,12 +13793,18 @@ > 5CDD8CA71E43C6F700621E92 /* audio_encoder_cng.cc in Sources */, > 5CDD8FF31E43CDF400621E92 /* audio_encoder_copy_red.cc in Sources */, > 419C83E71FE248350040C30F /* audio_encoder_g711.cc in Sources */, >+ 41F2636221267ADF00274F59 /* sdp_video_format.cc in Sources */, >+ 419241EF21275AFA00634FCF /* simulcast_utility.cc in Sources */, > 4140B8331E4E3396007409E6 /* audio_encoder_g722.cc in Sources */, > 419C833E1FE246230040C30F /* audio_encoder_g722.cc in Sources */, > 5CDD8B701E43C2B500621E92 /* audio_encoder_ilbc.cc in Sources */, > 419C84BD1FE319440040C30F /* audio_encoder_ilbc.cc in Sources */, > 5CDD87AD1E43BC0500621E92 /* audio_encoder_isac.cc in Sources */, > 419C836C1FE246CA0040C30F /* audio_encoder_isac_fix.cc in Sources */, >+ 416D3BDB212731C200775F09 /* adaptive_agc.cc in Sources */, >+ 416D3BE0212731C200775F09 /* biquad_filter.cc in Sources */, >+ 41924179212738FB00634FCF /* rtc_event_log_impl.cc in Sources */, >+ 4102F6BA21273382006AE8D7 /* audio_receive_stream.cc in Sources */, > 419C836B1FE246CA0040C30F /* audio_encoder_isac_float.cc in Sources */, > 41433CFB1F79B33400387B4D /* audio_encoder_isacfix.cc in Sources */, > 419C83F11FE2488D0040C30F /* audio_encoder_L16.cc in Sources */, >@@ -12305,10 +13812,12 @@ > 419C82F51FE20EB50040C30F /* audio_encoder_opus.cc in Sources */, > 419C82F31FE20EB50040C30F /* audio_encoder_opus_config.cc in Sources */, > 4140B8201E4E3383007409E6 /* audio_encoder_pcm.cc in Sources */, >+ 41F2638321267B7700274F59 /* rtpreceiverinterface.cc in Sources */, > 5CDD8FFE1E43CE3A00621E92 /* audio_encoder_pcm16b.cc in Sources */, > 5CD285461E6A61D20094FDC8 /* audio_format.cc in Sources */, > 5CDD84191E439B2900621E92 /* audio_format_conversion.cc in Sources */, > 5CD284921E6A5F410094FDC8 /* audio_frame_manipulator.cc in Sources */, >+ 41D6B45C21273159008F9353 /* rtp_video_sender.cc in Sources */, > 5CD2854D1E6A62130094FDC8 /* audio_frame_operations.cc in Sources */, > 5CDD8A8F1E43C00F00621E92 /* audio_loop.cc in Sources */, > 5CD284951E6A5F410094FDC8 /* audio_mixer_impl.cc in Sources */, >@@ -12316,10 +13825,12 @@ > 5CDD8A011E43BFB300621E92 /* audio_multi_vector.cc in Sources */, > 419C830D1FE20F3C0040C30F /* audio_network_adaptor_config.cc in Sources */, > 5CDD8F791E43CBE000621E92 /* audio_network_adaptor_impl.cc in Sources */, >+ 419241C72127593F00634FCF /* bbr_network_controller.cc in Sources */, > 5CDD8FE91E43CDCA00621E92 /* audio_processing.cc in Sources */, > 5CDD84AB1E43AF1300621E92 /* audio_processing_impl.cc in Sources */, > 419C829D1FE20D1C0040C30F /* audio_processing_statistics.cc in Sources */, > 5CDD8ACC1E43C23900621E92 /* audio_receive_stream.cc in Sources */, >+ 416D3BED212731C200775F09 /* vector_float_frame.cc in Sources */, > 5C4B4C5C1E431F9C002651C8 /* audio_ring_buffer.cc in Sources */, > 5CDD8ACF1E43C23900621E92 /* audio_send_stream.cc in Sources */, > 5CD284B11E6A5F9F0094FDC8 /* audio_send_stream.cc in Sources */, >@@ -12328,6 +13839,7 @@ > 41F9BF9B2051C84C00ABF0B9 /* audio_transport_impl.cc in Sources */, > 5C4B4C5F1E431F9C002651C8 /* audio_util.cc in Sources */, > 5CDD8A041E43BFB300621E92 /* audio_vector.cc in Sources */, >+ 41E02CAE2127352D00C27CD6 /* bitrate_estimator.cc in Sources */, > 5CD284F01E6A60570094FDC8 /* audiotrack.cc in Sources */, > 5CDD8B721E43C2B500621E92 /* augmented_cb_corr.c in Sources */, > 5CDD86401E43B8B500621E92 /* auto_corr_to_refl_coef.c in Sources */, >@@ -12335,13 +13847,16 @@ > 5CDD8A071E43BFB300621E92 /* background_noise.cc in Sources */, > 41433CF71F79B33400387B4D /* bandwidth_estimator.c in Sources */, > 5CDD87AE1E43BC0500621E92 /* bandwidth_estimator.c in Sources */, >+ 41E02CCC212735B700C27CD6 /* bitrate_settings.cc in Sources */, > 5C63F9E21E4174F6002CA531 /* basicpacketsocketfactory.cc in Sources */, >+ 4102F69221273206006AE8D7 /* rtcstatstraversal.cc in Sources */, > 5C4B4D091E4322F6002651C8 /* basicportallocator.cc in Sources */, > 419C846F1FE255FA0040C30F /* bio_ssl.cc in Sources */, > 413A233B1FE18E0700373E99 /* bitbuffer.cc in Sources */, > 5C4B4C191E431F75002651C8 /* bitrate_adjuster.cc in Sources */, > 5CDD852F1E43B39C00621E92 /* bitrate_allocator.cc in Sources */, > 5CDD8F7D1E43CBE000621E92 /* bitrate_controller.cc in Sources */, >+ 4102F6BC21273382006AE8D7 /* flexfec_receive_stream.cc in Sources */, > 5CDD905D1E43D11200621E92 /* bitrate_controller_impl.cc in Sources */, > 5CDD8FA01E43CCBE00621E92 /* bitrate_prober.cc in Sources */, > 413A21751FE18D7100373E99 /* bitrateallocationstrategy.cc in Sources */, >@@ -12349,17 +13864,22 @@ > 5CDD86871E43B93900621E92 /* block_mean_calculator.cc in Sources */, > 5CD285B01E6A63430094FDC8 /* block_processor.cc in Sources */, > 5CD285AE1E6A63430094FDC8 /* block_processor_metrics.cc in Sources */, >+ 4102F69021273206006AE8D7 /* jseptransportcontroller.cc in Sources */, > 5C4B4C611E431F9C002651C8 /* blocker.cc in Sources */, > 5CDD8A0A1E43BFB300621E92 /* buffer_level_filter.cc in Sources */, >+ 41DDB264212679A300296D47 /* opensslcertificate.cc in Sources */, > 413A239B1FE18E0800373E99 /* bufferqueue.cc in Sources */, > 5CD285481E6A61D20094FDC8 /* builtin_audio_decoder_factory.cc in Sources */, >+ 41F2637321267B4A00274F59 /* spl_sqrt_floor.c in Sources */, > 413091FB1EF8CFF800757C55 /* builtin_audio_encoder_factory.cc in Sources */, > 5CDD8B741E43C2B500621E92 /* bw_expand.c in Sources */, > 5CDD8FD31E43CD6600621E92 /* bwe_defines.cc in Sources */, > 5CDD893E1E43BF3A00621E92 /* bye.cc in Sources */, >+ 4192423E21276B5A00634FCF /* VideoToolBoxEncoderFactory.cpp in Sources */, > 413A23F21FE18E0800373E99 /* bytebuffer.cc in Sources */, > 5CDD85341E43B39C00621E92 /* call.cc in Sources */, > 5CDD85121E43B1EA00621E92 /* call_statistics.cc in Sources */, >+ 419241442127372800634FCF /* pitch_search_internal.cc in Sources */, > 5CDD859C1E43B5C000621E92 /* call_stats.cc in Sources */, > 4145E4E41EF8CD7D00FCF6E6 /* callfactory.cc in Sources */, > 419C83121FE242800040C30F /* candidate.cc in Sources */, >@@ -12371,10 +13891,12 @@ > 5CDD8B801E43C2B500621E92 /* cb_search.c in Sources */, > 5CDD8B7E1E43C2B500621E92 /* cb_search_core.c in Sources */, > 5CDD8B821E43C2B500621E92 /* cb_update_best_index.c in Sources */, >+ 4102F6DB21273416006AE8D7 /* video_stream_decoder_create.cc in Sources */, > 5C4B4C641E431F9C002651C8 /* channel_buffer.cc in Sources */, > 5CDD8F801E43CBE000621E92 /* channel_controller.cc in Sources */, > 5CDD8B841E43C2B500621E92 /* chebyshev.c in Sources */, > 413A23731FE18E0700373E99 /* checks.cc in Sources */, >+ 419241AD212758D300634FCF /* spectral_features.cc in Sources */, > 5CDD86A11E43B99400621E92 /* circular_buffer.cc in Sources */, > 5C4B4CC61E4320A9002651C8 /* clock.cc in Sources */, > 5C4B48DB1E42C1E3002651C8 /* codec.cc in Sources */, >@@ -12383,6 +13905,9 @@ > 5CDD8A0D1E43BFB300621E92 /* comfort_noise.cc in Sources */, > 5CD285B41E6A63430094FDC8 /* comfort_noise_generator.cc in Sources */, > 5CDD89411E43BF3A00621E92 /* common_header.cc in Sources */, >+ 419241812127497100634FCF /* bad_variant_access.cc in Sources */, >+ 416D3BEC212731C200775F09 /* vad_with_level.cc in Sources */, >+ 41DDB26F212679D200296D47 /* audio_format_to_string.cc in Sources */, > 5CDD8B861E43C2B500621E92 /* comp_corr.c in Sources */, > 5CFD538D1E4BD3A300482908 /* compare_neon.cc in Sources */, > 5CFD538E1E4BD3A300482908 /* compare_neon64.cc in Sources */, >@@ -12395,9 +13920,11 @@ > 419C83FB1FE249370040C30F /* constants.cc in Sources */, > 5CDD8F851E43CBE000621E92 /* controller.cc in Sources */, > 5CDD8F831E43CBE000621E92 /* controller_manager.cc in Sources */, >+ 41E02C7D2127347400C27CD6 /* rtp_video_header.cc in Sources */, > 41F9BFAC2051C91900ABF0B9 /* convert_legacy_video_factory.cc in Sources */, > 5CDD86481E43B8B500621E92 /* copy_set_operations.c in Sources */, > 413A23151FE18E0700373E99 /* copyonwritebuffer.cc in Sources */, >+ 41F2636921267ADF00274F59 /* video_encoder_software_fallback_wrapper.cc in Sources */, > 5C4B4CCA1E4320A9002651C8 /* cpu_features.cc in Sources */, > 5C4B4CCB1E4320A9002651C8 /* cpu_info.cc in Sources */, > 5CDD87B11E43BC0500621E92 /* crc.c in Sources */, >@@ -12408,7 +13935,9 @@ > 5CDD864B1E43B8B500621E92 /* cross_correlation.c in Sources */, > 5CDD8A0F1E43BFB300621E92 /* cross_correlation.cc in Sources */, > 413A23221FE18E0700373E99 /* cryptstring.cc in Sources */, >+ 41924246212771DC00634FCF /* objc_video_frame.mm in Sources */, > 419C848E1FE2574D0040C30F /* custom_extensions.cc in Sources */, >+ 419241E821275A7600634FCF /* field_trial_units.cc in Sources */, > 419C848C1FE2574D0040C30F /* d1_both.cc in Sources */, > 419C848D1FE2574D0040C30F /* d1_lib.cc in Sources */, > 419C848F1FE2574D0040C30F /* d1_pkt.cc in Sources */, >@@ -12416,7 +13945,9 @@ > 5CD284F21E6A60570094FDC8 /* datachannel.cc in Sources */, > 5CDD8F871E43CBE000621E92 /* debug_dump_writer.cc in Sources */, > 419C83F91FE248F10040C30F /* decimator.cc in Sources */, >+ 4192416E2127389B00634FCF /* field_trial_parser.cc in Sources */, > 5CDD8A161E43BFB300621E92 /* decision_logic.cc in Sources */, >+ 4102F6A121273262006AE8D7 /* remix_resample.cc in Sources */, > 41433D051F79B33400387B4D /* decode.c in Sources */, > 5CDD87B41E43BC0500621E92 /* decode.c in Sources */, > 5CDD8B8F1E43C2B500621E92 /* decode.c in Sources */, >@@ -12425,38 +13956,54 @@ > 41433D0E1F79B33400387B4D /* decode_plc.c in Sources */, > 5CDD8B8D1E43C2B500621E92 /* decode_residual.c in Sources */, > 5CDD8A191E43BFB300621E92 /* decoder_database.cc in Sources */, >+ 419241E121275A3000634FCF /* data_rate.cc in Sources */, > 5CDD8B911E43C2B500621E92 /* decoder_interpolate_lsf.c in Sources */, >+ 419241CA2127593F00634FCF /* rtt_stats.cc in Sources */, > 5CDD83CA1E439A6F00621E92 /* decoding_state.cc in Sources */, > 5CD284971E6A5F410094FDC8 /* default_output_rate_calculator.cc in Sources */, >+ 41924245212771BB00634FCF /* objc_video_decoder_factory.mm in Sources */, > 5CD285391E6A61980094FDC8 /* default_video_bitrate_allocator.cc in Sources */, > 5CDD868D1E43B93900621E92 /* delay_estimator.cc in Sources */, > 5CDD868B1E43B93900621E92 /* delay_estimator_wrapper.cc in Sources */, > 5CDD8A1D1E43BFB300621E92 /* delay_manager.cc in Sources */, > 5CDD8A201E43BFB300621E92 /* delay_peak_detector.cc in Sources */, >+ 416D3BE7212731C200775F09 /* noise_level_estimator.cc in Sources */, >+ 4102F68F21273206006AE8D7 /* transportstats.cc in Sources */, > 5CDD86EE1E43BA6D00621E92 /* digital_agc.c in Sources */, > 5CDD864C1E43B8B500621E92 /* division_operations.c in Sources */, > 5CDD89471E43BF3A00621E92 /* dlrr.cc in Sources */, > 5CDD8B941E43C2B500621E92 /* do_plc.c in Sources */, > 412455451EF87C0F00F11809 /* dot_product_with_scale.cc in Sources */, > 5CDD86501E43B8B500621E92 /* downsample_fast.c in Sources */, >+ 4102F6BB21273382006AE8D7 /* degraded_call.cc in Sources */, > 4145E4D61EF8CC7600FCF6E6 /* downsampled_render_buffer.cc in Sources */, > 5CDD8A231E43BFB300621E92 /* dsp_helper.cc in Sources */, > 419C84881FE2574D0040C30F /* dtls_method.cc in Sources */, > 419C848A1FE2574D0040C30F /* dtls_record.cc in Sources */, > 419C82E41FE20E590040C30F /* dtlssrtptransport.cc in Sources */, > 419C83E11FE247F20040C30F /* dtlstransport.cc in Sources */, >+ 41DDB254212678E400296D47 /* platform_thread_types.cc in Sources */, > 419C83DE1FE247F20040C30F /* dtlstransportinternal.cc in Sources */, >+ 41E02CB02127352D00C27CD6 /* trendline_estimator.cc in Sources */, > 5CDD8A261E43BFB300621E92 /* dtmf_buffer.cc in Sources */, >+ 4102F6C9212733B7006AE8D7 /* video_quality_observer.cc in Sources */, > 5CDD88771E43BE3C00621E92 /* dtmf_queue.cc in Sources */, > 5CDD8A291E43BFB300621E92 /* dtmf_tone_generator.cc in Sources */, > 5CD284F41E6A60570094FDC8 /* dtmfsender.cc in Sources */, >+ 419241E321275A3000634FCF /* timestamp.cc in Sources */, > 5CDD8F8A1E43CBE000621E92 /* dtx_controller.cc in Sources */, > 5CDD86C11E43B9C200621E92 /* echo_cancellation.cc in Sources */, > 5CDD84AE1E43AF1300621E92 /* echo_cancellation_impl.cc in Sources */, >+ 4102F6A421273262006AE8D7 /* audio_level.cc in Sources */, >+ 419241D3212759A100634FCF /* fec_private_tables_random.cc in Sources */, > 5CD285B81E6A63430094FDC8 /* echo_canceller3.cc in Sources */, >+ 41F2639A21267F5E00274F59 /* pa_ringbuffer.c in Sources */, > 5CDD85EA1E43B81000621E92 /* echo_control_mobile.cc in Sources */, >+ 419241F121275B2B00634FCF /* simulcast_encoder_adapter.cc in Sources */, >+ 416D3BE8212731C200775F09 /* noise_spectrum_estimator.cc in Sources */, > 5CDD84B01E43AF1300621E92 /* echo_control_mobile_impl.cc in Sources */, > 5CD285BA1E6A63430094FDC8 /* echo_path_delay_estimator.cc in Sources */, >+ 419241C42127593F00634FCF /* bandwidth_sampler.cc in Sources */, > 5CD285BC1E6A63430094FDC8 /* echo_path_variability.cc in Sources */, > 5CD285C01E6A63430094FDC8 /* echo_remover.cc in Sources */, > 5CD285BE1E6A63430094FDC8 /* echo_remover_metrics.cc in Sources */, >@@ -12466,10 +14013,12 @@ > 5CDD87B51E43BC0500621E92 /* encode_lpc_swb.c in Sources */, > 5CDD8A951E43C00F00621E92 /* encode_neteq_input.cc in Sources */, > 5CDD83CC1E439A6F00621E92 /* encoded_frame.cc in Sources */, >+ 41A08BAB212681C8001D5D7B /* encoded_frame.cc in Sources */, > 5CDD859F1E43B5C000621E92 /* encoder_rtcp_feedback.cc in Sources */, > 5CDD86511E43B8B500621E92 /* energy.c in Sources */, > 5CDD8B981E43C2B500621E92 /* energy_inverse.c in Sources */, > 5CDD8B9A1E43C2B500621E92 /* enh_upsample.c in Sources */, >+ 41E02CBE2127356A00C27CD6 /* sslcertificate.cc in Sources */, > 5CDD8B9E1E43C2B500621E92 /* enhancer.c in Sources */, > 5CDD8B9C1E43C2B500621E92 /* enhancer_interface.c in Sources */, > 5CDD87B81E43BC0500621E92 /* entropy_coding.c in Sources */, >@@ -12477,6 +14026,8 @@ > 5CD285C21E6A63430094FDC8 /* erl_estimator.cc in Sources */, > 5CD285C41E6A63430094FDC8 /* erle_estimator.cc in Sources */, > 419C84921FE2591F0040C30F /* err_data.c in Sources */, >+ 4102F6DC21273416006AE8D7 /* color_space.cc in Sources */, >+ 41E02C7A2127347400C27CD6 /* rtp_generic_frame_descriptor.cc in Sources */, > 5C4B4CD21E4320A9002651C8 /* event.cc in Sources */, > 413A23B71FE18E0800373E99 /* event.cc in Sources */, > 5CD286141E6A66130094FDC8 /* event_log_writer.cc in Sources */, >@@ -12486,6 +14037,7 @@ > 5CDD8A2C1E43BFB300621E92 /* expand.cc in Sources */, > 5CDD894A1E43BF3A00621E92 /* extended_jitter_report.cc in Sources */, > 5CDD894D1E43BF3A00621E92 /* extended_reports.cc in Sources */, >+ 41E02C8D212734B900C27CD6 /* video_coding_defines.cc in Sources */, > 5CDD8A971E43C00F00621E92 /* fake_decode_from_file.cc in Sources */, > 413A23101FE18E0700373E99 /* fakeclock.cc in Sources */, > 413A23CC1FE18E0800373E99 /* fakesslidentity.cc in Sources */, >@@ -12503,23 +14055,27 @@ > 413A23B51FE18E0800373E99 /* fileutils.cc in Sources */, > 5CDD86551E43B8B500621E92 /* filter_ar.c in Sources */, > 5CDD86541E43B8B500621E92 /* filter_ar_fast_q12.c in Sources */, >+ 419241992127586500634FCF /* rnn_vad_weights.cc in Sources */, > 5CDD87BC1E43BC0500621E92 /* filter_functions.c in Sources */, > 5CDD86561E43B8B500621E92 /* filter_ma_fast_q12.c in Sources */, > 41433D271F79B33400387B4D /* filterbank_tables.c in Sources */, > 41433D061F79B33400387B4D /* filterbanks.c in Sources */, > 5CDD87BF1E43BC0500621E92 /* filterbanks.c in Sources */, > 5CDD8BA01E43C2B500621E92 /* filtered_cb_vecs.c in Sources */, >+ 4192413D2127372400634FCF /* fft_util.cc in Sources */, > 41433D041F79B33400387B4D /* filters.c in Sources */, > 5C11A0031E457400004F0987 /* fine_audio_buffer.cc in Sources */, > 5CDD89501E43BF3A00621E92 /* fir.cc in Sources */, > 419C831B1FE242B20040C30F /* fir_filter_c.cc in Sources */, > 419C831D1FE242B20040C30F /* fir_filter_factory.cc in Sources */, > 5C4B4C6A1E431F9C002651C8 /* fir_filter_sse.cc in Sources */, >+ 4192424121276F0200634FCF /* VideoToolBoxDecoderFactory.cpp in Sources */, > 413A217D1FE18D7800373E99 /* flags.cc in Sources */, > 5CDD887E1E43BE3C00621E92 /* flexfec_header_reader_writer.cc in Sources */, > 5CD284B91E6A5F9F0094FDC8 /* flexfec_receive_stream_impl.cc in Sources */, > 5CDD88831E43BE3C00621E92 /* flexfec_receiver.cc in Sources */, > 5CDD88851E43BE3C00621E92 /* flexfec_sender.cc in Sources */, >+ 41DDB2592126792800296D47 /* zero_memory.cc in Sources */, > 5CDD88881E43BE3C00621E92 /* forward_error_correction.cc in Sources */, > 5CDD88861E43BE3C00621E92 /* forward_error_correction_internal.cc in Sources */, > 5CD285C91E6A63430094FDC8 /* frame_blocker.cc in Sources */, >@@ -12532,16 +14088,21 @@ > 5CDD83D31E439A6F00621E92 /* frame_object.cc in Sources */, > 4140B8241E4E3383007409E6 /* g711_interface.c in Sources */, > 4140B8381E4E3396007409E6 /* g722_interface.c in Sources */, >+ 41F2635F21267ADF00274F59 /* builtin_video_decoder_factory.cc in Sources */, > 5CDD84B21E43AF1300621E92 /* gain_control_for_experimental_agc.cc in Sources */, >+ 4102F6A921273262006AE8D7 /* transport_feedback_packet_loss_tracker.cc in Sources */, > 5CDD84B41E43AF1300621E92 /* gain_control_impl.cc in Sources */, > 5CDD8BA41E43C2B500621E92 /* gain_dequant.c in Sources */, > 5CDD8BA61E43C2B500621E92 /* gain_quant.c in Sources */, >+ 4192413E2127372400634FCF /* lp_residual.cc in Sources */, >+ 41F2638D21267F4900274F59 /* g711.c in Sources */, > 5CDD83D51E439A6F00621E92 /* generic_decoder.cc in Sources */, > 5CDD83D71E439A6F00621E92 /* generic_encoder.cc in Sources */, > 5CDD8BA81E43C2B500621E92 /* get_cd_vec.c in Sources */, > 5CDD86571E43B8B500621E92 /* get_hanning_window.c in Sources */, > 5CDD8BAA1E43C2B500621E92 /* get_lsp_poly.c in Sources */, > 5CDD86581E43B8B500621E92 /* get_scaling_square.c in Sources */, >+ 419241C92127593F00634FCF /* bbr_factory.cc in Sources */, > 5CDD8BAC1E43C2B500621E92 /* get_sync_seq.c in Sources */, > 5CDD87291E43BABE00621E92 /* gmm.cc in Sources */, > 5CDD85581E43B42B00621E92 /* h264.cc in Sources */, >@@ -12549,14 +14110,21 @@ > 5CDD83561E43257200621E92 /* h264_common.cc in Sources */, > 4145E4BF1EF894F600FCF6E6 /* h264_profile_level_id.cc in Sources */, > 5CD285EA1E6A639F0094FDC8 /* h264_sprop_parameter_sets.cc in Sources */, >+ 4192418E212749C800634FCF /* transport_feedback_adapter.cc in Sources */, > 5CDD83D91E439A6F00621E92 /* h264_sps_pps_tracker.cc in Sources */, >+ 41F263BB2126811500274F59 /* sigslot.cc in Sources */, > 419C84691FE255FA0040C30F /* handshake.cc in Sources */, >+ 41299B912127367B00B3414B /* isac_vad.c in Sources */, > 419C84891FE2574D0040C30F /* handshake_client.cc in Sources */, >+ 41299B962127369100B3414B /* fake_network_pipe.cc in Sources */, > 419C848B1FE2574D0040C30F /* handshake_server.cc in Sources */, > 41ECEAD82064147C009D5141 /* helpers.cc in Sources */, > 413A236E1FE18E0700373E99 /* helpers.cc in Sources */, >+ 419241612127385B00634FCF /* rw_lock_wrapper.cc in Sources */, >+ 41E02CB22127352D00C27CD6 /* probe_bitrate_estimator.cc in Sources */, > 5CDD83DB1E439A6F00621E92 /* histogram.cc in Sources */, > 419C83511FE246650040C30F /* histogram_percentile_counter.cc in Sources */, >+ 41AF2D14212CD6AF00D033D5 /* RTCVideoDecoderH264.mm in Sources */, > 5CDD8BAE1E43C2B500621E92 /* hp_input.c in Sources */, > 5CDD8BB01E43C2B500621E92 /* hp_output.c in Sources */, > 413A23071FE18E0700373E99 /* httpbase.cc in Sources */, >@@ -12564,6 +14132,7 @@ > 5CDD90501E43D0E900621E92 /* i420.cc in Sources */, > 5CD284671E6A57F40094FDC8 /* i420_buffer.cc in Sources */, > 5C4B4C1B1E431F75002651C8 /* i420_buffer_pool.cc in Sources */, >+ 41924244212771B700634FCF /* objc_video_encoder_factory.mm in Sources */, > 413091F81EF8CFBD00757C55 /* iceserverparsing.cc in Sources */, > 419C83E01FE247F20040C30F /* icetransportinternal.cc in Sources */, > 413A23741FE18E0700373E99 /* ifaddrs_converter.cc in Sources */, >@@ -12578,6 +14147,7 @@ > 5CDD8A9A1E43C00F00621E92 /* input_audio_file.cc in Sources */, > 5CDD8FD51E43CD6600621E92 /* inter_arrival.cc in Sources */, > 5CDD83DD1E439A6F00621E92 /* inter_frame_delay.cc in Sources */, >+ 41F2637E21267B7700274F59 /* audio_options.cc in Sources */, > 5CD2852F1E6A61110094FDC8 /* internaldecoderfactory.cc in Sources */, > 5CD285311E6A61110094FDC8 /* internalencoderfactory.cc in Sources */, > 5CDD8BBF1E43C2B500621E92 /* interpolate.c in Sources */, >@@ -12594,6 +14164,7 @@ > 5CD284741E6A5D280094FDC8 /* jsepicecandidate.cc in Sources */, > 5CD284721E6A5D080094FDC8 /* jsepsessiondescription.cc in Sources */, > 41F9BFE32051DE1800ABF0B9 /* jseptransport.cc in Sources */, >+ 41F2639E2126800000274F59 /* aligned_malloc.cc in Sources */, > 413A23301FE18E0700373E99 /* json.cc in Sources */, > 5C4B4C701E431F9C002651C8 /* lapped_transform.cc in Sources */, > 5CDD87C41E43BC0500621E92 /* lattice.c in Sources */, >@@ -12607,6 +14178,7 @@ > 5CDD8C0F1E43C34600621E92 /* locked_bandwidth_info.cc in Sources */, > 413A22CA1FE18E0700373E99 /* logging.cc in Sources */, > 413A22C01FE18E0700373E99 /* logging_mac.mm in Sources */, >+ 419241862127499300634FCF /* packet_queue_interface.cc in Sources */, > 413A23BE1FE18E0800373E99 /* logsinks.cc in Sources */, > 5CDD87051E43BA7500621E92 /* loudness_histogram.cc in Sources */, > 5CD2855D1E6A62ED0094FDC8 /* low_cut_filter.cc in Sources */, >@@ -12614,14 +14186,18 @@ > 5CDD8BC11E43C2B500621E92 /* lpc_encode.c in Sources */, > 5CDD87C71E43BC0500621E92 /* lpc_gain_swb_tables.c in Sources */, > 41433CEE1F79B33400387B4D /* lpc_masking_model.c in Sources */, >+ 419241F521275C3200634FCF /* vp8_encoder_simulcast_proxy.cc in Sources */, > 5CDD87C91E43BC0500621E92 /* lpc_shape_swb12_tables.c in Sources */, > 5CDD87CB1E43BC0500621E92 /* lpc_shape_swb16_tables.c in Sources */, > 5CDD87CD1E43BC0500621E92 /* lpc_tables.c in Sources */, > 41433D1E1F79B33400387B4D /* lpc_tables.c in Sources */, > 5CDD865B1E43B8B500621E92 /* lpc_to_refl_coef.c in Sources */, > 5CDD8BC31E43C2B500621E92 /* lsf_check.c in Sources */, >+ 419241522127376F00634FCF /* regatheringcontroller.cc in Sources */, >+ 41E02CB62127352D00C27CD6 /* goog_cc_network_control.cc in Sources */, > 5CDD8BC51E43C2B500621E92 /* lsf_interpolate_to_poly_dec.c in Sources */, > 5CDD8BC71E43C2B500621E92 /* lsf_interpolate_to_poly_enc.c in Sources */, >+ 4102F6E021273416006AE8D7 /* i010_buffer.cc in Sources */, > 5CDD8BC91E43C2B500621E92 /* lsf_to_lsp.c in Sources */, > 5CDD8BCB1E43C2B500621E92 /* lsf_to_poly.c in Sources */, > 5CDD8BCD1E43C2B500621E92 /* lsp_to_lsf.c in Sources */, >@@ -12629,6 +14205,7 @@ > 413A23381FE18E0700373E99 /* macutils.cc in Sources */, > 5CD285CB1E6A63430094FDC8 /* main_filter_update_gain.cc in Sources */, > 5CD285CF1E6A63430094FDC8 /* matched_filter.cc in Sources */, >+ 416D3BDE212731C200775F09 /* adaptive_mode_level_estimator.cc in Sources */, > 5CD285CD1E6A63430094FDC8 /* matched_filter_lag_aggregator.cc in Sources */, > 41F9BFD42051DDE500ABF0B9 /* matrix_buffer.cc in Sources */, > 5CDD86A41E43B99400621E92 /* mean_variance_estimator.cc in Sources */, >@@ -12667,17 +14244,24 @@ > 413A23E61FE18E0800373E99 /* network.cc in Sources */, > 413A238B1FE18E0700373E99 /* networkmonitor.cc in Sources */, > 5CDD85FE1E43B84E00621E92 /* noise_suppression.c in Sources */, >+ 41A08BD421272EFA001D5D7B /* round_robin_packet_queue.cc in Sources */, > 5CDD84E91E43B0B600621E92 /* noise_suppression_impl.cc in Sources */, > 5CDD85FC1E43B84E00621E92 /* noise_suppression_x.c in Sources */, > 413A235F1FE18E0700373E99 /* noop.cc in Sources */, > 413A23EE1FE18E0800373E99 /* noop.mm in Sources */, >+ 419241702127389B00634FCF /* quality_scaling_experiment.cc in Sources */, > 5CDD8A3D1E43BFB300621E92 /* normal.cc in Sources */, >+ 419241A02127588300634FCF /* audio_codec_pair_id.cc in Sources */, > 5CDD86A71E43B99400621E92 /* normalized_covariance_estimator.cc in Sources */, > 5CDD86001E43B84E00621E92 /* ns_core.c in Sources */, >+ 4102F69321273206006AE8D7 /* rtpparametersconversion.cc in Sources */, >+ 415F1FCE212730F000064CBF /* audio_frame.cc in Sources */, >+ 415F1FA621272FBA00064CBF /* adaptive_digital_gain_applier.cc in Sources */, > 41ECEAC220640F28009D5141 /* NSString+StdString.mm in Sources */, > 5CDD86051E43B84E00621E92 /* nsx_core.c in Sources */, > 5CDD86021E43B84E00621E92 /* nsx_core_c.c in Sources */, > 41F411AD1EF8D91F00343C26 /* null_aec_dump_factory.cc in Sources */, >+ 4192423D212768BD00634FCF /* objc_frame_buffer.mm in Sources */, > 419C83B31FE2472E0040C30F /* null_audio_poller.cc in Sources */, > 413A23D21FE18E0800373E99 /* nullsocketserver.cc in Sources */, > 5CDD86941E43B93900621E92 /* ooura_fft.cc in Sources */, >@@ -12697,6 +14281,7 @@ > 5CDD8BD31E43C2B500621E92 /* pack_bits.c in Sources */, > 5CDD8A421E43BFB300621E92 /* packet.cc in Sources */, > 5CDD83EE1E439A6F00621E92 /* packet.cc in Sources */, >+ 419242422127718D00634FCF /* video_encoder_factory.mm in Sources */, > 5CDD8AAF1E43C00F00621E92 /* packet.cc in Sources */, > 5CDD8A401E43BFB300621E92 /* packet_buffer.cc in Sources */, > 5CDD83EC1E439A6F00621E92 /* packet_buffer.cc in Sources */, >@@ -12704,9 +14289,11 @@ > 419C832C1FE245CD0040C30F /* packet_queue.cc in Sources */, > 5CDD8FA41E43CCBE00621E92 /* packet_router.cc in Sources */, > 5CDD8AAC1E43C00F00621E92 /* packet_source.cc in Sources */, >+ 41AF2D13212CD6AC00D033D5 /* RTCVideoCodecH264.mm in Sources */, > 412455561EF887FB00F11809 /* packetlossestimator.cc in Sources */, > 419C83F51FE248CA0040C30F /* packetsocketfactory.cc in Sources */, > 419C83DA1FE247F20040C30F /* packettransportinternal.cc in Sources */, >+ 416D3BE3212731C200775F09 /* fixed_gain_controller.cc in Sources */, > 413A233C1FE18E0700373E99 /* pathutils.cc in Sources */, > 5C4B48831E42C1BA002651C8 /* payload_type_mapper.cc in Sources */, > 5CDD90001E43CE3A00621E92 /* pcm16b.c in Sources */, >@@ -12718,6 +14305,7 @@ > 5CDD87D01E43BC0500621E92 /* pitch_estimator.c in Sources */, > 41433CF61F79B33400387B4D /* pitch_estimator_c.c in Sources */, > 5CDD87D21E43BC0500621E92 /* pitch_filter.c in Sources */, >+ 41F2636321267ADF00274F59 /* video_codec.cc in Sources */, > 41433D111F79B33400387B4D /* pitch_filter.c in Sources */, > 41433CF41F79B33400387B4D /* pitch_filter_c.c in Sources */, > 41433D101F79B33400387B4D /* pitch_gain_tables.c in Sources */, >@@ -12742,6 +14330,7 @@ > 419C83131FE242800040C30F /* proxy.cc in Sources */, > 413A23C21FE18E0800373E99 /* proxyinfo.cc in Sources */, > 413A22A71FE18E0600373E99 /* proxyserver.cc in Sources */, >+ 4192418C212749C800634FCF /* send_side_congestion_controller.cc in Sources */, > 5C63F9FE1E4174F6002CA531 /* pseudotcp.cc in Sources */, > 5CDD89581E43BF3A00621E92 /* psfb.cc in Sources */, > 5CDD87531E43BAF500621E92 /* push_resampler.cc in Sources */, >@@ -12749,13 +14338,17 @@ > 413092091EF8D11200757C55 /* qp_parser.cc in Sources */, > 5CDD83811E439A3500621E92 /* quality_scaler.cc in Sources */, > 5CD2862A1E6A66C80094FDC8 /* quality_threshold.cc in Sources */, >+ 41F2636521267ADF00274F59 /* video_decoder_software_fallback_wrapper.cc in Sources */, > 413A22FB1FE18E0700373E99 /* race_checker.cc in Sources */, > 413A23CB1FE18E0800373E99 /* random.cc in Sources */, > 5CDD8A4A1E43BFB300621E92 /* random_vector.cc in Sources */, >+ 4102F6AE212732E7006AE8D7 /* expand_uma_logger.cc in Sources */, > 5CDD865F1E43B8B500621E92 /* randomization_functions.c in Sources */, > 5CDD895B1E43BF3A00621E92 /* rapid_resync_request.cc in Sources */, > 413A238D1FE18E0700373E99 /* rate_limiter.cc in Sources */, > 413A23581FE18E0700373E99 /* rate_statistics.cc in Sources */, >+ 4102F6E321273416006AE8D7 /* video_bitrate_allocation.cc in Sources */, >+ 41E02CC52127358800C27CD6 /* video_encoder_config.cc in Sources */, > 413A23621FE18E0700373E99 /* ratetracker.cc in Sources */, > 5CDD86611E43B8B500621E92 /* real_fft.c in Sources */, > 5C4B4C771E431F9C002651C8 /* real_fourier.cc in Sources */, >@@ -12766,17 +14359,22 @@ > 5CDD83F41E439A6F00621E92 /* receiver.cc in Sources */, > 5CDD895E1E43BF3A00621E92 /* receiver_report.cc in Sources */, > 5CDD8A4D1E43BFB300621E92 /* red_payload_splitter.cc in Sources */, >+ 41DDB265212679A300296D47 /* opensslutility.cc in Sources */, > 5CDD8BD91E43C2B500621E92 /* refiner.c in Sources */, >+ 419241902127581000634FCF /* fec_private_tables_bursty.cc in Sources */, > 5CDD86621E43B8B500621E92 /* refl_coef_to_lpc.c in Sources */, > 5C63FA011E4174F6002CA531 /* relayport.cc in Sources */, > 5C63FA041E4174F6002CA531 /* relayserver.cc in Sources */, > 5CDD89611E43BF3A00621E92 /* remb.cc in Sources */, >+ 41E02CC42127358800C27CD6 /* builtin_video_encoder_factory.cc in Sources */, > 5CDD8FDB1E43CD6600621E92 /* remote_bitrate_estimator_abs_send_time.cc in Sources */, > 5CDD8FDD1E43CD6600621E92 /* remote_bitrate_estimator_single_stream.cc in Sources */, > 5CDD8FE11E43CD6600621E92 /* remote_estimator_proxy.cc in Sources */, >+ 41DDB2562126790A00296D47 /* socket.cc in Sources */, > 5CDD88951E43BE3C00621E92 /* remote_ntp_time_estimator.cc in Sources */, > 5CD285051E6A60570094FDC8 /* remoteaudiosource.cc in Sources */, > 4145E4D91EF8CC9B00FCF6E6 /* render_buffer.cc in Sources */, >+ 419241C12127593F00634FCF /* data_transfer_tracker.cc in Sources */, > 5CD285D51E6A63430094FDC8 /* render_delay_buffer.cc in Sources */, > 5CD285D91E6A63430094FDC8 /* render_delay_controller.cc in Sources */, > 5CD285D71E6A63430094FDC8 /* render_delay_controller_metrics.cc in Sources */, >@@ -12803,17 +14401,20 @@ > 41F9BFAA2051C8E200ABF0B9 /* rtc_event_alr_state.cc in Sources */, > 419C83A21FE246F90040C30F /* rtc_event_audio_network_adaptation.cc in Sources */, > 419C83951FE246F90040C30F /* rtc_event_audio_playout.cc in Sources */, >+ 415F1FAC21272FBA00064CBF /* down_sampler.cc in Sources */, > 419C839B1FE246F90040C30F /* rtc_event_audio_receive_stream_config.cc in Sources */, > 419C839E1FE246F90040C30F /* rtc_event_audio_send_stream_config.cc in Sources */, > 419C838B1FE246F90040C30F /* rtc_event_bwe_update_delay_based.cc in Sources */, > 419C838D1FE246F90040C30F /* rtc_event_bwe_update_loss_based.cc in Sources */, > 5CDD904B1E43CF6100621E92 /* rtc_event_log.cc in Sources */, >+ 41F2636721267ADF00274F59 /* video_decoder.cc in Sources */, > 41F411B91EF8DA9600343C26 /* rtc_event_log_factory.cc in Sources */, > 419C84241FE24BA60040C30F /* rtc_event_log_output_file.cc in Sources */, > 419C838F1FE246F90040C30F /* rtc_event_probe_cluster_created.cc in Sources */, > 419C83991FE246F90040C30F /* rtc_event_probe_result_failure.cc in Sources */, > 419C83921FE246F90040C30F /* rtc_event_probe_result_success.cc in Sources */, > 419C83911FE246F90040C30F /* rtc_event_rtcp_packet_incoming.cc in Sources */, >+ 41E02C7C2127347400C27CD6 /* rtp_packet_to_send.cc in Sources */, > 419C839C1FE246F90040C30F /* rtc_event_rtcp_packet_outgoing.cc in Sources */, > 419C83241FE245280040C30F /* rtc_event_rtp_packet_incoming.cc in Sources */, > 419C83AA1FE247080040C30F /* rtc_event_rtp_packet_outgoing.cc in Sources */, >@@ -12826,27 +14427,35 @@ > 41ECEAC820641328009D5141 /* RTCEncodedImage.mm in Sources */, > 41F411B01EF8DA0100343C26 /* rtcerror.cc in Sources */, > 41ECEACF20641370009D5141 /* RTCI420Buffer.mm in Sources */, >+ 41E02CA92127352D00C27CD6 /* goog_cc_factory.cc in Sources */, > 5CDD8A4F1E43BFB300621E92 /* rtcp.cc in Sources */, >+ 419241DF21275A3000634FCF /* data_size.cc in Sources */, > 419C82B91FE20DCD0040C30F /* rtcp_demuxer.cc in Sources */, > 5CD285FA1E6A64520094FDC8 /* rtcp_nack_stats.cc in Sources */, >+ 415F1FB221272FBA00064CBF /* interpolated_gain_curve.cc in Sources */, > 5CDD88971E43BE3C00621E92 /* rtcp_packet.cc in Sources */, > 5CDD889A1E43BE3C00621E92 /* rtcp_receiver.cc in Sources */, >+ 415F1FAA21272FBA00064CBF /* compute_interpolated_gain_curve.cc in Sources */, > 5CDD889D1E43BE3C00621E92 /* rtcp_sender.cc in Sources */, > 419C82FF1FE20F020040C30F /* rtcp_transceiver.cc in Sources */, >+ 41924177212738C200634FCF /* transport.cc in Sources */, > 419C83021FE20F020040C30F /* rtcp_transceiver_config.cc in Sources */, > 419C83001FE20F020040C30F /* rtcp_transceiver_impl.cc in Sources */, >+ 41D6B45921273159008F9353 /* rtp_bitrate_configurator.cc in Sources */, > 41ECEADA206414A6009D5141 /* RTCRtpFragmentationHeader.mm in Sources */, > 5C63FA781E417AED002CA531 /* rtcstats.cc in Sources */, > 5C63FA771E417AED002CA531 /* rtcstats_objects.cc in Sources */, >+ 415F1FA821272FBA00064CBF /* adaptive_mode_level_estimator_agc.cc in Sources */, > 5CD285071E6A60570094FDC8 /* rtcstatscollector.cc in Sources */, > 5C63FA791E417AED002CA531 /* rtcstatsreport.cc in Sources */, > 41ECEAB720630108009D5141 /* RTCVideoCodec.mm in Sources */, >- 41ECEAB820630108009D5141 /* RTCVideoCodecH264.mm in Sources */, >- 41ECEAC3206411E2009D5141 /* RTCVideoDecoderH264.mm in Sources */, >+ 41F2636E21267B3E00274F59 /* fft4g.c in Sources */, > 41ECEAC4206411E5009D5141 /* RTCVideoEncoderH264.mm in Sources */, > 41ECEAEA20641812009D5141 /* RTCVideoEncoderSettings.mm in Sources */, > 41ECEACB2064134F009D5141 /* RTCVideoFrame.mm in Sources */, >+ 41F2638021267B7700274F59 /* datachannelinterface.cc in Sources */, > 41ECEAE4206416FF009D5141 /* RTCWrappedNativeVideoDecoder.mm in Sources */, >+ 419241B02127590200634FCF /* rtp_generic_frame_descriptor_extension.cc in Sources */, > 41ECEAE2206416FF009D5141 /* RTCWrappedNativeVideoEncoder.mm in Sources */, > 419C82B41FE20DCD0040C30F /* rtp_config.cc in Sources */, > 413092021EF8D0A600757C55 /* rtp_demuxer.cc in Sources */, >@@ -12856,9 +14465,13 @@ > 5CDD88AB1E43BE3C00621E92 /* rtp_format_vp8.cc in Sources */, > 5CDD88AE1E43BE3C00621E92 /* rtp_format_vp9.cc in Sources */, > 5CDD83F61E439A6F00621E92 /* rtp_frame_reference_finder.cc in Sources */, >+ 41E02CCD212735B700C27CD6 /* network_types.cc in Sources */, > 5CDD8AB81E43C00F00621E92 /* rtp_generator.cc in Sources */, >+ 416D3BEB212731C200775F09 /* signal_classifier.cc in Sources */, > 4145E4DC1EF8CCEF00FCF6E6 /* rtp_header_extension_map.cc in Sources */, > 5CDD88B51E43BE3C00621E92 /* rtp_header_extensions.cc in Sources */, >+ 41A08BC8212695DE001D5D7B /* bad_optional_access.cc in Sources */, >+ 419241A8212758D300634FCF /* spectral_features_internal.cc in Sources */, > 5CDD88B71E43BE3C00621E92 /* rtp_header_parser.cc in Sources */, > 41F9BF8B2051C80100ABF0B9 /* rtp_headers.cc in Sources */, > 5CDD88BE1E43BE3D00621E92 /* rtp_packet.cc in Sources */, >@@ -12871,6 +14484,7 @@ > 5CDD88C81E43BE3D00621E92 /* rtp_receiver_video.cc in Sources */, > 419C83CD1FE247B40040C30F /* rtp_rtcp_defines.cc in Sources */, > 419C82BF1FE20DCD0040C30F /* rtp_rtcp_demuxer_helper.cc in Sources */, >+ 4102F6A821273262006AE8D7 /* channel.cc in Sources */, > 5CDD88CC1E43BE3D00621E92 /* rtp_rtcp_impl.cc in Sources */, > 5CDD88D31E43BE3D00621E92 /* rtp_sender.cc in Sources */, > 5CDD88CE1E43BE3D00621E92 /* rtp_sender_audio.cc in Sources */, >@@ -12879,7 +14493,9 @@ > 5CDD85B21E43B5C000621E92 /* rtp_streams_synchronizer.cc in Sources */, > 5CD286271E6A669D0094FDC8 /* rtp_to_ntp_estimator.cc in Sources */, > 4130921B1EF8D63F00757C55 /* rtp_transport_controller_send.cc in Sources */, >+ 41E02CD42127360700C27CD6 /* sample_counter.cc in Sources */, > 5CDD88D51E43BE3D00621E92 /* rtp_utility.cc in Sources */, >+ 415F1FAF21272FBA00064CBF /* gain_applier.cc in Sources */, > 413091F41EF8CF9200757C55 /* rtp_video_stream_receiver.cc in Sources */, > 5C4B48EB1E42C1E3002651C8 /* rtpdataengine.cc in Sources */, > 5CDD896C1E43BF3A00621E92 /* rtpfb.cc in Sources */, >@@ -12891,29 +14507,36 @@ > 4145E4CC1EF8CB8B00FCF6E6 /* rtptransport.cc in Sources */, > 5C4B48F11E42C1E3002651C8 /* rtputils.cc in Sources */, > 5CDD83F81E439A6F00621E92 /* rtt_filter.cc in Sources */, >+ 41E02CB52127352D00C27CD6 /* alr_detector.cc in Sources */, > 419C82B71FE20DCD0040C30F /* rtx_receive_stream.cc in Sources */, > 41F9BFE62051DECD00ABF0B9 /* runtime_enabled_features_default.cc in Sources */, >+ 41D6B45721273159008F9353 /* receive_time_calculator.cc in Sources */, > 419C84701FE255FA0040C30F /* s3_both.cc in Sources */, > 419C84771FE255FA0040C30F /* s3_lib.cc in Sources */, > 419C84731FE255FA0040C30F /* s3_pkt.cc in Sources */, > 5CFD53931E4BD3A300482908 /* scale_neon.cc in Sources */, > 5CFD53941E4BD3A300482908 /* scale_neon64.cc in Sources */, > 41F9BFB52051C93600ABF0B9 /* scopedvideodecoder.cc in Sources */, >+ 4102F6CB212733B7006AE8D7 /* video_stream_decoder_impl.cc in Sources */, > 41F9BFB92051C93600ABF0B9 /* scopedvideoencoder.cc in Sources */, > 5CD2863C1E6A681C0094FDC8 /* sctptransport.cc in Sources */, > 5CD2850D1E6A60570094FDC8 /* sctputils.cc in Sources */, >+ 41E02CB42127352D00C27CD6 /* probe_controller.cc in Sources */, > 5CDD896F1E43BF3A00621E92 /* sdes.cc in Sources */, > 419C82DC1FE20E590040C30F /* sdputils.cc in Sources */, >+ 41E02CA82127352D00C27CD6 /* acknowledged_bitrate_estimator.cc in Sources */, > 5CDD85B61E43B5C000621E92 /* send_delay_stats.cc in Sources */, > 5CDD90611E43D11200621E92 /* send_side_bandwidth_estimation.cc in Sources */, > 413092151EF8D5EE00757C55 /* send_side_congestion_controller.cc in Sources */, > 5CDD85B91E43B5C000621E92 /* send_statistics_proxy.cc in Sources */, > 5CDD89721E43BF3A00621E92 /* sender_report.cc in Sources */, > 413A239D1FE18E0800373E99 /* sequenced_task_checker_impl.cc in Sources */, >+ 419241412127372400634FCF /* pitch_search.cc in Sources */, > 5CDD83FB1E439A6F00621E92 /* session_info.cc in Sources */, > 41F9BFE42051DE1800ABF0B9 /* sessiondescription.cc in Sources */, > 5CD285DF1E6A63430094FDC8 /* shadow_filter_update_gain.cc in Sources */, > 413A235B1FE18E0700373E99 /* signalthread.cc in Sources */, >+ 416D3BE9212731C200775F09 /* saturation_protector.cc in Sources */, > 5CDD8BDB1E43C2B500621E92 /* simple_interpolate_lsf.c in Sources */, > 5CDD8BDD1E43C2B500621E92 /* simple_lpc_analysis.c in Sources */, > 5CDD8BDF1E43C2B500621E92 /* simple_lsf_dequant.c in Sources */, >@@ -12923,6 +14546,7 @@ > 5CDD87E11E43BD7000621E92 /* sinc_resampler_sse.cc in Sources */, > 5CDD875E1E43BAF500621E92 /* sinusoidal_linear_chirp_source.cc in Sources */, > 5C4B4CE51E4320A9002651C8 /* sleep.cc in Sources */, >+ 419242432127719300634FCF /* video_decoder_factory.mm in Sources */, > 5CDD8BE51E43C2B500621E92 /* smooth.c in Sources */, > 5CDD8BE31E43C2B500621E92 /* smooth_out_data.c in Sources */, > 5CD285F61E6A63F60094FDC8 /* smoothing_filter.cc in Sources */, >@@ -12932,9 +14556,13 @@ > 413A22D31FE18E0700373E99 /* socketstream.cc in Sources */, > 5CDD8BE71E43C2B500621E92 /* sort_sq.c in Sources */, > 5C4B4C7D1E431F9C002651C8 /* sparse_fir_filter.cc in Sources */, >+ 415F1FC62127308F00064CBF /* audio_state.cc in Sources */, > 41433D021F79B33400387B4D /* spectrum_ar_model_tables.c in Sources */, > 5CDD87D81E43BC0600621E92 /* spectrum_ar_model_tables.c in Sources */, > 5CDD866B1E43B8B500621E92 /* spl_init.c in Sources */, >+ 4102F6A621273262006AE8D7 /* channel_proxy.cc in Sources */, >+ 41E02CC02127356A00C27CD6 /* data_rate_limiter.cc in Sources */, >+ 41F2638521267B7700274F59 /* rtptransceiverinterface.cc in Sources */, > 5CDD866C1E43B8B500621E92 /* spl_inl.c in Sources */, > 5CDD86701E43B8B500621E92 /* spl_sqrt.c in Sources */, > 5CDD8BE91E43C2B500621E92 /* split_vq.c in Sources */, >@@ -12942,17 +14570,22 @@ > 5CDD84C11E43AF1300621E92 /* splitting_filter.cc in Sources */, > 5CDD835F1E43257200621E92 /* sps_parser.cc in Sources */, > 5CDD83621E43257200621E92 /* sps_vui_rewriter.cc in Sources */, >+ 4102F6DF21273416006AE8D7 /* video_stream_encoder_create.cc in Sources */, > 5CDD86721E43B8B500621E92 /* sqrt_of_one_minus_x_squared.c in Sources */, > 419C82DE1FE20E590040C30F /* srtpsession.cc in Sources */, > 419C82DF1FE20E590040C30F /* srtptransport.cc in Sources */, > 419C845E1FE255FA0040C30F /* ssl_aead_ctx.cc in Sources */, > 419C84741FE255FA0040C30F /* ssl_asn1.cc in Sources */, >+ 41A08BC021269553001D5D7B /* rtc_event_ice_candidate_pair.cc in Sources */, >+ 419241462127372800634FCF /* rnn.cc in Sources */, > 419C84601FE255FA0040C30F /* ssl_buffer.cc in Sources */, > 419C84751FE255FA0040C30F /* ssl_cert.cc in Sources */, > 419C84651FE255FA0040C30F /* ssl_cipher.cc in Sources */, > 419C84721FE255FA0040C30F /* ssl_file.cc in Sources */, > 419C84781FE255FA0040C30F /* ssl_key_share.cc in Sources */, >+ 41D6B45621273159008F9353 /* packet_receiver.cc in Sources */, > 419C84761FE255FA0040C30F /* ssl_lib.cc in Sources */, >+ 41A08BB0212681C8001D5D7B /* video_source_interface.cc in Sources */, > 419C846C1FE255FA0040C30F /* ssl_privkey.cc in Sources */, > 419C845F1FE255FA0040C30F /* ssl_session.cc in Sources */, > 419C84611FE255FA0040C30F /* ssl_stat.cc in Sources */, >@@ -12963,6 +14596,7 @@ > 413A23F11FE18E0800373E99 /* sslfingerprint.cc in Sources */, > 419C84161FE24A8D0040C30F /* sslidentity.cc in Sources */, > 419C84171FE24AA30040C30F /* sslstreamadapter.cc in Sources */, >+ 41F2637D21267B7700274F59 /* peerconnectioninterface.cc in Sources */, > 5CDD87361E43BABE00621E92 /* standalone_vad.cc in Sources */, > 5CDD8BEB1E43C2B500621E92 /* state_construct.c in Sources */, > 5CDD8BED1E43C2B500621E92 /* state_search.c in Sources */, >@@ -12972,8 +14606,10 @@ > 41DDB25221265BE900296D47 /* optional.cc in Sources */, > 5C63F9721E41737B002CA531 /* statstypes.cc in Sources */, > 413A23D31FE18E0800373E99 /* stream.cc in Sources */, >+ 4192413A2127372400634FCF /* features_extraction.cc in Sources */, > 5CDD85BF1E43B5C000621E92 /* stream_synchronization.cc in Sources */, > 5C4B48F41E42C1E3002651C8 /* streamparams.cc in Sources */, >+ 41DDB262212679A300296D47 /* opensslsessioncache.cc in Sources */, > 413A23D61FE18E0800373E99 /* string_to_number.cc in Sources */, > 413A22B51FE18E0700373E99 /* stringencode.cc in Sources */, > 413A23131FE18E0700373E99 /* stringutils.cc in Sources */, >@@ -12987,6 +14623,7 @@ > 5CDD8BEF1E43C2B500621E92 /* swap_bytes.c in Sources */, > 5CDD8A541E43BFB300621E92 /* sync_buffer.cc in Sources */, > 5CD284BE1E6A5F9F0094FDC8 /* syncable.cc in Sources */, >+ 4102F6B321273331006AE8D7 /* mediachannel.cc in Sources */, > 419C846D1FE255FA0040C30F /* t1_enc.cc in Sources */, > 419C84791FE255FA0040C30F /* t1_lib.cc in Sources */, > 5CDD89781E43BF3A00621E92 /* target_bitrate.cc in Sources */, >@@ -12995,6 +14632,7 @@ > 5C63FA171E4174F6002CA531 /* tcpport.cc in Sources */, > 419C84341FE24E800040C30F /* temporal_layers.cc in Sources */, > 413A22A51FE18E0600373E99 /* testechoserver.cc in Sources */, >+ 4192417D2127392300634FCF /* timestamp_extrapolator.cc in Sources */, > 413A22E51FE18E0700373E99 /* thread.cc in Sources */, > 413A23501FE18E0700373E99 /* thread_checker_impl.cc in Sources */, > 413A23DD1FE18E0800373E99 /* thread_darwin.mm in Sources */, >@@ -13002,14 +14640,19 @@ > 5CDD8A571E43BFB300621E92 /* tick_timer.cc in Sources */, > 419C83351FE245EA0040C30F /* time_interval.cc in Sources */, > 5CDD8A5A1E43BFB300621E92 /* time_stretch.cc in Sources */, >+ 41A08BBD21269553001D5D7B /* rtc_event_ice_candidate_pair_config.cc in Sources */, > 5CDD88DA1E43BE3D00621E92 /* time_util.cc in Sources */, > 5CDD83FD1E439A6F00621E92 /* timestamp_map.cc in Sources */, > 5CDD8A5D1E43BFB300621E92 /* timestamp_scaler.cc in Sources */, > 413A237B1FE18E0700373E99 /* timestampaligner.cc in Sources */, >+ 415F1FAD21272FBA00064CBF /* fixed_digital_level_estimator.cc in Sources */, >+ 415F1FBE2127304C00064CBF /* echo_control_mobile_proxy.cc in Sources */, > 413A23C31FE18E0800373E99 /* timeutils.cc in Sources */, > 5CDD83FF1E439A6F00621E92 /* timing.cc in Sources */, > 419C84681FE255FA0040C30F /* tls13_both.cc in Sources */, > 419C84671FE255FA0040C30F /* tls13_client.cc in Sources */, >+ 41E02CA52127352D00C27CD6 /* delay_based_bwe.cc in Sources */, >+ 41E02C8A212734B900C27CD6 /* fec_controller_default.cc in Sources */, > 419C84631FE255FA0040C30F /* tls13_enc.cc in Sources */, > 419C845D1FE255FA0040C30F /* tls13_server.cc in Sources */, > 419C846B1FE255FA0040C30F /* tls_method.cc in Sources */, >@@ -13018,10 +14661,14 @@ > 5CDD897D1E43BF3A00621E92 /* tmmbn.cc in Sources */, > 5CDD89801E43BF3A00621E92 /* tmmbr.cc in Sources */, > 5CDD88DC1E43BE3D00621E92 /* tmmbr_help.cc in Sources */, >+ 41F2638421267B7700274F59 /* jsepicecandidate.cc in Sources */, > 5CD285121E6A60570094FDC8 /* trackmediainfomap.cc in Sources */, > 41433D001F79B33400387B4D /* transform.c in Sources */, >+ 41E02C782127347400C27CD6 /* contributing_sources.cc in Sources */, > 5CDD87DB1E43BC0600621E92 /* transform.c in Sources */, > 41433D161F79B33400387B4D /* transform_tables.c in Sources */, >+ 41F263AC212680A800274F59 /* file_wrapper.cc in Sources */, >+ 41A08BCC21269620001D5D7B /* raw_logging.cc in Sources */, > 5CDD8C911E43C66000621E92 /* transient_detector.cc in Sources */, > 5CDD8C951E43C66000621E92 /* transient_suppressor.cc in Sources */, > 5CDD85C11E43B5C000621E92 /* transport_adapter.cc in Sources */, >@@ -13030,15 +14677,18 @@ > 5C63FA251E4174F6002CA531 /* transportdescription.cc in Sources */, > 5C63FA281E4174F6002CA531 /* transportdescriptionfactory.cc in Sources */, > 5C63FA2C1E4174F6002CA531 /* turnport.cc in Sources */, >+ 4102F6CC212733B7006AE8D7 /* video_send_stream_impl.cc in Sources */, > 41F9BFEA2051DEEA00ABF0B9 /* turnportfactory.cc in Sources */, > 5C63FA2F1E4174F6002CA531 /* turnserver.cc in Sources */, > 5C4B48F91E42C1E3002651C8 /* turnutils.cc in Sources */, >+ 41A08BD021272EE2001D5D7B /* gain_controller2.cc in Sources */, > 5CDD84C51E43AF1300621E92 /* typing_detection.cc in Sources */, > 419C83DC1FE247F20040C30F /* udptransport.cc in Sources */, > 5CDD88DF1E43BE3D00621E92 /* ulpfec_generator.cc in Sources */, > 5CDD88E21E43BE3D00621E92 /* ulpfec_header_reader_writer.cc in Sources */, > 5CDD88E41E43BE3D00621E92 /* ulpfec_receiver_impl.cc in Sources */, > 5CDD8BF11E43C2B500621E92 /* unpack_bits.c in Sources */, >+ 41A08BD821272F1D001D5D7B /* congestion_window_pushback_controller.cc in Sources */, > 5CDD87DE1E43BC2E00621E92 /* utility.c in Sources */, > 5CDD87081E43BA7500621E92 /* utility.cc in Sources */, > 5CDD86E31E43BA2800621E92 /* vad.cc in Sources */, >@@ -13046,6 +14696,7 @@ > 5CDD873D1E43BABE00621E92 /* vad_circular_buffer.cc in Sources */, > 5CDD86D61E43BA2800621E92 /* vad_core.c in Sources */, > 5CDD86D91E43BA2800621E92 /* vad_filterbank.c in Sources */, >+ 419241712127389B00634FCF /* congestion_controller_experiment.cc in Sources */, > 5CDD86DC1E43BA2800621E92 /* vad_gmm.c in Sources */, > 5CDD86DF1E43BA2800621E92 /* vad_sp.c in Sources */, > 41F9BFD52051DDE500ABF0B9 /* vector_buffer.cc in Sources */, >@@ -13061,8 +14712,11 @@ > 419C82BE1FE20DCD0040C30F /* video_receive_stream.cc in Sources */, > 5CDD85CA1E43B5C000621E92 /* video_receive_stream.cc in Sources */, > 5CDD84031E439A6F00621E92 /* video_receiver.cc in Sources */, >+ 41E02CB12127352D00C27CD6 /* median_slope_estimator.cc in Sources */, > 5C4B4C201E431F75002651C8 /* video_render_frames.cc in Sources */, >+ 416D3BE6212731C200775F09 /* limiter.cc in Sources */, > 419C82B31FE20DCD0040C30F /* video_send_stream.cc in Sources */, >+ 41A08BC421269577001D5D7B /* icelogger.cc in Sources */, > 5CDD85CD1E43B5C000621E92 /* video_send_stream.cc in Sources */, > 5CDD84041E439A6F00621E92 /* video_sender.cc in Sources */, > 5CDD85CF1E43B5C000621E92 /* video_stream_decoder.cc in Sources */, >@@ -13075,11 +14729,13 @@ > 5C4B49061E42C1E3002651C8 /* videocommon.cc in Sources */, > 41ECEAFD20646664009D5141 /* VideoProcessingSoftLink.cpp in Sources */, > 5C4B490B1E42C1E3002651C8 /* videosourcebase.cc in Sources */, >+ 419241D02127597D00634FCF /* simulated_network.cc in Sources */, > 5CD285161E6A60570094FDC8 /* videotrack.cc in Sources */, > 5CD285181E6A60570094FDC8 /* videotracksource.cc in Sources */, > 413A23121FE18E0700373E99 /* virtualsocketserver.cc in Sources */, > 5CDD87401E43BABE00621E92 /* voice_activity_detector.cc in Sources */, > 5CDD84C71E43AF1300621E92 /* voice_detection_impl.cc in Sources */, >+ 41D6B45321273159008F9353 /* call_config.cc in Sources */, > 5CFD53821E4BA4F500482908 /* voice_processing_audio_unit.mm in Sources */, > 5CDD89861E43BF3A00621E92 /* voip_metric.cc in Sources */, > 5CDD83851E439A3500621E92 /* vp8_header_parser.cc in Sources */, >diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog >index d4eaa08ad7f..d43fd9652a9 100644 >--- a/Source/WTF/ChangeLog >+++ b/Source/WTF/ChangeLog >@@ -1,3 +1,13 @@ >+2018-08-20 Youenn Fablet <youenn@apple.com> and Alejandro G. Castro <alex@igalia.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ <rdar://problem/43539177> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/DisallowCType.h: >+ > 2018-08-21 Antti Koivisto <antti@apple.com> > > Allow creating WeakPtrs to const objects >diff --git a/Source/WTF/wtf/DisallowCType.h b/Source/WTF/wtf/DisallowCType.h >index 30544e729fd..386eb328e03 100644 >--- a/Source/WTF/wtf/DisallowCType.h >+++ b/Source/WTF/wtf/DisallowCType.h >@@ -40,7 +40,7 @@ > // are used from wx headers. On GTK+ for Mac many GTK+ files include <libintl.h> > // or <glib/gi18n-lib.h>, which in turn include <xlocale/_ctype.h> which uses > // isacii(). >-#if !(OS(DARWIN) && PLATFORM(GTK)) && !defined(_LIBCPP_VERSION) && defined(__GLIBC__) >+#if !(OS(DARWIN) && PLATFORM(GTK)) && !PLATFORM(WPE) && !PLATFORM(GTK) && !defined(_LIBCPP_VERSION) && defined(__GLIBC__) > > #include <ctype.h> > >diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt >index 2f04d538df0..a9c4a5f4347 100644 >--- a/Source/WebCore/CMakeLists.txt >+++ b/Source/WebCore/CMakeLists.txt >@@ -1554,7 +1554,8 @@ endif () > > if (USE_LIBWEBRTC) > list(APPEND WebCore_SYSTEM_INCLUDE_DIRECTORIES "${THIRDPARTY_DIR}/libwebrtc/Source/" >- "${THIRDPARTY_DIR}/libwebrtc/Source/webrtc") >+ "${THIRDPARTY_DIR}/libwebrtc/Source/webrtc" >+ "${THIRDPARTY_DIR}/libwebrtc/Source/third_party/abseil-cpp") > list(APPEND WebCore_LIBRARIES webrtc) > list(APPEND WebCore_SOURCES > Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.cpp >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 2ff909029eb..aceaa79f9b0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,60 @@ >+2018-08-20 Youenn Fablet <youenn@apple.com> >+ >+ Update libwebrtc up to 984f1a80c0 >+ https://bugs.webkit.org/show_bug.cgi?id=188745 >+ <rdar://problem/43539177> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Updated implementation according new webrtc backend. >+ Instead of modifying libwebrtc header files, we disable unused parameter warning for such headers included in WebCore. >+ WebCore implementation is updated according new webrtc API, mostly AddRef/Release. >+ RealtimeOutgoingVideoSource now uses a pixel convolver to convert RGB pixel buffers as I420. >+ >+ Covered by existing tests. >+ >+ * CMakeLists.txt: >+ * Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h: >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp: >+ (WebCore::LibWebRTCMediaEndpoint::addTrack): >+ (WebCore::LibWebRTCMediaEndpoint::mediaStreamFromRTCStream): >+ (WebCore::fillEncodingParameters): >+ (WebCore::fillRtpParameters): >+ * Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h: >+ (WebCore::LibWebRTCMediaEndpoint::Release const): >+ * WebCore.xcodeproj/project.pbxproj: >+ * platform/mediastream/RealtimeIncomingAudioSource.h: >+ * platform/mediastream/RealtimeIncomingVideoSource.h: >+ * platform/mediastream/RealtimeMediaSource.cpp: >+ (WebCore::RealtimeMediaSource::supportsSizeAndFrameRate): >+ (WebCore::RealtimeMediaSource::supportsConstraint const): >+ (WebCore::RealtimeMediaSource::supportsConstraints): >+ * platform/mediastream/RealtimeOutgoingAudioSource.h: >+ * platform/mediastream/RealtimeOutgoingVideoSource.h: >+ * platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp: >+ (WebCore::GStreamerVideoDecoder::newSampleCallback): >+ * platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp: >+ (WebCore::GStreamerVideoEncoder::GStreamerVideoEncoder): >+ (WebCore::GStreamerVideoEncoder::newSampleCallback): >+ * platform/mediastream/libwebrtc/LibWebRTCProvider.h: >+ * platform/mediastream/libwebrtc/LibWebRTCAudioModule.h: >+ * platform/mediastream/libwebrtc/LibWebRTCProvider.cpp: >+ * platform/mediastream/libwebrtc/LibWebRTCProvider.h: >+ * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm: >+ (WebCore::MockRealtimeVideoSourceMac::CMSampleBufferFromPixelBuffer): >+ * platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm: >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp: >+ (WebCore::ConvertToI420): >+ (WebCore::RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated): >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h: >+ * platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm: Added. >+ (WebCore::RealtimeOutgoingVideoSourceCocoa::convertToYUV): >+ * testing/MockLibWebRTCPeerConnection.cpp: >+ (WebCore::MockLibWebRTCPeerConnection::AddTrack): >+ * testing/MockLibWebRTCPeerConnection.h: >+ (WebCore::MockRtpSender::GetParameters): >+ (WebCore::MockRtpSender::SetParameters): >+ > 2018-08-21 Brent Fulgham <bfulgham@apple.com> > > Remove experimental affiliated domain code now that StorageAccess API is available >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h >index 899c4ee1ad9..50bf77624a4 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCDataChannelHandler.h >@@ -28,8 +28,14 @@ > > #include "LibWebRTCMacros.h" > #include "RTCDataChannelHandler.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/datachannelinterface.h> > >+#pragma clang diagnostic pop >+ > namespace WebCore { > > class RTCDataChannelHandlerClient; >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >index d240ab0e5e7..743d18f0cb5 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.cpp >@@ -197,27 +197,31 @@ void LibWebRTCMediaEndpoint::addTrack(RTCRtpSender& sender, MediaStreamTrack& tr > { > ASSERT(m_backend); > >- std::vector<webrtc::MediaStreamInterface*> mediaStreams; >- rtc::scoped_refptr<webrtc::MediaStreamInterface> mediaStream = nullptr; >- if (mediaStreamIds.size()) { >- // libwebrtc is only using the first one if any. >- mediaStream = m_peerConnectionFactory.CreateLocalMediaStream(mediaStreamIds[0].utf8().data()); >- mediaStreams.push_back(mediaStream.get()); >+ String mediaStreamId = mediaStreamIds.isEmpty() ? createCanonicalUUIDString() : mediaStreamIds[0]; >+ rtc::scoped_refptr<webrtc::MediaStreamInterface> mediaStream = m_localStreams.get(mediaStreamId); >+ if (!mediaStream) { >+ mediaStream = m_peerConnectionFactory.CreateLocalMediaStream(mediaStreamId.utf8().data()); >+ m_backend->AddStream(mediaStream); >+ m_localStreams.add(mediaStreamId, mediaStream); > } >- >+ >+ std::vector<std::string> ids; >+ for (auto& id : mediaStreamIds) >+ ids.push_back(id.utf8().data()); >+ > switch (track.privateTrack().type()) { > case RealtimeMediaSource::Type::Audio: { > auto trackSource = RealtimeOutgoingAudioSource::create(track.privateTrack()); > auto audioTrack = m_peerConnectionFactory.CreateAudioTrack(track.id().utf8().data(), trackSource.ptr()); > m_peerConnectionBackend.addAudioSource(WTFMove(trackSource)); >- m_senders.add(&sender, m_backend->AddTrack(audioTrack.get(), WTFMove(mediaStreams))); >+ m_senders.add(&sender, m_backend->AddTrack(audioTrack.get(), WTFMove(ids)).MoveValue()); > return; > } > case RealtimeMediaSource::Type::Video: { > auto videoSource = RealtimeOutgoingVideoSource::create(track.privateTrack()); > auto videoTrack = m_peerConnectionFactory.CreateVideoTrack(track.id().utf8().data(), videoSource.ptr()); > m_peerConnectionBackend.addVideoSource(WTFMove(videoSource)); >- m_senders.add(&sender, m_backend->AddTrack(videoTrack.get(), WTFMove(mediaStreams))); >+ m_senders.add(&sender, m_backend->AddTrack(videoTrack.get(), WTFMove(ids)).MoveValue()); > return; > } > case RealtimeMediaSource::Type::None: >@@ -619,7 +623,7 @@ void LibWebRTCMediaEndpoint::OnSignalingChange(webrtc::PeerConnectionInterface:: > MediaStream& LibWebRTCMediaEndpoint::mediaStreamFromRTCStream(webrtc::MediaStreamInterface& rtcStream) > { > auto mediaStream = m_streams.ensure(&rtcStream, [&rtcStream, this] { >- auto label = rtcStream.label(); >+ auto label = rtcStream.id(); > auto stream = MediaStream::create(*m_peerConnectionBackend.connection().scriptExecutionContext(), MediaStreamPrivate::create({ }, fromStdString(label))); > auto streamPointer = stream.ptr(); > m_peerConnectionBackend.addRemoteStream(WTFMove(stream)); >@@ -971,7 +975,8 @@ static inline RTCRtpParameters::EncodingParameters fillEncodingParameters(const > if (rtcParameters.max_framerate) > parameters.maxFramerate = *rtcParameters.max_framerate; > parameters.rid = fromStdString(rtcParameters.rid); >- parameters.scaleResolutionDownBy = rtcParameters.scale_resolution_down_by; >+ if (rtcParameters.scale_resolution_down_by) >+ parameters.scaleResolutionDownBy = *rtcParameters.scale_resolution_down_by; > > return parameters; > } >@@ -1013,6 +1018,8 @@ static RTCRtpParameters fillRtpParameters(const webrtc::RtpParameters rtcParamet > parameters.codecs.append(fillCodecParameters(codec)); > > switch (rtcParameters.degradation_preference) { >+ // FIXME: Support DegradationPreference::DISABLED. >+ case webrtc::DegradationPreference::DISABLED: > case webrtc::DegradationPreference::MAINTAIN_FRAMERATE: > parameters.degradationPreference = RTCRtpParameters::DegradationPreference::MaintainFramerate; > break; >diff --git a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >index 297b60c185e..d409a1b23dd 100644 >--- a/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >+++ b/Source/WebCore/Modules/mediastream/libwebrtc/LibWebRTCMediaEndpoint.h >@@ -32,10 +32,17 @@ > #include "RealtimeOutgoingAudioSource.h" > #include "RealtimeOutgoingVideoSource.h" > #include <Timer.h> >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/jsep.h> > #include <webrtc/api/peerconnectioninterface.h> > #include <webrtc/pc/peerconnectionfactory.h> > #include <webrtc/pc/rtcstatscollector.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/LoggerHelper.h> > #include <wtf/ThreadSafeRefCounted.h> > >@@ -129,8 +136,10 @@ private: > void AddRef() const { ref(); } > rtc::RefCountReleaseStatus Release() const > { >+ auto result = refCount() - 1; > deref(); >- return refCount() ? rtc::RefCountReleaseStatus::kDroppedLastRef : rtc::RefCountReleaseStatus::kOtherRefsRemained; >+ return result ? rtc::RefCountReleaseStatus::kOtherRefsRemained >+ : rtc::RefCountReleaseStatus::kDroppedLastRef; > } > > bool shouldOfferAllowToReceiveAudio() const; >@@ -214,6 +223,8 @@ private: > bool m_isInitiator { false }; > Timer m_statsLogTimer; > >+ HashMap<String, rtc::scoped_refptr<webrtc::MediaStreamInterface>> m_localStreams; >+ > #if !RELEASE_LOG_DISABLED > int64_t m_statsFirstDeliveredTimestamp { 0 }; > Ref<const Logger> m_logger; >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index ee295f9763f..dc89e2ae35a 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -1106,6 +1106,7 @@ > 41885B9311B6FDA6003383BB /* FormSubmission.h in Headers */ = {isa = PBXBuildFile; fileRef = 41885B9111B6FDA6003383BB /* FormSubmission.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 418A06D0133C04D500CD379C /* EventDispatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 418A06CE133C04D500CD379C /* EventDispatcher.h */; }; > 418F88050FF957AF0080F045 /* JSAbstractWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 418F88030FF957AE0080F045 /* JSAbstractWorker.h */; }; >+ 419242492127B93E00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 419242472127B7CC00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm */; }; > 419ACF921F97E7DA009F1A83 /* ServiceWorkerFetch.h in Headers */ = {isa = PBXBuildFile; fileRef = 419ACF8E1F97E7D5009F1A83 /* ServiceWorkerFetch.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 419BC2DF1685329900D64D6D /* VisitedLinkState.h in Headers */ = {isa = PBXBuildFile; fileRef = 419BC2DD1685329900D64D6D /* VisitedLinkState.h */; }; > 419BE7591BC7F42B00E1C85B /* WebCoreBuiltinNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 419BE7521BC7F3DB00E1C85B /* WebCoreBuiltinNames.h */; }; >@@ -7291,6 +7292,7 @@ > 418C395F1C8F0AAB0051C8A3 /* ReadableStreamDefaultController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadableStreamDefaultController.h; sourceTree = "<group>"; }; > 418F88020FF957AE0080F045 /* JSAbstractWorker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAbstractWorker.cpp; sourceTree = "<group>"; }; > 418F88030FF957AE0080F045 /* JSAbstractWorker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAbstractWorker.h; sourceTree = "<group>"; }; >+ 419242472127B7CC00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RealtimeOutgoingVideoSourceCocoa.mm; sourceTree = "<group>"; }; > 41945694203502A5004BA277 /* ApplicationCacheResourceLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ApplicationCacheResourceLoader.cpp; sourceTree = "<group>"; }; > 41945696203502A6004BA277 /* ApplicationCacheResourceLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApplicationCacheResourceLoader.h; sourceTree = "<group>"; }; > 419ACF8E1F97E7D5009F1A83 /* ServiceWorkerFetch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServiceWorkerFetch.h; sourceTree = "<group>"; }; >@@ -15335,6 +15337,7 @@ > 41103AA71E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.cpp */, > 41103AA81E39790A00769F14 /* RealtimeOutgoingAudioSourceCocoa.h */, > 5CDD833B1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.cpp */, >+ 419242472127B7CC00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm */, > 5CDD833C1E4324BB00621B83 /* RealtimeOutgoingVideoSourceCocoa.h */, > 070A9F5E1FFECC70003DF649 /* ScreenDisplayCaptureSourceMac.h */, > 070A9F601FFECC71003DF649 /* ScreenDisplayCaptureSourceMac.mm */, >@@ -31749,6 +31752,7 @@ > 538EC8A11F993F9D004D22A8 /* UnifiedSource48.cpp in Sources */, > DE5F85991FA1ABF4006DB63A /* UnifiedSource49-mm.mm in Sources */, > 538EC8A21F993F9D004D22A8 /* UnifiedSource49.cpp in Sources */, >+ 419242492127B93E00634FCF /* RealtimeOutgoingVideoSourceCocoa.mm in Sources */, > DE5F859A1FA1ABF4006DB63A /* UnifiedSource50-mm.mm in Sources */, > 538EC8A31F993F9D004D22A8 /* UnifiedSource50.cpp in Sources */, > DE5F86501FA2AF24006DB63A /* UnifiedSource51-mm.mm in Sources */, >diff --git a/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h b/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h >index 4c363b62daa..cbf5730ac94 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h >+++ b/Source/WebCore/platform/mediastream/RealtimeIncomingAudioSource.h >@@ -34,7 +34,14 @@ > > #include "LibWebRTCMacros.h" > #include "RealtimeMediaSource.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/mediastreaminterface.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/RetainPtr.h> > > namespace WebCore { >diff --git a/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h b/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h >index 85fbfa7e122..4d7cad29a1a 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h >+++ b/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.h >@@ -34,7 +34,14 @@ > > #include "LibWebRTCMacros.h" > #include "RealtimeMediaSource.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/mediastreaminterface.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/RetainPtr.h> > > namespace WebCore { >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp b/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp >index 8a4609a2d26..bfe4d6de1c8 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp >@@ -286,7 +286,7 @@ bool RealtimeMediaSource::supportsSizeAndFrameRate(std::optional<IntConstraint> > badConstraint = frameRateConstraint->name(); > return false; > } >- >+ > return true; > } > >@@ -754,7 +754,7 @@ bool RealtimeMediaSource::supportsConstraint(const MediaConstraint& constraint) > // Unknown (or unsupported) constraints should be ignored. > break; > } >- >+ > return false; > } > >@@ -765,7 +765,7 @@ bool RealtimeMediaSource::supportsConstraints(const MediaConstraints& constraint > FlattenedConstraint candidates; > if (!selectSettings(constraints, candidates, invalidConstraint, SelectType::ForSupportsConstraints)) > return false; >- >+ > return true; > } > >diff --git a/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h b/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h >index 76a61f8f644..ce2e5b1d9e0 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h >+++ b/Source/WebCore/platform/mediastream/RealtimeOutgoingAudioSource.h >@@ -34,7 +34,14 @@ > #include "LibWebRTCMacros.h" > #include "MediaStreamTrackPrivate.h" > #include "Timer.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/mediastreaminterface.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/ThreadSafeRefCounted.h> > > namespace webrtc { >diff --git a/Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h b/Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h >index 029d1478274..c1aa9d11395 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h >+++ b/Source/WebCore/platform/mediastream/RealtimeOutgoingVideoSource.h >@@ -33,10 +33,15 @@ > #include "LibWebRTCMacros.h" > #include "MediaStreamTrackPrivate.h" > #include <Timer.h> >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/mediastreaminterface.h> >-#include <webrtc/api/optional.h> > #include <webrtc/common_video/include/i420_buffer_pool.h> >-#include <webrtc/api/videosinkinterface.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/Optional.h> > #include <wtf/ThreadSafeRefCounted.h> > >@@ -54,9 +59,8 @@ public: > void AddRef() const final { ref(); } > rtc::RefCountReleaseStatus Release() const final > { >- auto result = hasOneRef() ? rtc::RefCountReleaseStatus::kDroppedLastRef : rtc::RefCountReleaseStatus::kOtherRefsRemained; > deref(); >- return result; >+ return rtc::RefCountReleaseStatus::kOtherRefsRemained; > } > > void setApplyRotation(bool shouldApplyRotation) { m_shouldApplyRotation = shouldApplyRotation; } >@@ -88,7 +92,7 @@ private: > > // VideoTrackSourceInterface API > bool is_screencast() const final { return false; } >- rtc::Optional<bool> needs_denoising() const final { return rtc::Optional<bool>(); } >+ absl::optional<bool> needs_denoising() const final { return absl::optional<bool>(); } > bool GetStats(Stats*) final { return false; }; > > // MediaSourceInterface API >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp b/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp >index 0ec2f754e7c..096ded08022 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp >+++ b/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoDecoderFactory.cpp >@@ -143,7 +143,6 @@ public: > > int32_t Decode(const webrtc::EncodedImage& inputImage, > bool, >- const webrtc::RTPFragmentationHeader*, > const webrtc::CodecSpecificInfo*, > int64_t renderTimeMs) override > { >@@ -233,7 +232,7 @@ public: > GST_LOG_OBJECT(pipeline(), "Output decoded frame! %d -> %" GST_PTR_FORMAT, > frame->timestamp(), buffer); > >- m_imageReadyCb->Decoded(*frame.get(), rtc::Optional<int32_t>(), rtc::Optional<uint8_t>()); >+ m_imageReadyCb->Decoded(*frame.get(), absl::optional<int32_t>(), absl::optional<uint8_t>()); > > return GST_FLOW_OK; > } >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp b/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp >index 21649c25664..8037b93b79b 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp >+++ b/Source/WebCore/platform/mediastream/libwebrtc/GStreamerVideoEncoderFactory.cpp >@@ -61,15 +61,13 @@ static GRefPtr<GRegex> bitrateKBitPerSec; > class GStreamerVideoEncoder : public webrtc::VideoEncoder { > public: > GStreamerVideoEncoder(const webrtc::SdpVideoFormat&) >- : m_pictureId(0) >- , m_firstFramePts(GST_CLOCK_TIME_NONE) >+ : m_firstFramePts(GST_CLOCK_TIME_NONE) > , m_restrictionCaps(adoptGRef(gst_caps_new_empty_simple("video/x-raw"))) > , m_bitrateSetter(nullptr) > { > } > GStreamerVideoEncoder() >- : m_pictureId(0) >- , m_firstFramePts(GST_CLOCK_TIME_NONE) >+ : m_firstFramePts(GST_CLOCK_TIME_NONE) > , m_restrictionCaps(adoptGRef(gst_caps_new_empty_simple("video/x-raw"))) > , m_bitrateSetter(nullptr) > { >@@ -241,7 +239,6 @@ public: > PopulateCodecSpecific(&codecSpecifiInfos, buffer); > > webrtc::EncodedImageCallback::Result result = m_imageReadyCb->OnEncodedImage(frame, &codecSpecifiInfos, fragmentationInfo); >- m_pictureId = (m_pictureId + 1) & 0x7FFF; > if (result.error != webrtc::EncodedImageCallback::Result::OK) { > GST_ELEMENT_ERROR(m_pipeline.get(), LIBRARY, FAILED, (nullptr), > ("Encode callback failed: %d", result.error)); >@@ -391,9 +388,6 @@ public: > m_restrictionCaps = caps; > } > >-protected: >- int16_t m_pictureId; >- > private: > static GstFlowReturn newSampleCallbackTramp(GstElement* sink, GStreamerVideoEncoder* enc) > { >@@ -532,12 +526,10 @@ public: > codecSpecifiInfos->codec_name = ImplementationName(); > webrtc::CodecSpecificInfoVP8* vp8Info = &(codecSpecifiInfos->codecSpecific.VP8); > vp8Info->temporalIdx = 0; >- vp8Info->pictureId = m_pictureId; > > vp8Info->simulcastIdx = 0; > vp8Info->keyIdx = webrtc::kNoKeyIdx; > vp8Info->nonReference = GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT); >- vp8Info->tl0PicIdx = webrtc::kNoTl0PicIdx; > } > }; > >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h >index 9875c4fa61d..71ca2ab5dba 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h >+++ b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCAudioModule.h >@@ -28,9 +28,15 @@ > #if USE(LIBWEBRTC) > > #include "LibWebRTCMacros.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ >+#include <webrtc/modules/audio_device/include/audio_device.h> > #include <webrtc/rtc_base/messagehandler.h> > #include <webrtc/rtc_base/thread.h> >-#include <webrtc/modules/audio_device/include/audio_device.h> >+ >+#pragma clang diagnostic pop > > namespace WebCore { > >@@ -47,7 +53,7 @@ private: > return value; > } > >- void AddRef() const final { return; } >+ void AddRef() const final { } > rtc::RefCountReleaseStatus Release() const final { return rtc::RefCountReleaseStatus::kOtherRefsRemained; } > void OnMessage(rtc::Message*); > >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCMacros.h b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCMacros.h >index 938e6631f8d..ddf31f8f640 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCMacros.h >+++ b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCMacros.h >@@ -36,6 +36,7 @@ > > #if PLATFORM(COCOA) > #define WEBRTC_MAC >+#define ABSL_ALLOCATOR_NOTHROW 1 > #endif > > #define WEBRTC_POSIX 1 >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp >index f2363ba0ce4..b4bd0a45138 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp >+++ b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.cpp >@@ -30,6 +30,10 @@ > #include "LibWebRTCAudioModule.h" > #include "Logging.h" > #include <dlfcn.h> >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/audio_codecs/builtin_audio_decoder_factory.h> > #include <webrtc/api/audio_codecs/builtin_audio_encoder_factory.h> > #include <webrtc/api/peerconnectionfactoryproxy.h> >@@ -38,6 +42,9 @@ > #include <webrtc/p2p/client/basicportallocator.h> > #include <webrtc/pc/peerconnectionfactory.h> > #include <webrtc/rtc_base/physicalsocketserver.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/Function.h> > #include <wtf/NeverDestroyed.h> > #endif >diff --git a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h >index 0b4b9bd5b3a..d8c4069b29b 100644 >--- a/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h >+++ b/Source/WebCore/platform/mediastream/libwebrtc/LibWebRTCProvider.h >@@ -35,12 +35,15 @@ > > #if USE(LIBWEBRTC) > >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/peerconnectioninterface.h> >-#include <webrtc/api/video_codecs/video_decoder_factory.h> > #include <webrtc/api/video_codecs/video_encoder_factory.h> >+#include <webrtc/api/video_codecs/video_decoder_factory.h> > #include <webrtc/rtc_base/scoped_ref_ptr.h> >-#include <webrtc/media/engine/webrtcvideodecoderfactory.h> >-#include <webrtc/media/engine/webrtcvideoencoderfactory.h> >+ >+#pragma clang diagnostic pop > > namespace rtc { > class NetworkManager; >diff --git a/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm b/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm >index 2ad4d0133e9..7e7ca7d72e6 100644 >--- a/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm >+++ b/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm >@@ -70,7 +70,7 @@ RetainPtr<CMSampleBufferRef> MockRealtimeVideoSourceMac::CMSampleBufferFromPixel > { > if (!pixelBuffer) > return nullptr; >- >+ > if (!m_pixelBufferConformer) > m_pixelBufferConformer = std::make_unique<PixelBufferConformerCV>((__bridge CFDictionaryRef)@{ (__bridge NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_420YpCbCr8Planar) }); > >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >index 9e201eb58f9..4b425f9ba62 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeIncomingVideoSourceCocoa.mm >@@ -33,7 +33,14 @@ > #include "Logging.h" > #include "MediaSampleAVFObjC.h" > #include <pal/cf/CoreMediaSoftLink.h> >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/sdk/WebKit/WebKitUtilities.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/cf/TypeCastsCF.h> > > #include "CoreVideoSoftLink.h" >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp >index 439a1bf1579..cf25fd83f1f 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.cpp >@@ -29,10 +29,17 @@ > #if USE(LIBWEBRTC) > > #include "Logging.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/video/i420_buffer.h> > #include <webrtc/common_video/libyuv/include/webrtc_libyuv.h> > #include <webrtc/sdk/WebKit/WebKitUtilities.h> > #include <webrtc/sdk/objc/Framework/Classes/Video/corevideo_frame_buffer.h> >+ >+#pragma clang diagnostic pop >+ > #include <pal/cf/CoreMediaSoftLink.h> > #include "CoreVideoSoftLink.h" > >@@ -50,7 +57,8 @@ typedef enum RotationMode { > kRotateCounterClockwise = 270, > } RotationModeEnum; > >-int ConvertToI420(const uint8_t* src_frame, >+int ConvertToI420(webrtc::VideoType src_video_type, >+ const uint8_t* src_frame, > size_t src_size, > uint8_t* dst_y, > int dst_stride_y, >@@ -64,8 +72,7 @@ int ConvertToI420(const uint8_t* src_frame, > int src_height, > int crop_width, > int crop_height, >- RotationMode rotation, >- uint32_t format); >+ RotationMode rotation); > } > } > >@@ -103,7 +110,7 @@ static inline int ConvertToI420(webrtc::VideoType src_video_type, > if (rotation == libyuv::kRotate90 || rotation == libyuv::kRotate270) { > std::swap(dst_width, dst_height); > } >- return libyuv::ConvertToI420( >+ return libyuv::ConvertToI420(src_video_type, > src_frame, sample_size, > dst_buffer->MutableDataY(), dst_buffer->StrideY(), > dst_buffer->MutableDataU(), dst_buffer->StrideU(), >@@ -111,8 +118,7 @@ static inline int ConvertToI420(webrtc::VideoType src_video_type, > crop_x, crop_y, > src_width, src_height, > dst_width, dst_height, >- rotation, >- webrtc::ConvertVideoType(src_video_type)); >+ rotation); > } > > void RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated(MediaStreamTrackPrivate&, MediaSample& sample) >@@ -147,41 +153,23 @@ void RealtimeOutgoingVideoSourceCocoa::sampleBufferUpdated(MediaStreamTrackPriva > auto pixelBuffer = static_cast<CVPixelBufferRef>(CMSampleBufferGetImageBuffer(sample.platformSample().sample.cmSampleBuffer)); > auto pixelFormatType = CVPixelBufferGetPixelFormatType(pixelBuffer); > >- if (pixelFormatType == kCVPixelFormatType_420YpCbCr8Planar || pixelFormatType == kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) { >- rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer = webrtc::pixelBufferToFrame(pixelBuffer); >- if (m_shouldApplyRotation && m_currentRotation != webrtc::kVideoRotation_0) { >- // FIXME: We should make AVVideoCaptureSource handle the rotation whenever possible. >- // This implementation is inefficient, we should rotate on the CMSampleBuffer directly instead of doing this double allocation. >- auto rotatedBuffer = buffer->ToI420(); >- ASSERT(rotatedBuffer); >- buffer = webrtc::I420Buffer::Rotate(*rotatedBuffer, m_currentRotation); >- } >- sendFrame(WTFMove(buffer)); >- return; >+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> buffer; >+ RetainPtr<CVPixelBufferRef> convertedBuffer; >+ if (pixelFormatType == kCVPixelFormatType_420YpCbCr8Planar || pixelFormatType == kCVPixelFormatType_420YpCbCr8BiPlanarFullRange) >+ buffer = webrtc::pixelBufferToFrame(pixelBuffer); >+ else { >+ convertedBuffer = convertToYUV(pixelBuffer); >+ buffer = webrtc::pixelBufferToFrame(convertedBuffer.get()); > } > >- CVPixelBufferLockBaseAddress(pixelBuffer, 0); >- auto* source = reinterpret_cast<uint8_t*>(CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0)); >- >- ASSERT(m_width); >- ASSERT(m_height); >- >- auto newBuffer = m_bufferPool.CreateBuffer(m_width, m_height); >- ASSERT(newBuffer); >- if (!newBuffer) { >- RELEASE_LOG(WebRTC, "RealtimeOutgoingVideoSourceCocoa::videoSampleAvailable unable to allocate buffer for conversion to YUV"); >- return; >- } >- if (pixelFormatType == kCVPixelFormatType_32BGRA) >- ConvertToI420(webrtc::VideoType::kARGB, source, 0, 0, m_width, m_height, 0, libyuv::kRotate0, newBuffer); >- else { >- ASSERT(pixelFormatType == kCVPixelFormatType_32ARGB); >- ConvertToI420(webrtc::VideoType::kBGRA, source, 0, 0, m_width, m_height, 0, libyuv::kRotate0, newBuffer); >+ if (m_shouldApplyRotation && m_currentRotation != webrtc::kVideoRotation_0) { >+ // FIXME: We should make AVVideoCaptureSource handle the rotation whenever possible. >+ // This implementation is inefficient, we should rotate on the CMSampleBuffer directly instead of doing this double allocation. >+ auto rotatedBuffer = buffer->ToI420(); >+ ASSERT(rotatedBuffer); >+ buffer = webrtc::I420Buffer::Rotate(*rotatedBuffer, m_currentRotation); > } >- CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); >- if (m_shouldApplyRotation && m_currentRotation != webrtc::kVideoRotation_0) >- newBuffer = webrtc::I420Buffer::Rotate(*newBuffer, m_currentRotation); >- sendFrame(WTFMove(newBuffer)); >+ sendFrame(WTFMove(buffer)); > } > > >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h >index 77bef461660..961d512d7b4 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.h >@@ -28,6 +28,7 @@ > #if USE(LIBWEBRTC) > > #include "RealtimeOutgoingVideoSource.h" >+#include "PixelBufferConformerCV.h" > > namespace WebCore { > >@@ -41,6 +42,10 @@ private: > // MediaStreamTrackPrivate::Observer API > void sampleBufferUpdated(MediaStreamTrackPrivate&, MediaSample&) final; > >+ RetainPtr<CVPixelBufferRef> convertToYUV(CVPixelBufferRef); >+ >+ std::unique_ptr<PixelBufferConformerCV> m_pixelBufferConformer; >+ > #if !RELEASE_LOG_DISABLED > size_t m_numberOfFrames { 0 }; > #endif >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm >new file mode 100644 >index 00000000000..881f5711fa0 >--- /dev/null >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeOutgoingVideoSourceCocoa.mm >@@ -0,0 +1,50 @@ >+/* >+ * Copyright (C) 2018 Apple Inc. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted, provided that the following conditions >+ * are required to be met: >+ * >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED >+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE >+ * DISCLAIMED. IN NO EVENT SHALL APPLE INC. AND ITS CONTRIBUTORS BE LIABLE FOR >+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL >+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR >+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER >+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, >+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE >+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#import "config.h" >+#import "RealtimeOutgoingVideoSourceCocoa.h" >+ >+#if USE(LIBWEBRTC) >+ >+#import "PixelBufferConformerCV.h" >+#import <pal/cf/CoreMediaSoftLink.h> >+#import "CoreVideoSoftLink.h" >+ >+namespace WebCore { >+ >+RetainPtr<CVPixelBufferRef> RealtimeOutgoingVideoSourceCocoa::convertToYUV(CVPixelBufferRef pixelBuffer) >+{ >+ if (!pixelBuffer) >+ return nullptr; >+ >+ if (!m_pixelBufferConformer) >+ m_pixelBufferConformer = std::make_unique<PixelBufferConformerCV>((__bridge CFDictionaryRef)@{ (__bridge NSString *)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_420YpCbCr8Planar) }); >+ >+ return m_pixelBufferConformer->convert(pixelBuffer); >+} >+ >+} // namespace WebCore >+ >+#endif // USE(LIBWEBRTC) >diff --git a/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp b/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >index b5d0de1c213..35a121f8d1b 100644 >--- a/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >+++ b/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >@@ -239,17 +239,17 @@ rtc::scoped_refptr<webrtc::DataChannelInterface> MockLibWebRTCPeerConnection::Cr > return new rtc::RefCountedObject<MockLibWebRTCDataChannel>(std::string(label), parameters.ordered, parameters.reliable, parameters.id); > } > >-rtc::scoped_refptr<webrtc::RtpSenderInterface> MockLibWebRTCPeerConnection::AddTrack(webrtc::MediaStreamTrackInterface* track, std::vector<webrtc::MediaStreamInterface*> streams) >+webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpSenderInterface>> MockLibWebRTCPeerConnection::AddTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track, const std::vector<std::string>& streamIds) > { > LibWebRTCProvider::callOnWebRTCSignalingThread([observer = &m_observer] { > observer->OnRenegotiationNeeded(); > }); > >- if (streams.size()) >- m_streamLabel = streams.front()->label(); >+ if (!streamIds.empty()) >+ m_streamLabel = streamIds.front(); > >- m_senders.append(new rtc::RefCountedObject<MockRtpSender>(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>(track))); >- return m_senders.last().get(); >+ m_senders.append(new rtc::RefCountedObject<MockRtpSender>(WTFMove(track))); >+ return rtc::scoped_refptr<webrtc::RtpSenderInterface>(m_senders.last().get()); > } > > bool MockLibWebRTCPeerConnection::RemoveTrack(webrtc::RtpSenderInterface* sender) >diff --git a/Source/WebCore/testing/MockLibWebRTCPeerConnection.h b/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >index 2b7e0dcd94f..9a80da48fee 100644 >--- a/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >+++ b/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >@@ -27,8 +27,15 @@ > #if USE(LIBWEBRTC) > > #include "LibWebRTCMacros.h" >+ >+#pragma clang diagnostic push >+#pragma clang diagnostic ignored "-Wunused-parameter" >+ > #include <webrtc/api/mediastreaminterface.h> > #include <webrtc/api/peerconnectioninterface.h> >+ >+#pragma clang diagnostic pop >+ > #include <wtf/text/WTFString.h> > > namespace WebCore { >@@ -49,11 +56,9 @@ protected: > private: > rtc::scoped_refptr<webrtc::StreamCollectionInterface> local_streams() override { return nullptr; } > rtc::scoped_refptr<webrtc::StreamCollectionInterface> remote_streams() override { return nullptr; } >- rtc::scoped_refptr<webrtc::DtmfSenderInterface> CreateDtmfSender(webrtc::AudioTrackInterface*) override { return nullptr; } > const webrtc::SessionDescriptionInterface* local_description() const override { return nullptr; } > const webrtc::SessionDescriptionInterface* remote_description() const override { return nullptr; } > bool AddIceCandidate(const webrtc::IceCandidateInterface*) override { return true; } >- void RegisterUMAObserver(webrtc::UMAObserver*) override { } > SignalingState signaling_state() override { return kStable; } > IceConnectionState ice_connection_state() override { return kIceConnectionNew; } > IceGatheringState ice_gathering_state() override { return kIceGatheringNew; } >@@ -67,7 +72,7 @@ protected: > void SetRemoteDescription(webrtc::SetSessionDescriptionObserver*, webrtc::SessionDescriptionInterface*) final; > void CreateAnswer(webrtc::CreateSessionDescriptionObserver*, const webrtc::MediaConstraintsInterface*) final; > rtc::scoped_refptr<webrtc::DataChannelInterface> CreateDataChannel(const std::string&, const webrtc::DataChannelInit*) final; >- rtc::scoped_refptr<webrtc::RtpSenderInterface> AddTrack(webrtc::MediaStreamTrackInterface*, std::vector<webrtc::MediaStreamInterface*> streams) final; >+ webrtc::RTCErrorOr<rtc::scoped_refptr<webrtc::RtpSenderInterface>> AddTrack(rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>, const std::vector<std::string>& streams) final; > bool RemoveTrack(webrtc::RtpSenderInterface*) final; > webrtc::RTCError SetBitrate(const BitrateParameters&) final { return { }; } > >@@ -221,8 +226,8 @@ public: > cricket::MediaType media_type() const { return cricket::MEDIA_TYPE_VIDEO; } > std::string id() const { return ""; } > std::vector<std::string> stream_ids() const { return { }; } >- webrtc::RtpParameters GetParameters() const { return { }; } >- bool SetParameters(const webrtc::RtpParameters&) { return false; } >+ webrtc::RtpParameters GetParameters() { return { }; } >+ webrtc::RTCError SetParameters(const webrtc::RtpParameters&) { return { }; } > rtc::scoped_refptr<webrtc::DtmfSenderInterface> GetDtmfSender() const { return nullptr; } > > private: >@@ -245,7 +250,6 @@ private: > > void SetOptions(const Options&) final { } > rtc::scoped_refptr<webrtc::AudioSourceInterface> CreateAudioSource(const cricket::AudioOptions&) final { return nullptr; } >- rtc::scoped_refptr<webrtc::AudioSourceInterface> CreateAudioSource(const webrtc::MediaConstraintsInterface*) final { return nullptr; } > > rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> CreateVideoSource(cricket::VideoCapturer*) final { return nullptr; } > rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> CreateVideoSource(cricket::VideoCapturer*, const webrtc::MediaConstraintsInterface*) final { return nullptr; }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188745
:
347508
|
347510
|
347512
|
347568
|
347607
|
347679
|
347698
|
347735
|
347769
|
347795
|
347808
| 347839