Full Code of MarshalX/tgcalls for AI

dev 2556b035454e cached
8265 files
64.5 MB
17.4M tokens
48743 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (69,617K chars total). Download the full file to get everything.
Repository: MarshalX/tgcalls
Branch: dev
Commit: 2556b035454e
Files: 8265
Total size: 64.5 MB

Directory structure:
gitextract_3vx6f7a1/

├── .clang-format
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       ├── build_and_deploy_pytgcalls_documentation.yaml
│       ├── build_and_publish_linux_python_wheels_for_many_versions.yaml
│       ├── build_and_publish_macos_wheels_for_many_python_versions.yaml
│       ├── build_and_publish_win_x32_wheels_for_many_python_versions.yaml
│       ├── build_and_publish_win_x64_wheels_for_many_python_versions.yaml
│       ├── build_and_push_manylinux_images.yaml
│       ├── build_and_push_manylinux_webrtc_entrypoint_images.yaml
│       └── build_and_push_manylinux_webrtc_images.yaml
├── .gitignore
├── .gitmodules
├── LICENSE
├── MANIFEST.in
├── README.md
├── build/
│   ├── macos/
│   │   └── README.md
│   ├── manylinux/
│   │   ├── Dockerfile
│   │   ├── dev/
│   │   │   ├── Dockerfile
│   │   │   └── entrypoint.sh
│   │   ├── entrypoint/
│   │   │   ├── Dockerfile
│   │   │   └── entrypoint.sh
│   │   └── webrtc/
│   │       └── Dockerfile
│   ├── ubuntu/
│   │   └── Dockerfile
│   └── windows/
│       └── README.md
├── docker-compose.yaml
├── examples/
│   ├── LICENSE
│   ├── README.md
│   ├── device_playout.py
│   ├── file_playout.py
│   ├── player_as_smart_plugin.py
│   ├── pyav.py
│   ├── radio_as_smart_plugin.py
│   ├── recorder_as_smart_plugin.py
│   └── restream_using_raw_data.py
├── pytgcalls/
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── helpers.py
│   ├── pdoc/
│   │   ├── config.mako
│   │   ├── credits.mako
│   │   ├── head.mako
│   │   └── logo.mako
│   ├── pyproject.toml
│   ├── pytgcalls/
│   │   ├── __init__.py
│   │   ├── dispatcher/
│   │   │   ├── __init__.py
│   │   │   ├── action.py
│   │   │   ├── dispatcher.py
│   │   │   └── dispatcher_mixin.py
│   │   ├── exceptions.py
│   │   ├── group_call_factory.py
│   │   ├── group_call_type.py
│   │   ├── implementation/
│   │   │   ├── __init__.py
│   │   │   ├── group_call.py
│   │   │   ├── group_call_base.py
│   │   │   ├── group_call_device.py
│   │   │   ├── group_call_file.py
│   │   │   ├── group_call_native.py
│   │   │   └── group_call_raw.py
│   │   ├── mtproto/
│   │   │   ├── __init__.py
│   │   │   ├── base_bridge.py
│   │   │   ├── data/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_wrapper.py
│   │   │   │   ├── group_call_discarded_wrapper.py
│   │   │   │   ├── group_call_participant_wrapper.py
│   │   │   │   ├── group_call_wrapper.py
│   │   │   │   └── update/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── update_group_call_participants_wrapper.py
│   │   │   │       └── update_group_call_wrapper.py
│   │   │   ├── exceptions.py
│   │   │   ├── pyrogram_bridge.py
│   │   │   └── telethon_bridge.py
│   │   ├── mtproto_client_type.py
│   │   └── utils.py
│   ├── setup.py
│   ├── test.py
│   └── tgcalls_dev.py
├── setup.py
└── tgcalls/
    ├── cmake/
    │   ├── external_ffmpeg.cmake
    │   └── lib_tgcalls.cmake
    ├── getSourcesList.py
    ├── src/
    │   ├── FileAudioDevice.cpp
    │   ├── FileAudioDevice.h
    │   ├── FileAudioDeviceDescriptor.h
    │   ├── InstanceHolder.h
    │   ├── NativeInstance.cpp
    │   ├── NativeInstance.h
    │   ├── RawAudioDevice.cpp
    │   ├── RawAudioDevice.h
    │   ├── RawAudioDeviceDescriptor.cpp
    │   ├── RawAudioDeviceDescriptor.h
    │   ├── RtcServer.cpp
    │   ├── RtcServer.h
    │   ├── WrappedAudioDeviceModuleImpl.cpp
    │   ├── WrappedAudioDeviceModuleImpl.h
    │   ├── config.h.in
    │   ├── tgcalls.cpp
    │   └── video/
    │       ├── PythonSource.cpp
    │       ├── PythonSource.h
    │       ├── PythonVideoTrackSource.cpp
    │       └── PythonVideoTrackSource.h
    └── third_party/
        ├── lib_tgcalls/
        │   ├── .clang-format
        │   ├── .gitignore
        │   ├── LICENSE
        │   ├── README.md
        │   └── tgcalls/
        │       ├── AudioDeviceHelper.cpp
        │       ├── AudioDeviceHelper.h
        │       ├── AudioFrame.h
        │       ├── CodecSelectHelper.cpp
        │       ├── CodecSelectHelper.h
        │       ├── CryptoHelper.cpp
        │       ├── CryptoHelper.h
        │       ├── EncryptedConnection.cpp
        │       ├── EncryptedConnection.h
        │       ├── FakeAudioDeviceModule.cpp
        │       ├── FakeAudioDeviceModule.h
        │       ├── FakeVideoTrackSource.cpp
        │       ├── FakeVideoTrackSource.h
        │       ├── Instance.cpp
        │       ├── Instance.h
        │       ├── InstanceImpl.cpp
        │       ├── InstanceImpl.h
        │       ├── LogSinkImpl.cpp
        │       ├── LogSinkImpl.h
        │       ├── Manager.cpp
        │       ├── Manager.h
        │       ├── MediaManager.cpp
        │       ├── MediaManager.h
        │       ├── Message.cpp
        │       ├── Message.h
        │       ├── NetworkManager.cpp
        │       ├── NetworkManager.h
        │       ├── PlatformContext.h
        │       ├── SctpDataChannelProviderInterfaceImpl.cpp
        │       ├── SctpDataChannelProviderInterfaceImpl.h
        │       ├── StaticThreads.cpp
        │       ├── StaticThreads.h
        │       ├── Stats.h
        │       ├── ThreadLocalObject.cpp
        │       ├── ThreadLocalObject.h
        │       ├── TurnCustomizerImpl.cpp
        │       ├── TurnCustomizerImpl.h
        │       ├── VideoCaptureInterface.cpp
        │       ├── VideoCaptureInterface.h
        │       ├── VideoCaptureInterfaceImpl.cpp
        │       ├── VideoCaptureInterfaceImpl.h
        │       ├── VideoCapturerInterface.h
        │       ├── desktop_capturer/
        │       │   ├── DesktopCaptureSource.cpp
        │       │   ├── DesktopCaptureSource.h
        │       │   ├── DesktopCaptureSourceHelper.cpp
        │       │   ├── DesktopCaptureSourceHelper.h
        │       │   ├── DesktopCaptureSourceHelper.mm
        │       │   ├── DesktopCaptureSourceManager.cpp
        │       │   └── DesktopCaptureSourceManager.h
        │       ├── group/
        │       │   ├── GroupInstanceCustomImpl.cpp
        │       │   ├── GroupInstanceCustomImpl.h
        │       │   ├── GroupInstanceImpl.h
        │       │   ├── GroupJoinPayload.h
        │       │   ├── GroupJoinPayloadInternal.cpp
        │       │   ├── GroupJoinPayloadInternal.h
        │       │   ├── GroupNetworkManager.cpp
        │       │   ├── GroupNetworkManager.h
        │       │   ├── StreamingPart.cpp
        │       │   └── StreamingPart.h
        │       ├── legacy/
        │       │   ├── InstanceImplLegacy.cpp
        │       │   └── InstanceImplLegacy.h
        │       ├── platform/
        │       │   ├── PlatformInterface.h
        │       │   ├── android/
        │       │   │   ├── AndroidContext.cpp
        │       │   │   ├── AndroidContext.h
        │       │   │   ├── AndroidInterface.cpp
        │       │   │   ├── AndroidInterface.h
        │       │   │   ├── VideoCameraCapturer.cpp
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCapturerInterfaceImpl.cpp
        │       │   │   └── VideoCapturerInterfaceImpl.h
        │       │   ├── darwin/
        │       │   │   ├── AudioDeviceModuleIOS.h
        │       │   │   ├── AudioDeviceModuleMacos.h
        │       │   │   ├── CustomExternalCapturer.h
        │       │   │   ├── CustomExternalCapturer.mm
        │       │   │   ├── DarwinInterface.h
        │       │   │   ├── DarwinInterface.mm
        │       │   │   ├── DarwinVideoSource.h
        │       │   │   ├── DarwinVideoSource.mm
        │       │   │   ├── DesktopCaptureSourceView.h
        │       │   │   ├── DesktopCaptureSourceView.mm
        │       │   │   ├── DesktopCaptureSourceViewMac.h
        │       │   │   ├── DesktopCaptureSourceViewMac.mm
        │       │   │   ├── DesktopSharingCapturer.h
        │       │   │   ├── DesktopSharingCapturer.mm
        │       │   │   ├── GLVideoView.h
        │       │   │   ├── GLVideoView.mm
        │       │   │   ├── GLVideoViewMac.h
        │       │   │   ├── GLVideoViewMac.mm
        │       │   │   ├── TGCMIOCapturer.h
        │       │   │   ├── TGCMIOCapturer.m
        │       │   │   ├── TGCMIODevice.h
        │       │   │   ├── TGCMIODevice.mm
        │       │   │   ├── TGRTCCVPixelBuffer.h
        │       │   │   ├── TGRTCCVPixelBuffer.mm
        │       │   │   ├── TGRTCDefaultVideoDecoderFactory.h
        │       │   │   ├── TGRTCDefaultVideoDecoderFactory.mm
        │       │   │   ├── TGRTCDefaultVideoEncoderFactory.h
        │       │   │   ├── TGRTCDefaultVideoEncoderFactory.mm
        │       │   │   ├── TGRTCVideoDecoderH264.h
        │       │   │   ├── TGRTCVideoDecoderH264.mm
        │       │   │   ├── TGRTCVideoDecoderH265.h
        │       │   │   ├── TGRTCVideoDecoderH265.mm
        │       │   │   ├── TGRTCVideoEncoderH264.h
        │       │   │   ├── TGRTCVideoEncoderH264.mm
        │       │   │   ├── TGRTCVideoEncoderH265.h
        │       │   │   ├── TGRTCVideoEncoderH265.mm
        │       │   │   ├── VideoCMIOCapture.h
        │       │   │   ├── VideoCMIOCapture.mm
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCameraCapturer.mm
        │       │   │   ├── VideoCameraCapturerMac.h
        │       │   │   ├── VideoCameraCapturerMac.mm
        │       │   │   ├── VideoCaptureView.h
        │       │   │   ├── VideoCaptureView.mm
        │       │   │   ├── VideoCapturerInterfaceImpl.h
        │       │   │   ├── VideoCapturerInterfaceImpl.mm
        │       │   │   ├── VideoMetalView.h
        │       │   │   ├── VideoMetalView.mm
        │       │   │   ├── VideoMetalViewMac.h
        │       │   │   ├── VideoMetalViewMac.mm
        │       │   │   ├── VideoSampleBufferView.h
        │       │   │   ├── VideoSampleBufferView.mm
        │       │   │   ├── VideoSampleBufferViewMac.h
        │       │   │   ├── VideoSampleBufferViewMac.mm
        │       │   │   ├── macOS/
        │       │   │   │   ├── TGRTCMTLI420Renderer.h
        │       │   │   │   ├── TGRTCMTLI420Renderer.mm
        │       │   │   │   ├── TGRTCMTLRenderer+Private.h
        │       │   │   │   ├── TGRTCMTLRenderer.h
        │       │   │   │   ├── TGRTCMTLRenderer.mm
        │       │   │   │   ├── TGRTCMetalContextHolder.h
        │       │   │   │   └── TGRTCMetalContextHolder.m
        │       │   │   ├── objc_video_decoder_factory.h
        │       │   │   ├── objc_video_decoder_factory.mm
        │       │   │   ├── objc_video_encoder_factory.h
        │       │   │   └── objc_video_encoder_factory.mm
        │       │   ├── fake/
        │       │   │   ├── FakeInterface.cpp
        │       │   │   └── FakeInterface.h
        │       │   ├── tdesktop/
        │       │   │   ├── DesktopInterface.cpp
        │       │   │   ├── DesktopInterface.h
        │       │   │   ├── VideoCameraCapturer.cpp
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCapturerInterfaceImpl.cpp
        │       │   │   ├── VideoCapturerInterfaceImpl.h
        │       │   │   ├── VideoCapturerTrackSource.cpp
        │       │   │   └── VideoCapturerTrackSource.h
        │       │   └── uwp/
        │       │       ├── UwpContext.h
        │       │       ├── UwpScreenCapturer.cpp
        │       │       └── UwpScreenCapturer.h
        │       ├── reference/
        │       │   ├── InstanceImplReference.cpp
        │       │   └── InstanceImplReference.h
        │       ├── third-party/
        │       │   ├── json11.cpp
        │       │   └── json11.hpp
        │       └── v2/
        │           ├── InstanceV2Impl.cpp
        │           ├── InstanceV2Impl.h
        │           ├── NativeNetworkingImpl.cpp
        │           ├── NativeNetworkingImpl.h
        │           ├── Signaling.cpp
        │           ├── Signaling.h
        │           ├── SignalingEncryption.cpp
        │           └── SignalingEncryption.h
        └── webrtc/
            ├── .gitignore
            ├── .gitmodules
            ├── LICENSE
            ├── README.md
            ├── cmake/
            │   ├── arch.cmake
            │   ├── external.cmake
            │   ├── generate_stubs.cmake
            │   ├── generate_target.cmake
            │   ├── init_target.cmake
            │   ├── libabsl.cmake
            │   ├── libevent.cmake
            │   ├── libopenh264.cmake
            │   ├── libpffft.cmake
            │   ├── librnnoise.cmake
            │   ├── libsdkmacos.cmake
            │   ├── libsrtp.cmake
            │   ├── libusrsctp.cmake
            │   ├── libvpx.cmake
            │   ├── libwebrtcbuild.cmake
            │   ├── libyuv.cmake
            │   ├── nice_target_sources.cmake
            │   ├── target_yasm_sources.cmake
            │   └── tg_owtConfig.cmake
            └── src/
                ├── AUTHORS
                ├── OWNERS
                ├── PATENTS
                ├── api/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── DESIGN.md
                │   ├── OWNERS
                │   ├── README.md
                │   ├── adaptation/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── resource.cc
                │   │   └── resource.h
                │   ├── array_view.h
                │   ├── array_view_unittest.cc
                │   ├── async_dns_resolver.h
                │   ├── async_resolver_factory.h
                │   ├── audio/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── audio_frame.cc
                │   │   ├── audio_frame.h
                │   │   ├── audio_frame_processor.h
                │   │   ├── audio_mixer.h
                │   │   ├── channel_layout.cc
                │   │   ├── channel_layout.h
                │   │   ├── echo_canceller3_config.cc
                │   │   ├── echo_canceller3_config.h
                │   │   ├── echo_canceller3_config_json.cc
                │   │   ├── echo_canceller3_config_json.h
                │   │   ├── echo_canceller3_factory.cc
                │   │   ├── echo_canceller3_factory.h
                │   │   ├── echo_control.h
                │   │   ├── echo_detector_creator.cc
                │   │   ├── echo_detector_creator.h
                │   │   └── test/
                │   │       ├── BUILD.gn
                │   │       ├── audio_frame_unittest.cc
                │   │       ├── echo_canceller3_config_json_unittest.cc
                │   │       └── echo_canceller3_config_unittest.cc
                │   ├── audio_codecs/
                │   │   ├── BUILD.gn
                │   │   ├── L16/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_L16.cc
                │   │   │   ├── audio_decoder_L16.h
                │   │   │   ├── audio_encoder_L16.cc
                │   │   │   └── audio_encoder_L16.h
                │   │   ├── OWNERS
                │   │   ├── audio_codec_pair_id.cc
                │   │   ├── audio_codec_pair_id.h
                │   │   ├── audio_decoder.cc
                │   │   ├── audio_decoder.h
                │   │   ├── audio_decoder_factory.h
                │   │   ├── audio_decoder_factory_template.h
                │   │   ├── audio_encoder.cc
                │   │   ├── audio_encoder.h
                │   │   ├── audio_encoder_factory.h
                │   │   ├── audio_encoder_factory_template.h
                │   │   ├── audio_format.cc
                │   │   ├── audio_format.h
                │   │   ├── builtin_audio_decoder_factory.cc
                │   │   ├── builtin_audio_decoder_factory.h
                │   │   ├── builtin_audio_encoder_factory.cc
                │   │   ├── builtin_audio_encoder_factory.h
                │   │   ├── g711/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_g711.cc
                │   │   │   ├── audio_decoder_g711.h
                │   │   │   ├── audio_encoder_g711.cc
                │   │   │   └── audio_encoder_g711.h
                │   │   ├── g722/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_g722.cc
                │   │   │   ├── audio_decoder_g722.h
                │   │   │   ├── audio_encoder_g722.cc
                │   │   │   ├── audio_encoder_g722.h
                │   │   │   └── audio_encoder_g722_config.h
                │   │   ├── ilbc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_ilbc.cc
                │   │   │   ├── audio_decoder_ilbc.h
                │   │   │   ├── audio_encoder_ilbc.cc
                │   │   │   ├── audio_encoder_ilbc.h
                │   │   │   └── audio_encoder_ilbc_config.h
                │   │   ├── isac/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_isac.h
                │   │   │   ├── audio_decoder_isac_fix.cc
                │   │   │   ├── audio_decoder_isac_fix.h
                │   │   │   ├── audio_decoder_isac_float.cc
                │   │   │   ├── audio_decoder_isac_float.h
                │   │   │   ├── audio_encoder_isac.h
                │   │   │   ├── audio_encoder_isac_fix.cc
                │   │   │   ├── audio_encoder_isac_fix.h
                │   │   │   ├── audio_encoder_isac_float.cc
                │   │   │   └── audio_encoder_isac_float.h
                │   │   ├── opus/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_multi_channel_opus.cc
                │   │   │   ├── audio_decoder_multi_channel_opus.h
                │   │   │   ├── audio_decoder_multi_channel_opus_config.h
                │   │   │   ├── audio_decoder_opus.cc
                │   │   │   ├── audio_decoder_opus.h
                │   │   │   ├── audio_encoder_multi_channel_opus.cc
                │   │   │   ├── audio_encoder_multi_channel_opus.h
                │   │   │   ├── audio_encoder_multi_channel_opus_config.cc
                │   │   │   ├── audio_encoder_multi_channel_opus_config.h
                │   │   │   ├── audio_encoder_opus.cc
                │   │   │   ├── audio_encoder_opus.h
                │   │   │   ├── audio_encoder_opus_config.cc
                │   │   │   └── audio_encoder_opus_config.h
                │   │   ├── opus_audio_decoder_factory.cc
                │   │   ├── opus_audio_decoder_factory.h
                │   │   ├── opus_audio_encoder_factory.cc
                │   │   ├── opus_audio_encoder_factory.h
                │   │   └── test/
                │   │       ├── BUILD.gn
                │   │       ├── audio_decoder_factory_template_unittest.cc
                │   │       └── audio_encoder_factory_template_unittest.cc
                │   ├── audio_options.cc
                │   ├── audio_options.h
                │   ├── call/
                │   │   ├── audio_sink.h
                │   │   ├── bitrate_allocation.h
                │   │   ├── call_factory_interface.h
                │   │   ├── transport.cc
                │   │   └── transport.h
                │   ├── candidate.cc
                │   ├── candidate.h
                │   ├── create_peerconnection_factory.cc
                │   ├── create_peerconnection_factory.h
                │   ├── crypto/
                │   │   ├── BUILD.gn
                │   │   ├── crypto_options.cc
                │   │   ├── crypto_options.h
                │   │   ├── frame_decryptor_interface.h
                │   │   └── frame_encryptor_interface.h
                │   ├── crypto_params.h
                │   ├── data_channel_interface.cc
                │   ├── data_channel_interface.h
                │   ├── dtls_transport_interface.cc
                │   ├── dtls_transport_interface.h
                │   ├── dtmf_sender_interface.h
                │   ├── fec_controller.h
                │   ├── fec_controller_override.h
                │   ├── frame_transformer_interface.h
                │   ├── function_view.h
                │   ├── function_view_unittest.cc
                │   ├── ice_transport_factory.cc
                │   ├── ice_transport_factory.h
                │   ├── ice_transport_interface.h
                │   ├── jsep.cc
                │   ├── jsep.h
                │   ├── jsep_ice_candidate.cc
                │   ├── jsep_ice_candidate.h
                │   ├── jsep_session_description.h
                │   ├── media_stream_interface.cc
                │   ├── media_stream_interface.h
                │   ├── media_stream_proxy.h
                │   ├── media_stream_track.h
                │   ├── media_stream_track_proxy.h
                │   ├── media_types.cc
                │   ├── media_types.h
                │   ├── neteq/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── custom_neteq_factory.cc
                │   │   ├── custom_neteq_factory.h
                │   │   ├── default_neteq_controller_factory.cc
                │   │   ├── default_neteq_controller_factory.h
                │   │   ├── neteq.cc
                │   │   ├── neteq.h
                │   │   ├── neteq_controller.h
                │   │   ├── neteq_controller_factory.h
                │   │   ├── neteq_factory.h
                │   │   ├── tick_timer.cc
                │   │   ├── tick_timer.h
                │   │   └── tick_timer_unittest.cc
                │   ├── network_state_predictor.h
                │   ├── notifier.h
                │   ├── numerics/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── samples_stats_counter.cc
                │   │   ├── samples_stats_counter.h
                │   │   └── samples_stats_counter_unittest.cc
                │   ├── packet_socket_factory.h
                │   ├── peer_connection_factory_proxy.h
                │   ├── peer_connection_interface.cc
                │   ├── peer_connection_interface.h
                │   ├── peer_connection_proxy.h
                │   ├── priority.h
                │   ├── proxy.cc
                │   ├── proxy.h
                │   ├── ref_counted_base.h
                │   ├── rtc_error.cc
                │   ├── rtc_error.h
                │   ├── rtc_error_unittest.cc
                │   ├── rtc_event_log/
                │   │   ├── BUILD.gn
                │   │   ├── rtc_event.cc
                │   │   ├── rtc_event.h
                │   │   ├── rtc_event_log.cc
                │   │   ├── rtc_event_log.h
                │   │   ├── rtc_event_log_factory.cc
                │   │   ├── rtc_event_log_factory.h
                │   │   └── rtc_event_log_factory_interface.h
                │   ├── rtc_event_log_output.h
                │   ├── rtc_event_log_output_file.cc
                │   ├── rtc_event_log_output_file.h
                │   ├── rtc_event_log_output_file_unittest.cc
                │   ├── rtp_headers.cc
                │   ├── rtp_headers.h
                │   ├── rtp_packet_info.cc
                │   ├── rtp_packet_info.h
                │   ├── rtp_packet_info_unittest.cc
                │   ├── rtp_packet_infos.h
                │   ├── rtp_packet_infos_unittest.cc
                │   ├── rtp_parameters.cc
                │   ├── rtp_parameters.h
                │   ├── rtp_parameters_unittest.cc
                │   ├── rtp_receiver_interface.cc
                │   ├── rtp_receiver_interface.h
                │   ├── rtp_sender_interface.cc
                │   ├── rtp_sender_interface.h
                │   ├── rtp_transceiver_direction.h
                │   ├── rtp_transceiver_interface.cc
                │   ├── rtp_transceiver_interface.h
                │   ├── scoped_refptr.h
                │   ├── scoped_refptr_unittest.cc
                │   ├── sctp_transport_interface.cc
                │   ├── sctp_transport_interface.h
                │   ├── sequence_checker.h
                │   ├── sequence_checker_unittest.cc
                │   ├── set_local_description_observer_interface.h
                │   ├── set_remote_description_observer_interface.h
                │   ├── stats/
                │   │   ├── OWNERS
                │   │   ├── rtc_stats.h
                │   │   ├── rtc_stats_collector_callback.h
                │   │   ├── rtc_stats_report.h
                │   │   └── rtcstats_objects.h
                │   ├── stats_types.cc
                │   ├── stats_types.h
                │   ├── task_queue/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── default_task_queue_factory.h
                │   │   ├── default_task_queue_factory_gcd.cc
                │   │   ├── default_task_queue_factory_libevent.cc
                │   │   ├── default_task_queue_factory_stdlib.cc
                │   │   ├── default_task_queue_factory_unittest.cc
                │   │   ├── default_task_queue_factory_win.cc
                │   │   ├── queued_task.h
                │   │   ├── task_queue_base.cc
                │   │   ├── task_queue_base.h
                │   │   ├── task_queue_factory.h
                │   │   ├── task_queue_test.cc
                │   │   └── task_queue_test.h
                │   ├── test/
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── audio_quality_analyzer_interface.h
                │   │   ├── audioproc_float.cc
                │   │   ├── audioproc_float.h
                │   │   ├── compile_all_headers.cc
                │   │   ├── create_frame_generator.cc
                │   │   ├── create_frame_generator.h
                │   │   ├── create_network_emulation_manager.cc
                │   │   ├── create_network_emulation_manager.h
                │   │   ├── create_peer_connection_quality_test_frame_generator.cc
                │   │   ├── create_peer_connection_quality_test_frame_generator.h
                │   │   ├── create_peerconnection_quality_test_fixture.cc
                │   │   ├── create_peerconnection_quality_test_fixture.h
                │   │   ├── create_simulcast_test_fixture.cc
                │   │   ├── create_simulcast_test_fixture.h
                │   │   ├── create_time_controller.cc
                │   │   ├── create_time_controller.h
                │   │   ├── create_time_controller_unittest.cc
                │   │   ├── create_video_quality_test_fixture.cc
                │   │   ├── create_video_quality_test_fixture.h
                │   │   ├── create_videocodec_test_fixture.cc
                │   │   ├── create_videocodec_test_fixture.h
                │   │   ├── dummy_peer_connection.h
                │   │   ├── fake_frame_decryptor.cc
                │   │   ├── fake_frame_decryptor.h
                │   │   ├── fake_frame_encryptor.cc
                │   │   ├── fake_frame_encryptor.h
                │   │   ├── frame_generator_interface.cc
                │   │   ├── frame_generator_interface.h
                │   │   ├── mock_audio_mixer.h
                │   │   ├── mock_data_channel.h
                │   │   ├── mock_fec_controller_override.h
                │   │   ├── mock_frame_decryptor.h
                │   │   ├── mock_frame_encryptor.h
                │   │   ├── mock_media_stream_interface.h
                │   │   ├── mock_peer_connection_factory_interface.h
                │   │   ├── mock_peerconnectioninterface.h
                │   │   ├── mock_rtp_transceiver.h
                │   │   ├── mock_rtpreceiver.h
                │   │   ├── mock_rtpsender.h
                │   │   ├── mock_transformable_video_frame.h
                │   │   ├── mock_video_bitrate_allocator.h
                │   │   ├── mock_video_bitrate_allocator_factory.h
                │   │   ├── mock_video_decoder.h
                │   │   ├── mock_video_decoder_factory.h
                │   │   ├── mock_video_encoder.h
                │   │   ├── mock_video_encoder_factory.h
                │   │   ├── neteq_simulator.cc
                │   │   ├── neteq_simulator.h
                │   │   ├── neteq_simulator_factory.cc
                │   │   ├── neteq_simulator_factory.h
                │   │   ├── network_emulation/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── create_cross_traffic.cc
                │   │   │   ├── create_cross_traffic.h
                │   │   │   ├── cross_traffic.h
                │   │   │   ├── network_emulation_interfaces.cc
                │   │   │   └── network_emulation_interfaces.h
                │   │   ├── network_emulation_manager.cc
                │   │   ├── network_emulation_manager.h
                │   │   ├── peerconnection_quality_test_fixture.h
                │   │   ├── simulated_network.h
                │   │   ├── simulcast_test_fixture.h
                │   │   ├── stats_observer_interface.h
                │   │   ├── test_dependency_factory.cc
                │   │   ├── test_dependency_factory.h
                │   │   ├── time_controller.cc
                │   │   ├── time_controller.h
                │   │   ├── track_id_stream_info_map.h
                │   │   ├── video/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── function_video_decoder_factory.h
                │   │   │   └── function_video_encoder_factory.h
                │   │   ├── video_quality_analyzer_interface.h
                │   │   ├── video_quality_test_fixture.h
                │   │   ├── videocodec_test_fixture.h
                │   │   ├── videocodec_test_stats.cc
                │   │   └── videocodec_test_stats.h
                │   ├── transport/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── bitrate_settings.cc
                │   │   ├── bitrate_settings.h
                │   │   ├── data_channel_transport_interface.h
                │   │   ├── enums.h
                │   │   ├── field_trial_based_config.cc
                │   │   ├── field_trial_based_config.h
                │   │   ├── goog_cc_factory.cc
                │   │   ├── goog_cc_factory.h
                │   │   ├── network_control.h
                │   │   ├── network_types.cc
                │   │   ├── network_types.h
                │   │   ├── rtp/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── dependency_descriptor.cc
                │   │   │   ├── dependency_descriptor.h
                │   │   │   └── rtp_source.h
                │   │   ├── sctp_transport_factory_interface.h
                │   │   ├── stun.cc
                │   │   ├── stun.h
                │   │   ├── stun_unittest.cc
                │   │   ├── test/
                │   │   │   ├── create_feedback_generator.cc
                │   │   │   ├── create_feedback_generator.h
                │   │   │   ├── feedback_generator_interface.h
                │   │   │   └── mock_network_control.h
                │   │   └── webrtc_key_value_config.h
                │   ├── turn_customizer.h
                │   ├── uma_metrics.h
                │   ├── units/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── data_rate.cc
                │   │   ├── data_rate.h
                │   │   ├── data_rate_unittest.cc
                │   │   ├── data_size.cc
                │   │   ├── data_size.h
                │   │   ├── data_size_unittest.cc
                │   │   ├── frequency.cc
                │   │   ├── frequency.h
                │   │   ├── frequency_unittest.cc
                │   │   ├── time_delta.cc
                │   │   ├── time_delta.h
                │   │   ├── time_delta_unittest.cc
                │   │   ├── timestamp.cc
                │   │   ├── timestamp.h
                │   │   └── timestamp_unittest.cc
                │   ├── video/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── builtin_video_bitrate_allocator_factory.cc
                │   │   ├── builtin_video_bitrate_allocator_factory.h
                │   │   ├── color_space.cc
                │   │   ├── color_space.h
                │   │   ├── encoded_frame.cc
                │   │   ├── encoded_frame.h
                │   │   ├── encoded_image.cc
                │   │   ├── encoded_image.h
                │   │   ├── hdr_metadata.cc
                │   │   ├── hdr_metadata.h
                │   │   ├── i010_buffer.cc
                │   │   ├── i010_buffer.h
                │   │   ├── i420_buffer.cc
                │   │   ├── i420_buffer.h
                │   │   ├── nv12_buffer.cc
                │   │   ├── nv12_buffer.h
                │   │   ├── recordable_encoded_frame.h
                │   │   ├── test/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── color_space_unittest.cc
                │   │   │   ├── mock_recordable_encoded_frame.h
                │   │   │   ├── nv12_buffer_unittest.cc
                │   │   │   ├── video_adaptation_counters_unittest.cc
                │   │   │   └── video_bitrate_allocation_unittest.cc
                │   │   ├── video_adaptation_counters.cc
                │   │   ├── video_adaptation_counters.h
                │   │   ├── video_adaptation_reason.h
                │   │   ├── video_bitrate_allocation.cc
                │   │   ├── video_bitrate_allocation.h
                │   │   ├── video_bitrate_allocator.cc
                │   │   ├── video_bitrate_allocator.h
                │   │   ├── video_bitrate_allocator_factory.h
                │   │   ├── video_codec_constants.h
                │   │   ├── video_codec_type.h
                │   │   ├── video_content_type.cc
                │   │   ├── video_content_type.h
                │   │   ├── video_frame.cc
                │   │   ├── video_frame.h
                │   │   ├── video_frame_buffer.cc
                │   │   ├── video_frame_buffer.h
                │   │   ├── video_frame_metadata.cc
                │   │   ├── video_frame_metadata.h
                │   │   ├── video_frame_metadata_unittest.cc
                │   │   ├── video_frame_type.h
                │   │   ├── video_layers_allocation.h
                │   │   ├── video_rotation.h
                │   │   ├── video_sink_interface.h
                │   │   ├── video_source_interface.cc
                │   │   ├── video_source_interface.h
                │   │   ├── video_stream_decoder.h
                │   │   ├── video_stream_decoder_create.cc
                │   │   ├── video_stream_decoder_create.h
                │   │   ├── video_stream_decoder_create_unittest.cc
                │   │   ├── video_stream_encoder_interface.h
                │   │   ├── video_stream_encoder_observer.h
                │   │   ├── video_stream_encoder_settings.h
                │   │   ├── video_timing.cc
                │   │   └── video_timing.h
                │   ├── video_codecs/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── bitstream_parser.h
                │   │   ├── builtin_video_decoder_factory.cc
                │   │   ├── builtin_video_decoder_factory.h
                │   │   ├── builtin_video_encoder_factory.cc
                │   │   ├── builtin_video_encoder_factory.h
                │   │   ├── sdp_video_format.cc
                │   │   ├── sdp_video_format.h
                │   │   ├── spatial_layer.cc
                │   │   ├── spatial_layer.h
                │   │   ├── test/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── builtin_video_encoder_factory_unittest.cc
                │   │   │   ├── video_decoder_software_fallback_wrapper_unittest.cc
                │   │   │   └── video_encoder_software_fallback_wrapper_unittest.cc
                │   │   ├── video_codec.cc
                │   │   ├── video_codec.h
                │   │   ├── video_decoder.cc
                │   │   ├── video_decoder.h
                │   │   ├── video_decoder_factory.cc
                │   │   ├── video_decoder_factory.h
                │   │   ├── video_decoder_software_fallback_wrapper.cc
                │   │   ├── video_decoder_software_fallback_wrapper.h
                │   │   ├── video_encoder.cc
                │   │   ├── video_encoder.h
                │   │   ├── video_encoder_config.cc
                │   │   ├── video_encoder_config.h
                │   │   ├── video_encoder_factory.h
                │   │   ├── video_encoder_software_fallback_wrapper.cc
                │   │   ├── video_encoder_software_fallback_wrapper.h
                │   │   ├── vp8_frame_buffer_controller.h
                │   │   ├── vp8_frame_config.cc
                │   │   ├── vp8_frame_config.h
                │   │   ├── vp8_temporal_layers.cc
                │   │   ├── vp8_temporal_layers.h
                │   │   ├── vp8_temporal_layers_factory.cc
                │   │   └── vp8_temporal_layers_factory.h
                │   ├── video_track_source_proxy.h
                │   └── voip/
                │       ├── BUILD.gn
                │       ├── DEPS
                │       ├── test/
                │       │   ├── compile_all_headers.cc
                │       │   ├── mock_voip_engine.h
                │       │   └── voip_engine_factory_unittest.cc
                │       ├── voip_base.h
                │       ├── voip_codec.h
                │       ├── voip_dtmf.h
                │       ├── voip_engine.h
                │       ├── voip_engine_factory.cc
                │       ├── voip_engine_factory.h
                │       ├── voip_network.h
                │       ├── voip_statistics.h
                │       └── voip_volume_control.h
                ├── audio/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── audio_level.cc
                │   ├── audio_level.h
                │   ├── audio_receive_stream.cc
                │   ├── audio_receive_stream.h
                │   ├── audio_receive_stream_unittest.cc
                │   ├── audio_send_stream.cc
                │   ├── audio_send_stream.h
                │   ├── audio_send_stream_tests.cc
                │   ├── audio_send_stream_unittest.cc
                │   ├── audio_state.cc
                │   ├── audio_state.h
                │   ├── audio_state_unittest.cc
                │   ├── audio_transport_impl.cc
                │   ├── audio_transport_impl.h
                │   ├── channel_receive.cc
                │   ├── channel_receive.h
                │   ├── channel_receive_frame_transformer_delegate.cc
                │   ├── channel_receive_frame_transformer_delegate.h
                │   ├── channel_receive_frame_transformer_delegate_unittest.cc
                │   ├── channel_send.cc
                │   ├── channel_send.h
                │   ├── channel_send_frame_transformer_delegate.cc
                │   ├── channel_send_frame_transformer_delegate.h
                │   ├── channel_send_frame_transformer_delegate_unittest.cc
                │   ├── conversion.h
                │   ├── mock_voe_channel_proxy.h
                │   ├── null_audio_poller.cc
                │   ├── null_audio_poller.h
                │   ├── remix_resample.cc
                │   ├── remix_resample.h
                │   ├── remix_resample_unittest.cc
                │   ├── test/
                │   │   ├── audio_bwe_integration_test.cc
                │   │   ├── audio_bwe_integration_test.h
                │   │   ├── audio_end_to_end_test.cc
                │   │   ├── audio_end_to_end_test.h
                │   │   ├── audio_stats_test.cc
                │   │   ├── low_bandwidth_audio_test.cc
                │   │   ├── low_bandwidth_audio_test.py
                │   │   ├── low_bandwidth_audio_test_flags.cc
                │   │   ├── pc_low_bandwidth_audio_test.cc
                │   │   └── unittests/
                │   │       └── low_bandwidth_audio_test_test.py
                │   ├── utility/
                │   │   ├── BUILD.gn
                │   │   ├── audio_frame_operations.cc
                │   │   ├── audio_frame_operations.h
                │   │   ├── audio_frame_operations_unittest.cc
                │   │   ├── channel_mixer.cc
                │   │   ├── channel_mixer.h
                │   │   ├── channel_mixer_unittest.cc
                │   │   ├── channel_mixing_matrix.cc
                │   │   ├── channel_mixing_matrix.h
                │   │   └── channel_mixing_matrix_unittest.cc
                │   └── voip/
                │       ├── BUILD.gn
                │       ├── audio_channel.cc
                │       ├── audio_channel.h
                │       ├── audio_egress.cc
                │       ├── audio_egress.h
                │       ├── audio_ingress.cc
                │       ├── audio_ingress.h
                │       ├── test/
                │       │   ├── BUILD.gn
                │       │   ├── audio_channel_unittest.cc
                │       │   ├── audio_egress_unittest.cc
                │       │   ├── audio_ingress_unittest.cc
                │       │   ├── mock_task_queue.h
                │       │   └── voip_core_unittest.cc
                │       ├── voip_core.cc
                │       └── voip_core.h
                ├── base/
                │   ├── android/
                │   │   ├── OWNERS
                │   │   ├── android_hardware_buffer_compat.cc
                │   │   ├── android_hardware_buffer_compat.h
                │   │   ├── android_image_reader_abi.h
                │   │   ├── android_image_reader_compat.cc
                │   │   ├── android_image_reader_compat.h
                │   │   ├── android_image_reader_compat_unittest.cc
                │   │   ├── animation_frame_time_histogram.cc
                │   │   ├── apk_assets.cc
                │   │   ├── apk_assets.h
                │   │   ├── application_status_listener.cc
                │   │   ├── application_status_listener.h
                │   │   ├── application_status_listener_unittest.cc
                │   │   ├── base_jni_onload.cc
                │   │   ├── base_jni_onload.h
                │   │   ├── build_info.cc
                │   │   ├── build_info.h
                │   │   ├── bundle_utils.cc
                │   │   ├── bundle_utils.h
                │   │   ├── callback_android.cc
                │   │   ├── callback_android.h
                │   │   ├── child_process_binding_types.h
                │   │   ├── child_process_service.cc
                │   │   ├── child_process_unittest.cc
                │   │   ├── command_line_android.cc
                │   │   ├── content_uri_utils.cc
                │   │   ├── content_uri_utils.h
                │   │   ├── content_uri_utils_unittest.cc
                │   │   ├── cpu_features.cc
                │   │   ├── early_trace_event_binding.cc
                │   │   ├── early_trace_event_binding.h
                │   │   ├── event_log.cc
                │   │   ├── event_log.h
                │   │   ├── field_trial_list.cc
                │   │   ├── important_file_writer_android.cc
                │   │   ├── int_string_callback.cc
                │   │   ├── int_string_callback.h
                │   │   ├── java/
                │   │   │   ├── src/
                │   │   │   │   └── org/
                │   │   │   │       └── chromium/
                │   │   │   │           └── base/
                │   │   │   │               ├── ActivityState.java
                │   │   │   │               ├── AnimationFrameTimeHistogram.java
                │   │   │   │               ├── ApiCompatibilityUtils.java
                │   │   │   │               ├── ApkAssets.java
                │   │   │   │               ├── ApplicationStatus.java
                │   │   │   │               ├── BaseSwitches.java
                │   │   │   │               ├── BuildInfo.java
                │   │   │   │               ├── BundleUtils.java
                │   │   │   │               ├── Callback.java
                │   │   │   │               ├── CollectionUtil.java
                │   │   │   │               ├── CommandLine.java
                │   │   │   │               ├── CommandLineInitUtil.java
                │   │   │   │               ├── Consumer.java
                │   │   │   │               ├── ContentUriUtils.java
                │   │   │   │               ├── ContextUtils.java
                │   │   │   │               ├── CpuFeatures.java
                │   │   │   │               ├── DiscardableReferencePool.java
                │   │   │   │               ├── EarlyTraceEvent.java
                │   │   │   │               ├── EventLog.java
                │   │   │   │               ├── FeatureList.java
                │   │   │   │               ├── FieldTrialList.java
                │   │   │   │               ├── FileUtils.java
                │   │   │   │               ├── Function.java
                │   │   │   │               ├── ImportantFileWriterAndroid.java
                │   │   │   │               ├── IntStringCallback.java
                │   │   │   │               ├── IntentUtils.java
                │   │   │   │               ├── JNIUtils.java
                │   │   │   │               ├── JavaExceptionReporter.java
                │   │   │   │               ├── JavaHandlerThread.java
                │   │   │   │               ├── JniException.java
                │   │   │   │               ├── JniStaticTestMocker.java
                │   │   │   │               ├── LifetimeAssert.java
                │   │   │   │               ├── LocaleUtils.java
                │   │   │   │               ├── Log.java
                │   │   │   │               ├── MathUtils.java
                │   │   │   │               ├── MemoryPressureListener.java
                │   │   │   │               ├── NativeLibraryLoadedStatus.java
                │   │   │   │               ├── NonThreadSafe.java
                │   │   │   │               ├── ObserverList.java
                │   │   │   │               ├── PackageManagerUtils.java
                │   │   │   │               ├── PackageUtils.java
                │   │   │   │               ├── PathService.java
                │   │   │   │               ├── PathUtils.java
                │   │   │   │               ├── PiiElider.java
                │   │   │   │               ├── PowerMonitor.java
                │   │   │   │               ├── Promise.java
                │   │   │   │               ├── SecureRandomInitializer.java
                │   │   │   │               ├── StreamUtil.java
                │   │   │   │               ├── StrictModeContext.java
                │   │   │   │               ├── SysUtils.java
                │   │   │   │               ├── ThreadUtils.java
                │   │   │   │               ├── TimeUtils.java
                │   │   │   │               ├── TimezoneUtils.java
                │   │   │   │               ├── TraceEvent.java
                │   │   │   │               ├── UnguessableToken.java
                │   │   │   │               ├── UserData.java
                │   │   │   │               ├── UserDataHost.java
                │   │   │   │               ├── annotations/
                │   │   │   │               │   ├── AccessedByNative.java
                │   │   │   │               │   ├── CalledByNative.java
                │   │   │   │               │   ├── CalledByNativeJavaTest.java
                │   │   │   │               │   ├── CalledByNativeUnchecked.java
                │   │   │   │               │   ├── CheckDiscard.java
                │   │   │   │               │   ├── DisabledCalledByNativeJavaTest.java
                │   │   │   │               │   ├── DoNotInline.java
                │   │   │   │               │   ├── JNIAdditionalImport.java
                │   │   │   │               │   ├── JNINamespace.java
                │   │   │   │               │   ├── JniIgnoreNatives.java
                │   │   │   │               │   ├── MainDex.java
                │   │   │   │               │   ├── NativeClassQualifiedName.java
                │   │   │   │               │   ├── NativeJavaTestFeatures.java
                │   │   │   │               │   ├── NativeMethods.java
                │   │   │   │               │   ├── RemovableInRelease.java
                │   │   │   │               │   ├── UsedByReflection.java
                │   │   │   │               │   ├── VerifiesOnLollipop.java
                │   │   │   │               │   ├── VerifiesOnLollipopMR1.java
                │   │   │   │               │   ├── VerifiesOnM.java
                │   │   │   │               │   ├── VerifiesOnN.java
                │   │   │   │               │   ├── VerifiesOnNMR1.java
                │   │   │   │               │   ├── VerifiesOnO.java
                │   │   │   │               │   ├── VerifiesOnOMR1.java
                │   │   │   │               │   ├── VerifiesOnP.java
                │   │   │   │               │   └── VerifiesOnQ.java
                │   │   │   │               ├── compat/
                │   │   │   │               │   ├── ApiHelperForM.java
                │   │   │   │               │   ├── ApiHelperForN.java
                │   │   │   │               │   ├── ApiHelperForO.java
                │   │   │   │               │   ├── ApiHelperForOMR1.java
                │   │   │   │               │   ├── ApiHelperForP.java
                │   │   │   │               │   └── ApiHelperForQ.java
                │   │   │   │               ├── library_loader/
                │   │   │   │               │   ├── LegacyLinker.java
                │   │   │   │               │   ├── LibraryLoader.java
                │   │   │   │               │   ├── LibraryPrefetcher.java
                │   │   │   │               │   ├── Linker.java
                │   │   │   │               │   ├── LoaderErrors.java
                │   │   │   │               │   ├── ModernLinker.java
                │   │   │   │               │   ├── NativeLibraryPreloader.java
                │   │   │   │               │   └── ProcessInitException.java
                │   │   │   │               ├── memory/
                │   │   │   │               │   ├── JavaHeapDumpGenerator.java
                │   │   │   │               │   ├── MemoryPressureCallback.java
                │   │   │   │               │   ├── MemoryPressureMonitor.java
                │   │   │   │               │   └── MemoryPressureUma.java
                │   │   │   │               ├── metrics/
                │   │   │   │               │   ├── CachingUmaRecorder.java
                │   │   │   │               │   ├── NativeUmaRecorder.java
                │   │   │   │               │   ├── NoopUmaRecorder.java
                │   │   │   │               │   ├── RecordHistogram.java
                │   │   │   │               │   ├── RecordUserAction.java
                │   │   │   │               │   ├── ScopedSysTraceEvent.java
                │   │   │   │               │   ├── StatisticsRecorderAndroid.java
                │   │   │   │               │   ├── UmaRecorder.java
                │   │   │   │               │   ├── UmaRecorderHolder.java
                │   │   │   │               │   └── forwarding_synchronization.md
                │   │   │   │               ├── multidex/
                │   │   │   │               │   └── ChromiumMultiDexInstaller.java
                │   │   │   │               ├── process_launcher/
                │   │   │   │               │   ├── BindService.java
                │   │   │   │               │   ├── ChildConnectionAllocator.java
                │   │   │   │               │   ├── ChildProcessConnection.java
                │   │   │   │               │   ├── ChildProcessConstants.java
                │   │   │   │               │   ├── ChildProcessLauncher.java
                │   │   │   │               │   ├── ChildProcessService.java
                │   │   │   │               │   ├── ChildProcessServiceDelegate.java
                │   │   │   │               │   ├── FileDescriptorInfo.aidl
                │   │   │   │               │   ├── FileDescriptorInfo.java
                │   │   │   │               │   ├── IChildProcessService.aidl
                │   │   │   │               │   ├── IParentProcess.aidl
                │   │   │   │               │   └── OWNERS
                │   │   │   │               ├── supplier/
                │   │   │   │               │   ├── DestroyableObservableSupplier.java
                │   │   │   │               │   ├── ObservableSupplier.java
                │   │   │   │               │   ├── ObservableSupplierImpl.java
                │   │   │   │               │   └── Supplier.java
                │   │   │   │               └── task/
                │   │   │   │                   ├── AsyncTask.java
                │   │   │   │                   ├── BackgroundOnlyAsyncTask.java
                │   │   │   │                   ├── ChoreographerTaskRunner.java
                │   │   │   │                   ├── ChromeThreadPoolExecutor.java
                │   │   │   │                   ├── DefaultTaskExecutor.java
                │   │   │   │                   ├── OWNERS
                │   │   │   │                   ├── PostTask.java
                │   │   │   │                   ├── SequencedTaskRunner.java
                │   │   │   │                   ├── SequencedTaskRunnerImpl.java
                │   │   │   │                   ├── SerialExecutor.java
                │   │   │   │                   ├── SingleThreadTaskRunner.java
                │   │   │   │                   ├── SingleThreadTaskRunnerImpl.java
                │   │   │   │                   ├── TaskExecutor.java
                │   │   │   │                   ├── TaskRunner.java
                │   │   │   │                   ├── TaskRunnerImpl.java
                │   │   │   │                   ├── TaskTraits.java
                │   │   │   │                   └── TaskTraitsExtensionDescriptor.java
                │   │   │   └── templates/
                │   │   │       └── BuildConfig.template
                │   │   ├── java_exception_reporter.cc
                │   │   ├── java_exception_reporter.h
                │   │   ├── java_handler_thread.cc
                │   │   ├── java_handler_thread.h
                │   │   ├── java_handler_thread_unittest.cc
                │   │   ├── java_heap_dump_generator.cc
                │   │   ├── java_heap_dump_generator.h
                │   │   ├── java_runtime.cc
                │   │   ├── java_runtime.h
                │   │   ├── javatests/
                │   │   │   └── src/
                │   │   │       └── org/
                │   │   │           └── chromium/
                │   │   │               └── base/
                │   │   │                   ├── AdvancedMockContextTest.java
                │   │   │                   ├── ApiCompatibilityUtilsTest.java
                │   │   │                   ├── AssertsTest.java
                │   │   │                   ├── CommandLineInitUtilTest.java
                │   │   │                   ├── CommandLineTest.java
                │   │   │                   ├── EarlyTraceEventTest.java
                │   │   │                   ├── LocaleUtilsTest.java
                │   │   │                   ├── ObserverListTest.java
                │   │   │                   ├── StrictModeContextTest.java
                │   │   │                   ├── UserDataHostTest.java
                │   │   │                   ├── library_loader/
                │   │   │                   │   └── EarlyNativeTest.java
                │   │   │                   ├── metrics/
                │   │   │                   │   └── RecordHistogramTest.java
                │   │   │                   ├── task/
                │   │   │                   │   ├── AsyncTaskTest.java
                │   │   │                   │   ├── PostTaskTest.java
                │   │   │                   │   ├── SequencedTaskRunnerImplTest.java
                │   │   │                   │   ├── SingleThreadTaskRunnerImplTest.java
                │   │   │                   │   └── TaskRunnerImplTest.java
                │   │   │                   └── util/
                │   │   │                       └── GarbageCollectionTestUtilsTest.java
                │   │   ├── jni_android.cc
                │   │   ├── jni_android.h
                │   │   ├── jni_android_unittest.cc
                │   │   ├── jni_array.cc
                │   │   ├── jni_array.h
                │   │   ├── jni_array_unittest.cc
                │   │   ├── jni_generator/
                │   │   │   ├── .style.yapf
                │   │   │   ├── AndroidManifest.xml
                │   │   │   ├── BUILD.gn
                │   │   │   ├── OWNERS
                │   │   │   ├── PRESUBMIT.py
                │   │   │   ├── ProcessorArgs.template
                │   │   │   ├── README.md
                │   │   │   ├── TestSampleFeatureList.java
                │   │   │   ├── android_jar.classes
                │   │   │   ├── config.gni
                │   │   │   ├── golden/
                │   │   │   │   ├── HashedSampleForAnnotationProcessorGenJni.golden
                │   │   │   │   ├── HashedSampleForAnnotationProcessor_jni.golden
                │   │   │   │   ├── SampleForAnnotationProcessor_jni.golden
                │   │   │   │   ├── SampleForTests_jni.golden
                │   │   │   │   ├── testCalledByNativeJavaTest.golden
                │   │   │   │   ├── testCalledByNatives.golden
                │   │   │   │   ├── testConstantsFromJavaP.golden
                │   │   │   │   ├── testFromJavaP.golden
                │   │   │   │   ├── testFromJavaPGenerics.golden
                │   │   │   │   ├── testGenJniFlagsDisabled.golden
                │   │   │   │   ├── testGenJniFlagsMocksEnabled.golden
                │   │   │   │   ├── testGenJniFlagsMocksRequired.golden
                │   │   │   │   ├── testInnerClassNatives.golden
                │   │   │   │   ├── testInnerClassNativesBothInnerAndOuter.golden
                │   │   │   │   ├── testInnerClassNativesBothInnerAndOuterRegistrations.golden
                │   │   │   │   ├── testInnerClassNativesMultiple.golden
                │   │   │   │   ├── testInputStream.javap
                │   │   │   │   ├── testMotionEvent.javap
                │   │   │   │   ├── testMotionEvent.javap7
                │   │   │   │   ├── testMultipleJNIAdditionalImport.golden
                │   │   │   │   ├── testNativeExportsOnlyOption.golden
                │   │   │   │   ├── testNatives.golden
                │   │   │   │   ├── testNativesLong.golden
                │   │   │   │   ├── testNativesRegistrations.golden
                │   │   │   │   ├── testProxyNatives.golden
                │   │   │   │   ├── testProxyNativesJava.golden
                │   │   │   │   ├── testProxyNativesMainDex.golden
                │   │   │   │   ├── testProxyNativesMainDexAndNonMainDex.golden
                │   │   │   │   ├── testProxyNativesRegistrations.golden
                │   │   │   │   ├── testProxyNativesWithNatives.golden
                │   │   │   │   ├── testREForNatives.golden
                │   │   │   │   ├── testSingleJNIAdditionalImport.golden
                │   │   │   │   ├── testStaticBindingCaller.golden
                │   │   │   │   └── testTracing.golden
                │   │   │   ├── java/
                │   │   │   │   └── src/
                │   │   │   │       └── org/
                │   │   │   │           └── chromium/
                │   │   │   │               ├── example/
                │   │   │   │               │   └── jni_generator/
                │   │   │   │               │       ├── SampleForAnnotationProcessor.java
                │   │   │   │               │       └── SampleForTests.java
                │   │   │   │               └── jni_generator/
                │   │   │   │                   └── JniProcessor.java
                │   │   │   ├── jni_generator.py
                │   │   │   ├── jni_generator.pydeps
                │   │   │   ├── jni_generator_helper.h
                │   │   │   ├── jni_generator_tests.py
                │   │   │   ├── jni_refactorer.py
                │   │   │   ├── jni_registration_generator.py
                │   │   │   ├── jni_registration_generator.pydeps
                │   │   │   ├── sample_entry_point.cc
                │   │   │   ├── sample_for_tests.cc
                │   │   │   └── sample_for_tests.h
                │   │   ├── jni_int_wrapper.h
                │   │   ├── jni_registrar.cc
                │   │   ├── jni_registrar.h
                │   │   ├── jni_string.cc
                │   │   ├── jni_string.h
                │   │   ├── jni_string_unittest.cc
                │   │   ├── jni_utils.cc
                │   │   ├── jni_utils.h
                │   │   ├── jni_weak_ref.cc
                │   │   ├── jni_weak_ref.h
                │   │   ├── junit/
                │   │   │   └── src/
                │   │   │       └── org/
                │   │   │           └── chromium/
                │   │   │               └── base/
                │   │   │                   ├── AnimationFrameTimeHistogramTest.java
                │   │   │                   ├── ApplicationStatusTest.java
                │   │   │                   ├── DiscardableReferencePoolTest.java
                │   │   │                   ├── FileUtilsTest.java
                │   │   │                   ├── LifetimeAssertTest.java
                │   │   │                   ├── LogTest.java
                │   │   │                   ├── NonThreadSafeTest.java
                │   │   │                   ├── PiiEliderTest.java
                │   │   │                   ├── PromiseTest.java
                │   │   │                   ├── memory/
                │   │   │                   │   └── MemoryPressureMonitorTest.java
                │   │   │                   ├── metrics/
                │   │   │                   │   ├── CachingUmaRecorderTest.java
                │   │   │                   │   └── test/
                │   │   │                   │       ├── DisableHistogramsRule.java
                │   │   │                   │       └── ShadowRecordHistogram.java
                │   │   │                   ├── process_launcher/
                │   │   │                   │   ├── ChildConnectionAllocatorTest.java
                │   │   │                   │   └── ChildProcessConnectionTest.java
                │   │   │                   ├── supplier/
                │   │   │                   │   └── ObservableSupplierImplTest.java
                │   │   │                   ├── task/
                │   │   │                   │   ├── AsyncTaskThreadTest.java
                │   │   │                   │   └── TaskTraitsTest.java
                │   │   │                   └── util/
                │   │   │                       └── GarbageCollectionTestUtilsUnitTest.java
                │   │   ├── library_loader/
                │   │   │   ├── README.md
                │   │   │   ├── anchor_functions.cc
                │   │   │   ├── anchor_functions.h
                │   │   │   ├── anchor_functions.lds
                │   │   │   ├── library_loader_hooks.cc
                │   │   │   ├── library_loader_hooks.h
                │   │   │   ├── library_prefetcher.cc
                │   │   │   ├── library_prefetcher.h
                │   │   │   ├── library_prefetcher_hooks.cc
                │   │   │   └── library_prefetcher_unittest.cc
                │   │   ├── linker/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── config.gni
                │   │   │   ├── legacy_linker_jni.cc
                │   │   │   ├── legacy_linker_jni.h
                │   │   │   ├── linker_jni.cc
                │   │   │   ├── linker_jni.h
                │   │   │   ├── modern_linker_jni.cc
                │   │   │   └── modern_linker_jni.h
                │   │   ├── locale_utils.cc
                │   │   ├── locale_utils.h
                │   │   ├── memory_pressure_listener_android.cc
                │   │   ├── memory_pressure_listener_android.h
                │   │   ├── native_uma_recorder.cc
                │   │   ├── orderfile/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── OWNERS
                │   │   │   ├── orderfile_call_graph_instrumentation.cc
                │   │   │   ├── orderfile_call_graph_instrumentation_perftest.cc
                │   │   │   ├── orderfile_instrumentation.cc
                │   │   │   ├── orderfile_instrumentation.h
                │   │   │   └── orderfile_instrumentation_perftest.cc
                │   │   ├── path_service_android.cc
                │   │   ├── path_utils.cc
                │   │   ├── path_utils.h
                │   │   ├── path_utils_unittest.cc
                │   │   ├── proguard/
                │   │   │   ├── OWNERS
                │   │   │   ├── chromium_apk.flags
                │   │   │   ├── chromium_code.flags
                │   │   │   ├── disable_all_obfuscation.flags
                │   │   │   └── enable_obfuscation.flags
                │   │   ├── reached_addresses_bitset.cc
                │   │   ├── reached_addresses_bitset.h
                │   │   ├── reached_addresses_bitset_unittest.cc
                │   │   ├── reached_code_profiler.cc
                │   │   ├── reached_code_profiler.h
                │   │   ├── reached_code_profiler_stub.cc
                │   │   ├── record_histogram.cc
                │   │   ├── record_user_action.cc
                │   │   ├── scoped_hardware_buffer_fence_sync.cc
                │   │   ├── scoped_hardware_buffer_fence_sync.h
                │   │   ├── scoped_hardware_buffer_handle.cc
                │   │   ├── scoped_hardware_buffer_handle.h
                │   │   ├── scoped_java_ref.cc
                │   │   ├── scoped_java_ref.h
                │   │   ├── scoped_java_ref_unittest.cc
                │   │   ├── statistics_recorder_android.cc
                │   │   ├── sys_utils.cc
                │   │   ├── sys_utils.h
                │   │   ├── sys_utils_unittest.cc
                │   │   ├── task_scheduler/
                │   │   │   ├── post_task_android.cc
                │   │   │   ├── post_task_android.h
                │   │   │   ├── task_runner_android.cc
                │   │   │   └── task_runner_android.h
                │   │   ├── time_utils.cc
                │   │   ├── timezone_utils.cc
                │   │   ├── timezone_utils.h
                │   │   ├── trace_event_binding.cc
                │   │   ├── unguessable_token_android.cc
                │   │   ├── unguessable_token_android.h
                │   │   └── unguessable_token_android_unittest.cc
                │   ├── compiler_specific.h
                │   └── third_party/
                │       └── libevent/
                │           ├── BUILD.gn
                │           ├── ChangeLog
                │           ├── Doxyfile
                │           ├── LICENSE
                │           ├── Makefile.am
                │           ├── Makefile.nmake
                │           ├── README
                │           ├── README.chromium
                │           ├── aix/
                │           │   └── event-config.h
                │           ├── android/
                │           │   └── event-config.h
                │           ├── autogen.sh
                │           ├── buffer.c
                │           ├── chromium.patch
                │           ├── compat/
                │           │   └── sys/
                │           │       ├── _libevent_time.h
                │           │       └── queue.h
                │           ├── configure.in
                │           ├── devpoll.c
                │           ├── epoll.c
                │           ├── epoll_sub.c
                │           ├── evbuffer.c
                │           ├── evdns.3
                │           ├── evdns.c
                │           ├── evdns.h
                │           ├── event-config.h
                │           ├── event-internal.h
                │           ├── event.3
                │           ├── event.c
                │           ├── event.h
                │           ├── event_rpcgen.py
                │           ├── event_tagging.c
                │           ├── evhttp.h
                │           ├── evport.c
                │           ├── evrpc-internal.h
                │           ├── evrpc.c
                │           ├── evrpc.h
                │           ├── evsignal.h
                │           ├── evutil.c
                │           ├── evutil.h
                │           ├── freebsd/
                │           │   └── event-config.h
                │           ├── http-internal.h
                │           ├── http.c
                │           ├── kqueue.c
                │           ├── linux/
                │           │   └── event-config.h
                │           ├── log.c
                │           ├── log.h
                │           ├── m4/
                │           │   └── .dummy
                │           ├── mac/
                │           │   └── event-config.h
                │           ├── min_heap.h
                │           ├── nacl_nonsfi/
                │           │   ├── event-config.h
                │           │   ├── random.c
                │           │   └── signal_stub.c
                │           ├── poll.c
                │           ├── sample/
                │           │   ├── Makefile.am
                │           │   ├── event-test.c
                │           │   ├── signal-test.c
                │           │   └── time-test.c
                │           ├── select.c
                │           ├── signal.c
                │           ├── solaris/
                │           │   └── event-config.h
                │           ├── stamp-h.in
                │           ├── strlcpy-internal.h
                │           ├── strlcpy.c
                │           └── test/
                │               ├── Makefile.am
                │               ├── Makefile.nmake
                │               ├── bench.c
                │               ├── regress.c
                │               ├── regress.h
                │               ├── regress.rpc
                │               ├── regress_dns.c
                │               ├── regress_http.c
                │               ├── regress_rpc.c
                │               ├── test-eof.c
                │               ├── test-init.c
                │               ├── test-time.c
                │               ├── test-weof.c
                │               └── test.sh
                ├── build/
                │   └── build_config.h
                ├── call/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── adaptation/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── adaptation_constraint.cc
                │   │   ├── adaptation_constraint.h
                │   │   ├── broadcast_resource_listener.cc
                │   │   ├── broadcast_resource_listener.h
                │   │   ├── broadcast_resource_listener_unittest.cc
                │   │   ├── degradation_preference_provider.cc
                │   │   ├── degradation_preference_provider.h
                │   │   ├── encoder_settings.cc
                │   │   ├── encoder_settings.h
                │   │   ├── resource_adaptation_processor.cc
                │   │   ├── resource_adaptation_processor.h
                │   │   ├── resource_adaptation_processor_interface.cc
                │   │   ├── resource_adaptation_processor_interface.h
                │   │   ├── resource_adaptation_processor_unittest.cc
                │   │   ├── resource_unittest.cc
                │   │   ├── test/
                │   │   │   ├── fake_adaptation_constraint.cc
                │   │   │   ├── fake_adaptation_constraint.h
                │   │   │   ├── fake_frame_rate_provider.cc
                │   │   │   ├── fake_frame_rate_provider.h
                │   │   │   ├── fake_resource.cc
                │   │   │   ├── fake_resource.h
                │   │   │   ├── fake_video_stream_input_state_provider.cc
                │   │   │   ├── fake_video_stream_input_state_provider.h
                │   │   │   └── mock_resource_listener.h
                │   │   ├── video_source_restrictions.cc
                │   │   ├── video_source_restrictions.h
                │   │   ├── video_source_restrictions_unittest.cc
                │   │   ├── video_stream_adapter.cc
                │   │   ├── video_stream_adapter.h
                │   │   ├── video_stream_adapter_unittest.cc
                │   │   ├── video_stream_input_state.cc
                │   │   ├── video_stream_input_state.h
                │   │   ├── video_stream_input_state_provider.cc
                │   │   ├── video_stream_input_state_provider.h
                │   │   └── video_stream_input_state_provider_unittest.cc
                │   ├── audio_receive_stream.cc
                │   ├── audio_receive_stream.h
                │   ├── audio_send_stream.cc
                │   ├── audio_send_stream.h
                │   ├── audio_sender.h
                │   ├── audio_state.cc
                │   ├── audio_state.h
                │   ├── bitrate_allocator.cc
                │   ├── bitrate_allocator.h
                │   ├── bitrate_allocator_unittest.cc
                │   ├── bitrate_estimator_tests.cc
                │   ├── call.cc
                │   ├── call.h
                │   ├── call_config.cc
                │   ├── call_config.h
                │   ├── call_factory.cc
                │   ├── call_factory.h
                │   ├── call_perf_tests.cc
                │   ├── call_unittest.cc
                │   ├── degraded_call.cc
                │   ├── degraded_call.h
                │   ├── fake_network_pipe.cc
                │   ├── fake_network_pipe.h
                │   ├── fake_network_pipe_unittest.cc
                │   ├── flexfec_receive_stream.cc
                │   ├── flexfec_receive_stream.h
                │   ├── flexfec_receive_stream_impl.cc
                │   ├── flexfec_receive_stream_impl.h
                │   ├── flexfec_receive_stream_unittest.cc
                │   ├── packet_receiver.h
                │   ├── rampup_tests.cc
                │   ├── rampup_tests.h
                │   ├── receive_time_calculator.cc
                │   ├── receive_time_calculator.h
                │   ├── receive_time_calculator_unittest.cc
                │   ├── rtp_bitrate_configurator.cc
                │   ├── rtp_bitrate_configurator.h
                │   ├── rtp_bitrate_configurator_unittest.cc
                │   ├── rtp_config.cc
                │   ├── rtp_config.h
                │   ├── rtp_demuxer.cc
                │   ├── rtp_demuxer.h
                │   ├── rtp_demuxer_unittest.cc
                │   ├── rtp_packet_sink_interface.h
                │   ├── rtp_payload_params.cc
                │   ├── rtp_payload_params.h
                │   ├── rtp_payload_params_unittest.cc
                │   ├── rtp_stream_receiver_controller.cc
                │   ├── rtp_stream_receiver_controller.h
                │   ├── rtp_stream_receiver_controller_interface.h
                │   ├── rtp_transport_controller_send.cc
                │   ├── rtp_transport_controller_send.h
                │   ├── rtp_transport_controller_send_interface.h
                │   ├── rtp_video_sender.cc
                │   ├── rtp_video_sender.h
                │   ├── rtp_video_sender_interface.h
                │   ├── rtp_video_sender_unittest.cc
                │   ├── rtx_receive_stream.cc
                │   ├── rtx_receive_stream.h
                │   ├── rtx_receive_stream_unittest.cc
                │   ├── simulated_network.cc
                │   ├── simulated_network.h
                │   ├── simulated_network_unittest.cc
                │   ├── simulated_packet_receiver.h
                │   ├── syncable.cc
                │   ├── syncable.h
                │   ├── test/
                │   │   ├── mock_audio_send_stream.h
                │   │   ├── mock_bitrate_allocator.h
                │   │   ├── mock_rtp_packet_sink_interface.h
                │   │   └── mock_rtp_transport_controller_send.h
                │   ├── version.cc
                │   ├── version.h
                │   ├── video_receive_stream.cc
                │   ├── video_receive_stream.h
                │   ├── video_send_stream.cc
                │   └── video_send_stream.h
                ├── common_audio/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── audio_converter.cc
                │   ├── audio_converter.h
                │   ├── audio_converter_unittest.cc
                │   ├── audio_util.cc
                │   ├── audio_util_unittest.cc
                │   ├── channel_buffer.cc
                │   ├── channel_buffer.h
                │   ├── channel_buffer_unittest.cc
                │   ├── fir_filter.h
                │   ├── fir_filter_avx2.cc
                │   ├── fir_filter_avx2.h
                │   ├── fir_filter_c.cc
                │   ├── fir_filter_c.h
                │   ├── fir_filter_factory.cc
                │   ├── fir_filter_factory.h
                │   ├── fir_filter_neon.cc
                │   ├── fir_filter_neon.h
                │   ├── fir_filter_sse.cc
                │   ├── fir_filter_sse.h
                │   ├── fir_filter_unittest.cc
                │   ├── include/
                │   │   └── audio_util.h
                │   ├── mocks/
                │   │   └── mock_smoothing_filter.h
                │   ├── real_fourier.cc
                │   ├── real_fourier.h
                │   ├── real_fourier_ooura.cc
                │   ├── real_fourier_ooura.h
                │   ├── real_fourier_unittest.cc
                │   ├── resampler/
                │   │   ├── include/
                │   │   │   ├── push_resampler.h
                │   │   │   └── resampler.h
                │   │   ├── push_resampler.cc
                │   │   ├── push_resampler_unittest.cc
                │   │   ├── push_sinc_resampler.cc
                │   │   ├── push_sinc_resampler.h
                │   │   ├── push_sinc_resampler_unittest.cc
                │   │   ├── resampler.cc
                │   │   ├── resampler_unittest.cc
                │   │   ├── sinc_resampler.cc
                │   │   ├── sinc_resampler.h
                │   │   ├── sinc_resampler_avx2.cc
                │   │   ├── sinc_resampler_neon.cc
                │   │   ├── sinc_resampler_sse.cc
                │   │   ├── sinc_resampler_unittest.cc
                │   │   ├── sinusoidal_linear_chirp_source.cc
                │   │   └── sinusoidal_linear_chirp_source.h
                │   ├── ring_buffer.c
                │   ├── ring_buffer.h
                │   ├── ring_buffer_unittest.cc
                │   ├── signal_processing/
                │   │   ├── auto_corr_to_refl_coef.c
                │   │   ├── auto_correlation.c
                │   │   ├── complex_bit_reverse.c
                │   │   ├── complex_bit_reverse_arm.S
                │   │   ├── complex_bit_reverse_mips.c
                │   │   ├── complex_fft.c
                │   │   ├── complex_fft_mips.c
                │   │   ├── complex_fft_tables.h
                │   │   ├── copy_set_operations.c
                │   │   ├── cross_correlation.c
                │   │   ├── cross_correlation_mips.c
                │   │   ├── cross_correlation_neon.c
                │   │   ├── division_operations.c
                │   │   ├── dot_product_with_scale.cc
                │   │   ├── dot_product_with_scale.h
                │   │   ├── downsample_fast.c
                │   │   ├── downsample_fast_mips.c
                │   │   ├── downsample_fast_neon.c
                │   │   ├── energy.c
                │   │   ├── filter_ar.c
                │   │   ├── filter_ar_fast_q12.c
                │   │   ├── filter_ar_fast_q12_armv7.S
                │   │   ├── filter_ar_fast_q12_mips.c
                │   │   ├── filter_ma_fast_q12.c
                │   │   ├── get_hanning_window.c
                │   │   ├── get_scaling_square.c
                │   │   ├── ilbc_specific_functions.c
                │   │   ├── include/
                │   │   │   ├── real_fft.h
                │   │   │   ├── signal_processing_library.h
                │   │   │   ├── spl_inl.h
                │   │   │   ├── spl_inl_armv7.h
                │   │   │   └── spl_inl_mips.h
                │   │   ├── levinson_durbin.c
                │   │   ├── lpc_to_refl_coef.c
                │   │   ├── min_max_operations.c
                │   │   ├── min_max_operations_mips.c
                │   │   ├── min_max_operations_neon.c
                │   │   ├── randomization_functions.c
                │   │   ├── real_fft.c
                │   │   ├── real_fft_unittest.cc
                │   │   ├── refl_coef_to_lpc.c
                │   │   ├── resample.c
                │   │   ├── resample_48khz.c
                │   │   ├── resample_by_2.c
                │   │   ├── resample_by_2_internal.c
                │   │   ├── resample_by_2_internal.h
                │   │   ├── resample_by_2_mips.c
                │   │   ├── resample_fractional.c
                │   │   ├── signal_processing_unittest.cc
                │   │   ├── spl_init.c
                │   │   ├── spl_inl.c
                │   │   ├── spl_sqrt.c
                │   │   ├── splitting_filter.c
                │   │   ├── sqrt_of_one_minus_x_squared.c
                │   │   ├── vector_scaling_operations.c
                │   │   └── vector_scaling_operations_mips.c
                │   ├── smoothing_filter.cc
                │   ├── smoothing_filter.h
                │   ├── smoothing_filter_unittest.cc
                │   ├── third_party/
                │   │   ├── ooura/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── LICENSE
                │   │   │   ├── README.chromium
                │   │   │   ├── fft_size_128/
                │   │   │   │   ├── ooura_fft.cc
                │   │   │   │   ├── ooura_fft.h
                │   │   │   │   ├── ooura_fft_mips.cc
                │   │   │   │   ├── ooura_fft_neon.cc
                │   │   │   │   ├── ooura_fft_sse2.cc
                │   │   │   │   ├── ooura_fft_tables_common.h
                │   │   │   │   └── ooura_fft_tables_neon_sse2.h
                │   │   │   └── fft_size_256/
                │   │   │       ├── fft4g.cc
                │   │   │       └── fft4g.h
                │   │   └── spl_sqrt_floor/
                │   │       ├── BUILD.gn
                │   │       ├── LICENSE
                │   │       ├── README.chromium
                │   │       ├── spl_sqrt_floor.c
                │   │       ├── spl_sqrt_floor.h
                │   │       ├── spl_sqrt_floor_arm.S
                │   │       └── spl_sqrt_floor_mips.c
                │   ├── vad/
                │   │   ├── include/
                │   │   │   ├── vad.h
                │   │   │   └── webrtc_vad.h
                │   │   ├── mock/
                │   │   │   └── mock_vad.h
                │   │   ├── vad.cc
                │   │   ├── vad_core.c
                │   │   ├── vad_core.h
                │   │   ├── vad_core_unittest.cc
                │   │   ├── vad_filterbank.c
                │   │   ├── vad_filterbank.h
                │   │   ├── vad_filterbank_unittest.cc
                │   │   ├── vad_gmm.c
                │   │   ├── vad_gmm.h
                │   │   ├── vad_gmm_unittest.cc
                │   │   ├── vad_sp.c
                │   │   ├── vad_sp.h
                │   │   ├── vad_sp_unittest.cc
                │   │   ├── vad_unittest.cc
                │   │   ├── vad_unittest.h
                │   │   └── webrtc_vad.c
                │   ├── wav_file.cc
                │   ├── wav_file.h
                │   ├── wav_file_unittest.cc
                │   ├── wav_header.cc
                │   ├── wav_header.h
                │   ├── wav_header_unittest.cc
                │   ├── window_generator.cc
                │   ├── window_generator.h
                │   └── window_generator_unittest.cc
                ├── common_video/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── bitrate_adjuster.cc
                │   ├── bitrate_adjuster_unittest.cc
                │   ├── frame_counts.h
                │   ├── frame_rate_estimator.cc
                │   ├── frame_rate_estimator.h
                │   ├── frame_rate_estimator_unittest.cc
                │   ├── generic_frame_descriptor/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── generic_frame_info.cc
                │   │   └── generic_frame_info.h
                │   ├── h264/
                │   │   ├── OWNERS
                │   │   ├── h264_bitstream_parser.cc
                │   │   ├── h264_bitstream_parser.h
                │   │   ├── h264_bitstream_parser_unittest.cc
                │   │   ├── h264_common.cc
                │   │   ├── h264_common.h
                │   │   ├── pps_parser.cc
                │   │   ├── pps_parser.h
                │   │   ├── pps_parser_unittest.cc
                │   │   ├── prefix_parser.cc
                │   │   ├── prefix_parser.h
                │   │   ├── profile_level_id.h
                │   │   ├── profile_level_id_unittest.cc
                │   │   ├── sps_parser.cc
                │   │   ├── sps_parser.h
                │   │   ├── sps_parser_unittest.cc
                │   │   ├── sps_vui_rewriter.cc
                │   │   ├── sps_vui_rewriter.h
                │   │   └── sps_vui_rewriter_unittest.cc
                │   ├── h265/
                │   │   ├── h265_bitstream_parser.cc
                │   │   ├── h265_bitstream_parser.h
                │   │   ├── h265_common.cc
                │   │   ├── h265_common.h
                │   │   ├── h265_pps_parser.cc
                │   │   ├── h265_pps_parser.h
                │   │   ├── h265_sps_parser.cc
                │   │   ├── h265_sps_parser.h
                │   │   ├── h265_vps_parser.cc
                │   │   └── h265_vps_parser.h
                │   ├── include/
                │   │   ├── bitrate_adjuster.h
                │   │   ├── incoming_video_stream.h
                │   │   ├── quality_limitation_reason.h
                │   │   ├── video_frame_buffer.h
                │   │   └── video_frame_buffer_pool.h
                │   ├── incoming_video_stream.cc
                │   ├── libyuv/
                │   │   ├── include/
                │   │   │   └── webrtc_libyuv.h
                │   │   ├── libyuv_unittest.cc
                │   │   └── webrtc_libyuv.cc
                │   ├── test/
                │   │   ├── BUILD.gn
                │   │   ├── utilities.cc
                │   │   └── utilities.h
                │   ├── video_frame_buffer.cc
                │   ├── video_frame_buffer_pool.cc
                │   ├── video_frame_buffer_pool_unittest.cc
                │   ├── video_frame_unittest.cc
                │   ├── video_render_frames.cc
                │   └── video_render_frames.h
                ├── logging/
                │   ├── BUILD.gn
                │   ├── OWNERS
                │   └── rtc_event_log/
                │       ├── DEPS
                │       ├── encoder/
                │       │   ├── blob_encoding.cc
                │       │   ├── blob_encoding.h
                │       │   ├── blob_encoding_unittest.cc
                │       │   ├── delta_encoding.cc
                │       │   ├── delta_encoding.h
                │       │   ├── delta_encoding_unittest.cc
                │       │   ├── rtc_event_log_encoder.h
                │       │   ├── rtc_event_log_encoder_common.cc
                │       │   ├── rtc_event_log_encoder_common.h
                │       │   ├── rtc_event_log_encoder_common_unittest.cc
                │       │   ├── rtc_event_log_encoder_legacy.cc
                │       │   ├── rtc_event_log_encoder_legacy.h
                │       │   ├── rtc_event_log_encoder_new_format.cc
                │       │   ├── rtc_event_log_encoder_new_format.h
                │       │   ├── rtc_event_log_encoder_unittest.cc
                │       │   ├── var_int.cc
                │       │   └── var_int.h
                │       ├── events/
                │       │   ├── rtc_event_alr_state.cc
                │       │   ├── rtc_event_alr_state.h
                │       │   ├── rtc_event_audio_network_adaptation.cc
                │       │   ├── rtc_event_audio_network_adaptation.h
                │       │   ├── rtc_event_audio_playout.cc
                │       │   ├── rtc_event_audio_playout.h
                │       │   ├── rtc_event_audio_receive_stream_config.cc
                │       │   ├── rtc_event_audio_receive_stream_config.h
                │       │   ├── rtc_event_audio_send_stream_config.cc
                │       │   ├── rtc_event_audio_send_stream_config.h
                │       │   ├── rtc_event_bwe_update_delay_based.cc
                │       │   ├── rtc_event_bwe_update_delay_based.h
                │       │   ├── rtc_event_bwe_update_loss_based.cc
                │       │   ├── rtc_event_bwe_update_loss_based.h
                │       │   ├── rtc_event_dtls_transport_state.cc
                │       │   ├── rtc_event_dtls_transport_state.h
                │       │   ├── rtc_event_dtls_writable_state.cc
                │       │   ├── rtc_event_dtls_writable_state.h
                │       │   ├── rtc_event_frame_decoded.cc
                │       │   ├── rtc_event_frame_decoded.h
                │       │   ├── rtc_event_generic_ack_received.cc
                │       │   ├── rtc_event_generic_ack_received.h
                │       │   ├── rtc_event_generic_packet_received.cc
                │       │   ├── rtc_event_generic_packet_received.h
                │       │   ├── rtc_event_generic_packet_sent.cc
                │       │   ├── rtc_event_generic_packet_sent.h
                │       │   ├── rtc_event_ice_candidate_pair.cc
                │       │   ├── rtc_event_ice_candidate_pair.h
                │       │   ├── rtc_event_ice_candidate_pair_config.cc
                │       │   ├── rtc_event_ice_candidate_pair_config.h
                │       │   ├── rtc_event_probe_cluster_created.cc
                │       │   ├── rtc_event_probe_cluster_created.h
                │       │   ├── rtc_event_probe_result_failure.cc
                │       │   ├── rtc_event_probe_result_failure.h
                │       │   ├── rtc_event_probe_result_success.cc
                │       │   ├── rtc_event_probe_result_success.h
                │       │   ├── rtc_event_remote_estimate.h
                │       │   ├── rtc_event_route_change.cc
                │       │   ├── rtc_event_route_change.h
                │       │   ├── rtc_event_rtcp_packet_incoming.cc
                │       │   ├── rtc_event_rtcp_packet_incoming.h
                │       │   ├── rtc_event_rtcp_packet_outgoing.cc
                │       │   ├── rtc_event_rtcp_packet_outgoing.h
                │       │   ├── rtc_event_rtp_packet_incoming.cc
                │       │   ├── rtc_event_rtp_packet_incoming.h
                │       │   ├── rtc_event_rtp_packet_outgoing.cc
                │       │   ├── rtc_event_rtp_packet_outgoing.h
                │       │   ├── rtc_event_video_receive_stream_config.cc
                │       │   ├── rtc_event_video_receive_stream_config.h
                │       │   ├── rtc_event_video_send_stream_config.cc
                │       │   └── rtc_event_video_send_stream_config.h
                │       ├── fake_rtc_event_log.cc
                │       ├── fake_rtc_event_log.h
                │       ├── fake_rtc_event_log_factory.cc
                │       ├── fake_rtc_event_log_factory.h
                │       ├── ice_logger.cc
                │       ├── ice_logger.h
                │       ├── logged_events.cc
                │       ├── logged_events.h
                │       ├── mock/
                │       │   ├── mock_rtc_event_log.cc
                │       │   └── mock_rtc_event_log.h
                │       ├── output/
                │       │   └── rtc_event_log_output_file.h
                │       ├── rtc_event_log.proto
                │       ├── rtc_event_log2.proto
                │       ├── rtc_event_log2rtp_dump.cc
                │       ├── rtc_event_log_impl.cc
                │       ├── rtc_event_log_impl.h
                │       ├── rtc_event_log_parser.cc
                │       ├── rtc_event_log_parser.h
                │       ├── rtc_event_log_unittest.cc
                │       ├── rtc_event_log_unittest_helper.cc
                │       ├── rtc_event_log_unittest_helper.h
                │       ├── rtc_event_processor.cc
                │       ├── rtc_event_processor.h
                │       ├── rtc_event_processor_unittest.cc
                │       ├── rtc_stream_config.cc
                │       └── rtc_stream_config.h
                ├── media/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── base/
                │   │   ├── adapted_video_track_source.cc
                │   │   ├── adapted_video_track_source.h
                │   │   ├── audio_source.h
                │   │   ├── codec.cc
                │   │   ├── codec.h
                │   │   ├── codec_unittest.cc
                │   │   ├── delayable.h
                │   │   ├── fake_frame_source.cc
                │   │   ├── fake_frame_source.h
                │   │   ├── fake_media_engine.cc
                │   │   ├── fake_media_engine.h
                │   │   ├── fake_network_interface.h
                │   │   ├── fake_rtp.cc
                │   │   ├── fake_rtp.h
                │   │   ├── fake_video_renderer.cc
                │   │   ├── fake_video_renderer.h
                │   │   ├── h264_profile_level_id.cc
                │   │   ├── h264_profile_level_id.h
                │   │   ├── media_channel.cc
                │   │   ├── media_channel.h
                │   │   ├── media_config.h
                │   │   ├── media_constants.cc
                │   │   ├── media_constants.h
                │   │   ├── media_engine.cc
                │   │   ├── media_engine.h
                │   │   ├── media_engine_unittest.cc
                │   │   ├── rid_description.cc
                │   │   ├── rid_description.h
                │   │   ├── rtp_data_engine.cc
                │   │   ├── rtp_data_engine.h
                │   │   ├── rtp_data_engine_unittest.cc
                │   │   ├── rtp_utils.cc
                │   │   ├── rtp_utils.h
                │   │   ├── rtp_utils_unittest.cc
                │   │   ├── sdp_fmtp_utils.cc
                │   │   ├── sdp_fmtp_utils.h
                │   │   ├── sdp_fmtp_utils_unittest.cc
                │   │   ├── stream_params.cc
                │   │   ├── stream_params.h
                │   │   ├── stream_params_unittest.cc
                │   │   ├── test_utils.cc
                │   │   ├── test_utils.h
                │   │   ├── turn_utils.cc
                │   │   ├── turn_utils.h
                │   │   ├── turn_utils_unittest.cc
                │   │   ├── video_adapter.cc
                │   │   ├── video_adapter.h
                │   │   ├── video_adapter_unittest.cc
                │   │   ├── video_broadcaster.cc
                │   │   ├── video_broadcaster.h
                │   │   ├── video_broadcaster_unittest.cc
                │   │   ├── video_common.cc
                │   │   ├── video_common.h
                │   │   ├── video_common_unittest.cc
                │   │   ├── video_source_base.cc
                │   │   ├── video_source_base.h
                │   │   ├── vp9_profile.cc
                │   │   └── vp9_profile.h
                │   ├── engine/
                │   │   ├── adm_helpers.cc
                │   │   ├── adm_helpers.h
                │   │   ├── encoder_simulcast_proxy.cc
                │   │   ├── encoder_simulcast_proxy.h
                │   │   ├── encoder_simulcast_proxy_unittest.cc
                │   │   ├── fake_video_codec_factory.cc
                │   │   ├── fake_video_codec_factory.h
                │   │   ├── fake_webrtc_call.cc
                │   │   ├── fake_webrtc_call.h
                │   │   ├── fake_webrtc_video_engine.cc
                │   │   ├── fake_webrtc_video_engine.h
                │   │   ├── internal_decoder_factory.cc
                │   │   ├── internal_decoder_factory.h
                │   │   ├── internal_decoder_factory_unittest.cc
                │   │   ├── internal_encoder_factory.cc
                │   │   ├── internal_encoder_factory.h
                │   │   ├── multiplex_codec_factory.cc
                │   │   ├── multiplex_codec_factory.h
                │   │   ├── multiplex_codec_factory_unittest.cc
                │   │   ├── null_webrtc_video_engine.h
                │   │   ├── null_webrtc_video_engine_unittest.cc
                │   │   ├── payload_type_mapper.cc
                │   │   ├── payload_type_mapper.h
                │   │   ├── payload_type_mapper_unittest.cc
                │   │   ├── simulcast.cc
                │   │   ├── simulcast.h
                │   │   ├── simulcast_encoder_adapter.cc
                │   │   ├── simulcast_encoder_adapter.h
                │   │   ├── simulcast_encoder_adapter_unittest.cc
                │   │   ├── simulcast_unittest.cc
                │   │   ├── unhandled_packets_buffer.cc
                │   │   ├── unhandled_packets_buffer.h
                │   │   ├── unhandled_packets_buffer_unittest.cc
                │   │   ├── webrtc_media_engine.cc
                │   │   ├── webrtc_media_engine.h
                │   │   ├── webrtc_media_engine_defaults.cc
                │   │   ├── webrtc_media_engine_defaults.h
                │   │   ├── webrtc_media_engine_unittest.cc
                │   │   ├── webrtc_video_engine.cc
                │   │   ├── webrtc_video_engine.h
                │   │   ├── webrtc_video_engine_unittest.cc
                │   │   ├── webrtc_voice_engine.cc
                │   │   ├── webrtc_voice_engine.h
                │   │   └── webrtc_voice_engine_unittest.cc
                │   └── sctp/
                │       ├── OWNERS
                │       ├── noop.cc
                │       ├── sctp_transport.cc
                │       ├── sctp_transport.h
                │       ├── sctp_transport_internal.h
                │       ├── sctp_transport_reliability_unittest.cc
                │       └── sctp_transport_unittest.cc
                ├── modules/
                │   ├── BUILD.gn
                │   ├── async_audio_processing/
                │   │   ├── BUILD.gn
                │   │   ├── async_audio_processing.cc
                │   │   └── async_audio_processing.h
                │   ├── audio_coding/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── acm2/
                │   │   │   ├── acm_receive_test.cc
                │   │   │   ├── acm_receive_test.h
                │   │   │   ├── acm_receiver.cc
                │   │   │   ├── acm_receiver.h
                │   │   │   ├── acm_receiver_unittest.cc
                │   │   │   ├── acm_remixing.cc
                │   │   │   ├── acm_remixing.h
                │   │   │   ├── acm_remixing_unittest.cc
                │   │   │   ├── acm_resampler.cc
                │   │   │   ├── acm_resampler.h
                │   │   │   ├── acm_send_test.cc
                │   │   │   ├── acm_send_test.h
                │   │   │   ├── audio_coding_module.cc
                │   │   │   ├── audio_coding_module_unittest.cc
                │   │   │   ├── call_statistics.cc
                │   │   │   ├── call_statistics.h
                │   │   │   └── call_statistics_unittest.cc
                │   │   ├── audio_coding.gni
                │   │   ├── audio_network_adaptor/
                │   │   │   ├── audio_network_adaptor_config.cc
                │   │   │   ├── audio_network_adaptor_impl.cc
                │   │   │   ├── audio_network_adaptor_impl.h
                │   │   │   ├── audio_network_adaptor_impl_unittest.cc
                │   │   │   ├── bitrate_controller.cc
                │   │   │   ├── bitrate_controller.h
                │   │   │   ├── bitrate_controller_unittest.cc
                │   │   │   ├── channel_controller.cc
                │   │   │   ├── channel_controller.h
                │   │   │   ├── channel_controller_unittest.cc
                │   │   │   ├── config.proto
                │   │   │   ├── controller.cc
                │   │   │   ├── controller.h
                │   │   │   ├── controller_manager.cc
                │   │   │   ├── controller_manager.h
                │   │   │   ├── controller_manager_unittest.cc
                │   │   │   ├── debug_dump.proto
                │   │   │   ├── debug_dump_writer.cc
                │   │   │   ├── debug_dump_writer.h
                │   │   │   ├── dtx_controller.cc
                │   │   │   ├── dtx_controller.h
                │   │   │   ├── dtx_controller_unittest.cc
                │   │   │   ├── event_log_writer.cc
                │   │   │   ├── event_log_writer.h
                │   │   │   ├── event_log_writer_unittest.cc
                │   │   │   ├── fec_controller_plr_based.cc
                │   │   │   ├── fec_controller_plr_based.h
                │   │   │   ├── fec_controller_plr_based_unittest.cc
                │   │   │   ├── frame_length_controller.cc
                │   │   │   ├── frame_length_controller.h
                │   │   │   ├── frame_length_controller_unittest.cc
                │   │   │   ├── frame_length_controller_v2.cc
                │   │   │   ├── frame_length_controller_v2.h
                │   │   │   ├── frame_length_controller_v2_unittest.cc
                │   │   │   ├── include/
                │   │   │   │   ├── audio_network_adaptor.h
                │   │   │   │   └── audio_network_adaptor_config.h
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_audio_network_adaptor.h
                │   │   │   │   ├── mock_controller.h
                │   │   │   │   ├── mock_controller_manager.h
                │   │   │   │   └── mock_debug_dump_writer.h
                │   │   │   ├── parse_ana_dump.py
                │   │   │   └── util/
                │   │   │       ├── threshold_curve.h
                │   │   │       └── threshold_curve_unittest.cc
                │   │   ├── codecs/
                │   │   │   ├── audio_decoder.h
                │   │   │   ├── audio_encoder.h
                │   │   │   ├── builtin_audio_decoder_factory_unittest.cc
                │   │   │   ├── builtin_audio_encoder_factory_unittest.cc
                │   │   │   ├── cng/
                │   │   │   │   ├── audio_encoder_cng.cc
                │   │   │   │   ├── audio_encoder_cng.h
                │   │   │   │   ├── audio_encoder_cng_unittest.cc
                │   │   │   │   ├── cng_unittest.cc
                │   │   │   │   ├── webrtc_cng.cc
                │   │   │   │   └── webrtc_cng.h
                │   │   │   ├── g711/
                │   │   │   │   ├── audio_decoder_pcm.cc
                │   │   │   │   ├── audio_decoder_pcm.h
                │   │   │   │   ├── audio_encoder_pcm.cc
                │   │   │   │   ├── audio_encoder_pcm.h
                │   │   │   │   ├── g711_interface.c
                │   │   │   │   ├── g711_interface.h
                │   │   │   │   └── test/
                │   │   │   │       └── testG711.cc
                │   │   │   ├── g722/
                │   │   │   │   ├── audio_decoder_g722.cc
                │   │   │   │   ├── audio_decoder_g722.h
                │   │   │   │   ├── audio_encoder_g722.cc
                │   │   │   │   ├── audio_encoder_g722.h
                │   │   │   │   ├── g722_interface.c
                │   │   │   │   ├── g722_interface.h
                │   │   │   │   └── test/
                │   │   │   │       └── testG722.cc
                │   │   │   ├── ilbc/
                │   │   │   │   ├── abs_quant.c
                │   │   │   │   ├── abs_quant.h
                │   │   │   │   ├── abs_quant_loop.c
                │   │   │   │   ├── abs_quant_loop.h
                │   │   │   │   ├── audio_decoder_ilbc.cc
                │   │   │   │   ├── audio_decoder_ilbc.h
                │   │   │   │   ├── audio_encoder_ilbc.cc
                │   │   │   │   ├── audio_encoder_ilbc.h
                │   │   │   │   ├── augmented_cb_corr.c
                │   │   │   │   ├── augmented_cb_corr.h
                │   │   │   │   ├── bw_expand.c
                │   │   │   │   ├── bw_expand.h
                │   │   │   │   ├── cb_construct.c
                │   │   │   │   ├── cb_construct.h
                │   │   │   │   ├── cb_mem_energy.c
                │   │   │   │   ├── cb_mem_energy.h
                │   │   │   │   ├── cb_mem_energy_augmentation.c
                │   │   │   │   ├── cb_mem_energy_augmentation.h
                │   │   │   │   ├── cb_mem_energy_calc.c
                │   │   │   │   ├── cb_mem_energy_calc.h
                │   │   │   │   ├── cb_search.c
                │   │   │   │   ├── cb_search.h
                │   │   │   │   ├── cb_search_core.c
                │   │   │   │   ├── cb_search_core.h
                │   │   │   │   ├── cb_update_best_index.c
                │   │   │   │   ├── cb_update_best_index.h
                │   │   │   │   ├── chebyshev.c
                │   │   │   │   ├── chebyshev.h
                │   │   │   │   ├── comp_corr.c
                │   │   │   │   ├── comp_corr.h
                │   │   │   │   ├── complexityMeasures.m
                │   │   │   │   ├── constants.c
                │   │   │   │   ├── constants.h
                │   │   │   │   ├── create_augmented_vec.c
                │   │   │   │   ├── create_augmented_vec.h
                │   │   │   │   ├── decode.c
                │   │   │   │   ├── decode.h
                │   │   │   │   ├── decode_residual.c
                │   │   │   │   ├── decode_residual.h
                │   │   │   │   ├── decoder_interpolate_lsf.c
                │   │   │   │   ├── decoder_interpolate_lsf.h
                │   │   │   │   ├── defines.h
                │   │   │   │   ├── do_plc.c
                │   │   │   │   ├── do_plc.h
                │   │   │   │   ├── encode.c
                │   │   │   │   ├── encode.h
                │   │   │   │   ├── energy_inverse.c
                │   │   │   │   ├── energy_inverse.h
                │   │   │   │   ├── enh_upsample.c
                │   │   │   │   ├── enh_upsample.h
                │   │   │   │   ├── enhancer.c
                │   │   │   │   ├── enhancer.h
                │   │   │   │   ├── enhancer_interface.c
                │   │   │   │   ├── enhancer_interface.h
                │   │   │   │   ├── filtered_cb_vecs.c
                │   │   │   │   ├── filtered_cb_vecs.h
                │   │   │   │   ├── frame_classify.c
                │   │   │   │   ├── frame_classify.h
                │   │   │   │   ├── gain_dequant.c
                │   │   │   │   ├── gain_dequant.h
                │   │   │   │   ├── gain_quant.c
                │   │   │   │   ├── gain_quant.h
                │   │   │   │   ├── get_cd_vec.c
                │   │   │   │   ├── get_cd_vec.h
                │   │   │   │   ├── get_lsp_poly.c
                │   │   │   │   ├── get_lsp_poly.h
                │   │   │   │   ├── get_sync_seq.c
                │   │   │   │   ├── get_sync_seq.h
                │   │   │   │   ├── hp_input.c
                │   │   │   │   ├── hp_input.h
                │   │   │   │   ├── hp_output.c
                │   │   │   │   ├── hp_output.h
                │   │   │   │   ├── ilbc.c
                │   │   │   │   ├── ilbc.h
                │   │   │   │   ├── ilbc_unittest.cc
                │   │   │   │   ├── index_conv_dec.c
                │   │   │   │   ├── index_conv_dec.h
                │   │   │   │   ├── index_conv_enc.c
                │   │   │   │   ├── index_conv_enc.h
                │   │   │   │   ├── init_decode.c
                │   │   │   │   ├── init_decode.h
                │   │   │   │   ├── init_encode.c
                │   │   │   │   ├── init_encode.h
                │   │   │   │   ├── interpolate.c
                │   │   │   │   ├── interpolate.h
                │   │   │   │   ├── interpolate_samples.c
                │   │   │   │   ├── interpolate_samples.h
                │   │   │   │   ├── lpc_encode.c
                │   │   │   │   ├── lpc_encode.h
                │   │   │   │   ├── lsf_check.c
                │   │   │   │   ├── lsf_check.h
                │   │   │   │   ├── lsf_interpolate_to_poly_dec.c
                │   │   │   │   ├── lsf_interpolate_to_poly_dec.h
                │   │   │   │   ├── lsf_interpolate_to_poly_enc.c
                │   │   │   │   ├── lsf_interpolate_to_poly_enc.h
                │   │   │   │   ├── lsf_to_lsp.c
                │   │   │   │   ├── lsf_to_lsp.h
                │   │   │   │   ├── lsf_to_poly.c
                │   │   │   │   ├── lsf_to_poly.h
                │   │   │   │   ├── lsp_to_lsf.c
                │   │   │   │   ├── lsp_to_lsf.h
                │   │   │   │   ├── my_corr.c
                │   │   │   │   ├── my_corr.h
                │   │   │   │   ├── nearest_neighbor.c
                │   │   │   │   ├── nearest_neighbor.h
                │   │   │   │   ├── pack_bits.c
                │   │   │   │   ├── pack_bits.h
                │   │   │   │   ├── poly_to_lsf.c
                │   │   │   │   ├── poly_to_lsf.h
                │   │   │   │   ├── poly_to_lsp.c
                │   │   │   │   ├── poly_to_lsp.h
                │   │   │   │   ├── refiner.c
                │   │   │   │   ├── refiner.h
                │   │   │   │   ├── simple_interpolate_lsf.c
                │   │   │   │   ├── simple_interpolate_lsf.h
                │   │   │   │   ├── simple_lpc_analysis.c
                │   │   │   │   ├── simple_lpc_analysis.h
                │   │   │   │   ├── simple_lsf_dequant.c
                │   │   │   │   ├── simple_lsf_dequant.h
                │   │   │   │   ├── simple_lsf_quant.c
                │   │   │   │   ├── simple_lsf_quant.h
                │   │   │   │   ├── smooth.c
                │   │   │   │   ├── smooth.h
                │   │   │   │   ├── smooth_out_data.c
                │   │   │   │   ├── smooth_out_data.h
                │   │   │   │   ├── sort_sq.c
                │   │   │   │   ├── sort_sq.h
                │   │   │   │   ├── split_vq.c
                │   │   │   │   ├── split_vq.h
                │   │   │   │   ├── state_construct.c
                │   │   │   │   ├── state_construct.h
                │   │   │   │   ├── state_search.c
                │   │   │   │   ├── state_search.h
                │   │   │   │   ├── swap_bytes.c
                │   │   │   │   ├── swap_bytes.h
                │   │   │   │   ├── test/
                │   │   │   │   │   ├── empty.cc
                │   │   │   │   │   ├── iLBC_test.c
                │   │   │   │   │   ├── iLBC_testLib.c
                │   │   │   │   │   └── iLBC_testprogram.c
                │   │   │   │   ├── unpack_bits.c
                │   │   │   │   ├── unpack_bits.h
                │   │   │   │   ├── vq3.c
                │   │   │   │   ├── vq3.h
                │   │   │   │   ├── vq4.c
                │   │   │   │   ├── vq4.h
                │   │   │   │   ├── window32_w32.c
                │   │   │   │   ├── window32_w32.h
                │   │   │   │   ├── xcorr_coef.c
                │   │   │   │   └── xcorr_coef.h
                │   │   │   ├── isac/
                │   │   │   │   ├── audio_decoder_isac_t.h
                │   │   │   │   ├── audio_decoder_isac_t_impl.h
                │   │   │   │   ├── audio_encoder_isac_t.h
                │   │   │   │   ├── audio_encoder_isac_t_impl.h
                │   │   │   │   ├── bandwidth_info.h
                │   │   │   │   ├── empty.cc
                │   │   │   │   ├── fix/
                │   │   │   │   │   ├── include/
                │   │   │   │   │   │   ├── audio_decoder_isacfix.h
                │   │   │   │   │   │   ├── audio_encoder_isacfix.h
                │   │   │   │   │   │   └── isacfix.h
                │   │   │   │   │   ├── source/
                │   │   │   │   │   │   ├── arith_routines.c
                │   │   │   │   │   │   ├── arith_routines_hist.c
                │   │   │   │   │   │   ├── arith_routines_logist.c
                │   │   │   │   │   │   ├── arith_routins.h
                │   │   │   │   │   │   ├── audio_decoder_isacfix.cc
                │   │   │   │   │   │   ├── audio_encoder_isacfix.cc
                │   │   │   │   │   │   ├── bandwidth_estimator.c
                │   │   │   │   │   │   ├── bandwidth_estimator.h
                │   │   │   │   │   │   ├── codec.h
                │   │   │   │   │   │   ├── decode.c
                │   │   │   │   │   │   ├── decode_bwe.c
                │   │   │   │   │   │   ├── decode_plc.c
                │   │   │   │   │   │   ├── encode.c
                │   │   │   │   │   │   ├── entropy_coding.c
                │   │   │   │   │   │   ├── entropy_coding.h
                │   │   │   │   │   │   ├── entropy_coding_mips.c
                │   │   │   │   │   │   ├── entropy_coding_neon.c
                │   │   │   │   │   │   ├── fft.c
                │   │   │   │   │   │   ├── fft.h
                │   │   │   │   │   │   ├── filterbank_internal.h
                │   │   │   │   │   │   ├── filterbank_tables.c
                │   │   │   │   │   │   ├── filterbank_tables.h
                │   │   │   │   │   │   ├── filterbanks.c
                │   │   │   │   │   │   ├── filterbanks_mips.c
                │   │   │   │   │   │   ├── filterbanks_neon.c
                │   │   │   │   │   │   ├── filterbanks_unittest.cc
                │   │   │   │   │   │   ├── filters.c
                │   │   │   │   │   │   ├── filters_mips.c
                │   │   │   │   │   │   ├── filters_neon.c
                │   │   │   │   │   │   ├── filters_unittest.cc
                │   │   │   │   │   │   ├── initialize.c
                │   │   │   │   │   │   ├── isac_fix_type.h
                │   │   │   │   │   │   ├── isacfix.c
                │   │   │   │   │   │   ├── lattice.c
                │   │   │   │   │   │   ├── lattice_armv7.S
                │   │   │   │   │   │   ├── lattice_c.c
                │   │   │   │   │   │   ├── lattice_mips.c
                │   │   │   │   │   │   ├── lattice_neon.c
                │   │   │   │   │   │   ├── lpc_masking_model.c
                │   │   │   │   │   │   ├── lpc_masking_model.h
                │   │   │   │   │   │   ├── lpc_masking_model_mips.c
                │   │   │   │   │   │   ├── lpc_masking_model_unittest.cc
                │   │   │   │   │   │   ├── lpc_tables.c
                │   │   │   │   │   │   ├── lpc_tables.h
                │   │   │   │   │   │   ├── pitch_estimator.c
                │   │   │   │   │   │   ├── pitch_estimator.h
                │   │   │   │   │   │   ├── pitch_estimator_c.c
                │   │   │   │   │   │   ├── pitch_estimator_mips.c
                │   │   │   │   │   │   ├── pitch_filter.c
                │   │   │   │   │   │   ├── pitch_filter_armv6.S
                │   │   │   │   │   │   ├── pitch_filter_c.c
                │   │   │   │   │   │   ├── pitch_filter_mips.c
                │   │   │   │   │   │   ├── pitch_gain_tables.c
                │   │   │   │   │   │   ├── pitch_gain_tables.h
                │   │   │   │   │   │   ├── pitch_lag_tables.c
                │   │   │   │   │   │   ├── pitch_lag_tables.h
                │   │   │   │   │   │   ├── settings.h
                │   │   │   │   │   │   ├── spectrum_ar_model_tables.c
                │   │   │   │   │   │   ├── spectrum_ar_model_tables.h
                │   │   │   │   │   │   ├── structs.h
                │   │   │   │   │   │   ├── transform.c
                │   │   │   │   │   │   ├── transform_mips.c
                │   │   │   │   │   │   ├── transform_neon.c
                │   │   │   │   │   │   ├── transform_tables.c
                │   │   │   │   │   │   └── transform_unittest.cc
                │   │   │   │   │   └── test/
                │   │   │   │   │       ├── isac_speed_test.cc
                │   │   │   │   │       └── kenny.cc
                │   │   │   │   ├── isac_webrtc_api_test.cc
                │   │   │   │   └── main/
                │   │   │   │       ├── include/
                │   │   │   │       │   ├── audio_decoder_isac.h
                │   │   │   │       │   ├── audio_encoder_isac.h
                │   │   │   │       │   └── isac.h
                │   │   │   │       ├── source/
                │   │   │   │       │   ├── arith_routines.c
                │   │   │   │       │   ├── arith_routines.h
                │   │   │   │       │   ├── arith_routines_hist.c
                │   │   │   │       │   ├── arith_routines_logist.c
                │   │   │   │       │   ├── audio_decoder_isac.cc
                │   │   │   │       │   ├── audio_encoder_isac.cc
                │   │   │   │       │   ├── audio_encoder_isac_unittest.cc
                │   │   │   │       │   ├── bandwidth_estimator.c
                │   │   │   │       │   ├── bandwidth_estimator.h
                │   │   │   │       │   ├── codec.h
                │   │   │   │       │   ├── crc.c
                │   │   │   │       │   ├── crc.h
                │   │   │   │       │   ├── decode.c
                │   │   │   │       │   ├── decode_bwe.c
                │   │   │   │       │   ├── encode.c
                │   │   │   │       │   ├── encode_lpc_swb.c
                │   │   │   │       │   ├── encode_lpc_swb.h
                │   │   │   │       │   ├── entropy_coding.c
                │   │   │   │       │   ├── entropy_coding.h
                │   │   │   │       │   ├── filter_functions.c
                │   │   │   │       │   ├── filter_functions.h
                │   │   │   │       │   ├── filterbanks.c
                │   │   │   │       │   ├── intialize.c
                │   │   │   │       │   ├── isac.c
                │   │   │   │       │   ├── isac_float_type.h
                │   │   │   │       │   ├── isac_unittest.cc
                │   │   │   │       │   ├── isac_vad.c
                │   │   │   │       │   ├── isac_vad.h
                │   │   │   │       │   ├── lattice.c
                │   │   │   │       │   ├── lpc_analysis.c
                │   │   │   │       │   ├── lpc_analysis.h
                │   │   │   │       │   ├── lpc_gain_swb_tables.c
                │   │   │   │       │   ├── lpc_gain_swb_tables.h
                │   │   │   │       │   ├── lpc_shape_swb12_tables.c
                │   │   │   │       │   ├── lpc_shape_swb12_tables.h
                │   │   │   │       │   ├── lpc_shape_swb16_tables.c
                │   │   │   │       │   ├── lpc_shape_swb16_tables.h
                │   │   │   │       │   ├── lpc_tables.c
                │   │   │   │       │   ├── lpc_tables.h
                │   │   │   │       │   ├── os_specific_inline.h
                │   │   │   │       │   ├── pitch_estimator.c
                │   │   │   │       │   ├── pitch_estimator.h
                │   │   │   │       │   ├── pitch_filter.c
                │   │   │   │       │   ├── pitch_filter.h
                │   │   │   │       │   ├── pitch_gain_tables.c
                │   │   │   │       │   ├── pitch_gain_tables.h
                │   │   │   │       │   ├── pitch_lag_tables.c
                │   │   │   │       │   ├── pitch_lag_tables.h
                │   │   │   │       │   ├── settings.h
                │   │   │   │       │   ├── spectrum_ar_model_tables.c
                │   │   │   │       │   ├── spectrum_ar_model_tables.h
                │   │   │   │       │   ├── structs.h
                │   │   │   │       │   └── transform.c
                │   │   │   │       ├── test/
                │   │   │   │       │   ├── ReleaseTest-API/
                │   │   │   │       │   │   └── ReleaseTest-API.cc
                │   │   │   │       │   ├── SwitchingSampRate/
                │   │   │   │       │   │   └── SwitchingSampRate.cc
                │   │   │   │       │   └── simpleKenny.c
                │   │   │   │       └── util/
                │   │   │   │           ├── utility.c
                │   │   │   │           └── utility.h
                │   │   │   ├── legacy_encoded_audio_frame.cc
                │   │   │   ├── legacy_encoded_audio_frame.h
                │   │   │   ├── legacy_encoded_audio_frame_unittest.cc
                │   │   │   ├── opus/
                │   │   │   │   ├── audio_coder_opus_common.cc
                │   │   │   │   ├── audio_coder_opus_common.h
                │   │   │   │   ├── audio_decoder_multi_channel_opus_impl.cc
                │   │   │   │   ├── audio_decoder_multi_channel_opus_impl.h
                │   │   │   │   ├── audio_decoder_multi_channel_opus_unittest.cc
                │   │   │   │   ├── audio_decoder_opus.cc
                │   │   │   │   ├── audio_decoder_opus.h
                │   │   │   │   ├── audio_encoder_multi_channel_opus_impl.cc
                │   │   │   │   ├── audio_encoder_multi_channel_opus_impl.h
                │   │   │   │   ├── audio_encoder_multi_channel_opus_unittest.cc
                │   │   │   │   ├── audio_encoder_opus.cc
                │   │   │   │   ├── audio_encoder_opus.h
                │   │   │   │   ├── audio_encoder_opus_unittest.cc
                │   │   │   │   ├── opus_bandwidth_unittest.cc
                │   │   │   │   ├── opus_complexity_unittest.cc
                │   │   │   │   ├── opus_fec_test.cc
                │   │   │   │   ├── opus_inst.h
                │   │   │   │   ├── opus_interface.cc
                │   │   │   │   ├── opus_interface.h
                │   │   │   │   ├── opus_speed_test.cc
                │   │   │   │   ├── opus_unittest.cc
                │   │   │   │   └── test/
                │   │   │   │       ├── BUILD.gn
                │   │   │   │       ├── audio_ring_buffer.cc
                │   │   │   │       ├── audio_ring_buffer.h
                │   │   │   │       ├── audio_ring_buffer_unittest.cc
                │   │   │   │       ├── blocker.cc
                │   │   │   │       ├── blocker.h
                │   │   │   │       ├── blocker_unittest.cc
                │   │   │   │       ├── lapped_transform.cc
                │   │   │   │       ├── lapped_transform.h
                │   │   │   │       └── lapped_transform_unittest.cc
                │   │   │   ├── pcm16b/
                │   │   │   │   ├── audio_decoder_pcm16b.cc
                │   │   │   │   ├── audio_decoder_pcm16b.h
                │   │   │   │   ├── audio_encoder_pcm16b.cc
                │   │   │   │   ├── audio_encoder_pcm16b.h
                │   │   │   │   ├── pcm16b.c
                │   │   │   │   ├── pcm16b.h
                │   │   │   │   ├── pcm16b_common.cc
                │   │   │   │   └── pcm16b_common.h
                │   │   │   ├── red/
                │   │   │   │   ├── audio_encoder_copy_red.cc
                │   │   │   │   ├── audio_encoder_copy_red.h
                │   │   │   │   └── audio_encoder_copy_red_unittest.cc
                │   │   │   └── tools/
                │   │   │       ├── audio_codec_speed_test.cc
                │   │   │       └── audio_codec_speed_test.h
                │   │   ├── include/
                │   │   │   ├── audio_coding_module.h
                │   │   │   └── audio_coding_module_typedefs.h
                │   │   ├── neteq/
                │   │   │   ├── accelerate.cc
                │   │   │   ├── accelerate.h
                │   │   │   ├── audio_decoder_unittest.cc
                │   │   │   ├── audio_multi_vector.cc
                │   │   │   ├── audio_multi_vector.h
                │   │   │   ├── audio_multi_vector_unittest.cc
                │   │   │   ├── audio_vector.cc
                │   │   │   ├── audio_vector.h
                │   │   │   ├── audio_vector_unittest.cc
                │   │   │   ├── background_noise.cc
                │   │   │   ├── background_noise.h
                │   │   │   ├── background_noise_unittest.cc
                │   │   │   ├── buffer_level_filter.cc
                │   │   │   ├── buffer_level_filter.h
                │   │   │   ├── buffer_level_filter_unittest.cc
                │   │   │   ├── comfort_noise.cc
                │   │   │   ├── comfort_noise.h
                │   │   │   ├── comfort_noise_unittest.cc
                │   │   │   ├── cross_correlation.cc
                │   │   │   ├── cross_correlation.h
                │   │   │   ├── decision_logic.cc
                │   │   │   ├── decision_logic.h
                │   │   │   ├── decision_logic_unittest.cc
                │   │   │   ├── decoder_database.cc
                │   │   │   ├── decoder_database.h
                │   │   │   ├── decoder_database_unittest.cc
                │   │   │   ├── default_neteq_factory.cc
                │   │   │   ├── default_neteq_factory.h
                │   │   │   ├── delay_manager.cc
                │   │   │   ├── delay_manager.h
                │   │   │   ├── delay_manager_unittest.cc
                │   │   │   ├── dsp_helper.cc
                │   │   │   ├── dsp_helper.h
                │   │   │   ├── dsp_helper_unittest.cc
                │   │   │   ├── dtmf_buffer.cc
                │   │   │   ├── dtmf_buffer.h
                │   │   │   ├── dtmf_buffer_unittest.cc
                │   │   │   ├── dtmf_tone_generator.cc
                │   │   │   ├── dtmf_tone_generator.h
                │   │   │   ├── dtmf_tone_generator_unittest.cc
                │   │   │   ├── expand.cc
                │   │   │   ├── expand.h
                │   │   │   ├── expand_uma_logger.cc
                │   │   │   ├── expand_uma_logger.h
                │   │   │   ├── expand_unittest.cc
                │   │   │   ├── histogram.cc
                │   │   │   ├── histogram.h
                │   │   │   ├── histogram_unittest.cc
                │   │   │   ├── merge.cc
                │   │   │   ├── merge.h
                │   │   │   ├── merge_unittest.cc
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_buffer_level_filter.h
                │   │   │   │   ├── mock_decoder_database.h
                │   │   │   │   ├── mock_delay_manager.h
                │   │   │   │   ├── mock_dtmf_buffer.h
                │   │   │   │   ├── mock_dtmf_tone_generator.h
                │   │   │   │   ├── mock_expand.h
                │   │   │   │   ├── mock_histogram.h
                │   │   │   │   ├── mock_neteq_controller.h
                │   │   │   │   ├── mock_packet_buffer.h
                │   │   │   │   ├── mock_red_payload_splitter.h
                │   │   │   │   └── mock_statistics_calculator.h
                │   │   │   ├── nack_tracker.cc
                │   │   │   ├── nack_tracker.h
                │   │   │   ├── nack_tracker_unittest.cc
                │   │   │   ├── neteq_decoder_plc_unittest.cc
                │   │   │   ├── neteq_impl.cc
                │   │   │   ├── neteq_impl.h
                │   │   │   ├── neteq_impl_unittest.cc
                │   │   │   ├── neteq_network_stats_unittest.cc
                │   │   │   ├── neteq_stereo_unittest.cc
                │   │   │   ├── neteq_unittest.cc
                │   │   │   ├── neteq_unittest.proto
                │   │   │   ├── normal.cc
                │   │   │   ├── normal.h
                │   │   │   ├── normal_unittest.cc
                │   │   │   ├── packet.cc
                │   │   │   ├── packet.h
                │   │   │   ├── packet_buffer.cc
                │   │   │   ├── packet_buffer.h
                │   │   │   ├── packet_buffer_unittest.cc
                │   │   │   ├── post_decode_vad.cc
                │   │   │   ├── post_decode_vad.h
                │   │   │   ├── post_decode_vad_unittest.cc
                │   │   │   ├── preemptive_expand.cc
                │   │   │   ├── preemptive_expand.h
                │   │   │   ├── random_vector.cc
                │   │   │   ├── random_vector.h
                │   │   │   ├── random_vector_unittest.cc
                │   │   │   ├── red_payload_splitter.cc
                │   │   │   ├── red_payload_splitter.h
                │   │   │   ├── red_payload_splitter_unittest.cc
                │   │   │   ├── statistics_calculator.cc
                │   │   │   ├── statistics_calculator.h
                │   │   │   ├── statistics_calculator_unittest.cc
                │   │   │   ├── sync_buffer.cc
                │   │   │   ├── sync_buffer.h
                │   │   │   ├── sync_buffer_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── delay_tool/
                │   │   │   │   │   ├── parse_delay_file.m
                │   │   │   │   │   └── plot_neteq_delay.m
                │   │   │   │   ├── neteq_decoding_test.cc
                │   │   │   │   ├── neteq_decoding_test.h
                │   │   │   │   ├── neteq_ilbc_quality_test.cc
                │   │   │   │   ├── neteq_isac_quality_test.cc
                │   │   │   │   ├── neteq_opus_quality_test.cc
                │   │   │   │   ├── neteq_pcm16b_quality_test.cc
                │   │   │   │   ├── neteq_pcmu_quality_test.cc
                │   │   │   │   ├── neteq_performance_unittest.cc
                │   │   │   │   ├── neteq_speed_test.cc
                │   │   │   │   ├── result_sink.cc
                │   │   │   │   └── result_sink.h
                │   │   │   ├── time_stretch.cc
                │   │   │   ├── time_stretch.h
                │   │   │   ├── time_stretch_unittest.cc
                │   │   │   ├── timestamp_scaler.cc
                │   │   │   ├── timestamp_scaler.h
                │   │   │   ├── timestamp_scaler_unittest.cc
                │   │   │   └── tools/
                │   │   │       ├── DEPS
                │   │   │       ├── README.md
                │   │   │       ├── audio_checksum.h
                │   │   │       ├── audio_loop.cc
                │   │   │       ├── audio_loop.h
                │   │   │       ├── audio_sink.cc
                │   │   │       ├── audio_sink.h
                │   │   │       ├── constant_pcm_packet_source.cc
                │   │   │       ├── constant_pcm_packet_source.h
                │   │   │       ├── encode_neteq_input.cc
                │   │   │       ├── encode_neteq_input.h
                │   │   │       ├── fake_decode_from_file.cc
                │   │   │       ├── fake_decode_from_file.h
                │   │   │       ├── initial_packet_inserter_neteq_input.cc
                │   │   │       ├── initial_packet_inserter_neteq_input.h
                │   │   │       ├── input_audio_file.cc
                │   │   │       ├── input_audio_file.h
                │   │   │       ├── input_audio_file_unittest.cc
                │   │   │       ├── neteq_delay_analyzer.cc
                │   │   │       ├── neteq_delay_analyzer.h
                │   │   │       ├── neteq_event_log_input.cc
                │   │   │       ├── neteq_event_log_input.h
                │   │   │       ├── neteq_input.cc
                │   │   │       ├── neteq_input.h
                │   │   │       ├── neteq_packet_source_input.cc
                │   │   │       ├── neteq_packet_source_input.h
                │   │   │       ├── neteq_performance_test.cc
                │   │   │       ├── neteq_performance_test.h
                │   │   │       ├── neteq_quality_test.cc
                │   │   │       ├── neteq_quality_test.h
                │   │   │       ├── neteq_replacement_input.cc
                │   │   │       ├── neteq_replacement_input.h
                │   │   │       ├── neteq_rtpplay.cc
                │   │   │       ├── neteq_rtpplay_test.sh
                │   │   │       ├── neteq_stats_getter.cc
                │   │   │       ├── neteq_stats_getter.h
                │   │   │       ├── neteq_stats_plotter.cc
                │   │   │       ├── neteq_stats_plotter.h
                │   │   │       ├── neteq_test.cc
                │   │   │       ├── neteq_test.h
                │   │   │       ├── neteq_test_factory.cc
                │   │   │       ├── neteq_test_factory.h
                │   │   │       ├── output_audio_file.h
                │   │   │       ├── output_wav_file.h
                │   │   │       ├── packet.cc
                │   │   │       ├── packet.h
                │   │   │       ├── packet_source.cc
                │   │   │       ├── packet_source.h
                │   │   │       ├── packet_unittest.cc
                │   │   │       ├── resample_input_audio_file.cc
                │   │   │       ├── resample_input_audio_file.h
                │   │   │       ├── rtc_event_log_source.cc
                │   │   │       ├── rtc_event_log_source.h
                │   │   │       ├── rtp_analyze.cc
                │   │   │       ├── rtp_encode.cc
                │   │   │       ├── rtp_file_source.cc
                │   │   │       ├── rtp_file_source.h
                │   │   │       ├── rtp_generator.cc
                │   │   │       ├── rtp_generator.h
                │   │   │       ├── rtp_jitter.cc
                │   │   │       └── rtpcat.cc
                │   │   └── test/
                │   │       ├── Channel.cc
                │   │       ├── Channel.h
                │   │       ├── EncodeDecodeTest.cc
                │   │       ├── EncodeDecodeTest.h
                │   │       ├── PCMFile.cc
                │   │       ├── PCMFile.h
                │   │       ├── PacketLossTest.cc
                │   │       ├── PacketLossTest.h
                │   │       ├── RTPFile.cc
                │   │       ├── RTPFile.h
                │   │       ├── TestAllCodecs.cc
                │   │       ├── TestAllCodecs.h
                │   │       ├── TestRedFec.cc
                │   │       ├── TestRedFec.h
                │   │       ├── TestStereo.cc
                │   │       ├── TestStereo.h
                │   │       ├── TestVADDTX.cc
                │   │       ├── TestVADDTX.h
                │   │       ├── Tester.cc
                │   │       ├── TwoWayCommunication.cc
                │   │       ├── TwoWayCommunication.h
                │   │       ├── iSACTest.cc
                │   │       ├── iSACTest.h
                │   │       ├── opus_test.cc
                │   │       ├── opus_test.h
                │   │       └── target_delay_unittest.cc
                │   ├── audio_device/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── android/
                │   │   │   ├── aaudio_player.cc
                │   │   │   ├── aaudio_player.h
                │   │   │   ├── aaudio_recorder.cc
                │   │   │   ├── aaudio_recorder.h
                │   │   │   ├── aaudio_wrapper.cc
                │   │   │   ├── aaudio_wrapper.h
                │   │   │   ├── audio_common.h
                │   │   │   ├── audio_device_template.h
                │   │   │   ├── audio_device_unittest.cc
                │   │   │   ├── audio_manager.cc
                │   │   │   ├── audio_manager.h
                │   │   │   ├── audio_manager_unittest.cc
                │   │   │   ├── audio_record_jni.cc
                │   │   │   ├── audio_record_jni.h
                │   │   │   ├── audio_track_jni.cc
                │   │   │   ├── audio_track_jni.h
                │   │   │   ├── build_info.cc
                │   │   │   ├── build_info.h
                │   │   │   ├── ensure_initialized.cc
                │   │   │   ├── ensure_initialized.h
                │   │   │   ├── java/
                │   │   │   │   └── src/
                │   │   │   │       └── org/
                │   │   │   │           └── webrtc/
                │   │   │   │               └── voiceengine/
                │   │   │   │                   ├── BuildInfo.java
                │   │   │   │                   ├── WebRtcAudioEffects.java
                │   │   │   │                   ├── WebRtcAudioManager.java
                │   │   │   │                   ├── WebRtcAudioRecord.java
                │   │   │   │                   ├── WebRtcAudioTrack.java
                │   │   │   │                   └── WebRtcAudioUtils.java
                │   │   │   ├── opensles_common.cc
                │   │   │   ├── opensles_common.h
                │   │   │   ├── opensles_player.cc
                │   │   │   ├── opensles_player.h
                │   │   │   ├── opensles_recorder.cc
                │   │   │   └── opensles_recorder.h
                │   │   ├── audio_device_buffer.cc
                │   │   ├── audio_device_buffer.h
                │   │   ├── audio_device_config.h
                │   │   ├── audio_device_data_observer.cc
                │   │   ├── audio_device_generic.cc
                │   │   ├── audio_device_generic.h
                │   │   ├── audio_device_impl.cc
                │   │   ├── audio_device_impl.h
                │   │   ├── audio_device_name.cc
                │   │   ├── audio_device_name.h
                │   │   ├── audio_device_unittest.cc
                │   │   ├── dummy/
                │   │   │   ├── audio_device_dummy.cc
                │   │   │   ├── audio_device_dummy.h
                │   │   │   ├── file_audio_device.cc
                │   │   │   ├── file_audio_device.h
                │   │   │   ├── file_audio_device_factory.cc
                │   │   │   └── file_audio_device_factory.h
                │   │   ├── fine_audio_buffer.cc
                │   │   ├── fine_audio_buffer.h
                │   │   ├── fine_audio_buffer_unittest.cc
                │   │   ├── include/
                │   │   │   ├── audio_device.h
                │   │   │   ├── audio_device_data_observer.h
                │   │   │   ├── audio_device_default.h
                │   │   │   ├── audio_device_defines.h
                │   │   │   ├── audio_device_factory.cc
                │   │   │   ├── audio_device_factory.h
                │   │   │   ├── fake_audio_device.h
                │   │   │   ├── mock_audio_device.h
                │   │   │   ├── mock_audio_transport.h
                │   │   │   ├── test_audio_device.cc
                │   │   │   ├── test_audio_device.h
                │   │   │   └── test_audio_device_unittest.cc
                │   │   ├── linux/
                │   │   │   ├── alsasymboltable_linux.cc
                │   │   │   ├── alsasymboltable_linux.h
                │   │   │   ├── audio_device_alsa_linux.cc
                │   │   │   ├── audio_device_alsa_linux.h
                │   │   │   ├── audio_device_pulse_linux.cc
                │   │   │   ├── audio_device_pulse_linux.h
                │   │   │   ├── audio_mixer_manager_alsa_linux.cc
                │   │   │   ├── audio_mixer_manager_alsa_linux.h
                │   │   │   ├── audio_mixer_manager_pulse_linux.cc
                │   │   │   ├── audio_mixer_manager_pulse_linux.h
                │   │   │   ├── latebindingsymboltable_linux.cc
                │   │   │   ├── latebindingsymboltable_linux.h
                │   │   │   ├── pulseaudiosymboltable_linux.cc
                │   │   │   └── pulseaudiosymboltable_linux.h
                │   │   ├── mac/
                │   │   │   ├── audio_device_mac.cc
                │   │   │   ├── audio_device_mac.h
                │   │   │   ├── audio_mixer_manager_mac.cc
                │   │   │   └── audio_mixer_manager_mac.h
                │   │   ├── mock_audio_device_buffer.h
                │   │   └── win/
                │   │       ├── audio_device_core_win.cc
                │   │       ├── audio_device_core_win.h
                │   │       ├── audio_device_module_win.cc
                │   │       ├── audio_device_module_win.h
                │   │       ├── core_audio_base_win.cc
                │   │       ├── core_audio_base_win.h
                │   │       ├── core_audio_input_win.cc
                │   │       ├── core_audio_input_win.h
                │   │       ├── core_audio_output_win.cc
                │   │       ├── core_audio_output_win.h
                │   │       ├── core_audio_utility_win.cc
                │   │       ├── core_audio_utility_win.h
                │   │       └── core_audio_utility_win_unittest.cc
                │   ├── audio_mixer/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── audio_frame_manipulator.cc
                │   │   ├── audio_frame_manipulator.h
                │   │   ├── audio_frame_manipulator_unittest.cc
                │   │   ├── audio_mixer_impl.cc
                │   │   ├── audio_mixer_impl.h
                │   │   ├── audio_mixer_impl_unittest.cc
                │   │   ├── audio_mixer_test.cc
                │   │   ├── default_output_rate_calculator.cc
                │   │   ├── default_output_rate_calculator.h
                │   │   ├── frame_combiner.cc
                │   │   ├── frame_combiner.h
                │   │   ├── frame_combiner_unittest.cc
                │   │   ├── gain_change_calculator.cc
                │   │   ├── gain_change_calculator.h
                │   │   ├── output_rate_calculator.h
                │   │   ├── sine_wave_generator.cc
                │   │   └── sine_wave_generator.h
                │   ├── audio_processing/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── aec3/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── adaptive_fir_filter.cc
                │   │   │   ├── adaptive_fir_filter.h
                │   │   │   ├── adaptive_fir_filter_avx2.cc
                │   │   │   ├── adaptive_fir_filter_erl.cc
                │   │   │   ├── adaptive_fir_filter_erl.h
                │   │   │   ├── adaptive_fir_filter_erl_avx2.cc
                │   │   │   ├── adaptive_fir_filter_erl_unittest.cc
                │   │   │   ├── adaptive_fir_filter_unittest.cc
                │   │   │   ├── aec3_common.cc
                │   │   │   ├── aec3_common.h
                │   │   │   ├── aec3_fft.cc
                │   │   │   ├── aec3_fft.h
                │   │   │   ├── aec3_fft_unittest.cc
                │   │   │   ├── aec_state.cc
                │   │   │   ├── aec_state.h
                │   │   │   ├── aec_state_unittest.cc
                │   │   │   ├── alignment_mixer.cc
                │   │   │   ├── alignment_mixer.h
                │   │   │   ├── alignment_mixer_unittest.cc
                │   │   │   ├── api_call_jitter_metrics.cc
                │   │   │   ├── api_call_jitter_metrics.h
                │   │   │   ├── api_call_jitter_metrics_unittest.cc
                │   │   │   ├── block_buffer.cc
                │   │   │   ├── block_buffer.h
                │   │   │   ├── block_delay_buffer.cc
                │   │   │   ├── block_delay_buffer.h
                │   │   │   ├── block_delay_buffer_unittest.cc
                │   │   │   ├── block_framer.cc
                │   │   │   ├── block_framer.h
                │   │   │   ├── block_framer_unittest.cc
                │   │   │   ├── block_processor.cc
                │   │   │   ├── block_processor.h
                │   │   │   ├── block_processor_metrics.cc
                │   │   │   ├── block_processor_metrics.h
                │   │   │   ├── block_processor_metrics_unittest.cc
                │   │   │   ├── block_processor_unittest.cc
                │   │   │   ├── clockdrift_detector.cc
                │   │   │   ├── clockdrift_detector.h
                │   │   │   ├── clockdrift_detector_unittest.cc
                │   │   │   ├── coarse_filter_update_gain.cc
                │   │   │   ├── coarse_filter_update_gain.h
                │   │   │   ├── coarse_filter_update_gain_unittest.cc
                │   │   │   ├── comfort_noise_generator.cc
                │   │   │   ├── comfort_noise_generator.h
                │   │   │   ├── comfort_noise_generator_unittest.cc
                │   │   │   ├── decimator.cc
                │   │   │   ├── decimator.h
                │   │   │   ├── decimator_unittest.cc
                │   │   │   ├── delay_estimate.h
                │   │   │   ├── dominant_nearend_detector.cc
                │   │   │   ├── dominant_nearend_detector.h
                │   │   │   ├── downsampled_render_buffer.cc
                │   │   │   ├── downsampled_render_buffer.h
                │   │   │   ├── echo_audibility.cc
                │   │   │   ├── echo_audibility.h
                │   │   │   ├── echo_canceller3.cc
                │   │   │   ├── echo_canceller3.h
                │   │   │   ├── echo_canceller3_unittest.cc
                │   │   │   ├── echo_path_delay_estimator.cc
                │   │   │   ├── echo_path_delay_estimator.h
                │   │   │   ├── echo_path_delay_estimator_unittest.cc
                │   │   │   ├── echo_path_variability.cc
                │   │   │   ├── echo_path_variability.h
                │   │   │   ├── echo_path_variability_unittest.cc
                │   │   │   ├── echo_remover.cc
                │   │   │   ├── echo_remover.h
                │   │   │   ├── echo_remover_metrics.cc
                │   │   │   ├── echo_remover_metrics.h
                │   │   │   ├── echo_remover_metrics_unittest.cc
                │   │   │   ├── echo_remover_unittest.cc
                │   │   │   ├── erl_estimator.cc
                │   │   │   ├── erl_estimator.h
                │   │   │   ├── erl_estimator_unittest.cc
                │   │   │   ├── erle_estimator.cc
                │   │   │   ├── erle_estimator.h
                │   │   │   ├── erle_estimator_unittest.cc
                │   │   │   ├── fft_buffer.cc
                │   │   │   ├── fft_buffer.h
                │   │   │   ├── fft_data.h
                │   │   │   ├── fft_data_avx2.cc
                │   │   │   ├── fft_data_unittest.cc
                │   │   │   ├── filter_analyzer.cc
                │   │   │   ├── filter_analyzer.h
                │   │   │   ├── filter_analyzer_unittest.cc
                │   │   │   ├── frame_blocker.cc
                │   │   │   ├── frame_blocker.h
                │   │   │   ├── frame_blocker_unittest.cc
                │   │   │   ├── fullband_erle_estimator.cc
                │   │   │   ├── fullband_erle_estimator.h
                │   │   │   ├── matched_filter.cc
                │   │   │   ├── matched_filter.h
                │   │   │   ├── matched_filter_avx2.cc
                │   │   │   ├── matched_filter_lag_aggregator.cc
                │   │   │   ├── matched_filter_lag_aggregator.h
                │   │   │   ├── matched_filter_lag_aggregator_unittest.cc
                │   │   │   ├── matched_filter_unittest.cc
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_block_processor.cc
                │   │   │   │   ├── mock_block_processor.h
                │   │   │   │   ├── mock_echo_remover.cc
                │   │   │   │   ├── mock_echo_remover.h
                │   │   │   │   ├── mock_render_delay_buffer.cc
                │   │   │   │   ├── mock_render_delay_buffer.h
                │   │   │   │   ├── mock_render_delay_controller.cc
                │   │   │   │   └── mock_render_delay_controller.h
                │   │   │   ├── moving_average.cc
                │   │   │   ├── moving_average.h
                │   │   │   ├── moving_average_unittest.cc
                │   │   │   ├── nearend_detector.h
                │   │   │   ├── refined_filter_update_gain.cc
                │   │   │   ├── refined_filter_update_gain.h
                │   │   │   ├── refined_filter_update_gain_unittest.cc
                │   │   │   ├── render_buffer.cc
                │   │   │   ├── render_buffer.h
                │   │   │   ├── render_buffer_unittest.cc
                │   │   │   ├── render_delay_buffer.cc
                │   │   │   ├── render_delay_buffer.h
                │   │   │   ├── render_delay_buffer_unittest.cc
                │   │   │   ├── render_delay_controller.cc
                │   │   │   ├── render_delay_controller.h
                │   │   │   ├── render_delay_controller_metrics.cc
                │   │   │   ├── render_delay_controller_metrics.h
                │   │   │   ├── render_delay_controller_metrics_unittest.cc
                │   │   │   ├── render_delay_controller_unittest.cc
                │   │   │   ├── render_signal_analyzer.cc
                │   │   │   ├── render_signal_analyzer.h
                │   │   │   ├── render_signal_analyzer_unittest.cc
                │   │   │   ├── residual_echo_estimator.cc
                │   │   │   ├── residual_echo_estimator.h
                │   │   │   ├── residual_echo_estimator_unittest.cc
                │   │   │   ├── reverb_decay_estimator.cc
                │   │   │   ├── reverb_decay_estimator.h
                │   │   │   ├── reverb_frequency_response.cc
                │   │   │   ├── reverb_frequency_response.h
                │   │   │   ├── reverb_model.cc
                │   │   │   ├── reverb_model.h
                │   │   │   ├── reverb_model_estimator.cc
                │   │   │   ├── reverb_model_estimator.h
                │   │   │   ├── reverb_model_estimator_unittest.cc
                │   │   │   ├── signal_dependent_erle_estimator.cc
                │   │   │   ├── signal_dependent_erle_estimator.h
                │   │   │   ├── signal_dependent_erle_estimator_unittest.cc
                │   │   │   ├── spectrum_buffer.cc
                │   │   │   ├── spectrum_buffer.h
                │   │   │   ├── stationarity_estimator.cc
                │   │   │   ├── stationarity_estimator.h
                │   │   │   ├── subband_erle_estimator.cc
                │   │   │   ├── subband_erle_estimator.h
                │   │   │   ├── subband_nearend_detector.cc
                │   │   │   ├── subband_nearend_detector.h
                │   │   │   ├── subtractor.cc
                │   │   │   ├── subtractor.h
                │   │   │   ├── subtractor_output.cc
                │   │   │   ├── subtractor_output.h
                │   │   │   ├── subtractor_output_analyzer.cc
                │   │   │   ├── subtractor_output_analyzer.h
                │   │   │   ├── subtractor_unittest.cc
                │   │   │   ├── suppression_filter.cc
                │   │   │   ├── suppression_filter.h
                │   │   │   ├── suppression_filter_unittest.cc
                │   │   │   ├── suppression_gain.cc
                │   │   │   ├── suppression_gain.h
                │   │   │   ├── suppression_gain_unittest.cc
                │   │   │   ├── transparent_mode.cc
                │   │   │   ├── transparent_mode.h
                │   │   │   ├── vector_math.h
                │   │   │   ├── vector_math_avx2.cc
                │   │   │   └── vector_math_unittest.cc
                │   │   ├── aec_dump/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── aec_dump_factory.h
                │   │   │   ├── aec_dump_impl.cc
                │   │   │   ├── aec_dump_impl.h
                │   │   │   ├── aec_dump_integration_test.cc
                │   │   │   ├── aec_dump_unittest.cc
                │   │   │   ├── capture_stream_info.cc
                │   │   │   ├── capture_stream_info.h
                │   │   │   ├── mock_aec_dump.cc
                │   │   │   ├── mock_aec_dump.h
                │   │   │   ├── null_aec_dump_factory.cc
                │   │   │   ├── write_to_file_task.cc
                │   │   │   └── write_to_file_task.h
                │   │   ├── aecm/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── aecm_core.cc
                │   │   │   ├── aecm_core.h
                │   │   │   ├── aecm_core_c.cc
                │   │   │   ├── aecm_core_mips.cc
                │   │   │   ├── aecm_core_neon.cc
                │   │   │   ├── aecm_defines.h
                │   │   │   ├── echo_control_mobile.cc
                │   │   │   └── echo_control_mobile.h
                │   │   ├── agc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── agc.cc
                │   │   │   ├── agc.h
                │   │   │   ├── agc_manager_direct.cc
                │   │   │   ├── agc_manager_direct.h
                │   │   │   ├── agc_manager_direct_unittest.cc
                │   │   │   ├── gain_control.h
                │   │   │   ├── gain_map_internal.h
                │   │   │   ├── legacy/
                │   │   │   │   ├── analog_agc.cc
                │   │   │   │   ├── analog_agc.h
                │   │   │   │   ├── digital_agc.cc
                │   │   │   │   ├── digital_agc.h
                │   │   │   │   └── gain_control.h
                │   │   │   ├── loudness_histogram.cc
                │   │   │   ├── loudness_histogram.h
                │   │   │   ├── loudness_histogram_unittest.cc
                │   │   │   ├── mock_agc.h
                │   │   │   ├── utility.cc
                │   │   │   └── utility.h
                │   │   ├── agc2/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── adaptive_agc.cc
                │   │   │   ├── adaptive_agc.h
                │   │   │   ├── adaptive_digital_gain_applier.cc
                │   │   │   ├── adaptive_digital_gain_applier.h
                │   │   │   ├── adaptive_digital_gain_applier_unittest.cc
                │   │   │   ├── adaptive_mode_level_estimator.cc
                │   │   │   ├── adaptive_mode_level_estimator.h
                │   │   │   ├── adaptive_mode_level_estimator_unittest.cc
                │   │   │   ├── agc2_common.h
                │   │   │   ├── agc2_testing_common.cc
                │   │   │   ├── agc2_testing_common.h
                │   │   │   ├── agc2_testing_common_unittest.cc
                │   │   │   ├── biquad_filter.cc
                │   │   │   ├── biquad_filter.h
                │   │   │   ├── biquad_filter_unittest.cc
                │   │   │   ├── compute_interpolated_gain_curve.cc
                │   │   │   ├── compute_interpolated_gain_curve.h
                │   │   │   ├── cpu_features.cc
                │   │   │   ├── cpu_features.h
                │   │   │   ├── down_sampler.cc
                │   │   │   ├── down_sampler.h
                │   │   │   ├── fixed_digital_level_estimator.cc
                │   │   │   ├── fixed_digital_level_estimator.h
                │   │   │   ├── fixed_digital_level_estimator_unittest.cc
                │   │   │   ├── gain_applier.cc
                │   │   │   ├── gain_applier.h
                │   │   │   ├── gain_applier_unittest.cc
                │   │   │   ├── interpolated_gain_curve.cc
                │   │   │   ├── interpolated_gain_curve.h
                │   │   │   ├── interpolated_gain_curve_unittest.cc
                │   │   │   ├── limiter.cc
                │   │   │   ├── limiter.h
                │   │   │   ├── limiter_db_gain_curve.cc
                │   │   │   ├── limiter_db_gain_curve.h
                │   │   │   ├── limiter_db_gain_curve_unittest.cc
                │   │   │   ├── limiter_unittest.cc
                │   │   │   ├── noise_level_estimator.cc
                │   │   │   ├── noise_level_estimator.h
                │   │   │   ├── noise_level_estimator_unittest.cc
                │   │   │   ├── noise_spectrum_estimator.cc
                │   │   │   ├── noise_spectrum_estimator.h
                │   │   │   ├── rnn_vad/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── DEPS
                │   │   │   │   ├── auto_correlation.cc
                │   │   │   │   ├── auto_correlation.h
                │   │   │   │   ├── auto_correlation_unittest.cc
                │   │   │   │   ├── common.h
                │   │   │   │   ├── features_extraction.cc
                │   │   │   │   ├── features_extraction.h
                │   │   │   │   ├── features_extraction_unittest.cc
                │   │   │   │   ├── lp_residual.cc
                │   │   │   │   ├── lp_residual.h
                │   │   │   │   ├── lp_residual_unittest.cc
                │   │   │   │   ├── pitch_search.cc
                │   │   │   │   ├── pitch_search.h
                │   │   │   │   ├── pitch_search_internal.cc
                │   │   │   │   ├── pitch_search_internal.h
                │   │   │   │   ├── pitch_search_internal_unittest.cc
                │   │   │   │   ├── pitch_search_unittest.cc
                │   │   │   │   ├── ring_buffer.h
                │   │   │   │   ├── ring_buffer_unittest.cc
                │   │   │   │   ├── rnn.cc
                │   │   │   │   ├── rnn.h
                │   │   │   │   ├── rnn_fc.cc
                │   │   │   │   ├── rnn_fc.h
                │   │   │   │   ├── rnn_fc_unittest.cc
                │   │   │   │   ├── rnn_gru.cc
                │   │   │   │   ├── rnn_gru.h
                │   │   │   │   ├── rnn_gru_unittest.cc
                │   │   │   │   ├── rnn_unittest.cc
                │   │   │   │   ├── rnn_vad_tool.cc
                │   │   │   │   ├── rnn_vad_unittest.cc
                │   │   │   │   ├── sequence_buffer.h
                │   │   │   │   ├── sequence_buffer_unittest.cc
                │   │   │   │   ├── spectral_features.cc
                │   │   │   │   ├── spectral_features.h
                │   │   │   │   ├── spectral_features_internal.cc
                │   │   │   │   ├── spectral_features_internal.h
                │   │   │   │   ├── spectral_features_internal_unittest.cc
                │   │   │   │   ├── spectral_features_unittest.cc
                │   │   │   │   ├── symmetric_matrix_buffer.h
                │   │   │   │   ├── symmetric_matrix_buffer_unittest.cc
                │   │   │   │   ├── test_utils.cc
                │   │   │   │   ├── test_utils.h
                │   │   │   │   ├── vector_math.h
                │   │   │   │   ├── vector_math_avx2.cc
                │   │   │   │   └── vector_math_unittest.cc
                │   │   │   ├── saturation_protector.cc
                │   │   │   ├── saturation_protector.h
                │   │   │   ├── saturation_protector_buffer.cc
                │   │   │   ├── saturation_protector_buffer.h
                │   │   │   ├── saturation_protector_buffer_unittest.cc
                │   │   │   ├── saturation_protector_unittest.cc
                │   │   │   ├── signal_classifier.cc
                │   │   │   ├── signal_classifier.h
                │   │   │   ├── signal_classifier_unittest.cc
                │   │   │   ├── vad_with_level.cc
                │   │   │   ├── vad_with_level.h
                │   │   │   ├── vad_with_level_unittest.cc
                │   │   │   ├── vector_float_frame.cc
                │   │   │   └── vector_float_frame.h
                │   │   ├── audio_buffer.cc
                │   │   ├── audio_buffer.h
                │   │   ├── audio_buffer_unittest.cc
                │   │   ├── audio_frame_view_unittest.cc
                │   │   ├── audio_processing_builder_impl.cc
                │   │   ├── audio_processing_impl.cc
                │   │   ├── audio_processing_impl.h
                │   │   ├── audio_processing_impl_locking_unittest.cc
                │   │   ├── audio_processing_impl_unittest.cc
                │   │   ├── audio_processing_performance_unittest.cc
                │   │   ├── audio_processing_unittest.cc
                │   │   ├── capture_levels_adjuster/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_samples_scaler.cc
                │   │   │   ├── audio_samples_scaler.h
                │   │   │   ├── audio_samples_scaler_unittest.cc
                │   │   │   ├── capture_levels_adjuster.cc
                │   │   │   ├── capture_levels_adjuster.h
                │   │   │   └── capture_levels_adjuster_unittest.cc
                │   │   ├── common.h
                │   │   ├── config_unittest.cc
                │   │   ├── debug.proto
                │   │   ├── echo_control_mobile_bit_exact_unittest.cc
                │   │   ├── echo_control_mobile_impl.cc
                │   │   ├── echo_control_mobile_impl.h
                │   │   ├── echo_control_mobile_unittest.cc
                │   │   ├── echo_detector/
                │   │   │   ├── circular_buffer.cc
                │   │   │   ├── circular_buffer.h
                │   │   │   ├── circular_buffer_unittest.cc
                │   │   │   ├── mean_variance_estimator.cc
                │   │   │   ├── mean_variance_estimator.h
                │   │   │   ├── mean_variance_estimator_unittest.cc
                │   │   │   ├── moving_max.cc
                │   │   │   ├── moving_max.h
                │   │   │   ├── moving_max_unittest.cc
                │   │   │   ├── normalized_covariance_estimator.cc
                │   │   │   ├── normalized_covariance_estimator.h
                │   │   │   └── normalized_covariance_estimator_unittest.cc
                │   │   ├── gain_control_impl.cc
                │   │   ├── gain_control_impl.h
                │   │   ├── gain_control_unittest.cc
                │   │   ├── gain_controller2.cc
                │   │   ├── gain_controller2.h
                │   │   ├── gain_controller2_unittest.cc
                │   │   ├── high_pass_filter.cc
                │   │   ├── high_pass_filter.h
                │   │   ├── high_pass_filter_unittest.cc
                │   │   ├── include/
                │   │   │   ├── aec_dump.cc
                │   │   │   ├── aec_dump.h
                │   │   │   ├── audio_frame_proxies.cc
                │   │   │   ├── audio_frame_proxies.h
                │   │   │   ├── audio_frame_view.h
                │   │   │   ├── audio_processing.cc
                │   │   │   ├── audio_processing.h
                │   │   │   ├── audio_processing_statistics.cc
                │   │   │   ├── audio_processing_statistics.h
                │   │   │   ├── config.cc
                │   │   │   └── mock_audio_processing.h
                │   │   ├── level_estimator.cc
                │   │   ├── level_estimator.h
                │   │   ├── level_estimator_unittest.cc
                │   │   ├── logging/
                │   │   │   ├── apm_data_dumper.cc
                │   │   │   └── apm_data_dumper.h
                │   │   ├── ns/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── fast_math.cc
                │   │   │   ├── fast_math.h
                │   │   │   ├── histograms.cc
                │   │   │   ├── histograms.h
                │   │   │   ├── noise_estimator.cc
                │   │   │   ├── noise_estimator.h
                │   │   │   ├── noise_suppressor.cc
                │   │   │   ├── noise_suppressor.h
                │   │   │   ├── noise_suppressor_unittest.cc
                │   │   │   ├── ns_common.h
                │   │   │   ├── ns_config.h
                │   │   │   ├── ns_fft.cc
                │   │   │   ├── ns_fft.h
                │   │   │   ├── prior_signal_model.cc
                │   │   │   ├── prior_signal_model.h
                │   │   │   ├── prior_signal_model_estimator.cc
                │   │   │   ├── prior_signal_model_estimator.h
                │   │   │   ├── quantile_noise_estimator.cc
                │   │   │   ├── quantile_noise_estimator.h
                │   │   │   ├── signal_model.cc
                │   │   │   ├── signal_model.h
                │   │   │   ├── signal_model_estimator.cc
                │   │   │   ├── signal_model_estimator.h
                │   │   │   ├── speech_probability_estimator.cc
                │   │   │   ├── speech_probability_estimator.h
                │   │   │   ├── suppression_params.cc
                │   │   │   ├── suppression_params.h
                │   │   │   ├── wiener_filter.cc
                │   │   │   └── wiener_filter.h
                │   │   ├── optionally_built_submodule_creators.cc
                │   │   ├── optionally_built_submodule_creators.h
                │   │   ├── render_queue_item_verifier.h
                │   │   ├── residual_echo_detector.cc
                │   │   ├── residual_echo_detector.h
                │   │   ├── residual_echo_detector_unittest.cc
                │   │   ├── rms_level.cc
                │   │   ├── rms_level.h
                │   │   ├── rms_level_unittest.cc
                │   │   ├── splitting_filter.cc
                │   │   ├── splitting_filter.h
                │   │   ├── splitting_filter_unittest.cc
                │   │   ├── test/
                │   │   │   ├── aec_dump_based_simulator.cc
                │   │   │   ├── aec_dump_based_simulator.h
                │   │   │   ├── android/
                │   │   │   │   └── apmtest/
                │   │   │   │       ├── AndroidManifest.xml
                │   │   │   │       ├── default.properties
                │   │   │   │       ├── jni/
                │   │   │   │       │   └── main.c
                │   │   │   │       └── res/
                │   │   │   │           └── values/
                │   │   │   │               └── strings.xml
                │   │   │   ├── api_call_statistics.cc
                │   │   │   ├── api_call_statistics.h
                │   │   │   ├── apmtest.m
                │   │   │   ├── audio_buffer_tools.cc
                │   │   │   ├── audio_buffer_tools.h
                │   │   │   ├── audio_processing_builder_for_testing.cc
                │   │   │   ├── audio_processing_builder_for_testing.h
                │   │   │   ├── audio_processing_simulator.cc
                │   │   │   ├── audio_processing_simulator.h
                │   │   │   ├── audioproc_float_impl.cc
                │   │   │   ├── audioproc_float_impl.h
                │   │   │   ├── bitexactness_tools.cc
                │   │   │   ├── bitexactness_tools.h
                │   │   │   ├── conversational_speech/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── OWNERS
                │   │   │   │   ├── README.md
                │   │   │   │   ├── config.cc
                │   │   │   │   ├── generator.cc
                │   │   │   │   ├── generator_unittest.cc
                │   │   │   │   ├── mock_wavreader.cc
                │   │   │   │   ├── mock_wavreader.h
                │   │   │   │   ├── mock_wavreader_factory.cc
                │   │   │   │   ├── mock_wavreader_factory.h
                │   │   │   │   ├── multiend_call.cc
                │   │   │   │   ├── multiend_call.h
                │   │   │   │   ├── simulator.cc
                │   │   │   │   ├── simulator.h
                │   │   │   │   ├── timing.cc
                │   │   │   │   ├── timing.h
                │   │   │   │   ├── wavreader_abstract_factory.h
                │   │   │   │   ├── wavreader_factory.cc
                │   │   │   │   ├── wavreader_factory.h
                │   │   │   │   └── wavreader_interface.h
                │   │   │   ├── debug_dump_replayer.cc
                │   │   │   ├── debug_dump_replayer.h
                │   │   │   ├── debug_dump_test.cc
                │   │   │   ├── echo_canceller_test_tools.cc
                │   │   │   ├── echo_canceller_test_tools.h
                │   │   │   ├── echo_canceller_test_tools_unittest.cc
                │   │   │   ├── echo_control_mock.h
                │   │   │   ├── fake_recording_device.cc
                │   │   │   ├── fake_recording_device.h
                │   │   │   ├── fake_recording_device_unittest.cc
                │   │   │   ├── performance_timer.cc
                │   │   │   ├── performance_timer.h
                │   │   │   ├── protobuf_utils.cc
                │   │   │   ├── protobuf_utils.h
                │   │   │   ├── py_quality_assessment/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── OWNERS
                │   │   │   │   ├── README.md
                │   │   │   │   ├── apm_configs/
                │   │   │   │   │   └── default.json
                │   │   │   │   ├── apm_quality_assessment.py
                │   │   │   │   ├── apm_quality_assessment.sh
                │   │   │   │   ├── apm_quality_assessment_boxplot.py
                │   │   │   │   ├── apm_quality_assessment_export.py
                │   │   │   │   ├── apm_quality_assessment_gencfgs.py
                │   │   │   │   ├── apm_quality_assessment_optimize.py
                │   │   │   │   ├── apm_quality_assessment_unittest.py
                │   │   │   │   ├── output/
                │   │   │   │   │   └── README.md
                │   │   │   │   └── quality_assessment/
                │   │   │   │       ├── __init__.py
                │   │   │   │       ├── annotations.py
                │   │   │   │       ├── annotations_unittest.py
                │   │   │   │       ├── apm_configs/
                │   │   │   │       │   └── default.json
                │   │   │   │       ├── apm_vad.cc
                │   │   │   │       ├── audioproc_wrapper.py
                │   │   │   │       ├── collect_data.py
                │   │   │   │       ├── data_access.py
                │   │   │   │       ├── echo_path_simulation.py
                │   │   │   │       ├── echo_path_simulation_factory.py
                │   │   │   │       ├── echo_path_simulation_unittest.py
                │   │   │   │       ├── eval_scores.py
                │   │   │   │       ├── eval_scores_factory.py
                │   │   │   │       ├── eval_scores_unittest.py
                │   │   │   │       ├── evaluation.py
                │   │   │   │       ├── exceptions.py
                │   │   │   │       ├── export.py
                │   │   │   │       ├── export_unittest.py
                │   │   │   │       ├── external_vad.py
                │   │   │   │       ├── fake_external_vad.py
                │   │   │   │       ├── fake_polqa.cc
                │   │   │   │       ├── input_mixer.py
                │   │   │   │       ├── input_mixer_unittest.py
                │   │   │   │       ├── input_signal_creator.py
                │   │   │   │       ├── results.css
                │   │   │   │       ├── results.js
                │   │   │   │       ├── signal_processing.py
                │   │   │   │       ├── signal_processing_unittest.py
                │   │   │   │       ├── simulation.py
                │   │   │   │       ├── simulation_unittest.py
                │   │   │   │       ├── sound_level.cc
                │   │   │   │       ├── test_data_generation.py
                │   │   │   │       ├── test_data_generation_factory.py
                │   │   │   │       ├── test_data_generation_unittest.py
                │   │   │   │       └── vad.cc
                │   │   │   ├── runtime_setting_util.cc
                │   │   │   ├── runtime_setting_util.h
                │   │   │   ├── simulator_buffers.cc
                │   │   │   ├── simulator_buffers.h
                │   │   │   ├── test_utils.cc
                │   │   │   ├── test_utils.h
                │   │   │   ├── unittest.proto
                │   │   │   ├── wav_based_simulator.cc
                │   │   │   └── wav_based_simulator.h
                │   │   ├── three_band_filter_bank.cc
                │   │   ├── three_band_filter_bank.h
                │   │   ├── transient/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── click_annotate.cc
                │   │   │   ├── common.h
                │   │   │   ├── daubechies_8_wavelet_coeffs.h
                │   │   │   ├── dyadic_decimator.h
                │   │   │   ├── dyadic_decimator_unittest.cc
                │   │   │   ├── file_utils.cc
                │   │   │   ├── file_utils.h
                │   │   │   ├── file_utils_unittest.cc
                │   │   │   ├── moving_moments.cc
                │   │   │   ├── moving_moments.h
                │   │   │   ├── moving_moments_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── plotDetection.m
                │   │   │   │   ├── readDetection.m
                │   │   │   │   └── readPCM.m
                │   │   │   ├── transient_detector.cc
                │   │   │   ├── transient_detector.h
                │   │   │   ├── transient_detector_unittest.cc
                │   │   │   ├── transient_suppression_test.cc
                │   │   │   ├── transient_suppressor.h
                │   │   │   ├── transient_suppressor_impl.cc
                │   │   │   ├── transient_suppressor_impl.h
                │   │   │   ├── transient_suppressor_unittest.cc
                │   │   │   ├── windows_private.h
                │   │   │   ├── wpd_node.cc
                │   │   │   ├── wpd_node.h
                │   │   │   ├── wpd_node_unittest.cc
                │   │   │   ├── wpd_tree.cc
                │   │   │   ├── wpd_tree.h
                │   │   │   └── wpd_tree_unittest.cc
                │   │   ├── typing_detection.cc
                │   │   ├── typing_detection.h
                │   │   ├── utility/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── cascaded_biquad_filter.cc
                │   │   │   ├── cascaded_biquad_filter.h
                │   │   │   ├── cascaded_biquad_filter_unittest.cc
                │   │   │   ├── delay_estimator.cc
                │   │   │   ├── delay_estimator.h
                │   │   │   ├── delay_estimator_internal.h
                │   │   │   ├── delay_estimator_unittest.cc
                │   │   │   ├── delay_estimator_wrapper.cc
                │   │   │   ├── delay_estimator_wrapper.h
                │   │   │   ├── pffft_wrapper.cc
                │   │   │   ├── pffft_wrapper.h
                │   │   │   └── pffft_wrapper_unittest.cc
                │   │   ├── vad/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── common.h
                │   │   │   ├── gmm.cc
                │   │   │   ├── gmm.h
                │   │   │   ├── gmm_unittest.cc
                │   │   │   ├── noise_gmm_tables.h
                │   │   │   ├── pitch_based_vad.cc
                │   │   │   ├── pitch_based_vad.h
                │   │   │   ├── pitch_based_vad_unittest.cc
                │   │   │   ├── pitch_internal.cc
                │   │   │   ├── pitch_internal.h
                │   │   │   ├── pitch_internal_unittest.cc
                │   │   │   ├── pole_zero_filter.cc
                │   │   │   ├── pole_zero_filter.h
                │   │   │   ├── pole_zero_filter_unittest.cc
                │   │   │   ├── standalone_vad.cc
                │   │   │   ├── standalone_vad.h
                │   │   │   ├── standalone_vad_unittest.cc
                │   │   │   ├── vad_audio_proc.cc
                │   │   │   ├── vad_audio_proc.h
                │   │   │   ├── vad_audio_proc_internal.h
                │   │   │   ├── vad_audio_proc_unittest.cc
                │   │   │   ├── vad_circular_buffer.cc
                │   │   │   ├── vad_circular_buffer.h
                │   │   │   ├── vad_circular_buffer_unittest.cc
                │   │   │   ├── voice_activity_detector.cc
                │   │   │   ├── voice_activity_detector.h
                │   │   │   ├── voice_activity_detector_unittest.cc
                │   │   │   └── voice_gmm_tables.h
                │   │   ├── voice_detection.cc
                │   │   ├── voice_detection.h
                │   │   └── voice_detection_unittest.cc
                │   ├── congestion_controller/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── goog_cc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── acknowledged_bitrate_estimator.cc
                │   │   │   ├── acknowledged_bitrate_estimator.h
                │   │   │   ├── acknowledged_bitrate_estimator_interface.cc
                │   │   │   ├── acknowledged_bitrate_estimator_interface.h
                │   │   │   ├── acknowledged_bitrate_estimator_unittest.cc
                │   │   │   ├── alr_detector.cc
                │   │   │   ├── alr_detector.h
                │   │   │   ├── alr_detector_unittest.cc
                │   │   │   ├── bitrate_estimator.cc
                │   │   │   ├── bitrate_estimator.h
                │   │   │   ├── congestion_window_pushback_controller.cc
                │   │   │   ├── congestion_window_pushback_controller.h
                │   │   │   ├── congestion_window_pushback_controller_unittest.cc
                │   │   │   ├── delay_based_bwe.cc
                │   │   │   ├── delay_based_bwe.h
                │   │   │   ├── delay_based_bwe_unittest.cc
                │   │   │   ├── delay_based_bwe_unittest_helper.cc
                │   │   │   ├── delay_based_bwe_unittest_helper.h
                │   │   │   ├── delay_increase_detector_interface.h
                │   │   │   ├── goog_cc_network_control.cc
                │   │   │   ├── goog_cc_network_control.h
                │   │   │   ├── goog_cc_network_control_unittest.cc
                │   │   │   ├── inter_arrival_delta.cc
                │   │   │   ├── inter_arrival_delta.h
                │   │   │   ├── link_capacity_estimator.cc
                │   │   │   ├── link_capacity_estimator.h
                │   │   │   ├── loss_based_bandwidth_estimation.cc
                │   │   │   ├── loss_based_bandwidth_estimation.h
                │   │   │   ├── probe_bitrate_estimator.cc
                │   │   │   ├── probe_bitrate_estimator.h
                │   │   │   ├── probe_bitrate_estimator_unittest.cc
                │   │   │   ├── probe_controller.cc
                │   │   │   ├── probe_controller.h
                │   │   │   ├── probe_controller_unittest.cc
                │   │   │   ├── robust_throughput_estimator.cc
                │   │   │   ├── robust_throughput_estimator.h
                │   │   │   ├── robust_throughput_estimator_unittest.cc
                │   │   │   ├── send_side_bandwidth_estimation.cc
                │   │   │   ├── send_side_bandwidth_estimation.h
                │   │   │   ├── send_side_bandwidth_estimation_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── goog_cc_printer.cc
                │   │   │   │   └── goog_cc_printer.h
                │   │   │   ├── trendline_estimator.cc
                │   │   │   ├── trendline_estimator.h
                │   │   │   └── trendline_estimator_unittest.cc
                │   │   ├── include/
                │   │   │   └── receive_side_congestion_controller.h
                │   │   ├── pcc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── bitrate_controller.cc
                │   │   │   ├── bitrate_controller.h
                │   │   │   ├── bitrate_controller_unittest.cc
                │   │   │   ├── monitor_interval.cc
                │   │   │   ├── monitor_interval.h
                │   │   │   ├── monitor_interval_unittest.cc
                │   │   │   ├── pcc_factory.cc
                │   │   │   ├── pcc_factory.h
                │   │   │   ├── pcc_network_controller.cc
                │   │   │   ├── pcc_network_controller.h
                │   │   │   ├── pcc_network_controller_unittest.cc
                │   │   │   ├── rtt_tracker.cc
                │   │   │   ├── rtt_tracker.h
                │   │   │   ├── rtt_tracker_unittest.cc
                │   │   │   ├── utility_function.cc
                │   │   │   ├── utility_function.h
                │   │   │   └── utility_function_unittest.cc
                │   │   ├── receive_side_congestion_controller.cc
                │   │   ├── receive_side_congestion_controller_unittest.cc
                │   │   └── rtp/
                │   │       ├── BUILD.gn
                │   │       ├── control_handler.cc
                │   │       ├── control_handler.h
                │   │       ├── transport_feedback_adapter.cc
                │   │       ├── transport_feedback_adapter.h
                │   │       ├── transport_feedback_adapter_unittest.cc
                │   │       ├── transport_feedback_demuxer.cc
                │   │       ├── transport_feedback_demuxer.h
                │   │       └── transport_feedback_demuxer_unittest.cc
                │   ├── desktop_capture/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── blank_detector_desktop_capturer_wrapper.cc
                │   │   ├── blank_detector_desktop_capturer_wrapper.h
                │   │   ├── blank_detector_desktop_capturer_wrapper_unittest.cc
                │   │   ├── cropped_desktop_frame.cc
                │   │   ├── cropped_desktop_frame.h
                │   │   ├── cropped_desktop_frame_unittest.cc
                │   │   ├── cropping_window_capturer.cc
                │   │   ├── cropping_window_capturer.h
                │   │   ├── cropping_window_capturer_win.cc
                │   │   ├── desktop_and_cursor_composer.cc
                │   │   ├── desktop_and_cursor_composer.h
                │   │   ├── desktop_and_cursor_composer_unittest.cc
                │   │   ├── desktop_capture_options.cc
                │   │   ├── desktop_capture_options.h
                │   │   ├── desktop_capture_types.h
                │   │   ├── desktop_capturer.cc
                │   │   ├── desktop_capturer.h
                │   │   ├── desktop_capturer_differ_wrapper.cc
                │   │   ├── desktop_capturer_differ_wrapper.h
                │   │   ├── desktop_capturer_differ_wrapper_unittest.cc
                │   │   ├── desktop_capturer_wrapper.cc
                │   │   ├── desktop_capturer_wrapper.h
                │   │   ├── desktop_frame.cc
                │   │   ├── desktop_frame.h
                │   │   ├── desktop_frame_generator.cc
                │   │   ├── desktop_frame_generator.h
                │   │   ├── desktop_frame_rotation.cc
                │   │   ├── desktop_frame_rotation.h
                │   │   ├── desktop_frame_rotation_unittest.cc
                │   │   ├── desktop_frame_unittest.cc
                │   │   ├── desktop_frame_win.cc
                │   │   ├── desktop_frame_win.h
                │   │   ├── desktop_geometry.cc
                │   │   ├── desktop_geometry.h
                │   │   ├── desktop_geometry_unittest.cc
                │   │   ├── desktop_region.cc
                │   │   ├── desktop_region.h
                │   │   ├── desktop_region_unittest.cc
                │   │   ├── differ_block.cc
                │   │   ├── differ_block.h
                │   │   ├── differ_block_unittest.cc
                │   │   ├── differ_vector_sse2.cc
                │   │   ├── differ_vector_sse2.h
                │   │   ├── fake_desktop_capturer.cc
                │   │   ├── fake_desktop_capturer.h
                │   │   ├── fallback_desktop_capturer_wrapper.cc
                │   │   ├── fallback_desktop_capturer_wrapper.h
                │   │   ├── fallback_desktop_capturer_wrapper_unittest.cc
                │   │   ├── full_screen_application_handler.cc
                │   │   ├── full_screen_application_handler.h
                │   │   ├── full_screen_window_detector.cc
                │   │   ├── full_screen_window_detector.h
                │   │   ├── linux/
                │   │   │   ├── base_capturer_pipewire.cc
                │   │   │   ├── base_capturer_pipewire.h
                │   │   │   ├── mouse_cursor_monitor_x11.cc
                │   │   │   ├── mouse_cursor_monitor_x11.h
                │   │   │   ├── pipewire02.sigs
                │   │   │   ├── pipewire03.sigs
                │   │   │   ├── pipewire_stub_header.fragment
                │   │   │   ├── screen_capturer_x11.cc
                │   │   │   ├── screen_capturer_x11.h
                │   │   │   ├── shared_x_display.cc
                │   │   │   ├── shared_x_display.h
                │   │   │   ├── window_capturer_x11.cc
                │   │   │   ├── window_capturer_x11.h
                │   │   │   ├── window_finder_x11.cc
                │   │   │   ├── window_finder_x11.h
                │   │   │   ├── window_list_utils.cc
                │   │   │   ├── window_list_utils.h
                │   │   │   ├── x_atom_cache.cc
                │   │   │   ├── x_atom_cache.h
                │   │   │   ├── x_error_trap.cc
                │   │   │   ├── x_error_trap.h
                │   │   │   ├── x_server_pixel_buffer.cc
                │   │   │   ├── x_server_pixel_buffer.h
                │   │   │   ├── x_window_property.cc
                │   │   │   └── x_window_property.h
                │   │   ├── mac/
                │   │   │   ├── desktop_configuration.h
                │   │   │   ├── desktop_configuration.mm
                │   │   │   ├── desktop_configuration_monitor.cc
                │   │   │   ├── desktop_configuration_monitor.h
                │   │   │   ├── desktop_frame_cgimage.h
                │   │   │   ├── desktop_frame_cgimage.mm
                │   │   │   ├── desktop_frame_iosurface.h
                │   │   │   ├── desktop_frame_iosurface.mm
                │   │   │   ├── desktop_frame_provider.h
                │   │   │   ├── desktop_frame_provider.mm
                │   │   │   ├── full_screen_mac_application_handler.cc
                │   │   │   ├── full_screen_mac_application_handler.h
                │   │   │   ├── screen_capturer_mac.h
                │   │   │   ├── screen_capturer_mac.mm
                │   │   │   ├── window_list_utils.cc
                │   │   │   └── window_list_utils.h
                │   │   ├── mock_desktop_capturer_callback.cc
                │   │   ├── mock_desktop_capturer_callback.h
                │   │   ├── mouse_cursor.cc
                │   │   ├── mouse_cursor.h
                │   │   ├── mouse_cursor_monitor.h
                │   │   ├── mouse_cursor_monitor_linux.cc
                │   │   ├── mouse_cursor_monitor_mac.mm
                │   │   ├── mouse_cursor_monitor_null.cc
                │   │   ├── mouse_cursor_monitor_unittest.cc
                │   │   ├── mouse_cursor_monitor_win.cc
                │   │   ├── resolution_tracker.cc
                │   │   ├── resolution_tracker.h
                │   │   ├── rgba_color.cc
                │   │   ├── rgba_color.h
                │   │   ├── rgba_color_unittest.cc
                │   │   ├── screen_capture_frame_queue.h
                │   │   ├── screen_capturer_darwin.mm
                │   │   ├── screen_capturer_helper.cc
                │   │   ├── screen_capturer_helper.h
                │   │   ├── screen_capturer_helper_unittest.cc
                │   │   ├── screen_capturer_integration_test.cc
                │   │   ├── screen_capturer_linux.cc
                │   │   ├── screen_capturer_mac_unittest.cc
                │   │   ├── screen_capturer_null.cc
                │   │   ├── screen_capturer_unittest.cc
                │   │   ├── screen_capturer_win.cc
                │   │   ├── screen_drawer.cc
                │   │   ├── screen_drawer.h
                │   │   ├── screen_drawer_linux.cc
                │   │   ├── screen_drawer_lock_posix.cc
                │   │   ├── screen_drawer_lock_posix.h
                │   │   ├── screen_drawer_mac.cc
                │   │   ├── screen_drawer_unittest.cc
                │   │   ├── screen_drawer_win.cc
                │   │   ├── shared_desktop_frame.cc
                │   │   ├── shared_desktop_frame.h
                │   │   ├── shared_memory.cc
                │   │   ├── shared_memory.h
                │   │   ├── test_utils.cc
                │   │   ├── test_utils.h
                │   │   ├── test_utils_unittest.cc
                │   │   ├── win/
                │   │   │   ├── cursor.cc
                │   │   │   ├── cursor.h
                │   │   │   ├── cursor_test_data/
                │   │   │   │   ├── 1_24bpp.cur
                │   │   │   │   ├── 1_32bpp.cur
                │   │   │   │   ├── 1_8bpp.cur
                │   │   │   │   ├── 2_1bpp.cur
                │   │   │   │   ├── 2_32bpp.cur
                │   │   │   │   ├── 3_32bpp.cur
                │   │   │   │   └── 3_4bpp.cur
                │   │   │   ├── cursor_unittest.cc
                │   │   │   ├── cursor_unittest_resources.h
                │   │   │   ├── cursor_unittest_resources.rc
                │   │   │   ├── d3d_device.cc
                │   │   │   ├── d3d_device.h
                │   │   │   ├── desktop.cc
                │   │   │   ├── desktop.h
                │   │   │   ├── desktop_capture_utils.cc
                │   │   │   ├── desktop_capture_utils.h
                │   │   │   ├── display_configuration_monitor.cc
                │   │   │   ├── display_configuration_monitor.h
                │   │   │   ├── dxgi_adapter_duplicator.cc
                │   │   │   ├── dxgi_adapter_duplicator.h
                │   │   │   ├── dxgi_context.cc
                │   │   │   ├── dxgi_context.h
                │   │   │   ├── dxgi_duplicator_controller.cc
                │   │   │   ├── dxgi_duplicator_controller.h
                │   │   │   ├── dxgi_frame.cc
                │   │   │   ├── dxgi_frame.h
                │   │   │   ├── dxgi_output_duplicator.cc
                │   │   │   ├── dxgi_output_duplicator.h
                │   │   │   ├── dxgi_texture.cc
                │   │   │   ├── dxgi_texture.h
                │   │   │   ├── dxgi_texture_mapping.cc
                │   │   │   ├── dxgi_texture_mapping.h
                │   │   │   ├── dxgi_texture_staging.cc
                │   │   │   ├── dxgi_texture_staging.h
                │   │   │   ├── full_screen_win_application_handler.cc
                │   │   │   ├── full_screen_win_application_handler.h
                │   │   │   ├── scoped_gdi_object.h
                │   │   │   ├── scoped_thread_desktop.cc
                │   │   │   ├── scoped_thread_desktop.h
                │   │   │   ├── screen_capture_utils.cc
                │   │   │   ├── screen_capture_utils.h
                │   │   │   ├── screen_capture_utils_unittest.cc
                │   │   │   ├── screen_capturer_win_directx.cc
                │   │   │   ├── screen_capturer_win_directx.h
                │   │   │   ├── screen_capturer_win_directx_unittest.cc
                │   │   │   ├── screen_capturer_win_gdi.cc
                │   │   │   ├── screen_capturer_win_gdi.h
                │   │   │   ├── screen_capturer_win_magnifier.cc
                │   │   │   ├── screen_capturer_win_magnifier.h
                │   │   │   ├── selected_window_context.cc
                │   │   │   ├── selected_window_context.h
                │   │   │   ├── test_support/
                │   │   │   │   ├── test_window.cc
                │   │   │   │   └── test_window.h
                │   │   │   ├── wgc_capture_session.cc
                │   │   │   ├── wgc_capture_session.h
                │   │   │   ├── wgc_capture_source.cc
                │   │   │   ├── wgc_capture_source.h
                │   │   │   ├── wgc_capturer_win.cc
                │   │   │   ├── wgc_capturer_win.h
                │   │   │   ├── wgc_capturer_win_unittest.cc
                │   │   │   ├── wgc_desktop_frame.cc
                │   │   │   ├── wgc_desktop_frame.h
                │   │   │   ├── window_capture_utils.cc
                │   │   │   ├── window_capture_utils.h
                │   │   │   ├── window_capture_utils_unittest.cc
                │   │   │   ├── window_capturer_win_gdi.cc
                │   │   │   └── window_capturer_win_gdi.h
                │   │   ├── window_capturer_linux.cc
                │   │   ├── window_capturer_mac.mm
                │   │   ├── window_capturer_null.cc
                │   │   ├── window_capturer_unittest.cc
                │   │   ├── window_capturer_win.cc
                │   │   ├── window_finder.cc
                │   │   ├── window_finder.h
                │   │   ├── window_finder_mac.h
                │   │   ├── window_finder_mac.mm
                │   │   ├── window_finder_unittest.cc
                │   │   ├── window_finder_win.cc
                │   │   └── window_finder_win.h
                │   ├── include/
                │   │   ├── module.h
                │   │   ├── module_common_types.h
                │   │   ├── module_common_types_public.h
                │   │   └── module_fec_types.h
                │   ├── module_common_types_unittest.cc
                │   ├── pacing/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── bitrate_prober.cc
                │   │   ├── bitrate_prober.h
                │   │   ├── bitrate_prober_unittest.cc
                │   │   ├── interval_budget.cc
                │   │   ├── interval_budget.h
                │   │   ├── interval_budget_unittest.cc
                │   │   ├── paced_sender.cc
                │   │   ├── paced_sender.h
                │   │   ├── paced_sender_unittest.cc
                │   │   ├── pacing_controller.cc
                │   │   ├── pacing_controller.h
                │   │   ├── pacing_controller_unittest.cc
                │   │   ├── packet_router.cc
                │   │   ├── packet_router.h
                │   │   ├── packet_router_unittest.cc
                │   │   ├── round_robin_packet_queue.cc
                │   │   ├── round_robin_packet_queue.h
                │   │   ├── rtp_packet_pacer.h
                │   │   ├── task_queue_paced_sender.cc
                │   │   ├── task_queue_paced_sender.h
                │   │   └── task_queue_paced_sender_unittest.cc
                │   ├── remote_bitrate_estimator/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── aimd_rate_control.cc
                │   │   ├── aimd_rate_control.h
                │   │   ├── aimd_rate_control_unittest.cc
                │   │   ├── bwe_defines.cc
                │   │   ├── include/
                │   │   │   ├── bwe_defines.h
                │   │   │   └── remote_bitrate_estimator.h
                │   │   ├── inter_arrival.cc
                │   │   ├── inter_arrival.h
                │   │   ├── inter_arrival_unittest.cc
                │   │   ├── overuse_detector.cc
                │   │   ├── overuse_detector.h
                │   │   ├── overuse_detector_unittest.cc
                │   │   ├── overuse_estimator.cc
                │   │   ├── overuse_estimator.h
                │   │   ├── remote_bitrate_estimator_abs_send_time.cc
                │   │   ├── remote_bitrate_estimator_abs_send_time.h
                │   │   ├── remote_bitrate_estimator_abs_send_time_unittest.cc
                │   │   ├── remote_bitrate_estimator_single_stream.cc
                │   │   ├── remote_bitrate_estimator_single_stream.h
                │   │   ├── remote_bitrate_estimator_single_stream_unittest.cc
                │   │   ├── remote_bitrate_estimator_unittest_helper.cc
                │   │   ├── remote_bitrate_estimator_unittest_helper.h
                │   │   ├── remote_estimator_proxy.cc
                │   │   ├── remote_estimator_proxy.h
                │   │   ├── remote_estimator_proxy_unittest.cc
                │   │   ├── test/
                │   │   │   ├── bwe_test_logging.cc
                │   │   │   └── bwe_test_logging.h
                │   │   └── tools/
                │   │       ├── bwe_rtp.cc
                │   │       ├── bwe_rtp.h
                │   │       └── rtp_to_text.cc
                │   ├── rtp_rtcp/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── include/
                │   │   │   ├── flexfec_receiver.h
                │   │   │   ├── flexfec_sender.h
                │   │   │   ├── receive_statistics.h
                │   │   │   ├── remote_ntp_time_estimator.h
                │   │   │   ├── report_block_data.cc
                │   │   │   ├── report_block_data.h
                │   │   │   ├── rtcp_statistics.h
                │   │   │   ├── rtp_cvo.h
                │   │   │   ├── rtp_header_extension_map.h
                │   │   │   ├── rtp_packet_sender.h
                │   │   │   ├── rtp_rtcp.h
                │   │   │   ├── rtp_rtcp_defines.cc
                │   │   │   ├── rtp_rtcp_defines.h
                │   │   │   └── ulpfec_receiver.h
                │   │   ├── mocks/
                │   │   │   ├── mock_recovered_packet_receiver.h
                │   │   │   ├── mock_rtcp_bandwidth_observer.h
                │   │   │   ├── mock_rtcp_rtt_stats.h
                │   │   │ 

================================================
FILE CONTENTS
================================================

================================================
FILE: .clang-format
================================================
DisableFormat: true
SortIncludes: false


================================================
FILE: .github/FUNDING.yml
================================================
github: MarshalX

================================================
FILE: .github/workflows/build_and_deploy_pytgcalls_documentation.yaml
================================================
name: Build and deploy pytgcalls documentation to GitHub Pages
on:
  push:
    branches:
      - main
    paths:
      - '.github/workflows/build_and_deploy_pytgcalls_documentation.yaml'
      - 'pytgcalls/**'
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
      - uses: actions/setup-python@v2
        with:
          python-version: '3.6'
          architecture: 'x64'
      - name: Install and Build
        run: |
          python -m pip install --upgrade pip
          pip install tgcalls pdoc3 pyrogram telethon
          pdoc pytgcalls/pytgcalls --html --force --template-dir pytgcalls/pdoc
          mv html/pytgcalls/* html
      - name: Deploy
        uses: JamesIves/github-pages-deploy-action@4.1.0
        with:
          branch: gh-pages
          folder: html


================================================
FILE: .github/workflows/build_and_publish_linux_python_wheels_for_many_versions.yaml
================================================
name: Build and publish wheels for Linux and many Python versions
on:
  push:
    branches:
      - main
      - pypi-dev
    paths:
      - '.github/workflows/build_and_publish_linux_python_wheels_for_many_versions.yaml'
      - 'setup.py'
      - 'CMakeLists.txt'
      - 'tgcalls/**'
jobs:
  build_wheels_for_linux:
    name: Build and publish wheels for Linux
    runs-on: ubuntu-latest
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Build for x86_64
        run: |
          docker run --rm \
            --volume "${GITHUB_WORKSPACE}":/github/workspace:rw \
            --workdir=/github/workspace \
            -e GITHUB_WORKSPACE=/github/workspace \
            ghcr.io/marshalx/tgcalls/manylinux2014_x86_64-webrtc-entrypoint:latest \
            "cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311" \
            "manylinux2014_x86_64" \
            ${{ secrets.PYPI_USERNAME }} \
            ${{ secrets.PYPI_PASSWORD }}
      - name: Build for aarch64
        run: |
            # Enable docker daemon support for --platform parameter
            echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json > /dev/null
            sudo systemctl restart docker

            # Configure qemu-user-static
            docker run --rm --tty \
              --security-opt apparmor:unconfined \
              --cap-add SYS_ADMIN \
              multiarch/qemu-user-static --reset -p yes

            docker run --rm \
              --security-opt apparmor:unconfined \
              --cap-add SYS_ADMIN \
              --device /dev/fuse \
              --volume /sys \
              --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
              --volume $GITHUB_WORKSPACE:/github/workspace \
              --workdir $GITHUB_WORKSPACE \
              --platform "linux/arm64" \
              ghcr.io/marshalx/tgcalls/manylinux2014_aarch64-webrtc-entrypoint:latest \
              "cp37-cp37m cp38-cp38 cp39-cp39 cp310-cp310 cp311-cp311" \
              "manylinux2014_aarch64" \
              ${{ secrets.PYPI_USERNAME }} \
              ${{ secrets.PYPI_PASSWORD }}


================================================
FILE: .github/workflows/build_and_publish_macos_wheels_for_many_python_versions.yaml
================================================
name: Build and publish wheels for macOS and many Python versions
on:
  push:
    branches:
      - main
      - pypi-dev
    paths:
      - '.github/workflows/build_and_publish_macos_wheels_for_many_python_versions.yaml'
      - 'tgcalls/third_party/webrtc/**'
      - 'tgcalls/**'
      - 'CMakeLists.txt'
      - 'setup.py'
jobs:

  build_wheels_for_macos:
    name: Build and publish wheels for macOS
    runs-on: macos-latest

    strategy:
      matrix:
        arch: [
          "x86_64",
#          "arm64"
        ]

    env:
      MIN_VER: "-mmacosx-version-min=10.12"
      UNGUARDED: "-Werror=unguarded-availability-new"
      PREFIX: "/usr/local/macos"
      BUILD_WHEELS: "true"
      UPLOAD_WHEELS: "true"
      GLOBAL_CACHE_KEY: "4"
      WEBRTC_CACHE_KEY: "2"

    steps:
      - name: Get repository name.
        run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - name: Clone.
        uses: actions/checkout@v2
        with:
          submodules: recursive
          path: ${{ env.REPO_NAME }}

      - uses: actions/setup-python@v1
        with:
          python-version: 3.7

      - name: First set up.
        run: |
          brew install automake cmake git libvpx ninja opus yasm libtool

          # Disable spotlight.
          sudo mdutil -a -i off

          sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

          echo $MIN_VER >> CACHE_KEY.txt
          echo $PREFIX >> CACHE_KEY.txt
          echo $GLOBAL_CACHE_KEY >> CACHE_KEY.txt
          echo "$GITHUB_WORKSPACE" >> CACHE_KEY.txt
          echo "CACHE_KEY=`md5 -q CACHE_KEY.txt`" >> $GITHUB_ENV

          mkdir -p Libraries/macos
          cd Libraries/macos
          echo "LibrariesPath=`pwd`" >> $GITHUB_ENV

      - name: Patches.
        run: |
          cd $LibrariesPath
          git clone https://github.com/desktop-app/patches.git
          cd patches
          git checkout e052c49

      - name: MozJPEG.
        run: |
          cd $LibrariesPath

          git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git
          cd mozjpeg
          cmake -B build . \
              -DCMAKE_BUILD_TYPE=Release \
              -DCMAKE_INSTALL_PREFIX=$PREFIX \
              -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.12 \
              -DWITH_JPEG8=ON \
              -DPNG_SUPPORTED=OFF
          cmake --build build -j$(nproc)
          sudo cmake --install build

      - name: OpenSSL ARM cache.
        if: matrix.arch == 'arm64'
        id: cache-openssl-arm
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/openssl_1_1_1
          key: ${{ runner.OS }}-openssl-arm-${{ env.CACHE_KEY }}
      - name: OpenSSL ARM.
        if: matrix.arch == 'arm64' && steps.cache-openssl-arm.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          git clone https://github.com/openssl/openssl openssl_1_1_1
          cd openssl_1_1_1
          git checkout OpenSSL_1_1_1-stable
          ./Configure --prefix=$PREFIX no-tests darwin64-arm64-cc -static $MIN_VER
          make build_libs -j$(nproc)

      - name: OpenSSL cache.
        if: matrix.arch == 'x86_64'
        id: cache-openssl
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/openssl_1_1_1
          key: ${{ runner.OS }}-openssl-${{ env.CACHE_KEY }}
      - name: OpenSSL.
        if: matrix.arch == 'x86_64' && steps.cache-openssl.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          git clone https://github.com/openssl/openssl openssl_1_1_1
          cd openssl_1_1_1
          git checkout OpenSSL_1_1_1-stable
          ./Configure --prefix=$PREFIX no-tests darwin64-x86_64-cc -static $MIN_VER
          make build_libs -j$(nproc)

      - name: Opus cache.
        id: cache-opus
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/opus-cache
          key: ${{ runner.OS }}-opus-${{ env.CACHE_KEY }}
      - name: Opus.
        if: steps.cache-opus.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          git clone https://github.com/xiph/opus
          cd opus
          git checkout v1.3
          ./autogen.sh
          CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --prefix=$PREFIX
          make -j$(nproc)
          sudo make DESTDIR="$LibrariesPath/opus-cache" install
      - name: Opus install.
        run: |
          cd $LibrariesPath
          sudo cp -R opus-cache/. /

      - name: FFmpeg cache.
        id: cache-ffmpeg
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/ffmpeg-cache
          key: ${{ runner.OS }}-ffmpeg-${{ env.CACHE_KEY }}
      - name: FFmpeg.
        if: steps.cache-ffmpeg.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
          cd ffmpeg
          git checkout release/4.4
          PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig
          cp ../patches/macos_yasm_wrap.sh ./

          ./configure --prefix=$LibrariesPath/ffmpeg-cache \
          --extra-cflags="$MIN_VER $UNGUARDED" \
          --extra-cxxflags="$MIN_VER $UNGUARDED" \
          --extra-ldflags="$MIN_VER" \
          --x86asmexe=`pwd`/macos_yasm_wrap.sh \
          --enable-protocol=file \
          --enable-libopus \
          --disable-programs \
          --disable-doc \
          --disable-network \
          --disable-everything \
          --enable-hwaccel=h264_videotoolbox \
          --enable-hwaccel=hevc_videotoolbox \
          --enable-hwaccel=mpeg1_videotoolbox \
          --enable-hwaccel=mpeg2_videotoolbox \
          --enable-hwaccel=mpeg4_videotoolbox \
          --enable-decoder=aac \
          --enable-decoder=aac_at \
          --enable-decoder=aac_fixed \
          --enable-decoder=aac_latm \
          --enable-decoder=aasc \
          --enable-decoder=alac \
          --enable-decoder=alac_at \
          --enable-decoder=flac \
          --enable-decoder=gif \
          --enable-decoder=h264 \
          --enable-decoder=hevc \
          --enable-decoder=mp1 \
          --enable-decoder=mp1float \
          --enable-decoder=mp2 \
          --enable-decoder=mp2float \
          --enable-decoder=mp3 \
          --enable-decoder=mp3adu \
          --enable-decoder=mp3adufloat \
          --enable-decoder=mp3float \
          --enable-decoder=mp3on4 \
          --enable-decoder=mp3on4float \
          --enable-decoder=mpeg4 \
          --enable-decoder=msmpeg4v2 \
          --enable-decoder=msmpeg4v3 \
          --enable-decoder=opus \
          --enable-decoder=pcm_alaw \
          --enable-decoder=pcm_alaw_at \
          --enable-decoder=pcm_f32be \
          --enable-decoder=pcm_f32le \
          --enable-decoder=pcm_f64be \
          --enable-decoder=pcm_f64le \
          --enable-decoder=pcm_lxf \
          --enable-decoder=pcm_mulaw \
          --enable-decoder=pcm_mulaw_at \
          --enable-decoder=pcm_s16be \
          --enable-decoder=pcm_s16be_planar \
          --enable-decoder=pcm_s16le \
          --enable-decoder=pcm_s16le_planar \
          --enable-decoder=pcm_s24be \
          --enable-decoder=pcm_s24daud \
          --enable-decoder=pcm_s24le \
          --enable-decoder=pcm_s24le_planar \
          --enable-decoder=pcm_s32be \
          --enable-decoder=pcm_s32le \
          --enable-decoder=pcm_s32le_planar \
          --enable-decoder=pcm_s64be \
          --enable-decoder=pcm_s64le \
          --enable-decoder=pcm_s8 \
          --enable-decoder=pcm_s8_planar \
          --enable-decoder=pcm_u16be \
          --enable-decoder=pcm_u16le \
          --enable-decoder=pcm_u24be \
          --enable-decoder=pcm_u24le \
          --enable-decoder=pcm_u32be \
          --enable-decoder=pcm_u32le \
          --enable-decoder=pcm_u8 \
          --enable-decoder=pcm_zork \
          --enable-decoder=vorbis \
          --enable-decoder=wavpack \
          --enable-decoder=wmalossless \
          --enable-decoder=wmapro \
          --enable-decoder=wmav1 \
          --enable-decoder=wmav2 \
          --enable-decoder=wmavoice \
          --enable-encoder=libopus \
          --enable-parser=aac \
          --enable-parser=aac_latm \
          --enable-parser=flac \
          --enable-parser=h264 \
          --enable-parser=hevc \
          --enable-parser=mpeg4video \
          --enable-parser=mpegaudio \
          --enable-parser=opus \
          --enable-parser=vorbis \
          --enable-demuxer=aac \
          --enable-demuxer=flac \
          --enable-demuxer=gif \
          --enable-demuxer=h264 \
          --enable-demuxer=hevc \
          --enable-demuxer=m4v \
          --enable-demuxer=mov \
          --enable-demuxer=mp3 \
          --enable-demuxer=ogg \
          --enable-demuxer=wav \
          --enable-muxer=ogg \
          --enable-muxer=opus

          make -j$(nproc)
          sudo make install
      - name: FFmpeg install.
        run: |
          cd $LibrariesPath
          # List of files from cmake/external/ffmpeg/CMakeLists.txt.
          copyLib() {
            mkdir -p ffmpeg/$1
            \cp -fR ffmpeg-cache/lib/$1.a ffmpeg/$1/$1.a
          }
          copyLib libavformat
          copyLib libavcodec
          copyLib libswresample
          copyLib libswscale
          copyLib libavutil
          sudo cp -R ffmpeg-cache/. $PREFIX
          sudo cp -R ffmpeg-cache/include/. ffmpeg/

      - name: WebRTC ARM cache.
        if: matrix.arch == 'arm64'
        id: cache-webrtc-arm
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/tg_owt
          key: ${{ runner.OS }}-webrtc-arm-${{ env.CACHE_KEY }}-${{ env.WEBRTC_CACHE_KEY }}
      - name: WebRTC ARM.
        if: matrix.arch == 'arm64' && steps.cache-webrtc-arm.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          cp -R ../../tgcalls/tgcalls/third_party/webrtc tg_owt

          cd tg_owt
          mkdir -p out/Release
          cd out/Release

          cmake -G Ninja \
              -DCMAKE_BUILD_TYPE=Release \
              -DTG_OWT_SPECIAL_TARGET=mac \
              -DTG_OWT_LIBJPEG_INCLUDE_PATH=$PREFIX/include \
              -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \
              -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \
              -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../..
          ninja

      - name: WebRTC cache.
        if: matrix.arch == 'x86_64'
        id: cache-webrtc
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/tg_owt
          key: ${{ runner.OS }}-webrtc-${{ env.CACHE_KEY }}-${{ env.WEBRTC_CACHE_KEY }}
      - name: WebRTC.
        if: matrix.arch == 'x86_64' && steps.cache-webrtc.outputs.cache-hit != 'true'
        run: |
          cd $LibrariesPath

          cp -R ../../tgcalls/tgcalls/third_party/webrtc tg_owt

          cd tg_owt
          mkdir -p out/Release
          cd out/Release

          cmake -G Ninja \
              -DCMAKE_BUILD_TYPE=Release \
              -DTG_OWT_SPECIAL_TARGET=mac \
              -DTG_OWT_LIBJPEG_INCLUDE_PATH=$PREFIX/include \
              -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \
              -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \
              -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../..
          ninja

      - name: Build wheels for M1.
        if: matrix.arch == 'arm64' && env.BUILD_WHEELS == 'true'
        env:
          CIBW_ARCHS_MACOS: "arm64"
          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7"
          CIBW_BUILD: cp3*-*
          CIBW_SKIP: cp35-* cp36-*
          CIBW_ENVIRONMENT: "ROOT_PATH=$(pwd)"
          CIBW_TEST_COMMAND: python -c "import tgcalls; tgcalls.ping()"
        run: |
          pip install cibuildwheel
          cibuildwheel --output-dir dist tgcalls

      - name: Build wheels.
        if: matrix.arch == 'x86_64' && env.BUILD_WHEELS == 'true'
        env:
          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7"
          CIBW_BUILD: cp3*-*
          CIBW_SKIP: cp35-* cp36-*
          CIBW_ENVIRONMENT: "ROOT_PATH=$(pwd)"
          CIBW_TEST_COMMAND: python -c "import tgcalls; tgcalls.ping()"
        run: |
          pip install cibuildwheel
          cibuildwheel --output-dir dist tgcalls

      - name: Upload artifacts.
        uses: actions/upload-artifact@v2
        with:
          name: "tgcalls for macOS (Intel)"
          path: dist/

      - name: Upload wheels to PyPi.
        if: env.UPLOAD_WHEELS == 'true'  && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/pypi-dev')
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
        run: |
          pip install twine
          twine upload dist/*


================================================
FILE: .github/workflows/build_and_publish_win_x32_wheels_for_many_python_versions.yaml
================================================
name: Build and publish wheels for Windows x32 and many Python versions
on:
  push:
    branches:
      - main
      - pypi-dev
    paths:
      - '.github/workflows/build_and_publish_win_x32_wheels_for_many_python_versions.yaml'
      - 'tgcalls/third_party/webrtc/**'
      - 'tgcalls/**'
      - 'CMakeLists.txt'
      - 'setup.py'
jobs:

  build_wheels_for_win:
    name: Build and publish wheels for Windows x32
    runs-on: windows-2019

    env:
      BUILD_WHEELS: "true"
      UPLOAD_WHEELS: "true"
      GLOBAL_CACHE_KEY: "4"
      WEBRTC_CACHE_KEY: "5"

    defaults:
      run:
        shell: cmd
        working-directory: Libraries

    steps:
      - name: Get repository name.
        shell: bash
        working-directory: ${{ github.workspace }}
        run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - uses: ilammy/msvc-dev-cmd@v1.9.0
        name: x86 Native Tools Command Prompt.
        with:
          arch: win32

      - name: Set up environment paths.
        shell: bash
        working-directory: ${{ github.workspace }}
        run: |
          echo "C:\\Strawberry\\perl\\bin\\" >> $GITHUB_PATH
          echo "C:\\Program Files\\NASM\\" >> $GITHUB_PATH
          echo "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Auxiliary\\Build\\" >> $GITHUB_PATH

          mkdir Libraries && cd Libraries
          echo "Convert unix path to win path."
          p=`pwd | sed 's#^/[d]#d:#g' |sed 's#/#\\\\#g'`
          echo "LibrariesPath=$p" >> $GITHUB_ENV

      - name: Save msbuild version.
        run: |
          call vcvars32.bat
          msbuild -version > CACHE_KEY.txt

      - name: Clone.
        uses: actions/checkout@v2
        with:
          submodules: recursive
          path: ${{ env.REPO_NAME }}

      - name: Generate cache key.
        shell: bash
        run: |
          echo $GLOBAL_CACHE_KEY >> CACHE_KEY.txt
          echo "$GITHUB_WORKSPACE" >> CACHE_KEY.txt
          echo "CACHE_KEY=`md5sum CACHE_KEY.txt | awk '{ print $1 }'`" >> $GITHUB_ENV

      - name: Choco installs.
        run: |
          choco install --allow-empty-checksums --no-progress -y yasm
          choco install --no-progress -y nasm jom ninja

      - name: NuGet sources.
        run: |
          nuget sources Disable -Name "Microsoft Visual Studio Offline Packages"
          nuget sources Add -Source https://api.nuget.org/v3/index.json & exit 0

      - name: Patches.
        shell: bash
        run: |
          cd $LibrariesPath
          git clone https://github.com/desktop-app/patches.git
          cd patches
          git checkout 87a2e9ee07

      - name: MozJPEG.
        shell: cmd
        run: |
          git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git
          cd mozjpeg
          cmake . ^
          -G "Visual Studio 16 2019" ^
          -A Win32 ^
          -DWITH_JPEG8=ON ^
          -DPNG_SUPPORTED=OFF
          cmake --build . --config Release

      - name: OpenSSL cache.
        id: cache-openssl
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/openssl_1_1_1
          key: ${{ runner.OS }}-${{ env.CACHE_KEY }}-openssl_1_1_1
      - name: OpenSSL.
        if: steps.cache-openssl.outputs.cache-hit != 'true'
        run: |
          git clone https://github.com/openssl/openssl.git openssl_1_1_1
          cd openssl_1_1_1
          git checkout OpenSSL_1_1_1-stable
          perl Configure no-shared no-tests debug-VC-WIN32
          nmake
          mkdir out32.dbg
          move libcrypto.lib out32.dbg
          move libssl.lib out32.dbg
          move ossl_static.pdb out32.dbg\ossl_static
          nmake clean
          move out32.dbg\ossl_static out32.dbg\ossl_static.pdb
          perl Configure no-shared no-tests VC-WIN32
          nmake
          mkdir out32
          move libcrypto.lib out32
          move libssl.lib out32
          move ossl_static.pdb out32

          rmdir /S /Q test
          rmdir /S /Q .git

      - name: Opus cache.
        id: cache-opus
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/opus
          key: ${{ runner.OS }}-opus-${{ env.CACHE_KEY }}
      - name: Opus.
        if: steps.cache-opus.outputs.cache-hit != 'true'
        run: |
          git clone https://github.com/telegramdesktop/opus.git
          cd opus
          git checkout tdesktop
          cd win32\VS2015
          msbuild -m opus.sln /property:Configuration=Debug /property:Platform="Win32"
          msbuild -m opus.sln /property:Configuration=Release /property:Platform="Win32"

      - name: FFmpeg cache.
        id: cache-ffmpeg
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/ffmpeg
          key: ${{ runner.OS }}-ffmpeg-${{ env.CACHE_KEY }}-${{ hashFiles('**/build_ffmpeg_win.sh') }}
      - name: FFmpeg.
        if: steps.cache-ffmpeg.outputs.cache-hit != 'true'
        run: |
          choco install --no-progress -y msys2

          git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
          cd ffmpeg
          git checkout release/4.4
          set CHERE_INVOKING=enabled_from_arguments
          set MSYS2_PATH_TYPE=inherit
          call c:\tools\msys64\usr\bin\bash --login ../patches/build_ffmpeg_win.sh

          rmdir /S /Q .git

      - name: WebRTC cache.
        id: cache-webrtc
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/tg_owt
          key: ${{ runner.OS }}-webrtc-${{ env.CACHE_KEY }}-${{ env.WEBRTC_CACHE_KEY }}
      - name: WebRTC.
        if: steps.cache-webrtc.outputs.cache-hit != 'true'
        run: |
          xcopy ..\tgcalls\tgcalls\third_party\webrtc tg_owt\ /E/H

          mkdir tg_owt\out\Release
          cd tg_owt\out\Release
          cmake -G Ninja ^
          -DCMAKE_BUILD_TYPE=Release ^
          -DTG_OWT_SPECIAL_TARGET=win ^
          -DBUILD_SHARED_LIBS=OFF ^
          -DCMAKE_POSITION_INDEPENDENT_CODE=ON ^
          -DTG_OWT_USE_PIPEWIRE=OFF ^
          -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^
          -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^
          -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^
          -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ^
          ../..

          ninja

          :: Cleanup.
          cd %LibrariesPath%\tg_owt
          move out\Release\tg_owt.lib tg_owt.lib
          rmdir /S /Q out
          mkdir out\Release
          move tg_owt.lib out\Release\tg_owt.lib

      - name: Build wheels.
        if: env.BUILD_WHEELS == 'true'
        working-directory: ${{ github.workspace }}
        env:
          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7"
          CIBW_ARCHS: "auto32"
          CIBW_BUILD: cp3*-*
          CIBW_SKIP: cp35-* cp36-*
          CIBW_ENVIRONMENT: 'ROOT_PATH="$GITHUB_WORKSPACE"'
          CIBW_TEST_COMMAND: 'python -c "import tgcalls;tgcalls.ping()"'
          CIBW_BEFORE_BUILD: 'call vcvars32.bat'
        run: |
          pip install cibuildwheel
          cibuildwheel --output-dir dist %REPO_NAME%

      - uses: actions/upload-artifact@master
        name: Upload artifact.
        with:
          name: "tgcalls for Windows x32"
          path: dist\

      - name: Upload wheels to PyPi.
        if: env.UPLOAD_WHEELS == 'true'
        working-directory: ${{ github.workspace }}
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
        run: |
          pip install twine
          twine upload dist/*


================================================
FILE: .github/workflows/build_and_publish_win_x64_wheels_for_many_python_versions.yaml
================================================
name: Build and publish wheels for Windows x64 and many Python versions
on:
  push:
    branches:
      - main
      - pypi-dev
    paths:
      - '.github/workflows/build_and_publish_win_x64_wheels_for_many_python_versions.yaml'
      - 'tgcalls/third_party/webrtc/**'
      - 'tgcalls/**'
      - 'CMakeLists.txt'
      - 'setup.py'
jobs:

  build_wheels_for_win:
    name: Build and publish wheels for Windows x64
    runs-on: windows-2019

    env:
      BUILD_WHEELS: "true"
      UPLOAD_WHEELS: "true"
      GLOBAL_CACHE_KEY: "64_1"
      WEBRTC_CACHE_KEY: "64_1"

    defaults:
      run:
        shell: cmd
        working-directory: Libraries\win64

    steps:
      - name: Get repository name.
        shell: bash
        working-directory: ${{ github.workspace }}
        run: echo "REPO_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV

      - uses: ilammy/msvc-dev-cmd@v1.9.0
        name: x64 Native Tools Command Prompt.
        with:
          arch: win64

      - name: Set up environment paths.
        shell: bash
        working-directory: ${{ github.workspace }}
        run: |
          echo "C:\\Strawberry\\perl\\bin\\" >> $GITHUB_PATH
          echo "C:\\Program Files\\NASM\\" >> $GITHUB_PATH
          echo "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise\\VC\\Auxiliary\\Build\\" >> $GITHUB_PATH

          mkdir Libraries && cd Libraries
          mkdir win64 && cd win64
          echo "Convert unix path to win path."
          p=`pwd | sed 's#^/[d]#d:#g' |sed 's#/#\\\\#g'`
          echo "LibrariesPath=$p" >> $GITHUB_ENV

      - name: Clone.
        uses: actions/checkout@v2
        with:
          submodules: recursive
          path: ${{ env.REPO_NAME }}

      - name: Generate cache key.
        shell: bash
        run: |
          echo $GLOBAL_CACHE_KEY >> CACHE_KEY.txt
          echo "$GITHUB_WORKSPACE" >> CACHE_KEY.txt
          echo "CACHE_KEY=`md5sum CACHE_KEY.txt | awk '{ print $1 }'`" >> $GITHUB_ENV

      - name: Choco installs.
        run: |
          choco install --allow-empty-checksums --no-progress -y yasm
          choco install --no-progress -y nasm jom ninja

      - name: NuGet sources.
        run: |
          nuget sources Disable -Name "Microsoft Visual Studio Offline Packages"
          nuget sources Add -Source https://api.nuget.org/v3/index.json & exit 0

      - name: Patches.
        shell: bash
        run: |
          cd $LibrariesPath
          git clone https://github.com/desktop-app/patches.git
          cd patches
          git checkout 87a2e9ee07

      - name: MozJPEG.
        shell: cmd
        run: |
          git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git
          cd mozjpeg
          cmake . ^
          -G "Visual Studio 16 2019" ^
          -A x64 ^
          -DWITH_JPEG8=ON ^
          -DPNG_SUPPORTED=OFF
          cmake --build . --config Release

      - name: OpenSSL cache.
        id: cache-openssl
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/openssl_1_1_1
          key: ${{ runner.OS }}-${{ env.CACHE_KEY }}-openssl_1_1_1
      - name: OpenSSL.
        if: steps.cache-openssl.outputs.cache-hit != 'true'
        run: |
          git clone https://github.com/openssl/openssl.git openssl_1_1_1
          cd openssl_1_1_1
          git checkout OpenSSL_1_1_1-stable
          perl Configure no-shared no-tests debug-VC-WIN64A
          nmake
          mkdir out64.dbg
          move libcrypto.lib out64.dbg
          move libssl.lib out64.dbg
          move ossl_static.pdb out64.dbg\ossl_static
          nmake clean
          move out64.dbg\ossl_static out64.dbg\ossl_static.pdb
          perl Configure no-shared no-tests VC-WIN64A
          nmake
          mkdir out64
          move libcrypto.lib out64
          move libssl.lib out64
          move ossl_static.pdb out64

          rmdir /S /Q test
          rmdir /S /Q .git

      - name: Opus cache.
        id: cache-opus
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/opus
          key: ${{ runner.OS }}-opus-${{ env.CACHE_KEY }}
      - name: Opus.
        if: steps.cache-opus.outputs.cache-hit != 'true'
        run: |
          git clone https://github.com/telegramdesktop/opus.git
          cd opus
          git checkout tdesktop
          cd win32\VS2015
          msbuild -m opus.sln /property:Configuration=Debug /property:Platform="x64"
          msbuild -m opus.sln /property:Configuration=Release /property:Platform="x64"

      - name: FFmpeg cache.
        id: cache-ffmpeg
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/ffmpeg
          key: ${{ runner.OS }}-ffmpeg-${{ env.CACHE_KEY }}-${{ hashFiles('**/build_ffmpeg_win.sh') }}
      - name: FFmpeg.
        if: steps.cache-ffmpeg.outputs.cache-hit != 'true'
        run: |
          choco install --no-progress -y msys2

          git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
          cd ffmpeg
          git checkout release/4.4
          set CHERE_INVOKING=enabled_from_arguments
          set MSYS2_PATH_TYPE=inherit
          call c:\tools\msys64\usr\bin\bash --login ../patches/build_ffmpeg_win.sh

          rmdir /S /Q .git

      - name: WebRTC cache.
        id: cache-webrtc
        uses: actions/cache@v2
        with:
          path: ${{ env.LibrariesPath }}/tg_owt
          key: ${{ runner.OS }}-webrtc-${{ env.CACHE_KEY }}-${{ env.WEBRTC_CACHE_KEY }}
      - name: WebRTC.
        if: steps.cache-webrtc.outputs.cache-hit != 'true'
        run: |
          xcopy ..\..\tgcalls\tgcalls\third_party\webrtc tg_owt\ /E/H

          mkdir tg_owt\out\Release
          cd tg_owt\out\Release
          cmake -G Ninja ^
          -DCMAKE_BUILD_TYPE=Release ^
          -DTG_OWT_SPECIAL_TARGET=win64 ^
          -DBUILD_SHARED_LIBS=OFF ^
          -DCMAKE_POSITION_INDEPENDENT_CODE=ON ^
          -DTG_OWT_USE_PIPEWIRE=OFF ^
          -DTG_OWT_LIBJPEG_INCLUDE_PATH=%cd%/../../../mozjpeg ^
          -DTG_OWT_OPENSSL_INCLUDE_PATH=%cd%/../../../openssl_1_1_1/include ^
          -DTG_OWT_OPUS_INCLUDE_PATH=%cd%/../../../opus/include ^
          -DTG_OWT_FFMPEG_INCLUDE_PATH=%cd%/../../../ffmpeg ^
          ../..

          ninja

          :: Cleanup.
          cd %LibrariesPath%\tg_owt
          move out\Release\tg_owt.lib tg_owt.lib
          rmdir /S /Q out
          mkdir out\Release
          move tg_owt.lib out\Release\tg_owt.lib

      - name: Build wheels.
        if: env.BUILD_WHEELS == 'true'
        working-directory: ${{ github.workspace }}
        env:
          CIBW_PROJECT_REQUIRES_PYTHON: ">=3.7"
          CIBW_ARCHS: "auto64"
          CIBW_BUILD: cp3*-*
          CIBW_SKIP: cp35-* cp36-*
          CIBW_ENVIRONMENT: 'ROOT_PATH="$GITHUB_WORKSPACE"'
          CIBW_TEST_COMMAND: 'python -c "import tgcalls;tgcalls.ping()"'
        run: |
          pip install cibuildwheel
          cibuildwheel --output-dir dist %REPO_NAME%

      - uses: actions/upload-artifact@master
        name: Upload artifact.
        with:
          name: "tgcalls for Windows x64"
          path: dist\

      - name: Upload wheels to PyPi.
        if: env.UPLOAD_WHEELS == 'true'
        working-directory: ${{ github.workspace }}
        env:
          TWINE_USERNAME: __token__
          TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
        run: |
          pip install twine
          twine upload dist/*


================================================
FILE: .github/workflows/build_and_push_manylinux_images.yaml
================================================
name: Build manylinux with dependencies and deploy images to GitHub Packages
on:
  push:
    branches:
      - main
      - dev
    paths:
      - '.github/workflows/build_and_push_manylinux_images.yaml'
      - 'build/manylinux/Dockerfile'
      - 'setup.py'
jobs:
  build_push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    strategy:
      matrix:
        manylinux_tag: [
            "manylinux2014_x86_64",
            "manylinux2014_aarch64",
        ]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Set up QEMU
        if: matrix.manylinux_tag == 'manylinux2014_aarch64'
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}
      - name: Prepare registry name
        run: echo IMAGE_REPOSITORY=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
      - name: ${{ matrix.manylinux_tag }}
        uses: docker/build-push-action@v2
        with:
          context: .
          file: build/manylinux/Dockerfile
          push: true
          build-args: MANYLINUX_PLATFORM=${{ matrix.manylinux_tag }}
          tags: ghcr.io/${{ env.IMAGE_REPOSITORY }}/tgcalls/${{ matrix.manylinux_tag }}:latest


================================================
FILE: .github/workflows/build_and_push_manylinux_webrtc_entrypoint_images.yaml
================================================
name: Build manylinux with dependencies, WebRTC and entrypoint. Deploy images to GitHub Packages
on:
  push:
    branches:
      - main
      - dev
    paths:
      - '.github/workflows/build_and_push_manylinux_webrtc_entrypoint_images.yaml'
      - 'build/manylinux/Dockerfile'
      - 'build/manylinux/webrtc/Dockerfile'
      - 'build/manylinux/entrypoint/Dockerfile'
      - 'build/manylinux/entrypoint/entrypoint.sh'
      - 'tgcalls/third_party/webrtc/**'
      - 'setup.py'
jobs:
  build_push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    strategy:
      matrix:
        manylinux_tag: [
            "manylinux2014_x86_64",
            "manylinux2014_aarch64",
        ]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Set up QEMU
        if: matrix.manylinux_tag == 'manylinux2014_aarch64'
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}
      - name: Prepare registry name
        run: echo IMAGE_REPOSITORY=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
      - name: ${{ matrix.manylinux_tag }}
        uses: docker/build-push-action@v2
        with:
          context: .
          file: build/manylinux/entrypoint/Dockerfile
          push: true
          build-args: MANYLINUX_PLATFORM=${{ matrix.manylinux_tag }}
          tags: ghcr.io/${{ env.IMAGE_REPOSITORY }}/tgcalls/${{ matrix.manylinux_tag }}-webrtc-entrypoint:latest


================================================
FILE: .github/workflows/build_and_push_manylinux_webrtc_images.yaml
================================================
name: Build manylinux with dependencies and WebRTC. Deploy images to GitHub Packages
on:
  push:
    branches:
      - main
      - dev
    paths:
      - '.github/workflows/build_and_push_manylinux_images.yaml'
      - 'build/manylinux/Dockerfile'
      - 'build/manylinux/webrtc/Dockerfile'
      - 'tgcalls/third_party/webrtc/**'
      - 'setup.py'
jobs:
  build_push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    strategy:
      matrix:
        manylinux_tag: [
            "manylinux2014_x86_64",
            "manylinux2014_aarch64",
        ]
    steps:
      - name: Check out the repo
        uses: actions/checkout@v2
        with:
          submodules: recursive
      - name: Set up QEMU
        if: matrix.manylinux_tag == 'manylinux2014_aarch64'
        uses: docker/setup-qemu-action@v1
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.CR_PAT }}
      - name: Prepare registry name
        run: echo IMAGE_REPOSITORY=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]') >> $GITHUB_ENV
      - name: ${{ matrix.manylinux_tag }}
        uses: docker/build-push-action@v2
        with:
          context: .
          file: build/manylinux/webrtc/Dockerfile
          push: true
          build-args: MANYLINUX_PLATFORM=${{ matrix.manylinux_tag }}
          tags: ghcr.io/${{ env.IMAGE_REPOSITORY }}/tgcalls/${{ matrix.manylinux_tag }}-webrtc:latest


================================================
FILE: .gitignore
================================================
.idea/

Libraries/

dist/
cmake-build-debug/

__pycache__/
*.egg-info/

copy_build.sh

config.h

*.so

*.session
*.session-journal

*.env

# test stuff

TODO/

*.mp3
*.raw
*.flac
*.txt
*.log

================================================
FILE: .gitmodules
================================================
[submodule "cmake"]
    path = cmake
    url = https://github.com/desktop-app/cmake_helpers
[submodule "tgcalls/third_party/pybind11"]
    path = tgcalls/third_party/pybind11
    url = https://github.com/pybind/pybind11
[submodule "tgcalls/third_party/webrtc/src/third_party/libyuv"]
    path = tgcalls/third_party/webrtc/src/third_party/libyuv
    url = https://chromium.googlesource.com/libyuv/libyuv
[submodule "tgcalls/third_party/webrtc/src/third_party/libvpx/source/libvpx"]
    path = tgcalls/third_party/webrtc/src/third_party/libvpx/source/libvpx
    url = https://chromium.googlesource.com/webm/libvpx


================================================
FILE: LICENSE
================================================
                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

================================================
FILE: MANIFEST.in
================================================
include LICENSE

================================================
FILE: README.md
================================================
<p align="center">
    <a href="https://github.com/MarshalX/tgcalls">
        <img src="https://github.com/MarshalX/tgcalls/raw/main/.github/images/logo.png" alt="tgcalls">
    </a>
    <br>
    <b>Voice chats, private incoming and outgoing calls in Telegram for Developers</b>
    <br>
    <a href="https://github.com/MarshalX/tgcalls/tree/main/examples">
        Examples
    </a>
    •
    <a href="https://tgcalls.org">
        Documentation
    </a>
    •
    <a href="https://t.me/tgcallslib">
        Channel
    </a>
    •
    <a href="https://t.me/tgcallschat">
        Chat
    </a>
</p>

## Telegram WebRTC (VoIP) [![Mentioned in Awesome Telegram Calls](https://awesome.re/mentioned-badge-flat.svg)](https://github.com/tgcalls/awesome-tgcalls)

This project consists of two main parts: [tgcalls](#tgcalls), [pytgcalls](#pytgcalls).
The first is a C++ Python extension.
The second uses the extension along with MTProto and provides high level SDK.
All together, it allows you to create userbots that can record and
broadcast in voice chats, make and receive private calls.

#### Pyrogram's snippet
```python
from pyrogram import Client, filters
from pyrogram.utils import MAX_CHANNEL_ID

from pytgcalls import GroupCallFactory

app = Client('pytgcalls')
group_call = GroupCallFactory(app).get_file_group_call('input.raw')


@group_call.on_network_status_changed
async def on_network_changed(context, is_connected):
    chat_id = MAX_CHANNEL_ID - context.full_chat.id
    if is_connected:
        await app.send_message(chat_id, 'Successfully joined!')
    else:
        await app.send_message(chat_id, 'Disconnected from voice chat..')


@app.on_message(filters.outgoing & filters.command('join'))
async def join_handler(_, message):
    await group_call.start(message.chat.id)


app.run()
```

#### Telethon's snippet
```python
from telethon import TelegramClient, events

from pytgcalls import GroupCallFactory

app = TelegramClient('pytgcalls', api_id, api_hash).start()
group_call_factory = GroupCallFactory(app, GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON)
group_call = group_call_factory.get_file_group_call('input.raw')


@app.on(events.NewMessage(outgoing=True, pattern=r'^/join$'))
async def join_handler(event):
    chat = await event.get_chat()
    await group_call.start(chat.id)

app.run_until_disconnected()
```

### Features

- Python solution.
- Prebuilt wheels for macOS, Linux and Windows.
- Supporting popular MTProto libraries: Pyrogram, Telethon.
- Abstract class to implement own MTProto bridge.
- Work with voice chats in channels and chats.
- Multiply voice chats ([example](https://github.com/MarshalX/tgcalls/blob/main/examples/radio_as_smart_plugin.py)).
- System of custom handlers on events.
- Join as channels or chats.
- Join using invite (speaker) links.
- Speaking status with voice activity detection.
- Mute/unmute, pause/resume, stop/play, volume control and more...

### Available sources of input/output data transfers

- Raw (`GroupCallRaw`, [example with pyav](https://github.com/MarshalX/tgcalls/blob/main/examples/pyav.py),
[example of restreaming](https://github.com/MarshalX/tgcalls/blob/main/examples/restream_using_raw_data.py))
  — to send and receive data in `bytes` directly from Python.
- File (`GroupCallFile`, [playout example](https://github.com/MarshalX/tgcalls/blob/main/examples/file_playout.py),
  [recording example](https://github.com/MarshalX/tgcalls/blob/main/examples/recorder_as_smart_plugin.py))
  — to use audio files including named pipe (FIFO).
- Device (`GroupCallDevice`, [example](https://github.com/MarshalX/tgcalls/blob/main/examples/device_playout.py)) — 
to use system virtual devices. Please don't use it with real microphone, headphones, etc.

Note: All audio data is transmitted in PCM 16 bit, 48k. 
[Example how to convert files using FFmpeg](#audio-file-formats).

### Requirements

- Python 3.7 or higher.
- A [Telegram API key](https://docs.pyrogram.org/intro/setup#api-keys).

### TODO list
- Incoming and Outgoing private calls 
(already there and working, but not in the release version).
- Group Video Calls
[and more...](https://github.com/MarshalX/tgcalls/issues)

### Installing

#### For Pyrogram
``` bash
pip3 install -U pytgcalls[pyrogram]
```

#### For Telethon
``` bash
pip3 install -U pytgcalls[telethon]
```

<hr>
<p align="center">
    <a href="https://github.com/MarshalX/tgcalls">
        <img src="https://github.com/MarshalX/tgcalls/raw/main/.github/images/tgcalls.png" alt="tgcalls">
    </a>
    <br>
    <a href="https://pypi.org/project/tgcalls/">
        PyPi
    </a>
    •
    <a href="https://github.com/MarshalX/tgcalls/tree/main/tgcalls">
        Sources
    </a>
</p>

## tgcalls 

The first part of the project is C++ extensions for Python. [Pybind11](https://github.com/pybind/pybind11)
was used to write it. Binding occurs to the [tgcalls](https://github.com/TelegramMessenger/tgcalls)
library by Telegram, which is used in all official clients. 
To implement the binding, the code of Telegram Desktop and Telegram Android was studied.
Changes have been made to the Telegram library. 
All modified code is [available as a subtree](https://github.com/MarshalX/tgcalls/tree/main/tgcalls/third_party/lib_tgcalls)
in this repository. The main ideas of the changes is to improve 
the sound quality and to add ability to work with third party audio device modules.
In addition, this binding implemented custom audio modules. These modules are allowing
transfer audio data directly from Python via bytes, transfer and control 
the playback/recording of a file or a virtual system device.

### How to build

Short answer for Linux:
```bash
git clone git@github.com:MarshalX/tgcalls.git --recursive
cd tgcalls
```
For x86_64:
```bash
docker-compose up tgcalls_x86_64
```
For AArch64 (ARM64):
```bash
docker-compose up tgcalls_aarch64
```

Python wheels will be available in `dist` folder in root of `tgcalls`.

More info:
- [Manylinux](build/manylinux/dev).
- [Ubuntu](build/ubuntu).
- [macOS](build/macos).
- [Windows](build/windows).

Also, you can investigate into [manylinux GitHub Actions builds](build/manylinux).

### Documentation

Temporarily, instead of documentation, you can use [an example](pytgcalls/pytgcalls)
along with MTProto.

<hr>
<p align="center">
    <a href="https://github.com/MarshalX/tgcalls">
        <img src="https://github.com/MarshalX/tgcalls/raw/main/.github/images/pytgcalls.png" alt="pytgcalls">
    </a>
    <br>
    <a href="https://tgcalls.org">
        Documentation
    </a>
    •
    <a href="https://pypi.org/project/pytgcalls/">
        PyPi
    </a>
    •
    <a href="https://github.com/MarshalX/tgcalls/tree/main/pytgcalls">
        Sources
    </a>
</p>

## pytgcalls 

This project is implementation of using [tgcalls](#tgcalls) 
Python binding together with [MTProto](https://core.telegram.org/mtproto).
By default, this library are supports [Pyrogram](https://github.com/pyrogram/pyrogram)
and [Telethon](https://github.com/LonamiWebs/Telethon) clients for working 
with Telegram Mobile Protocol. 
You can write your own implementation of abstract class to work with other libraries.

### Learning by example

Visit [this page](https://github.com/MarshalX/tgcalls/tree/main/examples) to discover the official examples.

### Documentation

`pytgcalls`'s documentation lives at [tgcalls.org](https://tgcalls.org).

### Audio file formats

RAW files are now used. You will have to convert to this format yourself
using ffmpeg. The example how to transcode files from a code is available [here](https://github.com/MarshalX/tgcalls/blob/e0b2d667728cc92cc0da437b9c85bcc909e4ac9c/examples/player_as_smart_plugin.py#L41).

From mp3 to raw (to play in voice chat):
```
ffmpeg -i input.mp3 -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
```

From raw to mp3 (files with recordings):
```
ffmpeg -f s16le -ac 2 -ar 48000 -acodec pcm_s16le -i output.raw clear_output.mp3
```

For playout live stream you can use this one:
```
ffmpeg -y -i http://stream2.cnmns.net/hope-mp3 -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
```

For YouTube videos and live streams you can use youtube-dl:
```
ffmpeg -i "$(youtube-dl -x -g "https://youtu.be/xhXq9BNndhw")" -f s16le -ac 2 -ar 48000 -acodec pcm_s16le input.raw
```

And set input.raw as input filename.

<hr>

### Getting help

You can get help in several ways:
- We have a community of developers helping each other in our 
[Telegram group](https://t.me/tgcallschat).
- Report bugs, request new features or ask questions by creating 
[an issue](https://github.com/MarshalX/tgcalls/issues/new) or 
[a discussion](https://github.com/MarshalX/tgcalls/discussions/new).

### Contributing

Contributions of all sizes are welcome.

### Special thanks to

- [@FrayxRulez](https://github.com/FrayxRulez) for amazing code of [Unigram](https://github.com/UnigramDev/Unigram).
- [@john-preston](https://github.com/john-preston) for [Telegram Desktop](https://github.com/telegramdesktop/tdesktop) and [tgcalls](https://github.com/TelegramMessenger/tgcalls).
- [@bakatrouble](https://github.com/bakatrouble/) for help and inspiration by [pytgvoip](https://github.com/bakatrouble/pytgvoip).
- [@delivrance](https://github.com/delivrance) for [Pyrogram](https://github.com/pyrogram/pyrogram).
- [@Lonami](https://github.com/Lonami) for [Telethon](https://github.com/LonamiWebs/Telethon).

### License

You may copy, distribute and modify the software provided that modifications
are described and licensed for free under [LGPL-3](https://www.gnu.org/licenses/lgpl-3.0.html).
Derivatives works (including modifications or anything statically
linked to the library) can only be redistributed under LGPL-3, but
applications that use the library don't have to be.


================================================
FILE: build/macos/README.md
================================================
# Build instruction for macOS

**It works on Apple Silicon (M1). But there is problem with building deps 
on GitHub CI for ARM using macOS. 
I build for M1 on my machine and upload to PyPi (only for Python 3.9)**

XCode Command Line Tools and python3 need to installed.

```shell script
MAKE_THREADS_CNT=-j8
MACOSX_DEPLOYMENT_TARGET=10.12
UNGUARDED="-Werror=unguarded-availability-new"
MIN_VER="-mmacosx-version-min=10.12"

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install automake cmake git libvpx ninja opus yasm libtool

git clone --recursive https://github.com/MarshalX/tgcalls

mkdir -p Libraries/macos
cd Libraries/macos

git clone https://github.com/desktop-app/patches.git
cd patches
git checkout e052c49
cd ..

git clone -b v4.0.1-rc2 https://github.com/mozilla/mozjpeg.git
cd mozjpeg
cmake -B build . \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local/macos \
    -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=10.12 \
    -DWITH_JPEG8=ON \
    -DPNG_SUPPORTED=OFF
cmake --build build $MAKE_THREADS_CNT
sudo cmake --install build
cd ..

git clone https://github.com/openssl/openssl openssl_1_1_1
cd openssl_1_1_1
git checkout OpenSSL_1_1_1-stable
# for apple silicon:
#./Configure --prefix=/usr/local/macos no-tests darwin64-arm64-cc -static $MIN_VER
# for intel:
./Configure --prefix=/usr/local/macos no-tests darwin64-x86_64-cc -static $MIN_VER
make build_libs $MAKE_THREADS_CNT
cd ..

git clone https://github.com/xiph/opus
cd opus
git checkout v1.3
./autogen.sh
CFLAGS="$MIN_VER $UNGUARDED" CPPFLAGS="$MIN_VER $UNGUARDED" LDFLAGS="$MIN_VER" ./configure --prefix=/usr/local/macos
make $MAKE_THREADS_CNT
sudo make install
cd ..

git clone https://github.com/FFmpeg/FFmpeg.git ffmpeg
cd ffmpeg
git checkout release/4.4
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/lib/pkgconfig:/usr/X11/lib/pkgconfig
cp ../patches/macos_yasm_wrap.sh ./

./configure --prefix=/usr/local/macos \
--extra-cflags="$MIN_VER $UNGUARDED" \
--extra-cxxflags="$MIN_VER $UNGUARDED" \
--extra-ldflags="$MIN_VER" \
--x86asmexe=`pwd`/macos_yasm_wrap.sh \
--enable-protocol=file \
--enable-libopus \
--disable-programs \
--disable-doc \
--disable-network \
--disable-everything \
--enable-hwaccel=h264_videotoolbox \
--enable-hwaccel=hevc_videotoolbox \
--enable-hwaccel=mpeg1_videotoolbox \
--enable-hwaccel=mpeg2_videotoolbox \
--enable-hwaccel=mpeg4_videotoolbox \
--enable-decoder=aac \
--enable-decoder=aac_at \
--enable-decoder=aac_fixed \
--enable-decoder=aac_latm \
--enable-decoder=aasc \
--enable-decoder=alac \
--enable-decoder=alac_at \
--enable-decoder=flac \
--enable-decoder=gif \
--enable-decoder=h264 \
--enable-decoder=hevc \
--enable-decoder=mp1 \
--enable-decoder=mp1float \
--enable-decoder=mp2 \
--enable-decoder=mp2float \
--enable-decoder=mp3 \
--enable-decoder=mp3adu \
--enable-decoder=mp3adufloat \
--enable-decoder=mp3float \
--enable-decoder=mp3on4 \
--enable-decoder=mp3on4float \
--enable-decoder=mpeg4 \
--enable-decoder=msmpeg4v2 \
--enable-decoder=msmpeg4v3 \
--enable-decoder=opus \
--enable-decoder=pcm_alaw \
--enable-decoder=pcm_alaw_at \
--enable-decoder=pcm_f32be \
--enable-decoder=pcm_f32le \
--enable-decoder=pcm_f64be \
--enable-decoder=pcm_f64le \
--enable-decoder=pcm_lxf \
--enable-decoder=pcm_mulaw \
--enable-decoder=pcm_mulaw_at \
--enable-decoder=pcm_s16be \
--enable-decoder=pcm_s16be_planar \
--enable-decoder=pcm_s16le \
--enable-decoder=pcm_s16le_planar \
--enable-decoder=pcm_s24be \
--enable-decoder=pcm_s24daud \
--enable-decoder=pcm_s24le \
--enable-decoder=pcm_s24le_planar \
--enable-decoder=pcm_s32be \
--enable-decoder=pcm_s32le \
--enable-decoder=pcm_s32le_planar \
--enable-decoder=pcm_s64be \
--enable-decoder=pcm_s64le \
--enable-decoder=pcm_s8 \
--enable-decoder=pcm_s8_planar \
--enable-decoder=pcm_u16be \
--enable-decoder=pcm_u16le \
--enable-decoder=pcm_u24be \
--enable-decoder=pcm_u24le \
--enable-decoder=pcm_u32be \
--enable-decoder=pcm_u32le \
--enable-decoder=pcm_u8 \
--enable-decoder=pcm_zork \
--enable-decoder=vorbis \
--enable-decoder=wavpack \
--enable-decoder=wmalossless \
--enable-decoder=wmapro \
--enable-decoder=wmav1 \
--enable-decoder=wmav2 \
--enable-decoder=wmavoice \
--enable-encoder=libopus \
--enable-parser=aac \
--enable-parser=aac_latm \
--enable-parser=flac \
--enable-parser=h264 \
--enable-parser=hevc \
--enable-parser=mpeg4video \
--enable-parser=mpegaudio \
--enable-parser=opus \
--enable-parser=vorbis \
--enable-demuxer=aac \
--enable-demuxer=flac \
--enable-demuxer=gif \
--enable-demuxer=h264 \
--enable-demuxer=hevc \
--enable-demuxer=m4v \
--enable-demuxer=mov \
--enable-demuxer=mp3 \
--enable-demuxer=ogg \
--enable-demuxer=wav \
--enable-muxer=ogg \
--enable-muxer=opus

make $MAKE_THREADS_CNT
sudo make install
cd ..

cp -R ../../tgcalls/tgcalls/third_party/webrtc tg_owt
cd tg_owt
mkdir -p out/Debug
cd out/Debug
cmake -G Ninja \
    -DCMAKE_BUILD_TYPE=Debug \
    -DTG_OWT_SPECIAL_TARGET=mac \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/macos/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../..
ninja
cd ..
mkdir Release
cd Release
cmake -G Ninja \
    -DCMAKE_BUILD_TYPE=Release \
    -DTG_OWT_SPECIAL_TARGET=mac \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/macos/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=`pwd`/../../../openssl_1_1_1/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/macos/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/macos/include ../..
ninja

cd ../../../../../tgcalls/

python3 setup.py build
```

================================================
FILE: build/manylinux/Dockerfile
================================================
ARG MANYLINUX_PLATFORM
FROM quay.io/pypa/$MANYLINUX_PLATFORM AS builder

ENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
ENV OPENSSL_PREFIX /usr/local/desktop-app/openssl-1.1.1

RUN yum -y install epel-release

RUN yum -y install git cmake3 meson ninja-build autoconf automake libtool \
    zlib-devel alsa-lib-devel pulseaudio-libs-devel pkgconfig bison \
    yasm file which devtoolset-8-make devtoolset-8-gcc \
    devtoolset-8-gcc-c++ devtoolset-8-binutils

SHELL [ "scl", "enable", "devtoolset-8", "--", "bash", "-c" ]
RUN ln -s cmake3 /usr/bin/cmake

ENV LibrariesPath /usr/src/Libraries
WORKDIR $LibrariesPath

FROM builder AS mozjpeg
RUN git clone -b v4.0.1-rc2 --depth=1 https://github.com/mozilla/mozjpeg.git

WORKDIR mozjpeg
RUN cmake3 -B build . \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DWITH_JAVA=OFF \
    -DWITH_JPEG8=ON \
    -DPNG_SUPPORTED=OFF

RUN make -C build -j$(nproc)
RUN make DESTDIR="$LibrariesPath/mozjpeg-cache" install -C build

WORKDIR ..
RUN rm -rf mozjpeg

FROM builder AS opus
RUN git clone -b v1.3 --depth=1 https://github.com/xiph/opus.git

WORKDIR opus
RUN ./autogen.sh
RUN ./configure --with-pic
RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/opus-cache" install

WORKDIR ..
RUN rm -rf opus

FROM builder AS openssl
ENV opensslDir openssl_1_1_1
RUN git clone -b OpenSSL_1_1_1-stable --depth=1 \
    https://github.com/openssl/openssl.git $opensslDir

WORKDIR ${opensslDir}
RUN ./config \
    --prefix="$OPENSSL_PREFIX" \
    --openssldir=/etc/ssl \
    no-tests \
    no-dso

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/openssl-cache" install_sw

WORKDIR ..
RUN rm -rf $opensslDir

FROM builder AS ffmpeg
COPY --from=opus ${LibrariesPath}/opus-cache /
RUN git clone -b release/4.4 --depth=1 https://github.com/FFmpeg/FFmpeg.git ffmpeg

WORKDIR ffmpeg
RUN ./configure \
    --disable-debug \
    --disable-programs \
    --disable-doc \
    --disable-network \
    --disable-autodetect \
    --disable-everything \
    --disable-asm \
    --disable-iconv \
    --disable-shared \
    --enable-static \
    --enable-libopus \
    --enable-pic \
    --enable-protocol=file \
    --enable-hwaccel=h264_vaapi \
    --enable-hwaccel=h264_vdpau \
    --enable-hwaccel=mpeg4_vaapi \
    --enable-hwaccel=mpeg4_vdpau \
    --enable-decoder=aac \
    --enable-decoder=aac_fixed \
    --enable-decoder=aac_latm \
    --enable-decoder=aasc \
    --enable-decoder=alac \
    --enable-decoder=flac \
    --enable-decoder=gif \
    --enable-decoder=h264 \
    --enable-decoder=h264_vdpau \
    --enable-decoder=hevc \
    --enable-decoder=mp1 \
    --enable-decoder=mp1float \
    --enable-decoder=mp2 \
    --enable-decoder=mp2float \
    --enable-decoder=mp3 \
    --enable-decoder=mp3adu \
    --enable-decoder=mp3adufloat \
    --enable-decoder=mp3float \
    --enable-decoder=mp3on4 \
    --enable-decoder=mp3on4float \
    --enable-decoder=mpeg4 \
    --enable-decoder=mpeg4_vdpau \
    --enable-decoder=msmpeg4v2 \
    --enable-decoder=msmpeg4v3 \
    --enable-decoder=opus \
    --enable-decoder=pcm_alaw \
    --enable-decoder=pcm_f32be \
    --enable-decoder=pcm_f32le \
    --enable-decoder=pcm_f64be \
    --enable-decoder=pcm_f64le \
    --enable-decoder=pcm_lxf \
    --enable-decoder=pcm_mulaw \
    --enable-decoder=pcm_s16be \
    --enable-decoder=pcm_s16be_planar \
    --enable-decoder=pcm_s16le \
    --enable-decoder=pcm_s16le_planar \
    --enable-decoder=pcm_s24be \
    --enable-decoder=pcm_s24daud \
    --enable-decoder=pcm_s24le \
    --enable-decoder=pcm_s24le_planar \
    --enable-decoder=pcm_s32be \
    --enable-decoder=pcm_s32le \
    --enable-decoder=pcm_s32le_planar \
    --enable-decoder=pcm_s64be \
    --enable-decoder=pcm_s64le \
    --enable-decoder=pcm_s8 \
    --enable-decoder=pcm_s8_planar \
    --enable-decoder=pcm_u16be \
    --enable-decoder=pcm_u16le \
    --enable-decoder=pcm_u24be \
    --enable-decoder=pcm_u24le \
    --enable-decoder=pcm_u32be \
    --enable-decoder=pcm_u32le \
    --enable-decoder=pcm_u8 \
    --enable-decoder=pcm_zork \
    --enable-decoder=vorbis \
    --enable-decoder=wavpack \
    --enable-decoder=wmalossless \
    --enable-decoder=wmapro \
    --enable-decoder=wmav1 \
    --enable-decoder=wmav2 \
    --enable-decoder=wmavoice \
    --enable-encoder=libopus \
    --enable-parser=aac \
    --enable-parser=aac_latm \
    --enable-parser=flac \
    --enable-parser=h264 \
    --enable-parser=hevc \
    --enable-parser=mpeg4video \
    --enable-parser=mpegaudio \
    --enable-parser=opus \
    --enable-parser=vorbis \
    --enable-demuxer=aac \
    --enable-demuxer=flac \
    --enable-demuxer=gif \
    --enable-demuxer=h264 \
    --enable-demuxer=hevc \
    --enable-demuxer=m4v \
    --enable-demuxer=mov \
    --enable-demuxer=mp3 \
    --enable-demuxer=ogg \
    --enable-demuxer=wav \
    --enable-muxer=ogg \
    --enable-muxer=opus

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/ffmpeg-cache" install

WORKDIR ..

FROM builder

COPY --from=mozjpeg ${LibrariesPath}/mozjpeg-cache /
COPY --from=opus ${LibrariesPath}/opus-cache /
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg ffmpeg
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg-cache /
COPY --from=openssl ${LibrariesPath}/openssl-cache /


================================================
FILE: build/manylinux/dev/Dockerfile
================================================
ARG MANYLINUX_PLATFORM
FROM quay.io/pypa/$MANYLINUX_PLATFORM AS builder

ENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
ENV OPENSSL_PREFIX /usr/local/desktop-app/openssl-1.1.1

RUN yum -y install epel-release

RUN yum -y install wget git cmake3 meson ninja-build autoconf automake libtool \
    zlib-devel alsa-lib-devel pulseaudio-libs-devel pkgconfig bison \
    yasm file which devtoolset-8-make devtoolset-8-gcc \
    devtoolset-8-gcc-c++ devtoolset-8-binutils

SHELL [ "scl", "enable", "devtoolset-8", "--", "bash", "-c" ]
RUN ln -s cmake3 /usr/bin/cmake

ENV MainPath /usr/src
ENV LibrariesPath ${MainPath}/Libraries
WORKDIR $LibrariesPath

FROM builder AS mozjpeg
RUN git clone -b v4.0.1-rc2 --depth=1 https://github.com/mozilla/mozjpeg.git

WORKDIR mozjpeg
RUN cmake -B build . \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DWITH_JAVA=OFF \
    -DWITH_JPEG8=ON \
    -DPNG_SUPPORTED=OFF

RUN cmake --build build -j$(nproc)
RUN DESTDIR="$LibrariesPath/mozjpeg-cache" cmake --install build

WORKDIR ..

FROM builder AS opus
RUN git clone -b v1.3 --depth=1 https://github.com/xiph/opus.git

WORKDIR opus
RUN ./autogen.sh
RUN ./configure --with-pic
RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/opus-cache" install

FROM builder AS openssl
ENV opensslDir openssl_1_1_1
RUN git clone -b OpenSSL_1_1_1-stable --depth=1 \
    https://github.com/openssl/openssl.git $opensslDir

WORKDIR ${opensslDir}
RUN ./config \
    --prefix="$OPENSSL_PREFIX" \
    --openssldir=/etc/ssl \
    no-tests \
    no-dso

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/openssl-cache" install_sw

WORKDIR ..

FROM builder AS ffmpeg
COPY --from=opus ${LibrariesPath}/opus-cache /
RUN git clone -b release/4.4 --depth=1 https://github.com/FFmpeg/FFmpeg.git ffmpeg

WORKDIR ffmpeg
RUN ./configure \
    --disable-debug \
    --disable-programs \
    --disable-doc \
    --disable-network \
    --disable-autodetect \
    --disable-everything \
    --disable-asm \
    --disable-iconv \
    --disable-shared \
    --enable-static \
    --enable-libopus \
    --enable-pic \
    --enable-protocol=file \
    --enable-hwaccel=h264_vaapi \
    --enable-hwaccel=h264_vdpau \
    --enable-hwaccel=mpeg4_vaapi \
    --enable-hwaccel=mpeg4_vdpau \
    --enable-decoder=aac \
    --enable-decoder=aac_fixed \
    --enable-decoder=aac_latm \
    --enable-decoder=aasc \
    --enable-decoder=alac \
    --enable-decoder=flac \
    --enable-decoder=gif \
    --enable-decoder=h264 \
    --enable-decoder=h264_vdpau \
    --enable-decoder=hevc \
    --enable-decoder=mp1 \
    --enable-decoder=mp1float \
    --enable-decoder=mp2 \
    --enable-decoder=mp2float \
    --enable-decoder=mp3 \
    --enable-decoder=mp3adu \
    --enable-decoder=mp3adufloat \
    --enable-decoder=mp3float \
    --enable-decoder=mp3on4 \
    --enable-decoder=mp3on4float \
    --enable-decoder=mpeg4 \
    --enable-decoder=mpeg4_vdpau \
    --enable-decoder=msmpeg4v2 \
    --enable-decoder=msmpeg4v3 \
    --enable-decoder=opus \
    --enable-decoder=pcm_alaw \
    --enable-decoder=pcm_f32be \
    --enable-decoder=pcm_f32le \
    --enable-decoder=pcm_f64be \
    --enable-decoder=pcm_f64le \
    --enable-decoder=pcm_lxf \
    --enable-decoder=pcm_mulaw \
    --enable-decoder=pcm_s16be \
    --enable-decoder=pcm_s16be_planar \
    --enable-decoder=pcm_s16le \
    --enable-decoder=pcm_s16le_planar \
    --enable-decoder=pcm_s24be \
    --enable-decoder=pcm_s24daud \
    --enable-decoder=pcm_s24le \
    --enable-decoder=pcm_s24le_planar \
    --enable-decoder=pcm_s32be \
    --enable-decoder=pcm_s32le \
    --enable-decoder=pcm_s32le_planar \
    --enable-decoder=pcm_s64be \
    --enable-decoder=pcm_s64le \
    --enable-decoder=pcm_s8 \
    --enable-decoder=pcm_s8_planar \
    --enable-decoder=pcm_u16be \
    --enable-decoder=pcm_u16le \
    --enable-decoder=pcm_u24be \
    --enable-decoder=pcm_u24le \
    --enable-decoder=pcm_u32be \
    --enable-decoder=pcm_u32le \
    --enable-decoder=pcm_u8 \
    --enable-decoder=pcm_zork \
    --enable-decoder=vorbis \
    --enable-decoder=wavpack \
    --enable-decoder=wmalossless \
    --enable-decoder=wmapro \
    --enable-decoder=wmav1 \
    --enable-decoder=wmav2 \
    --enable-decoder=wmavoice \
    --enable-encoder=libopus \
    --enable-parser=aac \
    --enable-parser=aac_latm \
    --enable-parser=flac \
    --enable-parser=h264 \
    --enable-parser=hevc \
    --enable-parser=mpeg4video \
    --enable-parser=mpegaudio \
    --enable-parser=opus \
    --enable-parser=vorbis \
    --enable-demuxer=aac \
    --enable-demuxer=flac \
    --enable-demuxer=gif \
    --enable-demuxer=h264 \
    --enable-demuxer=hevc \
    --enable-demuxer=m4v \
    --enable-demuxer=mov \
    --enable-demuxer=mp3 \
    --enable-demuxer=ogg \
    --enable-demuxer=wav \
    --enable-muxer=ogg \
    --enable-muxer=opus

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/ffmpeg-cache" install

WORKDIR ..

FROM builder AS webrtc

COPY --from=mozjpeg ${LibrariesPath}/mozjpeg-cache /
COPY --from=opus ${LibrariesPath}/opus-cache /
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg-cache /
COPY --from=openssl ${LibrariesPath}/openssl-cache /

COPY tgcalls/third_party/webrtc ${LibrariesPath}/webrtc

WORKDIR webrtc

RUN cmake -B out/Release . \
    -DCMAKE_BUILD_TYPE=Release \
    -DTG_OWT_SPECIAL_TARGET=linux \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DTG_OWT_USE_PIPEWIRE=OFF \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include
RUN cmake --build out/Release -- -j$(nproc)

RUN cmake -B out/Debug . \
    -DCMAKE_BUILD_TYPE=Debug \
    -DTG_OWT_SPECIAL_TARGET=linux \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DTG_OWT_USE_PIPEWIRE=OFF \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include
RUN cmake --build out/Debug -- -j$(nproc)

WORKDIR ..

FROM builder

COPY --from=mozjpeg ${LibrariesPath}/mozjpeg-cache /
COPY --from=opus ${LibrariesPath}/opus-cache /
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg ffmpeg
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg-cache /
COPY --from=openssl ${LibrariesPath}/openssl-cache /
COPY --from=webrtc ${LibrariesPath}/webrtc tg_owt

WORKDIR ..
COPY ./ ${MainPath}/tgcalls
WORKDIR ${MainPath}/tgcalls

COPY ./build/manylinux/dev/entrypoint.sh /entrypoint.sh

RUN ["chmod", "+x", "/entrypoint.sh"]
ENTRYPOINT ["/entrypoint.sh"]


================================================
FILE: build/manylinux/dev/entrypoint.sh
================================================
#!/bin/bash
set -e -u -x

PYTHON_VERSIONS=$1
MANYLINUX_PLATFORM=$2

function repair_wheel {
    wheel="$1"
    if ! auditwheel show "$wheel"; then
        echo "Skipping non-platform wheel $wheel"
    else
        auditwheel repair "$wheel" --plat "$MANYLINUX_PLATFORM" -w ../dist/
    fi
}

# build
arrPYTHON_VERSIONS=(${PYTHON_VERSIONS// / })
for PYTHON_VER in "${arrPYTHON_VERSIONS[@]}"; do
    /opt/python/"${PYTHON_VER}"/bin/pip wheel . --no-deps -w ../wheelhouse/
done

# repair
for whl in ../wheelhouse/*.whl; do
    repair_wheel "$whl"
done

# test
for PYTHON_VER in "${arrPYTHON_VERSIONS[@]}"; do
    /opt/python/"${PYTHON_VER}"/bin/pip install ../dist/*${PYTHON_VER}*.whl
    /opt/python/"${PYTHON_VER}"/bin/python -c "import tgcalls; tgcalls.ping();"
done


================================================
FILE: build/manylinux/entrypoint/Dockerfile
================================================
ARG MANYLINUX_PLATFORM
FROM ghcr.io/marshalx/tgcalls/$MANYLINUX_PLATFORM-webrtc:latest

COPY build/manylinux/entrypoint/entrypoint.sh /entrypoint.sh

RUN ["chmod", "+x", "/entrypoint.sh"]
ENTRYPOINT ["/entrypoint.sh"]


================================================
FILE: build/manylinux/entrypoint/entrypoint.sh
================================================
#!/bin/bash
set -e -u -x

PYTHON_VERSIONS=$1
MANYLINUX_PLATFORM=$2

export TWINE_USERNAME=$3
export TWINE_PASSWORD=$4

cp -R /github/workspace /usr/src/tgcalls
cp -R /usr/src/Libraries/ /tmp/Libraries
cd /usr/src/tgcalls

function repair_wheel {
    wheel="$1"
    if ! auditwheel show "$wheel"; then
        echo "Skipping non-platform wheel $wheel"
    else
        auditwheel repair "$wheel" --plat "$MANYLINUX_PLATFORM" -w wheelhouse/
    fi
}

arrPYTHON_VERSIONS=(${PYTHON_VERSIONS// / })
for PYTHON_VER in "${arrPYTHON_VERSIONS[@]}"; do
    /opt/python/"${PYTHON_VER}"/bin/pip wheel . --no-deps -w wheelhouse/
done

for whl in wheelhouse/*.whl; do
    repair_wheel "$whl"
done

/opt/python/cp37-cp37m/bin/pip install twine
/opt/python/cp37-cp37m/bin/python -m twine upload /usr/src/tgcalls/wheelhouse/*-manylinux*.whl


================================================
FILE: build/manylinux/webrtc/Dockerfile
================================================
ARG MANYLINUX_PLATFORM
FROM ghcr.io/marshalx/tgcalls/$MANYLINUX_PLATFORM:latest AS builder

COPY tgcalls/third_party/webrtc ${LibrariesPath}/tg_owt

WORKDIR tg_owt

RUN cmake3 -B out/Release . \
    -DCMAKE_BUILD_TYPE=Release \
    -DTG_OWT_SPECIAL_TARGET=linux \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DTG_OWT_USE_PIPEWIRE=OFF \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include
RUN cmake --build out/Release -- -j$(nproc)

WORKDIR ..


================================================
FILE: build/ubuntu/Dockerfile
================================================
FROM ubuntu:latest AS builder

ENV DEBIAN_FRONTEND=noninteractive
ENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig
ENV OPENSSL_PREFIX /usr/local/desktop-app/openssl-1.1.1

RUN apt-get update \
    && apt-get install -y \
    wget \
    pkg-config \
    git \
    build-essential \
    cmake \
    autoconf \
    libtool \
    yasm \
    libasound2-dev \
    libpulse-dev \
    ninja-build \
    python-dev-is-python3

ENV MainPath /usr/src
ENV LibrariesPath ${MainPath}/Libraries
WORKDIR $LibrariesPath

RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py
RUN rm get-pip.py

FROM builder AS mozjpeg
RUN git clone -b v4.0.1-rc2 --depth=1 https://github.com/mozilla/mozjpeg.git

WORKDIR mozjpeg
RUN cmake -B build . \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DWITH_JAVA=OFF \
    -DWITH_JPEG8=ON \
    -DPNG_SUPPORTED=OFF

RUN cmake --build build -j$(nproc)
RUN DESTDIR="$LibrariesPath/mozjpeg-cache" cmake --install build

WORKDIR ..

FROM builder AS opus
RUN git clone -b v1.3 --depth=1 https://github.com/xiph/opus.git

WORKDIR opus
RUN ./autogen.sh
RUN ./configure --with-pic
RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/opus-cache" install

FROM builder AS openssl
ENV opensslDir openssl_1_1_1
RUN git clone -b OpenSSL_1_1_1-stable --depth=1 \
    https://github.com/openssl/openssl.git $opensslDir

WORKDIR ${opensslDir}
RUN ./config \
    --prefix="$OPENSSL_PREFIX" \
    --openssldir=/etc/ssl \
    no-tests \
    no-dso

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/openssl-cache" install_sw

WORKDIR ..

FROM builder AS ffmpeg
COPY --from=opus ${LibrariesPath}/opus-cache /
RUN git clone -b release/4.4 --depth=1 https://github.com/FFmpeg/FFmpeg.git ffmpeg

WORKDIR ffmpeg
RUN ./configure \
    --disable-debug \
    --disable-programs \
    --disable-doc \
    --disable-network \
    --disable-autodetect \
    --disable-everything \
    --disable-asm \
    --disable-iconv \
    --disable-shared \
    --enable-static \
    --enable-libopus \
    --enable-pic \
    --enable-protocol=file \
    --enable-hwaccel=h264_vaapi \
    --enable-hwaccel=h264_vdpau \
    --enable-hwaccel=mpeg4_vaapi \
    --enable-hwaccel=mpeg4_vdpau \
    --enable-decoder=aac \
    --enable-decoder=aac_fixed \
    --enable-decoder=aac_latm \
    --enable-decoder=aasc \
    --enable-decoder=alac \
    --enable-decoder=flac \
    --enable-decoder=gif \
    --enable-decoder=h264 \
    --enable-decoder=h264_vdpau \
    --enable-decoder=hevc \
    --enable-decoder=mp1 \
    --enable-decoder=mp1float \
    --enable-decoder=mp2 \
    --enable-decoder=mp2float \
    --enable-decoder=mp3 \
    --enable-decoder=mp3adu \
    --enable-decoder=mp3adufloat \
    --enable-decoder=mp3float \
    --enable-decoder=mp3on4 \
    --enable-decoder=mp3on4float \
    --enable-decoder=mpeg4 \
    --enable-decoder=mpeg4_vdpau \
    --enable-decoder=msmpeg4v2 \
    --enable-decoder=msmpeg4v3 \
    --enable-decoder=opus \
    --enable-decoder=pcm_alaw \
    --enable-decoder=pcm_f32be \
    --enable-decoder=pcm_f32le \
    --enable-decoder=pcm_f64be \
    --enable-decoder=pcm_f64le \
    --enable-decoder=pcm_lxf \
    --enable-decoder=pcm_mulaw \
    --enable-decoder=pcm_s16be \
    --enable-decoder=pcm_s16be_planar \
    --enable-decoder=pcm_s16le \
    --enable-decoder=pcm_s16le_planar \
    --enable-decoder=pcm_s24be \
    --enable-decoder=pcm_s24daud \
    --enable-decoder=pcm_s24le \
    --enable-decoder=pcm_s24le_planar \
    --enable-decoder=pcm_s32be \
    --enable-decoder=pcm_s32le \
    --enable-decoder=pcm_s32le_planar \
    --enable-decoder=pcm_s64be \
    --enable-decoder=pcm_s64le \
    --enable-decoder=pcm_s8 \
    --enable-decoder=pcm_s8_planar \
    --enable-decoder=pcm_u16be \
    --enable-decoder=pcm_u16le \
    --enable-decoder=pcm_u24be \
    --enable-decoder=pcm_u24le \
    --enable-decoder=pcm_u32be \
    --enable-decoder=pcm_u32le \
    --enable-decoder=pcm_u8 \
    --enable-decoder=pcm_zork \
    --enable-decoder=vorbis \
    --enable-decoder=wavpack \
    --enable-decoder=wmalossless \
    --enable-decoder=wmapro \
    --enable-decoder=wmav1 \
    --enable-decoder=wmav2 \
    --enable-decoder=wmavoice \
    --enable-encoder=libopus \
    --enable-parser=aac \
    --enable-parser=aac_latm \
    --enable-parser=flac \
    --enable-parser=h264 \
    --enable-parser=hevc \
    --enable-parser=mpeg4video \
    --enable-parser=mpegaudio \
    --enable-parser=opus \
    --enable-parser=vorbis \
    --enable-demuxer=aac \
    --enable-demuxer=flac \
    --enable-demuxer=gif \
    --enable-demuxer=h264 \
    --enable-demuxer=hevc \
    --enable-demuxer=m4v \
    --enable-demuxer=mov \
    --enable-demuxer=mp3 \
    --enable-demuxer=ogg \
    --enable-demuxer=wav \
    --enable-muxer=ogg \
    --enable-muxer=opus

RUN make -j$(nproc)
RUN make DESTDIR="$LibrariesPath/ffmpeg-cache" install

WORKDIR ..

FROM builder AS webrtc

COPY --from=mozjpeg ${LibrariesPath}/mozjpeg-cache /
COPY --from=opus ${LibrariesPath}/opus-cache /
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg-cache /
COPY --from=openssl ${LibrariesPath}/openssl-cache /

COPY tgcalls/third_party/webrtc ${LibrariesPath}/webrtc

WORKDIR webrtc

RUN cmake -B out/Release . \
    -DCMAKE_BUILD_TYPE=Release \
    -DTG_OWT_SPECIAL_TARGET=linux \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DTG_OWT_USE_PIPEWIRE=OFF \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include
RUN cmake --build out/Release -- -j$(nproc)

RUN cmake -B out/Debug . \
    -DCMAKE_BUILD_TYPE=Debug \
    -DTG_OWT_SPECIAL_TARGET=linux \
    -DBUILD_SHARED_LIBS=OFF \
    -DCMAKE_POSITION_INDEPENDENT_CODE=ON \
    -DTG_OWT_USE_PIPEWIRE=OFF \
    -DTG_OWT_LIBJPEG_INCLUDE_PATH=/usr/local/include \
    -DTG_OWT_OPENSSL_INCLUDE_PATH=$OPENSSL_PREFIX/include \
    -DTG_OWT_OPUS_INCLUDE_PATH=/usr/local/include/opus \
    -DTG_OWT_FFMPEG_INCLUDE_PATH=/usr/local/include
RUN cmake --build out/Debug -- -j$(nproc)

WORKDIR ..

FROM builder

COPY --from=mozjpeg ${LibrariesPath}/mozjpeg-cache /
COPY --from=opus ${LibrariesPath}/opus-cache /
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg ffmpeg
COPY --from=ffmpeg ${LibrariesPath}/ffmpeg-cache /
COPY --from=openssl ${LibrariesPath}/openssl-cache /
COPY --from=webrtc ${LibrariesPath}/webrtc tg_owt

WORKDIR ..
COPY ./ ${MainPath}/tgcalls
WORKDIR ${MainPath}/tgcalls

RUN pip3 install pyrogram tgcrypto telethon
RUN python3 setup.py build --debug

CMD pip3 wheel . --no-deps -w ../dist/ --use-feature=in-tree-build


================================================
FILE: build/windows/README.md
================================================
# Build instructions for Windows

- [Build instruction for Windows x32](../../.github/workflows/build_and_publish_win_x32_wheels_for_many_python_versions.yaml).
- [Build instruction for Windows x64](../../.github/workflows/build_and_publish_win_x64_wheels_for_many_python_versions.yaml).


================================================
FILE: docker-compose.yaml
================================================
version: "3.0"
services:
  tgcalls_x86_64:
    build:
      context: .
      dockerfile: build/manylinux/dev/Dockerfile
      args:
        MANYLINUX_PLATFORM: manylinux2014_x86_64
    command: ["cp36-cp36m cp37-cp37m cp38-cp38 cp39-cp39", "manylinux2014_x86_64"]
    environment:
      - ROOT_PATH=/usr/src
    volumes:
      - ./dist:/usr/src/dist
  tgcalls_aarch64:
    build:
      context: .
      dockerfile: build/manylinux/dev/Dockerfile
      args:
        MANYLINUX_PLATFORM: manylinux2014_aarch64
    command: ["cp36-cp36m cp37-cp37m cp38-cp38 cp39-cp39", "manylinux2014_aarch64"]
    environment:
      - ROOT_PATH=/usr/src
    volumes:
      - ./dist:/usr/src/dist
  tgcalls_ubuntu:
    build:
      context: .
      dockerfile: build/ubuntu/Dockerfile
    env_file: pytgcalls/.env
#    command: tail -F anything
    command: python3 pytgcalls/test3.py
    volumes:
      - ./dist:/usr/src/dist
      - ./pytgcalls:/usr/src/tgcalls/pytgcalls


================================================
FILE: examples/LICENSE
================================================
CC0 1.0 Universal

Statement of Purpose

The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator and
subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").

Certain owners wish to permanently relinquish those rights to a Work for the
purpose of contributing to a commons of creative, cultural and scientific
works ("Commons") that the public can reliably and without fear of later
claims of infringement build upon, modify, incorporate in other works, reuse
and redistribute as freely as possible in any form whatsoever and for any
purposes, including without limitation commercial purposes. These owners may
contribute to the Commons to promote the ideal of a free culture and the
further production of creative, cultural and scientific works, or to gain
reputation or greater distribution for their Work in part through the use and
efforts of others.

For these and/or other purposes and motivations, and without any expectation
of additional consideration or compensation, the person associating CC0 with a
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
and publicly distribute the Work under its terms, with knowledge of his or her
Copyright and Related Rights in the Work and the meaning and intended legal
effect of CC0 on those rights.

1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not limited
to, the following:

  i. the right to reproduce, adapt, distribute, perform, display, communicate,
  and translate a Work;

  ii. moral rights retained by the original author(s) and/or performer(s);

  iii. publicity and privacy rights pertaining to a person's image or likeness
  depicted in a Work;

  iv. rights protecting against unfair competition in regards to a Work,
  subject to the limitations in paragraph 4(a), below;

  v. rights protecting the extraction, dissemination, use and reuse of data in
  a Work;

  vi. database rights (such as those arising under Directive 96/9/EC of the
  European Parliament and of the Council of 11 March 1996 on the legal
  protection of databases, and under any national implementation thereof,
  including any amended or successor version of such directive); and

  vii. other similar, equivalent or corresponding rights throughout the world
  based on applicable law or treaty, and any national implementations thereof.

2. Waiver. To the greatest extent permitted by, but not in contravention of,
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
and Related Rights and associated claims and causes of action, whether now
known or unknown (including existing as well as future claims and causes of
action), in the Work (i) in all territories worldwide, (ii) for the maximum
duration provided by applicable law or treaty (including future time
extensions), (iii) in any current or future medium and for any number of
copies, and (iv) for any purpose whatsoever, including without limitation
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
the Waiver for the benefit of each member of the public at large and to the
detriment of Affirmer's heirs and successors, fully intending that such Waiver
shall not be subject to revocation, rescission, cancellation, termination, or
any other legal or equitable action to disrupt the quiet enjoyment of the Work
by the public as contemplated by Affirmer's express Statement of Purpose.

3. Public License Fallback. Should any part of the Waiver for any reason be
judged legally invalid or ineffective under applicable law, then the Waiver
shall be preserved to the maximum extent permitted taking into account
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
is so judged Affirmer hereby grants to each affected person a royalty-free,
non transferable, non sublicensable, non exclusive, irrevocable and
unconditional license to exercise Affirmer's Copyright and Related Rights in
the Work (i) in all territories worldwide, (ii) for the maximum duration
provided by applicable law or treaty (including future time extensions), (iii)
in any current or future medium and for any number of copies, and (iv) for any
purpose whatsoever, including without limitation commercial, advertising or
promotional purposes (the "License"). The License shall be deemed effective as
of the date CC0 was applied by Affirmer to the Work. Should any part of the
License for any reason be judged legally invalid or ineffective under
applicable law, such partial invalidity or ineffectiveness shall not
invalidate the remainder of the License, and in such case Affirmer hereby
affirms that he or she will not (i) exercise any of his or her remaining
Copyright and Related Rights in the Work or (ii) assert any associated claims
and causes of action with respect to the Work, in either case contrary to
Affirmer's express Statement of Purpose.

4. Limitations and Disclaimers.

  a. No trademark or patent rights held by Affirmer are waived, abandoned,
  surrendered, licensed or otherwise affected by this document.

  b. Affirmer offers the Work as-is and makes no representations or warranties
  of any kind concerning the Work, express, implied, statutory or otherwise,
  including without limitation warranties of title, merchantability, fitness
  for a particular purpose, non infringement, or the absence of latent or
  other defects, accuracy, or the present or absence of errors, whether or not
  discoverable, all to the greatest extent permissible under applicable law.

  c. Affirmer disclaims responsibility for clearing rights of other persons
  that may apply to the Work or any use thereof, including without limitation
  any person's Copyright and Related Rights in the Work. Further, Affirmer
  disclaims responsibility for obtaining any necessary consents, permissions
  or other rights required for any use of the Work.

  d. Affirmer understands and acknowledges that Creative Commons is not a
  party to this document and has no duty or obligation with respect to this
  CC0 or use of the Work.

For more information, please see
<http://creativecommons.org/publicdomain/zero/1.0/>

================================================
FILE: examples/README.md
================================================
## Examples

All examples are licensed under the [CC0 License](LICENSE) and are therefore fully 
dedicated to the public domain. You can use them as the base for your own bots 
without worrying about copyrights.

### [restream_using_raw_data.py](restream_using_raw_data.py)

**An example of transferring audio data in bytes directly using Python handlers.**
The example of streaming audio from one voice chat of channel/chat to another one.

### [player_as_smart_plugin.py](player_as_smart_plugin.py)

An example of a smart plugin for Pyrogram. Plays a music by replaying
to contained audio message via the command `!play`. Has the following commands:
`!join`, `!leave`, `!rejoin`, `!replay`, `!stop`, `!volume`, `!mute`, `!unmute`, `!pause`, `!resume`.
Reacts only to commands from the owner.

### [recorder_as_smart_plugin.py](recorder_as_smart_plugin.py)

Pyrogram Smart Plugin for recording a voice chat for 30 seconds and send recorded opus file along with
audio info to the group chat, just one owner only command `!record`.

### [radio_as_smart_plugin.py](radio_as_smart_plugin.py)

Example of using stream url in the set of voice chats (many VC at the same time).
Reacts only to commands from anonymous admins.

### [file_playout.py](file_playout.py)

An example of joining to a voice chat and playing music from file.

### [device_playout.py](device_playout.py)

An example of joining to a voice chat and capturing audio from microphone.

### [pyav.py](pyav.py)

An example of converting and streaming audio files/audio streams using pyav.


================================================
FILE: examples/device_playout.py
================================================
import os
import asyncio

import pytgcalls

# choose one of this
import telethon
import pyrogram

# EDIT VALUES!
API_HASH = None
API_ID = None
CHAT_ID = '@tgcallschat'
INPUT_DEVICE_NAME = 'MacBook Air Microphone'
OUTPUT_DEVICE_NAME = 'MacBook Air Speakers'
CLIENT_TYPE = pytgcalls.GroupCallFactory.MTPROTO_CLIENT_TYPE.PYROGRAM
# for Telethon uncomment line below
# CLIENT_TYPE = pytgcalls.GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON


async def main(client):
    # its for Pyrogram
    await client.start()
    while not client.is_connected:
        await asyncio.sleep(1)
    # for Telethon you can use this one:
    # client.start()

    group_call = pytgcalls.GroupCallFactory(client, CLIENT_TYPE)\
        .get_device_group_call(INPUT_DEVICE_NAME, OUTPUT_DEVICE_NAME)
    await group_call.start(CHAT_ID)

    # to get available device names
    print(group_call.get_playout_devices())
    print(group_call.get_recording_devices())

    await pyrogram.idle()


if __name__ == '__main__':
    tele_client = telethon.TelegramClient(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        int(os.environ['API_ID']),
        os.environ['API_HASH']
    )
    pyro_client = pyrogram.Client(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        api_hash=os.environ.get('API_HASH', API_HASH),
        api_id=os.environ.get('API_ID', API_ID),
    )

    # set your client (Pyrogram or Telethon)
    main_client = pyro_client

    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(main_client))


================================================
FILE: examples/file_playout.py
================================================
import os
import asyncio

import pytgcalls

# choose one of this
import telethon
import pyrogram

# EDIT VALUES!
API_HASH = None
API_ID = None
CHAT_ID = '@tgcallschat'
INPUT_FILENAME = 'input.raw'
OUTPUT_FILENAME = 'output.raw'
CLIENT_TYPE = pytgcalls.GroupCallFactory.MTPROTO_CLIENT_TYPE.PYROGRAM
# for Telethon uncomment line below
# CLIENT_TYPE = pytgcalls.GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON


async def main(client):
    # its for Pyrogram
    await client.start()
    while not client.is_connected:
        await asyncio.sleep(1)
    # for Telethon you can use this one:
    # client.start()

    # you can pass init filenames in the constructor
    group_call = pytgcalls.GroupCallFactory(client, CLIENT_TYPE)\
        .get_file_group_call(INPUT_FILENAME, OUTPUT_FILENAME)
    await group_call.start(CHAT_ID)

    # to change audio file you can do this:
    # group_call.input_filename = 'input2.raw'

    # to change output file:
    # group_call.output_filename = 'output2.raw'

    # to restart play from start:
    # group_call.restart_playout()

    # to stop play:
    # group_call.stop_playout()

    # same with output (recording)
    # .restart_recording, .stop_output

    # to mute yourself:
    # await group_call.set_is_mute(True)

    # to leave a VC
    # await group_call.stop()

    # to rejoin
    # await group_call.reconnect()

    await pyrogram.idle()


if __name__ == '__main__':
    tele_client = telethon.TelegramClient(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        int(os.environ['API_ID']),
        os.environ['API_HASH']
    )
    pyro_client = pyrogram.Client(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        api_hash=os.environ.get('API_HASH', API_HASH),
        api_id=os.environ.get('API_ID', API_ID),
    )

    # set your client (Pyrogram or Telethon)
    main_client = pyro_client

    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(main_client))


================================================
FILE: examples/player_as_smart_plugin.py
================================================
import os

import ffmpeg  # pip install ffmpeg-python
from pyrogram import Client, filters
from pyrogram.types import Message

from pytgcalls import GroupCallFactory  # pip install pytgcalls[pyrogram]

main_filter = filters.text & filters.outgoing & ~filters.edited
cmd_filter = lambda cmd: filters.command(cmd, prefixes='!')

group_call = None


def init_client_and_delete_message(func):
    async def wrapper(client, message):
        global group_call
        if not group_call:
            group_call = GroupCallFactory(client).get_file_group_call()

        await message.delete()

        return await func(client, message)

    return wrapper


@Client.on_message(main_filter & cmd_filter('play'))
async def start_playout(_, message: Message):
    if not message.reply_to_message or not message.reply_to_message.audio:
        return await message.delete()

    if not group_call:
        return await message.reply_text('You are not joined (type /join)')

    input_filename = 'input.raw'

    status = '- Downloading... \n'
    await message.edit_text(status)
    audio_original = await message.reply_to_message.download()

    status += '- Converting... \n'

    ffmpeg.input(audio_original).output(
        input_filename, format='s16le', acodec='pcm_s16le', ac=2, ar='48k'
    ).overwrite_output().run()

    os.remove(audio_original)

    status += f'- Playing **{message.reply_to_message.audio.title}**...'
    await message.edit_text(status)

    group_call.input_filename = input_filename


@Client.on_message(main_filter & cmd_filter('volume'))
@init_client_and_delete_message
async def volume(_, message):
    if len(message.command) < 2:
        return await message.reply_text('You forgot to pass volume (1-200)')

    await group_call.set_my_volume(message.command[1])


@Client.on_message(main_filter & cmd_filter('join'))
@init_client_and_delete_message
async def start(_, message: Message):
    await group_call.start(message.chat.id)


@Client.on_message(main_filter & cmd_filter('leave'))
@init_client_and_delete_message
async def stop(*_):
    await group_call.stop()


@Client.on_message(main_filter & cmd_filter('rejoin'))
@init_client_and_delete_message
async def reconnect(*_):
    await group_call.reconnect()


@Client.on_message(main_filter & cmd_filter('replay'))
@init_client_and_delete_message
async def restart_playout(*_):
    group_call.restart_playout()


@Client.on_message(main_filter & cmd_filter('stop'))
@init_client_and_delete_message
async def stop_playout(*_):
    group_call.stop_playout()


@Client.on_message(main_filter & cmd_filter('mute'))
@init_client_and_delete_message
async def mute(*_):
    await group_call.set_is_mute(True)


@Client.on_message(main_filter & cmd_filter('unmute'))
@init_client_and_delete_message
async def unmute(*_):
    await group_call.set_is_mute(False)


@Client.on_message(main_filter & cmd_filter('pause'))
@init_client_and_delete_message
async def pause(*_):
    group_call.pause_playout()


@Client.on_message(main_filter & cmd_filter('resume'))
@init_client_and_delete_message
async def resume(*_):
    group_call.resume_playout()


================================================
FILE: examples/pyav.py
================================================
# Example of processing audio using pyav: https://github.com/PyAV-Org/PyAV.
# Requires av (pip3 install av) and numpy (pip3 install numpy).


import asyncio
import os
from pytgcalls import GroupCallFactory
import pyrogram
import telethon
import av

API_HASH = None
API_ID = None

CHAT_PEER = '@tgcallschat'  # chat or channel where you want to play audio
SOURCE = 'input.mp3' # Audio file path or stream url: eg. https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3
CLIENT_TYPE = GroupCallFactory.MTPROTO_CLIENT_TYPE.PYROGRAM
# for Telethon uncomment line below
#CLIENT_TYPE = GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON

fifo = av.AudioFifo(format='s16le')
resampler = av.AudioResampler(format='s16', layout='stereo', rate=48000)


def on_played_data(gc, length):
    data = fifo.read(length / 4)
    if data:
        data = data.to_ndarray().tobytes()
    return data


async def main(client):
    await client.start()
    while not client.is_connected:
        await asyncio.sleep(1)

    group_call_factory = GroupCallFactory(client, CLIENT_TYPE)
    group_call_raw = group_call_factory.get_raw_group_call(on_played_data=on_played_data)
    await group_call_raw.start(CHAT_PEER)
    while not group_call_raw.is_connected:
        await asyncio.sleep(1)

    _input = av.open(SOURCE)
    for frame in _input.decode(audio=0):
        if frame:
            frame.pts = None
            frame = resampler.resample(frame)
            fifo.write(frame)

    await pyrogram.idle()

if __name__ == '__main__':
    tele_client = telethon.TelegramClient(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        int(os.environ['API_ID']),
        os.environ['API_HASH']
    )
    pyro_client = pyrogram.Client(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        api_hash=os.environ.get('API_HASH', API_HASH),
        api_id=os.environ.get('API_ID', API_ID),
    )
    # set your client (Pyrogram or Telethon)
    main_client = pyro_client

    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(main_client))


================================================
FILE: examples/radio_as_smart_plugin.py
================================================
import signal

import ffmpeg  # pip install ffmpeg-python
from pyrogram import Client, filters
from pyrogram.types import Message

from pytgcalls import GroupCallFactory  # pip install pytgcalls[pyrogram]

# Example of pinned message in a chat:
'''
Radio stations:

1. https://hls-01-regions.emgsound.ru/11_msk/playlist.m3u8

To start replay to this message with command !start <ID>
To stop use !stop command
'''


# Commands available only for anonymous admins
async def anon_filter(_, __, m: Message):
    return bool(m.from_user is None and m.sender_chat)


anonymous = filters.create(anon_filter)

GROUP_CALLS = {}
FFMPEG_PROCESSES = {}


@Client.on_message(anonymous & filters.command('start', prefixes='!'))
async def start(client, message: Message):
    input_filename = f'radio-{message.chat.id}.raw'

    group_call = GROUP_CALLS.get(message.chat.id)
    if group_call is None:
        group_call = GroupCallFactory(client, path_to_log_file='').get_file_group_call(input_filename)
        GROUP_CALLS[message.chat.id] = group_call

    if not message.reply_to_message or len(message.command) < 2:
        await message.reply_text('You forgot to replay list of stations or pass a station ID')
        return

    process = FFMPEG_PROCESSES.get(message.chat.id)
    if process:
        process.send_signal(signal.SIGTERM)

    station_stream_url = None
    station_id = message.command[1]
    msg_lines = message.reply_to_message.text.split('\n')
    for line in msg_lines:
        line_prefix = f'{station_id}. '
        if line.startswith(line_prefix):
            station_stream_url = line.replace(line_prefix, '').replace('\n', '')
            break

    if not station_stream_url:
        await message.reply_text(f'Can\'t find a station with id {station_id}')
        return

    await group_call.start(message.chat.id)

    process = (
        ffmpeg.input(station_stream_url)
        .output(input_filename, format='s16le', acodec='pcm_s16le', ac=2, ar='48k')
        .overwrite_output()
        .run_async()
    )
    FFMPEG_PROCESSES[message.chat.id] = process

    await message.reply_text(f'Radio #{station_id} is playing...')


@Client.on_message(anonymous & filters.command('stop', prefixes='!'))
async def stop(_, message: Message):
    group_call = GROUP_CALLS.get(message.chat.id)
    if group_call:
        await group_call.stop()

    process = FFMPEG_PROCESSES.get(message.chat.id)
    if process:
        process.send_signal(signal.SIGTERM)


================================================
FILE: examples/recorder_as_smart_plugin.py
================================================
"""Record Audio from Telegram Voice Chat

Dependencies:
- ffmpeg

Requirements (pip):
- pytgcalls[pyrogram]
- ffmpeg-python

Start the userbot and send !record to a voice chat
enabled group chat to start recording for 30 seconds
"""
import asyncio
import os
from datetime import datetime

import ffmpeg
from pyrogram import Client, filters
from pyrogram.types import Message

from pytgcalls import GroupCallFactory, GroupCallFileAction

GROUP_CALL = None
SECONDS_TO_RECORD = 30


@Client.on_message(
    filters.group & filters.text & filters.outgoing & ~filters.edited & filters.command('record', prefixes='!')
)
async def record_from_voice_chat(client: Client, m: Message):
    global GROUP_CALL
    if not GROUP_CALL:
        GROUP_CALL = GroupCallFactory(client, path_to_log_file='').get_file_group_call()

    GROUP_CALL.add_handler(network_status_changed_handler, GroupCallFileAction.NETWORK_STATUS_CHANGED)

    await GROUP_CALL.start(m.chat.id)
    await m.delete()


async def network_status_changed_handler(context, is_connected: bool):
    if is_connected:
        print('- JOINED VC')
        await record_and_send_opus_and_stop(context)
    else:
        print('- LEFT VC')


async def record_and_send_opus_and_stop(context):
    chat_id = int(f'-100{context.full_chat.id}')
    chat_info = await context.client.get_chat(chat_id)

    status_msg = await context.client.send_message(chat_id, '1/3 Recording...')

    utcnow_unix, utcnow_readable = get_utcnow()
    record_raw_filename, record_opus_filename = f'vcrec-{utcnow_unix}.raw', f'vcrec-{utcnow_unix}.opus'
    context.output_filename = record_raw_filename

    await asyncio.sleep(SECONDS_TO_RECORD)
    context.stop_output()

    await status_msg.edit_text('2/3 Transcoding...')
    ffmpeg.input(record_raw_filename, format='s16le', acodec='pcm_s16le', ac=2, ar='48k', loglevel='error').output(
        record_opus_filename
    ).overwrite_output().run()

    record_probe = ffmpeg.probe(record_opus_filename, pretty=None)

    stream = record_probe['streams'][0]
    time_base = [int(x) for x in stream['time_base'].split('/')]
    duration = round(time_base[0] / time_base[1] * int(stream['duration_ts']))

    caption = [
        f'- Format: `{stream["codec_name"]}`',
        f'- Channel(s): `{stream["channels"]}`',
        f'- Sampling rate: `{stream["sample_rate"]}`',
        f'- Bit rate: `{record_probe["format"]["bit_rate"]}`',
        f'- File size: `{record_probe["format"]["size"]}`',
    ]

    performer = chat_info.title
    if chat_info.username:
        performer = f'@{chat_info.username}'

    title = f'[VCREC] {utcnow_readable}'
    thumb_file = None
    if chat_info.photo:
        thumb_file = await context.client.download_media(chat_info.photo.big_file_id)

    await status_msg.edit_text('3/3 Uploading...')
    await context.client.send_audio(
        chat_id,
        record_opus_filename,
        caption='\n'.join(caption),
        duration=duration,
        performer=performer,
        title=title,
        thumb=thumb_file,
    )
    await status_msg.delete()

    await context.stop()

    if thumb_file:
        os.remove(thumb_file)
    [os.remove(f) for f in (record_raw_filename, record_opus_filename, thumb_file)]


def get_utcnow():
    utcnow = datetime.utcnow()
    utcnow_unix = utcnow.strftime('%s')
    utcnow_readable = utcnow.strftime('%Y-%m-%d %H:%M:%S')
    return utcnow_unix, utcnow_readable


================================================
FILE: examples/restream_using_raw_data.py
================================================
import asyncio
import os
from typing import Optional

from pytgcalls import GroupCallFactory

# choose one of this
import telethon
import pyrogram

# EDIT VALUES!
API_HASH = None
API_ID = None
PEER_ID = '@tgcallschat'  # chat or channel where you want to get audio
PEER_ID2 = '@tgcallslib'  # chat or channel where you want to play audio
CLIENT_TYPE = GroupCallFactory.MTPROTO_CLIENT_TYPE.PYROGRAM
# for Telethon uncomment line below
# CLIENT_TYPE = pytgcalls.GroupCallFactory.MTPROTO_CLIENT_TYPE.TELETHON

# global variable to transfer audio data between voice chats
# it's not a good implementation, but its works and so easy to understand
LAST_RECORDED_DATA = None


def on_played_data(_, length: int) -> Optional[bytes]:
    return LAST_RECORDED_DATA


def on_recorded_data(_, data: bytes, length: int) -> None:
    global LAST_RECORDED_DATA
    LAST_RECORDED_DATA = data


async def main(client):
    # its for Pyrogram
    await client.start()
    while not client.is_connected:
        await asyncio.sleep(1)
    # for Telethon you can use this one:
    # client.start()

    group_call_factory = GroupCallFactory(client, CLIENT_TYPE)

    # handle input audio data from the first peer
    group_call_from = group_call_factory.get_raw_group_call(on_recorded_data=on_recorded_data)
    await group_call_from.start(PEER_ID)
    # transfer input audio from the first peer to the second using handlers
    group_call_to = group_call_factory.get_raw_group_call(on_played_data=on_played_data)
    await group_call_to.start(PEER_ID2)

    await pyrogram.idle()


if __name__ == '__main__':
    tele_client = telethon.TelegramClient(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        int(os.environ['API_ID']),
        os.environ['API_HASH']
    )
    pyro_client = pyrogram.Client(
        os.environ.get('SESSION_NAME', 'pytgcalls'),
        api_hash=os.environ.get('API_HASH', API_HASH),
        api_id=os.environ.get('API_ID', API_ID),
    )

    # set your client (Pyrogram or Telethon)
    main_client = pyro_client

    loop = asyncio.get_event_loop()
    loop.run_until_complete(main(main_client))


================================================
FILE: pytgcalls/LICENSE
================================================
                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

================================================
FILE: pytgcalls/MANIFEST.in
================================================
include LICENSE

================================================
FILE: pytgcalls/helpers.py
================================================
# PytgVoIP - Telegram VoIP Library for Python
# Copyright (C) 2020 bakatrouble <https://github.com/bakatrouble>
#
# This file is part of PytgVoIP.
#
# PytgVoIP is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# PytgVoIP is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PytgVoIP.  If not, see <http://www.gnu.org/licenses/>.


import hashlib
import time
from typing import List, Union

"""
.. module:: utils
    :synopsis: Utility functions for pytgvoip
"""

twoe1984 = 1 << 1984  # 2^1984 https://core.telegram.org/api/end-to-end#sending-a-request
emojis = (
    ('\U0001f609', 'WINKING_FACE'),
    ('\U0001f60d', 'SMILING_FACE_WITH_HEART_EYES'),
    ('\U0001f61b', 'FACE_WITH_TONGUE'),
    ('\U0001f62d', 'LOUDLY_CRYING_FACE'),
    ('\U0001f631', 'FACE_SCREAMING_IN_FEAR'),
    ('\U0001f621', 'POUTING_FACE'),
    ('\U0001f60e', 'SMILING_FACE_WITH_SUNGLASSES'),
    ('\U0001f634', 'SLEEPING_FACE'),
    ('\U0001f635', 'DIZZY_FACE'),
    ('\U0001f608', 'SMILING_FACE_WITH_HORNS'),
    ('\U0001f62c', 'GRIMACING_FACE'),
    ('\U0001f607', 'SMILING_FACE_WITH_HALO'),
    ('\U0001f60f', 'SMIRKING_FACE'),
    ('\U0001f46e', 'POLICE_OFFICER'),
    ('\U0001f477', 'CONSTRUCTION_WORKER'),
    ('\U0001f482', 'GUARD'),
    ('\U0001f476', 'BABY'),
    ('\U0001f468', 'MAN'),
    ('\U0001f469', 'WOMAN'),
    ('\U0001f474', 'OLD_MAN'),
    ('\U0001f475', 'OLD_WOMAN'),
    ('\U0001f63b', 'SMILING_CAT_FACE_WITH_HEART_EYES'),
    ('\U0001f63d', 'KISSING_CAT_FACE'),
    ('\U0001f640', 'WEARY_CAT_FACE'),
    ('\U0001f47a', 'GOBLIN'),
    ('\U0001f648', 'SEE_NO_EVIL_MONKEY'),
    ('\U0001f649', 'HEAR_NO_EVIL_MONKEY'),
    ('\U0001f64a', 'SPEAK_NO_EVIL_MONKEY'),
    ('\U0001f480', 'SKULL'),
    ('\U0001f47d', 'ALIEN'),
    ('\U0001f4a9', 'PILE_OF_POO'),
    ('\U0001f525', 'FIRE'),
    ('\U0001f4a5', 'COLLISION'),
    ('\U0001f4a4', 'ZZZ'),
    ('\U0001f442', 'EAR'),
    ('\U0001f440', 'EYES'),
    ('\U0001f443', 'NOSE'),
    ('\U0001f445', 'TONGUE'),
    ('\U0001f444', 'MOUTH'),
    ('\U0001f44d', 'THUMBS_UP'),
    ('\U0001f44e', 'THUMBS_DOWN'),
    ('\U0001f44c', 'OK_HAND'),
    ('\U0001f44a', 'ONCOMING_FIST'),
    ('\u270c', 'VICTORY_HAND'),
    ('\u270b', 'RAISED_HAND'),
    ('\U0001f450', 'OPEN_HANDS'),
    ('\U0001f446', 'BACKHAND_INDEX_POINTING_UP'),
    ('\U0001f447', 'BACKHAND_INDEX_POINTING_DOWN'),
    ('\U0001f449', 'BACKHAND_INDEX_POINTING_RIGHT'),
    ('\U0001f448', 'BACKHAND_INDEX_POINTING_LEFT'),
    ('\U0001f64f', 'FOLDED_HANDS'),
    ('\U0001f44f', 'CLAPPING_HANDS'),
    ('\U0001f4aa', 'FLEXED_BICEPS'),
    ('\U0001f6b6', 'PERSON_WALKING'),
    ('\U0001f3c3', 'PERSON_RUNNING'),
    ('\U0001f483', 'WOMAN_DANCING'),
    ('\U0001f46b', 'MAN_AND_WOMAN_HOLDING_HANDS'),
    ('\U0001f46a', 'FAMILY'),
    ('\U0001f46c', 'TWO_MEN_HOLDING_HANDS'),
    ('\U0001f46d', 'TWO_WOMEN_HOLDING_HANDS'),
    ('\U0001f485', 'NAIL_POLISH'),
    ('\U0001f3a9', 'TOP_HAT'),
    ('\U0001f451', 'CROWN'),
    ('\U0001f452', 'WOMAN_S_HAT'),
    ('\U0001f45f', 'RUNNING_SHOE'),
    ('\U0001f45e', 'MAN_S_SHOE'),
    ('\U0001f460', 'HIGH_HEELED_SHOE'),
    ('\U0001f455', 'T_SHIRT'),
    ('\U0001f457', 'DRESS'),
    ('\U0001f456', 'JEANS'),
    ('\U0001f459', 'BIKINI'),
    ('\U0001f45c', 'HANDBAG'),
    ('\U0001f453', 'GLASSES'),
    ('\U0001f380', 'RIBBON'),
    ('\U0001f484', 'LIPSTICK'),
    ('\U0001f49b', 'YELLOW_HEART'),
    ('\U0001f499', 'BLUE_HEART'),
    ('\U0001f49c', 'PURPLE_HEART'),
    ('\U0001f49a', 'GREEN_HEART'),
    ('\U0001f48d', 'RING'),
    ('\U0001f48e', 'GEM_STONE'),
    ('\U0001f436', 'DOG_FACE'),
    ('\U0001f43a', 'WOLF_FACE'),
    ('\U0001f431', 'CAT_FACE'),
    ('\U0001f42d', 'MOUSE_FACE'),
    ('\U0001f439', 'HAMSTER_FACE'),
    ('\U0001f430', 'RABBIT_FACE'),
    ('\U0001f438', 'FROG_FACE'),
    ('\U0001f42f', 'TIGER_FACE'),
    ('\U0001f428', 'KOALA'),
    ('\U0001f43b', 'BEAR_FACE'),
    ('\U0001f437', 'PIG_FACE'),
    ('\U0001f42e', 'COW_FACE'),
    ('\U0001f417', 'BOAR'),
    ('\U0001f434', 'HORSE_FACE'),
    ('\U0001f411', 'EWE'),
    ('\U0001f418', 'ELEPHANT'),
    ('\U0001f43c', 'PANDA_FACE'),
    ('\U0001f427', 'PENGUIN'),
    ('\U0001f425', 'FRONT_FACING_BABY_CHICK'),
    ('\U0001f414', 'CHICKEN'),
    ('\U0001f40d', 'SNAKE'),
    ('\U0001f422', 'TURTLE'),
    ('\U0001f41b', 'BUG'),
    ('\U0001f41d', 'HONEYBEE'),
    ('\U0001f41c', 'ANT'),
    ('\U0001f41e', 'LADY_BEETLE'),
    ('\U0001f40c', 'SNAIL'),
    ('\U0001f419', 'OCTOPUS'),
    ('\U0001f41a', 'SPIRAL_SHELL'),
    ('\U0001f41f', 'FISH'),
    ('\U0001f42c', 'DOLPHIN'),
    ('\U0001f40b', 'WHALE'),
    ('\U0001f410', 'GOAT'),
    ('\U0001f40a', 'CROCODILE'),
    ('\U0001f42b', 'TWO_HUMP_CAMEL'),
    ('\U0001f340', 'FOUR_LEAF_CLOVER'),
    ('\U0001f339', 'ROSE'),
    ('\U0001f33b', 'SUNFLOWER'),
    ('\U0001f341', 'MAPLE_LEAF'),
    ('\U0001f33e', 'SHEAF_OF_RICE'),
    ('\U0001f344', 'MUSHROOM'),
    ('\U0001f335', 'CACTUS'),
    ('\U0001f334', 'PALM_TREE'),
    ('\U0001f333', 'DECIDUOUS_TREE'),
    ('\U0001f31e', 'SUN_WITH_FACE'),
    ('\U0001f31a', 'NEW_MOON_FACE'),
    ('\U0001f319', 'CRESCENT_MOON'),
    ('\U0001f30e', 'GLOBE_SHOWING_AMERICAS'),
    ('\U0001f30b', 'VOLCANO'),
    ('\u26a1', 'HIGH_VOLTAGE'),
    ('\u2614', 'UMBRELLA_WITH_RAIN_DROPS'),
    ('\u2744', 'SNOWFLAKE'),
    ('\u26c4', 'SNOWMAN_WITHOUT_SNOW'),
    ('\U0001f300', 'CYCLONE'),
    ('\U0001f308', 'RAINBOW'),
    ('\U0001f30a', 'WATER_WAVE'),
    ('\U0001f393', 'GRADUATION_CAP'),
    ('\U0001f386', 'FIREWORKS'),
    ('\U0001f383', 'JACK_O_LANTERN'),
    ('\U0001f47b', 'GHOST'),
    ('\U0001f385', 'SANTA_CLAUS'),
    ('\U0001f384', 'CHRISTMAS_TREE'),
    ('\U0001f381', 'WRAPPED_GIFT'),
    ('\U0001f388', 'BALLOON'),
    ('\U0001f52e', 'CRYSTAL_BALL'),
    ('\U0001f3a5', 'MOVIE_CAMERA'),
    ('\U0001f4f7', 'CAMERA'),
    ('\U0001f4bf', 'OPTICAL_DISK'),
    ('\U0001f4bb', 'LAPTOP_COMPUTER'),
    ('\u260e', 'TELEPHONE'),
    ('\U0001f4e1', 'SATELLITE_ANTENNA'),
    ('\U0001f4fa', 'TELEVISION'),
    ('\U0001f4fb', 'RADIO'),
    ('\U0001f509', 'SPEAKER_MEDIUM_VOLUME'),
    ('\U0001f514', 'BELL'),
    ('\u23f3', 'HOURGLASS_NOT_DONE'),
    ('\u23f0', 'ALARM_CLOCK'),
    ('\u231a', 'WATCH'),
    ('\U0001f512', 'LOCKED'),
    ('\U0001f511', 'KEY'),
    ('\U0001f50e', 'MAGNIFYING_GLASS_TILTED_RIGHT'),
    ('\U0001f4a1', 'LIGHT_BULB'),
    ('\U0001f526', 'FLASHLIGHT'),
    ('\U0001f50c', 'ELECTRIC_PLUG'),
    ('\U0001f50b', 'BATTERY'),
    ('\U0001f6bf', 'SHOWER'),
    ('\U0001f6bd', 'TOILET'),
    ('\U0001f527', 'WRENCH'),
    ('\U0001f528', 'HAMMER'),
    ('\U0001f6aa', 'DOOR'),
    ('\U0001f6ac', 'CIGARETTE'),
    ('\U0001f4a3', 'BOMB'),
    ('\U0001f52b', 'PISTOL'),
    ('\U0001f52a', 'KITCHEN_KNIFE'),
    ('\U0001f48a', 'PILL'),
    ('\U0001f489', 'SYRINGE'),
    ('\U0001f4b0', 'MONEY_BAG'),
    ('\U0001f4b5', 'DOLLAR_BANKNOTE'),
    ('\U0001f4b3', 'CREDIT_CARD'),
    ('\u2709', 'ENVELOPE'),
    ('\U0001f4eb', 'CLOSED_MAILBOX_WITH_RAISED_FLAG'),
    ('\U0001f4e6', 'PACKAGE'),
    ('\U0001f4c5', 'CALENDAR'),
    ('\U0001f4c1', 'FILE_FOLDER'),
    ('\u2702', 'SCISSORS'),
    ('\U0001f4cc', 'PUSHPIN'),
    ('\U0001f4ce', 'PAPERCLIP'),
    ('\u2712', 'BLACK_NIB'),
    ('\u270f', 'PENCIL'),
    ('\U0001f4d0', 'TRIANGULAR_RULER'),
    ('\U0001f4da', 'BOOKS'),
    ('\U0001f52c', 'MICROSCOPE'),
    ('\U0001f52d', 'TELESCOPE'),
    ('\U0001f3a8', 'ARTIST_PALETTE'),
    ('\U0001f3ac', 'CLAPPER_BOARD'),
    ('\U0001f3a4', 'MICROPHONE'),
    ('\U0001f3a7', 'HEADPHONE'),
    ('\U0001f3b5', 'MUSICAL_NOTE'),
    ('\U0001f3b9', 'MUSICAL_KEYBOARD'),
    ('\U0001f3bb', 'VIOLIN'),
    ('\U0001f3ba', 'TRUMPET'),
    ('\U0001f3b8', 'GUITAR'),
    ('\U0001f47e', 'ALIEN_MONSTER'),
    ('\U0001f3ae', 'VIDEO_GAME'),
    ('\U0001f0cf', 'JOKER'),
    ('\U0001f3b2', 'GAME_DIE'),
    ('\U0001f3af', 'DIRECT_HIT'),
    ('\U0001f3c8', 'AMERICAN_FOOTBALL'),
    ('\U0001f3c0', 'BASKETBALL'),
    ('\u26bd', 'SOCCER_BALL'),
    ('\u26be', 'BASEBALL'),
    ('\U0001f3be', 'TENNIS'),
    ('\U0001f3b1', 'POOL_8_BALL'),
    ('\U0001f3c9', 'RUGBY_FOOTBALL'),
    ('\U0001f3b3', 'BOWLING'),
    ('\U0001f3c1', 'CHEQUERED_FLAG'),
    ('\U0001f3c7', 'HORSE_RACING'),
    ('\U0001f3c6', 'TROPHY'),
    ('\U0001f3ca', 'PERSON_SWIMMING'),
    ('\U0001f3c4', 'PERSON_SURFING'),
    ('\u2615', 'HOT_BEVERAGE'),
    ('\U0001f37c', 'BABY_BOTTLE'),
    ('\U0001f37a', 'BEER_MUG'),
    ('\U0001f377', 'WINE_GLASS'),
    ('\U0001f374', 'FORK_AND_KNIFE'),
    ('\U0001f355', 'PIZZA'),
    ('\U0001f354', 'HAMBURGER'),
    ('\U0001f35f', 'FRENCH_FRIES'),
    ('\U0001f357', 'POULTRY_LEG'),
    ('\U0001f371', 'BENTO_BOX'),
    ('\U0001f35a', 'COOKED_RICE'),
    ('\U0001f35c', 'STEAMING_BOWL'),
    ('\U0001f361', 'DANGO'),
    ('\U0001f373', 'COOKING'),
    ('\U0001f35e', 'BREAD'),
    ('\U0001f369', 'DOUGHNUT'),
    ('\U0001f366', 'SOFT_ICE_CREAM'),
    ('\U0001f382', 'BIRTHDAY_CAKE'),
    ('\U0001f370', 'SHORTCAKE'),
    ('\U0001f36a', 'COOKIE'),
    ('\U0001f36b', 'CHOCOLATE_BAR'),
    ('\U0001f36d', 'LOLLIPOP'),
    ('\U0001f36f', 'HONEY_POT'),
    ('\U0001f34e', 'RED_APPLE'),
    ('\U0001f34f', 'GREEN_APPLE'),
    ('\U0001f34a', 'TANGERINE'),
    ('\U0001f34b', 'LEMON'),
    ('\U0001f352', 'CHERRIES'),
    ('\U0001f347', 'GRAPES'),
    ('\U0001f349', 'WATERMELON'),
    ('\U0001f353', 'STRAWBERRY'),
    ('\U0001f351', 'PEACH'),
    ('\U0001f34c', 'BANANA'),
    ('\U0001f350', 'PEAR'),
    ('\U0001f34d', 'PINEAPPLE'),
    ('\U0001f346', 'EGGPLANT'),
    ('\U0001f345', 'TOMATO'),
    ('\U0001f33d', 'EAR_OF_CORN'),
    ('\U0001f3e1', 'HOUSE_WITH_GARDEN'),
    ('\U0001f3e5', 'HOSPITAL'),
    ('\U0001f3e6', 'BANK'),
    ('\u26ea', 'CHURCH'),
    ('\U0001f3f0', 'CASTLE'),
    ('\u26fa', 'TENT'),
    ('\U0001f3ed', 'FACTORY'),
    ('\U0001f5fb', 'MOUNT_FUJI'),
    ('\U0001f5fd', 'STATUE_OF_LIBERTY'),
    ('\U0001f3a0', 'CAROUSEL_HORSE'),
    ('\U0001f3a1', 'FERRIS_WHEEL'),
    ('\u26f2', 'FOUNTAIN'),
    ('\U0001f3a2', 'ROLLER_COASTER'),
    ('\U0001f6a2', 'SHIP'),
    ('\U0001f6a4', 'SPEEDBOAT'),
    ('\u2693', 'ANCHOR'),
    ('\U0001f680', 'ROCKET'),
    ('\u2708', 'AIRPLANE'),
    ('\U0001f681', 'HELICOPTER'),
    ('\U0001f682', 'LOCOMOTIVE'),
    ('\U0001f68b', 'TRAM_CAR'),
    ('\U0001f68e', 'TROLLEYBUS'),
    ('\U0001f68c', 'BUS'),
    ('\U0001f699', 'SPORT_UTILITY_VEHICLE'),
    ('\U0001f697', 'AUTOMOBILE'),
    ('\U0001f695', 'TAXI'),
    ('\U0001f69b', 'ARTICULATED_LORRY'),
    ('\U0001f6a8', 'POLICE_CAR_LIGHT'),
    ('\U0001f694', 'ONCOMING_POLICE_CAR'),
    ('\U0001f692', 'FIRE_ENGINE'),
    ('\U0001f691', 'AMBULANCE'),
    ('\U0001f6b2', 'BICYCLE'),
    ('\U0001f6a0', 'MOUNTAIN_CABLEWAY'),
    ('\U0001f69c', 'TRACTOR'),
    ('\U0001f6a6', 'VERTICAL_TRAFFIC_LIGHT'),
    ('\u26a0', 'WARNING'),
    ('\U0001f6a7', 'CONSTRUCTION'),
    ('\u26fd', 'FUEL_PUMP'),
    ('\U0001f3b0', 'SLOT_MACHINE'),
    ('\U0001f5ff', 'MOAI'),
    ('\U0001f3aa', 'CIRCUS_TENT'),
    ('\U0001f3ad', 'PERFORMING_ARTS'),
    ('\U0001f1ef\\U0001f1f5', 'JAPAN'),
    ('\U0001f1f0\\U0001f1f7', 'SOUTH_KOREA'),
    ('\U0001f1e9\\U0001f1ea', 'GERMANY'),
    ('\U0001f1e8\\U0001f1f3', 'CHINA'),
    ('\U0001f1fa\\U0001f1f8', 'UNITED_STATES'),
    ('\U0001f1eb\\U0001f1f7', 'FRANCE'),
    ('\U0001f1ea\\U0001f1f8', 'SPAIN'),
    ('\U0001f1ee\\U0001f1f9', 'ITALY'),
    ('\U0001f1f7\\U0001f1fa', 'RUSSIA'),
    ('\U0001f1ec\\U0001f1e7', 'UNITED_KINGDOM'),
    ('1\u20e3', 'KEYCAP_ONE'),
    ('2\u20e3', 'KEYCAP_TWO'),
    ('3\u20e3', 'KEYCAP_THREE'),
    ('4\u20e3', 'KEYCAP_FOUR'),
    ('5\u20e3', 'KEYCAP_FIVE'),
    ('6\u20e3', 'KEYCAP_SIX'),
    ('7\u20e3', 'KEYCAP_SEVEN'),
    ('8\u20e3', 'KEYCAP_EIGHT'),
    ('9\u20e3', 'KEYCAP_NINE'),
    ('0\u20e3', 'KEYCAP_ZERO'),
    ('\U0001f51f', 'KEYCAP_10'),
    ('\u2757', 'EXCLAMATION_MARK'),
    ('\u2753', 'QUESTION_MARK'),
    ('\u2665', 'HEART_SUIT'),
    ('\u2666', 'DIAMOND_SUIT'),
    ('\U0001f4af', 'HUNDRED_POINTS'),
    ('\U0001f517', 'LINK'),
    ('\U0001f531', 'TRIDENT_EMBLEM'),
    ('\U0001f534', 'RED_CIRCLE'),
    ('\U0001f535', 'BLUE_CIRCLE'),
    ('\U0001f536', 'LARGE_ORANGE_DIAMOND'),
    ('\U0001f537', 'LARGE_BLUE_DIAMOND'),
)
common_prime = (
    b'\xC7\x1C\xAE\xB9\xC6\xB1\xC9\x04\x8E\x6C\x52\x2F\x70\xF1\x3F\x73\x98\x0D\x40\x23\x8E\x3E\x21\xC1\x49'
    b'\x34\xD0\x37\x56\x3D\x93\x0F\x48\x19\x8A\x0A\xA7\xC1\x40\x58\x22\x94\x93\xD2\x25\x30\xF4\xDB\xFA\x33'
    b'\x6F\x6E\x0A\xC9\x25\x13\x95\x43\xAE\xD4\x4C\xCE\x7C\x37\x20\xFD\x51\xF6\x94\x58\x70\x5A\xC6\x8C\xD4'
    b'\xFE\x6B\x6B\x13\xAB\xDC\x97\x46\x51\x29\x69\x32\x84\x54\xF1\x8F\xAF\x8C\x59\x5F\x64\x24\x77\xFE\x96'
    b'\xBB\x2A\x94\x1D\x5B\xCD\x1D\x4A\xC8\xCC\x49\x88\x07\x08\xFA\x9B\x37\x8E\x3C\x4F\x3A\x90\x60\xBE\xE6'
    b'\x7C\xF9\xA4\xA4\xA6\x95\x81\x10\x51\x90\x7E\x16\x27\x53\xB5\x6B\x0F\x6B\x41\x0D\xBA\x74\xD8\xA8\x4B'
    b'\x2A\x14\xB3\x14\x4E\x0E\xF1\x28\x47\x54\xFD\x17\xED\x95\x0D\x59\x65\xB4\xB9\xDD\x46\x58\x2D\xB1\x17'
    b'\x8D\x16\x9C\x6B\xC4\x65\xB0\xD6\xFF\x9C\xA3\x92\x8F\xEF\x5B\x9A\xE4\xE4\x18\xFC\x15\xE8\x3E\xBE\xA0'
    b'\xF8\x7F\xA9\xFF\x5E\xED\x70\x05\x0D\xED\x28\x49\xF4\x7B\xF9\x59\xD9\x56\x85\x0C\xE9\x29\x85\x1F\x0D'
    b'\x81\x15\xF6\x35\xB1\x05\xEE\x2E\x4E\x15\xD0\x4B\x24\x54\xBF\x6F\x4F\xAD\xF0\x34\xB1\x04\x03\x11\x9C'
    b'\xD8\xE3\xB9\x2F\xCC\x5B'
)


def i2b(value: int) -> bytes:
    """
    Convert integer value to bytes

    Args:
        value (``int``):
            Value to convert

    Returns:
        Resulting ``bytes`` object
    """
    return int.to_bytes(
        value, length=(value.bit_length() + 8 - 1) // 8, byteorder='big', signed=False  # 8 bits per byte,
    )


def b2i(value: bytes) -> int:
    """
    Convert bytes value to integer

    Args:
        value (``bytes``):
            Value to convert

    Returns:
        Resulting ``int`` object
    """
    return int.from_bytes(value, 'big')


def check_dhc(g: int, p: int) -> None:
    """
    Security checks for Diffie-Hellman prime and generator. Ported from Java implementation for Android

    Args:
        g (``int``): DH generator
        p (``int``): DH prime

    Raises:
        :class:`ValueError` if checks are not passed
    """
    if not 2 <= g <= 7:
        raise ValueError()

    if p.bit_length() != 2048 or p < 0:
        raise ValueError()

    if (
        g == 2
        and p % 8 != 7
        or g == 3  # p % 8 = 7 for g = 2
        and p % 3 != 2
        or g == 5  # p % 3 = 2 for g = 3
        and p % 5 not in (1, 4)
        or g == 6  # p % 5 = 1 or 4 for g = 5
        and p % 24 not in (19, 23)
        or g == 7  # p % 24 = 19 or 23 for g = 6
        and p % 7 not in (3, 5, 6)  # p % 7 = 3, 5 or 6 for g = 7
    ):
        raise ValueError()

    if i2b(p) == common_prime:
        return

    # let's assume that (p - 1) / 2 is prime because checking its primality is an expensive operation...


def check_g(g_x: int, p: int) -> None:
    """
    Check g\_ numbers

    Args:
        g_x: g\_ number to check
        p: DH prime

    Raises:
        :class:`ValueError` if checks are not passed
    """
    if not (1 < g_x < p - 1):
        raise ValueError('g_x is invalid (1 < g_x < p - 1 is false)')
    if not (twoe1984 < g_x < p - twoe1984):
        raise ValueError('g_x is invalid (2^1984 < g_x < p - 2^1984 is false)')


def calc_fingerprint(key: bytes) -> int:
    """
    Calculate key fingerprint

    Args:
        key (``bytes``):
            Key to generate fingerprint for

    Returns:
        :class:`int` object representing a key fingerprint
    """
    return int.from_bytes(bytes(hashlib.sha1(key).digest()[-8:]), 'little', signed=True)


def generate_visualization(key: Union[bytes, int], part2: Union[bytes, int]) -> (List[str], List[str]):
    """
    Generate emoji visualization of key

    https://core.telegram.org/api/end-to-end/voice-calls#key-verification

    Args:
        key (``bytes`` | ``int``):
            Call auth key

        part2 (``bytes`` | ``int``):
            `g_a` value of the caller

    Returns:
        A tuple containing two lists (of emoji strings and of their text representations)
    """
    if isinstance(key, int):
        key = i2b(key)
    if isinstance(part2, int):
        part2 = i2b(part2)

    visualization = []
    visualization_text = []
    vis_src = hashlib.sha256(key + part2).digest()
    for i in range(0, len(vis_src), 8):
        number = vis_src[i : i + 8]
        number = i2b(number[0] & 0x7F) + number[1:]
        idx = int.from_bytes(number, 'big') % len(emojis)
        visualization.append(emojis[idx][0])
        visualization_text.append(emojis[idx][1])
    return visualization, visualization_text


def get_real_elapsed_time() -> float:
    """
    Get current performance counter value

    Returns:
        Time to use for measuring call duration
    """
    return time.perf_counter()


================================================
FILE: pytgcalls/pdoc/config.mako
================================================
<%!

show_inherited_members = True

google_search_query = '''
    site:tgcalls.org
'''

%>

================================================
FILE: pytgcalls/pdoc/credits.mako
================================================
<p>© Copyright 2020-2021 <a target="_blank" href="https://github.com/MarshalX">Il`ya (Marshal)</a></>

================================================
FILE: pytgcalls/pdoc/head.mako
================================================
<meta property="og:type" content="object" />
<meta property="og:title" content="pytgcalls documentation" />
<meta property="og:description" content="Voice chats, private incoming and outgoing calls in Telegram for Developers" />
<meta property="og:image" content="https://github.com/MarshalX/tgcalls/raw/main/.github/images/pytgcalls_square.png" />

================================================
FILE: pytgcalls/pdoc/logo.mako
================================================
<p align="center">
    <a href="/">
        <img src="https://github.com/MarshalX/tgcalls/raw/main/.github/images/pytgcalls.png" alt="pytgcalls">
    </a>
    <br>
    <a target="_blank" href="https://github.com/MarshalX/tgcalls">
        GitHub
    </a>
    •
    <a target="_blank" href="https://github.com/MarshalX/tgcalls/tree/main/examples">
        Examples
    </a>
    •
    <a target="_blank" href="https://pypi.org/project/pytgcalls/">
        PyPi
    </a>
    •
    <a target="_blank" href="https://github.com/MarshalX/tgcalls/tree/main/pytgcalls">
        Sources
    </a>
</p>

================================================
FILE: pytgcalls/pyproject.toml
================================================
[tool.black]
line-length = 120
skip-string-normalization=true
target-version = ['py36']
include = '\.pyi?$'
exclude = '''
(
  /(
      \.eggs
    | \.git
    | \.hg
    | \.mypy_cache
    | \.tox
    | \.venv
    | _build
    | buck-out
    | build
    | dist
  )/
)
'''


================================================
FILE: pytgcalls/pytgcalls/__init__.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.


from pytgcalls.exceptions import PytgcallsError
from pytgcalls.group_call_factory import GroupCallFactory
from pytgcalls.implementation.group_call_file import GroupCallFileAction
from pytgcalls.implementation.group_call_base import GroupCallBaseAction


__all__ = [
    'GroupCallFactory',
    'GroupCallFileAction',
    'GroupCallBaseAction',
]
__version__ = '3.0.0.dev23'
__pdoc__ = {
    # files
    'utils': False,
    'dispatcher': False,
}


================================================
FILE: pytgcalls/pytgcalls/dispatcher/__init__.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from pytgcalls.dispatcher.action import Action
from pytgcalls.dispatcher.dispatcher import Dispatcher
from pytgcalls.dispatcher.dispatcher_mixin import DispatcherMixin

__all__ = [
    'Action',
    'Dispatcher',
    'DispatcherMixin',
]


================================================
FILE: pytgcalls/pytgcalls/dispatcher/action.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.


class Action:
    def __set_name__(self, owner, name):
        self.name = name

    def __get__(self, instance, owner):
        return self.name


================================================
FILE: pytgcalls/pytgcalls/dispatcher/dispatcher.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

import asyncio
import logging
from typing import Callable, List

from typing import TYPE_CHECKING

from ..exceptions import PytgcallsError

if TYPE_CHECKING:
    from . import GroupCallNative

logger = logging.getLogger(__name__)


class Dispatcher:
    def __init__(self, available_actions: type):
        self.actions = available_actions
        self.__action_to_handlers = self.__build_handler_storage()

    def __build_handler_storage(self):
        logger.debug('Build storage of handlers for dispatcher.')
        return {action: [] for action in dir(self.actions) if not action.startswith('_')}

    def add_handler(self, callback: Callable, action: str) -> Callable:
        logger.debug(f'Add handler to {action} action...')
        if not asyncio.iscoroutinefunction(callback):
            raise PytgcallsError('Sync callback does not supported')

        try:
            handlers = self.__action_to_handlers[action]
            if callback in handlers:
                logger.debug('Handler is already set.')
                return callback

            handlers.append(callback)
        except KeyError:
            raise PytgcallsError('Invalid action')

        logger.debug('Handler added.')
        return callback

    def remove_handler(self, callback: Callable, action: str) -> bool:
        logger.debug(f'Remove handler of {action} action...')
        try:
            handlers = self.__action_to_handlers[action]
            for i in range(len(handlers)):
                if handlers[i] == callback:
                    del handlers[i]
                    return True
        except KeyError:
            raise PytgcallsError('Invalid action')

        return False

    def remove_all(self):
        self.__action_to_handlers = self.__build_handler_storage()

    def get_handlers(self, action: str) -> List[Callable]:
        try:
            logger.debug(f'Get {action} handlers...')
            return self.__action_to_handlers[action]
        except KeyError:
            raise PytgcallsError('Invalid action')

    def trigger_handlers(self, action: str, instance: 'GroupCallNative', *args, **kwargs):
        logger.debug(f'Trigger {action} handlers...')

        for handler in self.get_handlers(action):
            logger.debug(f'Trigger {handler.__name__}...')
            instance.get_event_loop().create_task(handler(instance, *args, **kwargs))


================================================
FILE: pytgcalls/pytgcalls/dispatcher/dispatcher_mixin.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from typing import Callable, TYPE_CHECKING

if TYPE_CHECKING:
    from . import GroupCallNative

from .dispatcher import Dispatcher


class DispatcherMixin:
    def __init__(self, actions):
        self._dispatcher = Dispatcher(actions)

    def add_handler(self, callback: Callable, action: str) -> Callable:
        """Register new handler.

        Args:
            callback (`Callable`): Callback function.
            action (`str`): Action.

        Returns:
            `Callable`: original callback.
        """

        return self._dispatcher.add_handler(callback, action)

    def remove_handler(self, callback: Callable, action: str) -> bool:
        """Unregister the handler.

        Args:
            callback (`Callable`): Callback function.
            action (`str`): Action.

        Returns:
            `bool`: Return `True` if success.
        """

        return self._dispatcher.remove_handler(callback, action)

    def trigger_handlers(self, action: str, instance: 'GroupCallNative', *args, **kwargs):
        """Unregister the handler.

        Args:
            action (`str`): Action.
            instance (`GroupCallNative`): Instance of GroupCallBase.
            *args (`list`, optional): Arbitrary callback arguments.
            **kwargs (`dict`, optional): Arbitrary callback arguments.
        """

        self._dispatcher.trigger_handlers(action, instance, *args, **kwargs)


================================================
FILE: pytgcalls/pytgcalls/exceptions.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.


class PytgcallsBaseException(Exception):
    ...


class PytgcallsError(PytgcallsBaseException):
    ...


class CallBeforeStartError(PytgcallsBaseException):
    ...


class NotConnectedError(PytgcallsBaseException):
    ...


class GroupCallNotFoundError(PytgcallsBaseException):
    ...


================================================
FILE: pytgcalls/pytgcalls/group_call_factory.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

import importlib
from importlib.util import find_spec
from typing import Callable, Optional, Union

from pytgcalls.exceptions import PytgcallsBaseException, PytgcallsError
from pytgcalls.group_call_type import GroupCallType
from pytgcalls.implementation.group_call import GroupCall
from pytgcalls.mtproto_client_type import MTProtoClientType
from pytgcalls.implementation.group_call_file import GroupCallFile
from pytgcalls.implementation.group_call_device import GroupCallDevice
from pytgcalls.implementation.group_call_raw import GroupCallRaw


def hot_load_mtproto_lib_or_exception(module):
    if find_spec(module):
        importlib.import_module(module)
    else:
        raise PytgcallsBaseException(
            f'To use this MTProto client type you need to install {module.capitalize()}. '
            f'Run this command: pip3 install -U pytgcalls[{module}]'
        )


class GroupCallFactory:
    MTPROTO_CLIENT_TYPE = MTProtoClientType
    GROUP_CALL_TYPE = GroupCallType

    GROUP_CALL_CLASS_TO_TYPE = {
        GROUP_CALL_TYPE.FILE: GroupCallFile,
        GROUP_CALL_TYPE.DEVICE: GroupCallDevice,
        GROUP_CALL_TYPE.RAW: GroupCallRaw,
    }

    def __init__(
        self,
        client,
        mtproto_backend=MTProtoClientType.PYROGRAM,
        enable_logs_to_console=False,
        path_to_log_file=None,
        outgoing_audio_bitrate_kbit=128,
    ):
        self.client = client

        if mtproto_backend is MTProtoClientType.PYROGRAM:
            hot_load_mtproto_lib_or_exception(MTProtoClientType.PYROGRAM.value)
            from pytgcalls.mtproto.pyrogram_bridge import PyrogramBridge

            self.__mtproto_bride_class = PyrogramBridge
        elif mtproto_backend is MTProtoClientType.TELETHON:
            hot_load_mtproto_lib_or_exception(MTProtoClientType.TELETHON.value)
            from pytgcalls.mtproto.telethon_bridge import TelethonBridge

            self.__mtproto_bride_class = TelethonBridge
        else:
            raise PytgcallsError('Unknown MTProto client type')

        self.enable_logs_to_console = enable_logs_to_console
        self.path_to_log_file = path_to_log_file
        self.outgoing_audio_bitrate_kbit = outgoing_audio_bitrate_kbit

    def get_mtproto_bridge(self):
        return self.__mtproto_bride_class(self.client)

    def get(self, group_call_type: GroupCallType, **kwargs) -> Union[GroupCallFile, GroupCallDevice, GroupCallRaw]:
        return GroupCallFactory.GROUP_CALL_CLASS_TO_TYPE[group_call_type](
            mtproto_bridge=self.get_mtproto_bridge(),
            enable_logs_to_console=self.enable_logs_to_console,
            path_to_log_file=self.path_to_log_file,
            outgoing_audio_bitrate_kbit=self.outgoing_audio_bitrate_kbit,
            **kwargs,
        )

    def get_group_call(self) -> GroupCall:
        return GroupCall(
            self.get_mtproto_bridge(),
            self.enable_logs_to_console,
            self.path_to_log_file,
            self.outgoing_audio_bitrate_kbit,
        )

    def get_file_group_call(
        self, input_filename: Optional[str] = None, output_filename: Optional[str] = None, play_on_repeat=True
    ) -> GroupCallFile:
        return GroupCallFile(
            self.get_mtproto_bridge(),
            input_filename,
            output_filename,
            play_on_repeat,
            self.enable_logs_to_console,
            self.path_to_log_file,
            self.outgoing_audio_bitrate_kbit,
        )

    def get_device_group_call(
        self, audio_input_device: Optional[str] = None, audio_output_device: Optional[str] = None
    ) -> GroupCallDevice:
        return GroupCallDevice(
            self.get_mtproto_bridge(),
            audio_input_device,
            audio_output_device,
            self.enable_logs_to_console,
            self.path_to_log_file,
            self.outgoing_audio_bitrate_kbit,
        )

    def get_raw_group_call(
        self,
        on_played_data: Callable[['GroupCallRaw', int], bytes] = None,
        on_recorded_data: Callable[['GroupCallRaw', bytes, int], None] = None,
        on_video_played_data: Callable[['GroupCallRaw'], bytes] = None,
    ) -> GroupCallRaw:
        return GroupCallRaw(
            self.get_mtproto_bridge(),
            on_played_data,
            on_recorded_data,
            on_video_played_data,
            self.enable_logs_to_console,
            self.path_to_log_file,
            self.outgoing_audio_bitrate_kbit,
        )


================================================
FILE: pytgcalls/pytgcalls/group_call_type.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from enum import Enum


class GroupCallType(Enum):
    FILE = 'File'
    DEVICE = 'Device'
    RAW = 'Raw'


================================================
FILE: pytgcalls/pytgcalls/implementation/__init__.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from pytgcalls.implementation.group_call_native import GroupCallNative

from pytgcalls.implementation.group_call_base import GroupCallBaseAction
from pytgcalls.implementation.group_call_base import GroupCallBaseDispatcherMixin
from pytgcalls.implementation.group_call_base import GroupCallBase

from pytgcalls.implementation.group_call_file import GroupCallFile
from pytgcalls.implementation.group_call_device import GroupCallDevice
from pytgcalls.implementation.group_call_raw import GroupCallRaw

__all__ = [
    'GroupCallNative',
    'GroupCallBase',
    'GroupCallBaseAction',
    'GroupCallBaseDispatcherMixin',
    'GroupCallFile',
    'GroupCallDevice',
    'GroupCallRaw',
]


================================================
FILE: pytgcalls/pytgcalls/implementation/group_call.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from enum import Enum
from typing import Callable, Optional

from pytgcalls.dispatcher import Action, DispatcherMixin
from pytgcalls.implementation import GroupCallRaw, GroupCallBaseAction
from pytgcalls.utils import AudioStream, VideoStream


class MediaType(Enum):
    VIDEO = 'video'
    AUDIO = 'audio'


class GroupCallAction(GroupCallBaseAction):
    VIDEO_PLAYOUT_ENDED = Action()
    '''When a video playout will be ended.'''
    AUDIO_PLAYOUT_ENDED = Action()
    '''When a audio playout will be ended.'''
    PLAYOUT_ENDED = MEDIA_PLAYOUT_ENDED = Action()
    '''When a audio or video playout will be ended.'''


class GroupCallDispatcherMixin(DispatcherMixin):
    def on_video_playout_ended(self, func: Callable) -> Callable:
        """When a video playout will be ended.

        Args:
            func (`Callable`): A functions that accept group_call and source args.

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallAction.VIDEO_PLAYOUT_ENDED)

    def on_audio_playout_ended(self, func: Callable) -> Callable:
        """When a audio playout will be ended.

        Args:
            func (`Callable`): A functions that accept group_call and source args.

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallAction.AUDIO_PLAYOUT_ENDED)

    def on_media_playout_ended(self, func: Callable) -> Callable:
        """When a audio or video playout will be ended.

        Args:
            func (`Callable`): A functions that accept group_call source and media type args.

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallAction.MEDIA_PLAYOUT_ENDED)

    # alias
    on_playout_ended = on_media_playout_ended


class GroupCall(GroupCallRaw, GroupCallDispatcherMixin):
    def __init__(
        self,
        mtproto_bridge,
        enable_logs_to_console=False,
        path_to_log_file=None,
        outgoing_audio_bitrate_kbit=128,
    ):
        super().__init__(
            mtproto_bridge,
            self.__on_audio_played_data,
            self.__on_audio_recorded_data,
            self.__on_video_played_data,
            enable_logs_to_console,
            path_to_log_file,
            outgoing_audio_bitrate_kbit,
        )
        super(GroupCallDispatcherMixin, self).__init__(GroupCallAction)

    def __trigger_on_video_playout_ended(self, source):
        self.trigger_handlers(GroupCallAction.VIDEO_PLAYOUT_ENDED, self, source)

    def __trigger_on_audio_playout_ended(self, source):
        self.trigger_handlers(GroupCallAction.AUDIO_PLAYOUT_ENDED, self, source)

    def __trigger_on_media_playout_ended(self, source, media_type: MediaType):
        self.trigger_handlers(GroupCallAction.MEDIA_PLAYOUT_ENDED, self, source, media_type)

    def __combined_video_trigger(self, source):
        self.__trigger_on_video_playout_ended(source)
        self.__trigger_on_media_playout_ended(source, MediaType.VIDEO)

    def __combined_audio_trigger(self, source):
        self.__trigger_on_audio_playout_ended(source)
        self.__trigger_on_media_playout_ended(source, MediaType.AUDIO)

    @staticmethod
    def __on_video_played_data(self: 'GroupCallRaw') -> bytes:
        if self._video_stream:
            return self._video_stream.read()

    @staticmethod
    def __on_audio_played_data(self: 'GroupCallRaw', length: int) -> bytes:
        if self._audio_stream:
            return self._audio_stream.read(length)

    @staticmethod
    def __on_audio_recorded_data(self, data, length):
        # TODO
        pass

    async def join(self, group, join_as=None, invite_hash: Optional[str] = None, enable_action=True):
        return await self.start(group, join_as, invite_hash, enable_action)

    async def leave(self):
        return await self.stop()

    async def start_video(
        self, source: Optional[str] = None, with_audio=True, repeat=True, enable_experimental_lip_sync=False
    ):
        """Enable video playing for current group call.

        Note:
            Source is video file or image file sequence or a
            capturing device or a IP video stream for video capturing.

            To use device camera you need to pass device index as int to the `source` arg.

        Args:
            source (`str`): Path to filename or device index or URL with some protocol. For example RTCP.
            with_audio (`bool`): Get and play audio stream from video source.
            repeat (`bool`): rewind video when end of file.
            enable_experimental_lip_sync (`bool`): enable experimental lip sync feature.
        """

        if self._video_stream and self._video_stream.is_running:
            self._video_stream.stop()

        self._video_stream = VideoStream(source, repeat, self.__combined_video_trigger)
        self._configure_video_capture(self._video_stream.get_video_info())

        if with_audio:
            await self.start_audio(source, repeat, self._video_stream if enable_experimental_lip_sync else None)
        self._video_stream.start()

        self._is_video_stopped = False
        if self.is_connected:
            await self.edit_group_call(video_stopped=False)

    async def start_audio(self, source: Optional[str] = None, repeat=True, video_stream: Optional[VideoStream] = None):
        """Enable audio playing for current group call.

        Note:
            Source is audio file or direct URL to file or audio live stream.

            If the source is None then empty bytes will be sent.

        Args:
            source (`str`, optional): Path to filename or URL to audio file or URL to live stream.
            repeat (`bool`, optional): rewind audio when end of file.
            video_stream (`VideoStream`, optional): stream to sync.
        """

        if self._audio_stream and self._audio_stream.is_running:
            self._audio_stream.stop()

        if source is not None:
            self._audio_stream = AudioStream(
                source, repeat, self.__combined_audio_trigger, video_stream=video_stream
            ).start()

        if self.is_connected:
            await self.edit_group_call(muted=False)

    async def start_audio_record(self, path):
        # TODO
        pass

    async def set_video_pause(self, pause: bool, with_mtproto=True):
        self._is_video_paused = pause
        if self.is_connected and with_mtproto:
            await self.edit_group_call(video_paused=pause)
        if self._video_stream:
            self._video_stream.set_pause(pause)

    async def set_audio_pause(self, pause: bool, with_mtproto=True):
        self._is_muted = pause
        if self.is_connected and with_mtproto:
            await self.edit_group_call(muted=pause)
        if self._audio_stream:
            self._audio_stream.set_pause(pause)

    async def set_pause(self, pause: bool):
        await self.set_video_pause(pause, False)
        await self.set_audio_pause(pause, False)

        if self.is_connected:
            # optimize 2 queries into 1
            await self.edit_group_call(muted=pause, video_paused=pause)

    async def stop_audio(self, with_mtproto=True):
        if self._audio_stream and self._audio_stream.is_running:
            self._audio_stream.stop()

        if self.is_connected and with_mtproto:
            await self.edit_group_call(muted=True)

    async def stop_video(self, with_mtproto=True):
        if self._video_stream and self._video_stream.is_running:
            self._video_stream.stop()

        if self.is_connected and with_mtproto:
            await self.edit_group_call(video_stopped=True)

    async def stop_media(self):
        await self.stop_video(False)
        await self.stop_audio(False)

        if self.is_connected:
            # optimize 2 queries into 1
            await self.edit_group_call(video_stopped=True, muted=True)

    @property
    def is_video_paused(self):
        return self._video_stream and self._video_stream.is_paused

    @property
    def is_audio_paused(self):
        return self._audio_stream and self._audio_stream.is_paused

    @property
    def is_paused(self):
        return self.is_video_paused and self.is_audio_paused

    @property
    def is_video_running(self):
        return self._video_stream and self._video_stream.is_running

    @property
    def is_audio_running(self):
        return self._audio_stream and self._audio_stream.is_running

    @property
    def is_running(self):
        return self.is_video_running and self.is_audio_running


================================================
FILE: pytgcalls/pytgcalls/implementation/group_call_base.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

import asyncio
import logging
from abc import ABC
from typing import Callable, Optional

import tgcalls

from pytgcalls.dispatcher import Action, DispatcherMixin
from pytgcalls.exceptions import GroupCallNotFoundError, NotConnectedError
from pytgcalls.implementation import GroupCallNative
from pytgcalls.mtproto.data import GroupCallDiscardedWrapper
from pytgcalls.mtproto.data.update import UpdateGroupCallParticipantsWrapper, UpdateGroupCallWrapper
from pytgcalls.mtproto.exceptions import GroupcallSsrcDuplicateMuch
from pytgcalls.utils import uint_ssrc

logger = logging.getLogger(__name__)


class GroupCallBaseAction:
    NETWORK_STATUS_CHANGED = Action()
    '''When a status of network will be changed.'''
    PARTICIPANT_LIST_UPDATED = Action()
    '''When a list of participant will be updated.'''


class GroupCallBaseDispatcherMixin(DispatcherMixin):
    def on_network_status_changed(self, func: Callable) -> Callable:
        """When a status of network will be changed.

        Args:
            func (`Callable`): A functions that accept group_call and is_connected args.

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallBaseAction.NETWORK_STATUS_CHANGED)

    def on_participant_list_updated(self, func: Callable) -> Callable:
        """When a list of participant will be updated.

        Args:
            func (`Callable`): A functions that accept group_call and participants args.

        Note:
            The `participants` arg is a `list` of `GroupCallParticipantWrapper`.
            It contains only updated participants! It's not a list of all participants!

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallBaseAction.PARTICIPANT_LIST_UPDATED)


class GroupCallBase(ABC, GroupCallBaseDispatcherMixin, GroupCallNative):
    SEND_ACTION_UPDATE_EACH = 0.45
    '''How often to send speaking action to chat'''

    __ASYNCIO_TIMEOUT = 10

    def __init__(
        self,
        mtproto_bridge,
        enable_logs_to_console: bool,
        path_to_log_file: str,
        outgoing_audio_bitrate_kbit: int,
    ):
        GroupCallNative.__init__(
            self,
            self.__emit_join_payload_callback,
            self.__network_state_updated_callback,
            enable_logs_to_console,
            path_to_log_file,
            outgoing_audio_bitrate_kbit,
        )
        GroupCallBaseDispatcherMixin.__init__(self, GroupCallBaseAction)

        self.mtproto = mtproto_bridge
        self.mtproto.register_group_call_native_callback(
            self._group_call_participants_update_callback, self._group_call_update_callback
        )

        self.invite_hash = None
        '''Hash from invite link to join as speaker'''

        self.enable_action = True
        '''Is enable sending of speaking action'''

        self.is_connected = False
        '''Is connected to voice chat via tgcalls'''

        self.__is_stop_requested = False
        self.__emit_join_payload_event = None

        self._is_muted = True
        self._is_video_stopped = True
        self._is_video_paused = False

        self._video_stream = None
        self._audio_stream = None

    async def _group_call_participants_update_callback(self, update: UpdateGroupCallParticipantsWrapper):
        logger.debug('Group call participants update...')
        logger.debug(update)

        self.trigger_handlers(GroupCallBaseAction.PARTICIPANT_LIST_UPDATED, self, update.participants)

        for participant in update.participants:
            ssrc = uint_ssrc(participant.source)

            # maybe (if needed) set unmute status on server side after allowing to speak by admin
            # also mb there is need a some delay after getting update cuz server sometimes cant handle editing properly
            if participant.is_self and participant.can_self_unmute:
                if not self._is_muted:
                    await self.edit_group_call(muted=False)

            if participant.peer == self.mtproto.join_as and ssrc != self.mtproto.my_ssrc:
                logger.debug(f'Not equal ssrc. Expected: {ssrc}. Actual: {self.mtproto.my_ssrc}.')
                await self.reconnect()

    async def _group_call_update_callback(self, update: UpdateGroupCallWrapper):
        logger.debug('Group call update...')
        logger.debug(update)

        if isinstance(update.call, GroupCallDiscardedWrapper):
            logger.debug('Group call discarded.')
            await self.stop()
        elif update.call.params:
            self.__set_join_response_payload(update.call.params.data)

    def __set_join_response_payload(self, payload):
        logger.debug('Set join response payload...')

        if self.__is_stop_requested:
            logger.debug('Set payload rejected by a stop request.')
            return

        self._set_connection_mode(tgcalls.GroupConnectionMode.GroupConnectionModeRtc)
        self._set_join_response_payload(payload)
        logger.debug('Join response payload was set.')

    def __emit_join_payload_callback(self, payload):
        logger.debug('Emit join payload callback...')

        if self.__is_stop_requested:
            logger.debug('Join group call rejected by a stop request.')
            return

        if self.mtproto.group_call is None:
            logger.debug('Group Call is None.')
            return

        async def _():
            try:

                def pre_update_processing():
                    logger.debug(f'Set my ssrc to {payload.audioSsrc}.')
                    self.mtproto.set_my_ssrc(payload.audioSsrc)

                await self.mtproto.join_group_call(
                    self.invite_hash,
                    payload.json,
                    muted=True,
                    video_stopped=self._is_video_stopped,
                    pre_update_processing=pre_update_processing,
                )

                if self.__emit_join_payload_event:
                    self.__emit_join_payload_event.set()

                logger.debug(
                    f'Successfully connected to VC with '
                    f'ssrc={self.mtproto.my_ssrc} '
                    f'as {type(self.mtproto.join_as).__name__}.'
                )
            except GroupcallSsrcDuplicateMuch:
                logger.debug('Duplicate SSRC.')
                await self.reconnect()

        self.get_event_loop().create_task(_())

    def __network_state_updated_callback(self, state: bool):
        logger.debug('Network state updated...')

        if self.is_connected == state:
            logger.debug('Network state is same. Do nothing.')
            return

        self.is_connected = state
        if self.is_connected:
            self.get_event_loop().create_task(self.set_is_mute(False))
            if self.enable_action:
                self.__start_status_worker()

        self.trigger_handlers(GroupCallBaseAction.NETWORK_STATUS_CHANGED, self, state)

        logger.debug(f'New network state is {self.is_connected}.')

    def __start_status_worker(self):
        async def worker():
            logger.debug('Start status (call action) worker...')
            while self.is_connected:
                await self.mtproto.send_speaking_group_call_action()
                await asyncio.sleep(self.SEND_ACTION_UPDATE_EACH)

        self.get_event_loop().create_task(worker())

    async def start(self, group, join_as=None, invite_hash: Optional[str] = None, enable_action=True):
        """Start voice chat (join and play/record from initial values).

        Note:
            Disconnect from current voice chat and connect to the new one.
            Multiple instances of `GroupCallBase` must be created for multiple voice chats at the same time.
            Join as by default is personal account.

        Args:
            group (`InputPeerChannel` | `InputPeerChat` | `str` | `int`): Chat ID in any form.
            join_as (`InputPeer` | `str` | `int`, optional): How to present yourself in participants list.
            invite_hash (`str`, optional): Hash from speaker invite link.
            enable_action (`bool`, optional): Is enables sending of speaking action.
        """
        self.__is_stop_requested = False
        self.enable_action = enable_action

        group_call = await self.mtproto.get_and_set_group_call(group)
        if group_call is None:
            raise GroupCallNotFoundError('Chat without a voice chat')

        # mb move in other place. save plain join_as arg and use it in JoinGroupCall
        # but for now it works  as optimization of requests
        # we resolve join_as only when try to connect
        # it doesnt call resolve on reconnect
        await self.mtproto.resolve_and_set_join_as(join_as)

        self.invite_hash = invite_hash

        self.mtproto.re_register_update_handlers()

        # when trying to connect to another chat or with another join_as
        if self.is_group_call_native_created():
            await self.reconnect()
        # the first start
        else:
            self._setup_and_start_group_call()

    async def stop(self):
        """Properly stop tgcalls, remove MTProto handler, leave from server side."""
        if not self.is_group_call_native_created():
            logger.debug('Group call is not started, so there\'s nothing to stop.')
            return

        self.__is_stop_requested = True
        logger.debug('Stop requested.')

        self.mtproto.unregister_update_handlers()
        # to bypass recreating of outgoing audio channel
        self._set_is_mute(True)
        self._set_connection_mode(tgcalls.GroupConnectionMode.GroupConnectionModeNone)

        on_disconnect_event = asyncio.Event()

        async def post_disconnect():
            await self.leave_current_group_call()
            self.mtproto.reset()
            self.__is_stop_requested = False

        async def on_disconnect(obj, is_connected):
            if is_connected:
                return

            obj._stop_audio_device_module()

            # need for normal waiting of stopping audio devices
            # destroying of webrtc client during .stop not needed yet
            # because we a working in the same native instance
            # and can reuse tis client for another connections.
            # In any case now its possible to reset group call ptr
            # self.__native_instance.stopGroupCall()

            await post_disconnect()

            obj.remove_handler(on_disconnect, GroupCallBaseAction.NETWORK_STATUS_CHANGED)
            on_disconnect_event.set()

        if self.is_connected:
            self.add_handler(on_disconnect, GroupCallBaseAction.NETWORK_STATUS_CHANGED)
            await asyncio.wait_for(on_disconnect_event.wait(), timeout=self.__ASYNCIO_TIMEOUT)
        else:
            await post_disconnect()

        if self._video_stream and self._video_stream.is_running:
            self._video_stream.stop()
        if self._audio_stream and self._audio_stream.is_running:
            self._audio_stream.stop()

        logger.debug('GroupCallBase stopped properly.')

    async def reconnect(self):
        """Connect to voice chat using the same native instance."""
        logger.debug('Reconnecting...')
        if not self.mtproto.group_call:
            raise NotConnectedError("You don't connected to voice chat.")

        self._set_connection_mode(tgcalls.GroupConnectionMode.GroupConnectionModeNone)
        self._emit_join_payload(self.__emit_join_payload_callback)

        # during the .stop we stop audio device module. Need to restart
        self.restart_recording()
        self.restart_playout()

        # cuz native instance doesnt block python
        self.__emit_join_payload_event = asyncio.Event()
        await asyncio.wait_for(self.__emit_join_payload_event.wait(), timeout=self.__ASYNCIO_TIMEOUT)

    async def leave_current_group_call(self):
        """Leave group call from server side (MTProto part)."""
        logger.debug('Try to leave the current group call...')
        try:
            await self.mtproto.leave_current_group_call()
        except Exception as e:
            logger.warning("Couldn't leave the group call. But no worries, you'll get removed from it in seconds.")
            logger.debug(e)
        else:
            logger.debug('Completely left the current group call.')

    async def edit_group_call(self, volume: int = None, muted=None, video_stopped=None, video_paused=None):
        """Edit own settings of group call.

        Note:
            There is bug where you can try to pass `volume=100`.

        Args:
            volume (`int`): Volume.
            muted (`bool`): Is muted.
            video_stopped (`bool`): Is video stopped.
            video_paused (`bool`): Is video paused.
        """

        if not muted:
            muted = self._is_muted

        if video_stopped is None:
            video_stopped = self._is_video_stopped
        else:
            self._is_video_stopped = video_stopped

        if video_paused is None:
            video_paused = self._is_video_paused
        else:
            self._is_video_paused = video_paused

        await self.edit_group_call_member(self.mtproto.join_as, volume, muted, video_stopped, video_paused)

    async def edit_group_call_member(self, peer, volume: int = None, muted=None, video_stopped=None, video_paused=None):
        """Edit setting of user in voice chat (required voice chat management permission).

        Note:
            There is bug where you can try to pass `volume=100`.

        Args:
            peer (`InputPeer`): Participant of voice chat.
            volume (`int`): Volume.
            muted (`bool`): Is muted.
            video_stopped (`bool`): Is video stopped.
            video_paused (`bool`): Is video paused.
        """

        volume = max(1, volume * 100) if volume is not None else None
        await self.mtproto.edit_group_call_member(peer, volume, muted, video_stopped, video_paused)

    async def set_is_mute(self, is_muted: bool):
        """Set is mute.

        Args:
            is_muted (`bool`): Is muted.
        """

        self._is_muted = is_muted
        self._set_is_mute(is_muted)

        logger.debug(f'Set is muted on server side. New value: {is_muted}.')
        await self.edit_group_call(muted=is_muted)

    async def set_my_volume(self, volume):
        """Set volume for current client.

        Note:
            Volume value only can be in 1-200 range. There is auto normalization.

        Args:
            volume (`int` | `str` | `float`): Volume.
        """
        # Required "Manage Voice Chats" admin permission

        volume = max(1, min(int(volume), 200))
        logger.debug(f'Set volume to: {volume}.')

        await self.edit_group_call(volume)
        self._set_volume(uint_ssrc(self.mtproto.my_ssrc), volume / 100)

    # shortcuts for easy access in callbacks of events

    @property
    def client(self):
        return self.mtproto.client

    @property
    def full_chat(self):
        return self.mtproto.full_chat

    @property
    def chat_peer(self):
        return self.mtproto.chat_peer

    @property
    def group_call(self):
        return self.mtproto.group_call

    @property
    def my_ssrc(self):
        return self.mtproto.my_ssrc

    @property
    def my_peer(self):
        return self.mtproto.my_peer

    @property
    def join_as(self):
        return self.mtproto.join_as


================================================
FILE: pytgcalls/pytgcalls/implementation/group_call_device.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from typing import Optional

from pytgcalls.implementation import GroupCallBase


class GroupCallDevice(GroupCallBase):
    def __init__(
        self,
        mtproto_bridge,
        audio_input_device: Optional[str] = None,
        audio_output_device: Optional[str] = None,
        enable_logs_to_console=False,
        path_to_log_file=None,
        outgoing_audio_bitrate_kbit=128,
    ):
        super().__init__(mtproto_bridge, enable_logs_to_console, path_to_log_file, outgoing_audio_bitrate_kbit)

        self.__is_playout_paused = False
        self.__is_recording_paused = False

        self.__audio_input_device = audio_input_device or ''
        self.__audio_output_device = audio_output_device or ''

    def _setup_and_start_group_call(self):
        self._start_native_group_call(self.__audio_input_device, self.__audio_output_device)

    @property
    def audio_input_device(self):
        """Get audio input device name or GUID

        Note:
            To get system recording device list you can use `get_recording_devices()` method.
        """

        return self.__audio_input_device

    @audio_input_device.setter
    def audio_input_device(self, name=None):
        self.set_audio_input_device(name)

    @property
    def audio_output_device(self):
        """Get audio output device name or GUID

        Note:
            To get system playout device list you can use `get_playout_devices()` method.
        """

        return self.__audio_output_device

    @audio_output_device.setter
    def audio_output_device(self, name=None):
        self.set_audio_output_device(name)


================================================
FILE: pytgcalls/pytgcalls/implementation/group_call_file.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

from typing import Callable

import tgcalls
from pytgcalls.implementation import GroupCallBase, GroupCallBaseAction, GroupCallBaseDispatcherMixin
from pytgcalls.dispatcher import Action


class GroupCallFileAction(GroupCallBaseAction):
    PLAYOUT_ENDED = Action()
    '''When a input file is ended.'''


class GroupCallFileDispatcherMixin(GroupCallBaseDispatcherMixin):
    def on_playout_ended(self, func: Callable) -> Callable:
        """When a input file is ended.

        Args:
            func (`Callable`): A functions that accept group_call and filename args.

        Returns:
            `Callable`: passed to args callback function.
        """

        return self.add_handler(func, GroupCallFileAction.PLAYOUT_ENDED)


class GroupCallFile(GroupCallBase, GroupCallFileDispatcherMixin):
    def __init__(
        self,
        mtproto_bridge,
        input_filename: str = None,
        output_filename: str = None,
        play_on_repeat=True,
        enable_logs_to_console=False,
        path_to_log_file=None,
        outgoing_audio_bitrate_kbit=128,
    ):
        super().__init__(mtproto_bridge, enable_logs_to_console, path_to_log_file, outgoing_audio_bitrate_kbit)
        super(GroupCallFileDispatcherMixin, self).__init__(GroupCallFileAction)

        self.play_on_repeat = play_on_repeat
        '''When the file ends, play it again'''
        self.__is_playout_paused = False
        self.__is_recording_paused = False

        self.__input_filename = input_filename or ''
        self.__output_filename = output_filename or ''

        self.__file_audio_device_descriptor = None

    def __create_and_return_file_audio_device_descriptor(self):
        self.__file_audio_device_descriptor = tgcalls.FileAudioDeviceDescriptor()
        self.__file_audio_device_descriptor.getInputFilename = self.__get_input_filename_callback
        self.__file_audio_device_descriptor.getOutputFilename = self.__get_output_filename_callback
        self.__file_audio_device_descriptor.isEndlessPlayout = self.__is_endless_playout_callback
        self.__file_audio_device_descriptor.isPlayoutPaused = self.__is_playout_paused_callback
        self.__file_audio_device_descriptor.isRecordingPaused = self.__is_recording_paused_callback
        self.__file_audio_device_descriptor.playoutEndedCallback = self.__playout_ended_callback

        return self.__file_audio_device_descriptor

    def _setup_and_start_group_call(self):
        self._start_native_group_call(self.__create_and_return_file_audio_device_descriptor())

    def stop_playout(self):
        """Stop playing of file."""

        self.input_filename = ''

    def stop_output(self):
        """Stop recording to file."""

        self.output_filename = ''

    @property
    def input_filename(self):
        """Input filename (or path) to play."""

        return self.__input_filename

    @input_filename.setter
    def input_filename(self, filename):
        self.__input_filename = filename or ''
        if self.is_connected:
            self.restart_playout()

    @property
    def output_filename(self):
        """Output filename (or path) to record."""

        return self.__output_filename

    @output_filename.setter
    def output_filename(self, filename):
        self.__output_filename = filename or ''
        if self.is_connected:
            self.restart_recording()

    def pause_playout(self):
        """Pause playout (playing from file)."""
        self.__is_playout_paused = True

    def resume_playout(self):
        """Resume playout (playing from file)."""
        self.__is_playout_paused = False

    def pause_recording(self):
        """Pause recording (output to file)."""
        self.__is_recording_paused = True

    def resume_recording(self):
        """Resume recording (output to file)."""
        self.__is_recording_paused = False

    def __get_input_filename_callback(self):
        return self.__input_filename

    def __get_output_filename_callback(self):
        return self.__output_filename

    def __is_endless_playout_callback(self):
        return self.play_on_repeat

    def __is_playout_paused_callback(self):
        return self.__is_playout_paused

    def __is_recording_paused_callback(self):
        return self.__is_recording_paused

    def __playout_ended_callback(self, input_filename: str):
        self.trigger_handlers(GroupCallFileAction.PLAYOUT_ENDED, self, input_filename)


================================================
FILE: pytgcalls/pytgcalls/implementation/group_call_native.py
================================================
#  tgcalls - a Python binding for C++ library by Telegram
#  pytgcalls - a library connecting the Python binding with MTProto
#  Copyright (C) 2020-2021 Il`ya (Marshal) <https://github.com/MarshalX>
#
#  This file is part of tgcalls and pytgcalls.
#
#  tgcalls and pytgcalls is free software: you can redistribute it and/or modify
#  it under the terms of the GNU Lesser General Public License as published
#  by the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  tgcalls and pytgcalls is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public License v3
#  along with tgcalls. If not, see <http://www.gnu.org/licenses/>.

import asyncio
import logging
from typing import Callable, Optional, List

import tgcalls
from pytgcalls.exceptions import CallBeforeStartError

logger = logging.getLogger(__name__)


def if_native_instance_created(func):
    def wrapper(self, *args, **kwargs):
        if self.is_group_call_native_created():
            return func(self, *args, **kwargs)
        else:
            raise CallBeforeStartError("You can't use this method before calling .start()")

    return wrapper


class GroupCallNative:
    def __init__(
        self,
        emit_join_payload_callback,
        network_state_updated_callback,
        enable_logs_to_console: bool,
        path_to_log_file: str,
        outgoing_audio_bitrate_kbit: int,
    ):
        """Create NativeInstance of tgcalls C++ part.

        Args:
            enable_logs_to_console (`bool`): Is enable logs to stderr from tgcalls.
            path_to_log_file (`str`, optional): Path to log file for logs of tgcalls.
        """

        # bypass None value
        if not path_to_log_file:
            path_to_log_file = ''

        logger.debug('Create a new native instance...')
        self.__native_instance = tgcalls.NativeInstance(enable_logs_to_console, path_to_log_file)

        self.__native_instance.setupGroupCall(
            emit_join_payload_callback,
            network_state_updated_callback,
            outgoing_audio_bitrate_kbit,
        )

        logger.debug('Native instance created.')

        self.__loop = asyncio.get_event_loop()

    def get_event_loop(self):
        return self.__loop

    def is_group_call_native_created(self):
        return self.__native_instance.isGroupCallNativeCreated()

    def _setup_and_start_group_call(self):
        raise NotImplementedError()

    @if_native_instance_created
    def _set_connection_mode(self, mode: tgcalls.GroupConnectionMode, keep_broadcast_if_was_enabled=False):
        logger.debug(f'Set native connection mode {mode}.')
        self.__native_instance.setConnectionMode(mode, keep_broadcast_if_was_enabled)

    @if_native_instance_created
    def _emit_join_payload(self, callback):
        logger.debug(f'Trigger native emit join payload.')
        self.__native_instance.emitJoinPayload(callback)

    def _start_native_group_call(self, *args):
        logger.debug('Start native group call...')
        self.__native_instance.startGroupCall(*args)

    @if_native_instance_created
    def _emit_join_payload(self, callback):
        logger.debug('Emit native join payload.')
        self.__native_instance.emitJoinPayload(callback)

    @if_native_instance_created
    def _set_join_response_payload(self, payload):
        logger.debug('Set native join response payload...')
        self.__native_instance.setJoinResponsePayload(payload)

    @if_native_instance_created
    def _set_is_mute(self, is_muted: bool):
        logger.debug(f'Set is muted on native instance side. New value: {is_muted}.')
        self.__native_instance.setIsMuted(is_muted)

    @if_native_instance_created
    def _set_volume(self, ssrc, volume):
        logger.debug(f'Set native volume for {ssrc} to {volume}.')
        self.__native_instance.setVolume(ssrc, volume)

    @if_native_instance_created
    def _stop_audio_device_module(self):
        logger.debug(f'Stop audio device module.')
        self.__native_instance.stopAudioDeviceModule()

    @if_native_instance_created
    def _start_audio_device_module(self):
        logger.debug(f'Start audio device module.')
        self.__native_instance.startAudioDeviceModule()

    @if_native_instance_created
    def _set_video_capture(self, source_path: Callable, width: int, height: int, fps: int):
        logger.debug('Set video capture.')
        self.__native_instance.setVideoCapture(source_path, fps, width, height)

    @if_native_instance_created
    def get_playout_devices(self) -> List['tgcalls.AudioDevice']:
        """Get available playout audio devices in the system.

        Note:
            `tgcalls.AudioDevice` have 2 attributes: name, guid.
        """

        logger.debug('Get native playout devices.')
        return self.__native_instance.getPlayoutDevices()

    @if_native_instance_created
    def get_recording_devices(self) -> List['tgcalls.AudioDevice']:
        """Get available recording audio devices in the system.

        Note:
            `tgcalls.AudioDevice` have 2 attributes: name, guid.
        """

        logger.debug('Get native recording devices.')
        return self.__native_instance.getRecordingDevices()

    @if_native_instance_created
    def set_audio_input_device(self, name: Optional[str] = None):
        """Set audio input device.

        Note:
            If `name` is `None`, will use default system device.
            And this is works only at first device initialization time!

        Args:
            name (`str`): Name or GUID of device.
        """

        logger.debug(f'Set native audio input device to {name}.')
        self.__native_instance.setAudioInputDevice(name or '')

    @if_native_instance_crea
Download .txt
Showing preview only (595K chars total). Download the full file or copy to clipboard to get everything.
gitextract_3vx6f7a1/

├── .clang-format
├── .github/
│   ├── FUNDING.yml
│   └── workflows/
│       ├── build_and_deploy_pytgcalls_documentation.yaml
│       ├── build_and_publish_linux_python_wheels_for_many_versions.yaml
│       ├── build_and_publish_macos_wheels_for_many_python_versions.yaml
│       ├── build_and_publish_win_x32_wheels_for_many_python_versions.yaml
│       ├── build_and_publish_win_x64_wheels_for_many_python_versions.yaml
│       ├── build_and_push_manylinux_images.yaml
│       ├── build_and_push_manylinux_webrtc_entrypoint_images.yaml
│       └── build_and_push_manylinux_webrtc_images.yaml
├── .gitignore
├── .gitmodules
├── LICENSE
├── MANIFEST.in
├── README.md
├── build/
│   ├── macos/
│   │   └── README.md
│   ├── manylinux/
│   │   ├── Dockerfile
│   │   ├── dev/
│   │   │   ├── Dockerfile
│   │   │   └── entrypoint.sh
│   │   ├── entrypoint/
│   │   │   ├── Dockerfile
│   │   │   └── entrypoint.sh
│   │   └── webrtc/
│   │       └── Dockerfile
│   ├── ubuntu/
│   │   └── Dockerfile
│   └── windows/
│       └── README.md
├── docker-compose.yaml
├── examples/
│   ├── LICENSE
│   ├── README.md
│   ├── device_playout.py
│   ├── file_playout.py
│   ├── player_as_smart_plugin.py
│   ├── pyav.py
│   ├── radio_as_smart_plugin.py
│   ├── recorder_as_smart_plugin.py
│   └── restream_using_raw_data.py
├── pytgcalls/
│   ├── LICENSE
│   ├── MANIFEST.in
│   ├── helpers.py
│   ├── pdoc/
│   │   ├── config.mako
│   │   ├── credits.mako
│   │   ├── head.mako
│   │   └── logo.mako
│   ├── pyproject.toml
│   ├── pytgcalls/
│   │   ├── __init__.py
│   │   ├── dispatcher/
│   │   │   ├── __init__.py
│   │   │   ├── action.py
│   │   │   ├── dispatcher.py
│   │   │   └── dispatcher_mixin.py
│   │   ├── exceptions.py
│   │   ├── group_call_factory.py
│   │   ├── group_call_type.py
│   │   ├── implementation/
│   │   │   ├── __init__.py
│   │   │   ├── group_call.py
│   │   │   ├── group_call_base.py
│   │   │   ├── group_call_device.py
│   │   │   ├── group_call_file.py
│   │   │   ├── group_call_native.py
│   │   │   └── group_call_raw.py
│   │   ├── mtproto/
│   │   │   ├── __init__.py
│   │   │   ├── base_bridge.py
│   │   │   ├── data/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── base_wrapper.py
│   │   │   │   ├── group_call_discarded_wrapper.py
│   │   │   │   ├── group_call_participant_wrapper.py
│   │   │   │   ├── group_call_wrapper.py
│   │   │   │   └── update/
│   │   │   │       ├── __init__.py
│   │   │   │       ├── update_group_call_participants_wrapper.py
│   │   │   │       └── update_group_call_wrapper.py
│   │   │   ├── exceptions.py
│   │   │   ├── pyrogram_bridge.py
│   │   │   └── telethon_bridge.py
│   │   ├── mtproto_client_type.py
│   │   └── utils.py
│   ├── setup.py
│   ├── test.py
│   └── tgcalls_dev.py
├── setup.py
└── tgcalls/
    ├── cmake/
    │   ├── external_ffmpeg.cmake
    │   └── lib_tgcalls.cmake
    ├── getSourcesList.py
    ├── src/
    │   ├── FileAudioDevice.cpp
    │   ├── FileAudioDevice.h
    │   ├── FileAudioDeviceDescriptor.h
    │   ├── InstanceHolder.h
    │   ├── NativeInstance.cpp
    │   ├── NativeInstance.h
    │   ├── RawAudioDevice.cpp
    │   ├── RawAudioDevice.h
    │   ├── RawAudioDeviceDescriptor.cpp
    │   ├── RawAudioDeviceDescriptor.h
    │   ├── RtcServer.cpp
    │   ├── RtcServer.h
    │   ├── WrappedAudioDeviceModuleImpl.cpp
    │   ├── WrappedAudioDeviceModuleImpl.h
    │   ├── config.h.in
    │   ├── tgcalls.cpp
    │   └── video/
    │       ├── PythonSource.cpp
    │       ├── PythonSource.h
    │       ├── PythonVideoTrackSource.cpp
    │       └── PythonVideoTrackSource.h
    └── third_party/
        ├── lib_tgcalls/
        │   ├── .clang-format
        │   ├── .gitignore
        │   ├── LICENSE
        │   ├── README.md
        │   └── tgcalls/
        │       ├── AudioDeviceHelper.cpp
        │       ├── AudioDeviceHelper.h
        │       ├── AudioFrame.h
        │       ├── CodecSelectHelper.cpp
        │       ├── CodecSelectHelper.h
        │       ├── CryptoHelper.cpp
        │       ├── CryptoHelper.h
        │       ├── EncryptedConnection.cpp
        │       ├── EncryptedConnection.h
        │       ├── FakeAudioDeviceModule.cpp
        │       ├── FakeAudioDeviceModule.h
        │       ├── FakeVideoTrackSource.cpp
        │       ├── FakeVideoTrackSource.h
        │       ├── Instance.cpp
        │       ├── Instance.h
        │       ├── InstanceImpl.cpp
        │       ├── InstanceImpl.h
        │       ├── LogSinkImpl.cpp
        │       ├── LogSinkImpl.h
        │       ├── Manager.cpp
        │       ├── Manager.h
        │       ├── MediaManager.cpp
        │       ├── MediaManager.h
        │       ├── Message.cpp
        │       ├── Message.h
        │       ├── NetworkManager.cpp
        │       ├── NetworkManager.h
        │       ├── PlatformContext.h
        │       ├── SctpDataChannelProviderInterfaceImpl.cpp
        │       ├── SctpDataChannelProviderInterfaceImpl.h
        │       ├── StaticThreads.cpp
        │       ├── StaticThreads.h
        │       ├── Stats.h
        │       ├── ThreadLocalObject.cpp
        │       ├── ThreadLocalObject.h
        │       ├── TurnCustomizerImpl.cpp
        │       ├── TurnCustomizerImpl.h
        │       ├── VideoCaptureInterface.cpp
        │       ├── VideoCaptureInterface.h
        │       ├── VideoCaptureInterfaceImpl.cpp
        │       ├── VideoCaptureInterfaceImpl.h
        │       ├── VideoCapturerInterface.h
        │       ├── desktop_capturer/
        │       │   ├── DesktopCaptureSource.cpp
        │       │   ├── DesktopCaptureSource.h
        │       │   ├── DesktopCaptureSourceHelper.cpp
        │       │   ├── DesktopCaptureSourceHelper.h
        │       │   ├── DesktopCaptureSourceHelper.mm
        │       │   ├── DesktopCaptureSourceManager.cpp
        │       │   └── DesktopCaptureSourceManager.h
        │       ├── group/
        │       │   ├── GroupInstanceCustomImpl.cpp
        │       │   ├── GroupInstanceCustomImpl.h
        │       │   ├── GroupInstanceImpl.h
        │       │   ├── GroupJoinPayload.h
        │       │   ├── GroupJoinPayloadInternal.cpp
        │       │   ├── GroupJoinPayloadInternal.h
        │       │   ├── GroupNetworkManager.cpp
        │       │   ├── GroupNetworkManager.h
        │       │   ├── StreamingPart.cpp
        │       │   └── StreamingPart.h
        │       ├── legacy/
        │       │   ├── InstanceImplLegacy.cpp
        │       │   └── InstanceImplLegacy.h
        │       ├── platform/
        │       │   ├── PlatformInterface.h
        │       │   ├── android/
        │       │   │   ├── AndroidContext.cpp
        │       │   │   ├── AndroidContext.h
        │       │   │   ├── AndroidInterface.cpp
        │       │   │   ├── AndroidInterface.h
        │       │   │   ├── VideoCameraCapturer.cpp
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCapturerInterfaceImpl.cpp
        │       │   │   └── VideoCapturerInterfaceImpl.h
        │       │   ├── darwin/
        │       │   │   ├── AudioDeviceModuleIOS.h
        │       │   │   ├── AudioDeviceModuleMacos.h
        │       │   │   ├── CustomExternalCapturer.h
        │       │   │   ├── CustomExternalCapturer.mm
        │       │   │   ├── DarwinInterface.h
        │       │   │   ├── DarwinInterface.mm
        │       │   │   ├── DarwinVideoSource.h
        │       │   │   ├── DarwinVideoSource.mm
        │       │   │   ├── DesktopCaptureSourceView.h
        │       │   │   ├── DesktopCaptureSourceView.mm
        │       │   │   ├── DesktopCaptureSourceViewMac.h
        │       │   │   ├── DesktopCaptureSourceViewMac.mm
        │       │   │   ├── DesktopSharingCapturer.h
        │       │   │   ├── DesktopSharingCapturer.mm
        │       │   │   ├── GLVideoView.h
        │       │   │   ├── GLVideoView.mm
        │       │   │   ├── GLVideoViewMac.h
        │       │   │   ├── GLVideoViewMac.mm
        │       │   │   ├── TGCMIOCapturer.h
        │       │   │   ├── TGCMIOCapturer.m
        │       │   │   ├── TGCMIODevice.h
        │       │   │   ├── TGCMIODevice.mm
        │       │   │   ├── TGRTCCVPixelBuffer.h
        │       │   │   ├── TGRTCCVPixelBuffer.mm
        │       │   │   ├── TGRTCDefaultVideoDecoderFactory.h
        │       │   │   ├── TGRTCDefaultVideoDecoderFactory.mm
        │       │   │   ├── TGRTCDefaultVideoEncoderFactory.h
        │       │   │   ├── TGRTCDefaultVideoEncoderFactory.mm
        │       │   │   ├── TGRTCVideoDecoderH264.h
        │       │   │   ├── TGRTCVideoDecoderH264.mm
        │       │   │   ├── TGRTCVideoDecoderH265.h
        │       │   │   ├── TGRTCVideoDecoderH265.mm
        │       │   │   ├── TGRTCVideoEncoderH264.h
        │       │   │   ├── TGRTCVideoEncoderH264.mm
        │       │   │   ├── TGRTCVideoEncoderH265.h
        │       │   │   ├── TGRTCVideoEncoderH265.mm
        │       │   │   ├── VideoCMIOCapture.h
        │       │   │   ├── VideoCMIOCapture.mm
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCameraCapturer.mm
        │       │   │   ├── VideoCameraCapturerMac.h
        │       │   │   ├── VideoCameraCapturerMac.mm
        │       │   │   ├── VideoCaptureView.h
        │       │   │   ├── VideoCaptureView.mm
        │       │   │   ├── VideoCapturerInterfaceImpl.h
        │       │   │   ├── VideoCapturerInterfaceImpl.mm
        │       │   │   ├── VideoMetalView.h
        │       │   │   ├── VideoMetalView.mm
        │       │   │   ├── VideoMetalViewMac.h
        │       │   │   ├── VideoMetalViewMac.mm
        │       │   │   ├── VideoSampleBufferView.h
        │       │   │   ├── VideoSampleBufferView.mm
        │       │   │   ├── VideoSampleBufferViewMac.h
        │       │   │   ├── VideoSampleBufferViewMac.mm
        │       │   │   ├── macOS/
        │       │   │   │   ├── TGRTCMTLI420Renderer.h
        │       │   │   │   ├── TGRTCMTLI420Renderer.mm
        │       │   │   │   ├── TGRTCMTLRenderer+Private.h
        │       │   │   │   ├── TGRTCMTLRenderer.h
        │       │   │   │   ├── TGRTCMTLRenderer.mm
        │       │   │   │   ├── TGRTCMetalContextHolder.h
        │       │   │   │   └── TGRTCMetalContextHolder.m
        │       │   │   ├── objc_video_decoder_factory.h
        │       │   │   ├── objc_video_decoder_factory.mm
        │       │   │   ├── objc_video_encoder_factory.h
        │       │   │   └── objc_video_encoder_factory.mm
        │       │   ├── fake/
        │       │   │   ├── FakeInterface.cpp
        │       │   │   └── FakeInterface.h
        │       │   ├── tdesktop/
        │       │   │   ├── DesktopInterface.cpp
        │       │   │   ├── DesktopInterface.h
        │       │   │   ├── VideoCameraCapturer.cpp
        │       │   │   ├── VideoCameraCapturer.h
        │       │   │   ├── VideoCapturerInterfaceImpl.cpp
        │       │   │   ├── VideoCapturerInterfaceImpl.h
        │       │   │   ├── VideoCapturerTrackSource.cpp
        │       │   │   └── VideoCapturerTrackSource.h
        │       │   └── uwp/
        │       │       ├── UwpContext.h
        │       │       ├── UwpScreenCapturer.cpp
        │       │       └── UwpScreenCapturer.h
        │       ├── reference/
        │       │   ├── InstanceImplReference.cpp
        │       │   └── InstanceImplReference.h
        │       ├── third-party/
        │       │   ├── json11.cpp
        │       │   └── json11.hpp
        │       └── v2/
        │           ├── InstanceV2Impl.cpp
        │           ├── InstanceV2Impl.h
        │           ├── NativeNetworkingImpl.cpp
        │           ├── NativeNetworkingImpl.h
        │           ├── Signaling.cpp
        │           ├── Signaling.h
        │           ├── SignalingEncryption.cpp
        │           └── SignalingEncryption.h
        └── webrtc/
            ├── .gitignore
            ├── .gitmodules
            ├── LICENSE
            ├── README.md
            ├── cmake/
            │   ├── arch.cmake
            │   ├── external.cmake
            │   ├── generate_stubs.cmake
            │   ├── generate_target.cmake
            │   ├── init_target.cmake
            │   ├── libabsl.cmake
            │   ├── libevent.cmake
            │   ├── libopenh264.cmake
            │   ├── libpffft.cmake
            │   ├── librnnoise.cmake
            │   ├── libsdkmacos.cmake
            │   ├── libsrtp.cmake
            │   ├── libusrsctp.cmake
            │   ├── libvpx.cmake
            │   ├── libwebrtcbuild.cmake
            │   ├── libyuv.cmake
            │   ├── nice_target_sources.cmake
            │   ├── target_yasm_sources.cmake
            │   └── tg_owtConfig.cmake
            └── src/
                ├── AUTHORS
                ├── OWNERS
                ├── PATENTS
                ├── api/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── DESIGN.md
                │   ├── OWNERS
                │   ├── README.md
                │   ├── adaptation/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── resource.cc
                │   │   └── resource.h
                │   ├── array_view.h
                │   ├── array_view_unittest.cc
                │   ├── async_dns_resolver.h
                │   ├── async_resolver_factory.h
                │   ├── audio/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── audio_frame.cc
                │   │   ├── audio_frame.h
                │   │   ├── audio_frame_processor.h
                │   │   ├── audio_mixer.h
                │   │   ├── channel_layout.cc
                │   │   ├── channel_layout.h
                │   │   ├── echo_canceller3_config.cc
                │   │   ├── echo_canceller3_config.h
                │   │   ├── echo_canceller3_config_json.cc
                │   │   ├── echo_canceller3_config_json.h
                │   │   ├── echo_canceller3_factory.cc
                │   │   ├── echo_canceller3_factory.h
                │   │   ├── echo_control.h
                │   │   ├── echo_detector_creator.cc
                │   │   ├── echo_detector_creator.h
                │   │   └── test/
                │   │       ├── BUILD.gn
                │   │       ├── audio_frame_unittest.cc
                │   │       ├── echo_canceller3_config_json_unittest.cc
                │   │       └── echo_canceller3_config_unittest.cc
                │   ├── audio_codecs/
                │   │   ├── BUILD.gn
                │   │   ├── L16/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_L16.cc
                │   │   │   ├── audio_decoder_L16.h
                │   │   │   ├── audio_encoder_L16.cc
                │   │   │   └── audio_encoder_L16.h
                │   │   ├── OWNERS
                │   │   ├── audio_codec_pair_id.cc
                │   │   ├── audio_codec_pair_id.h
                │   │   ├── audio_decoder.cc
                │   │   ├── audio_decoder.h
                │   │   ├── audio_decoder_factory.h
                │   │   ├── audio_decoder_factory_template.h
                │   │   ├── audio_encoder.cc
                │   │   ├── audio_encoder.h
                │   │   ├── audio_encoder_factory.h
                │   │   ├── audio_encoder_factory_template.h
                │   │   ├── audio_format.cc
                │   │   ├── audio_format.h
                │   │   ├── builtin_audio_decoder_factory.cc
                │   │   ├── builtin_audio_decoder_factory.h
                │   │   ├── builtin_audio_encoder_factory.cc
                │   │   ├── builtin_audio_encoder_factory.h
                │   │   ├── g711/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_g711.cc
                │   │   │   ├── audio_decoder_g711.h
                │   │   │   ├── audio_encoder_g711.cc
                │   │   │   └── audio_encoder_g711.h
                │   │   ├── g722/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_g722.cc
                │   │   │   ├── audio_decoder_g722.h
                │   │   │   ├── audio_encoder_g722.cc
                │   │   │   ├── audio_encoder_g722.h
                │   │   │   └── audio_encoder_g722_config.h
                │   │   ├── ilbc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_ilbc.cc
                │   │   │   ├── audio_decoder_ilbc.h
                │   │   │   ├── audio_encoder_ilbc.cc
                │   │   │   ├── audio_encoder_ilbc.h
                │   │   │   └── audio_encoder_ilbc_config.h
                │   │   ├── isac/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_isac.h
                │   │   │   ├── audio_decoder_isac_fix.cc
                │   │   │   ├── audio_decoder_isac_fix.h
                │   │   │   ├── audio_decoder_isac_float.cc
                │   │   │   ├── audio_decoder_isac_float.h
                │   │   │   ├── audio_encoder_isac.h
                │   │   │   ├── audio_encoder_isac_fix.cc
                │   │   │   ├── audio_encoder_isac_fix.h
                │   │   │   ├── audio_encoder_isac_float.cc
                │   │   │   └── audio_encoder_isac_float.h
                │   │   ├── opus/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_decoder_multi_channel_opus.cc
                │   │   │   ├── audio_decoder_multi_channel_opus.h
                │   │   │   ├── audio_decoder_multi_channel_opus_config.h
                │   │   │   ├── audio_decoder_opus.cc
                │   │   │   ├── audio_decoder_opus.h
                │   │   │   ├── audio_encoder_multi_channel_opus.cc
                │   │   │   ├── audio_encoder_multi_channel_opus.h
                │   │   │   ├── audio_encoder_multi_channel_opus_config.cc
                │   │   │   ├── audio_encoder_multi_channel_opus_config.h
                │   │   │   ├── audio_encoder_opus.cc
                │   │   │   ├── audio_encoder_opus.h
                │   │   │   ├── audio_encoder_opus_config.cc
                │   │   │   └── audio_encoder_opus_config.h
                │   │   ├── opus_audio_decoder_factory.cc
                │   │   ├── opus_audio_decoder_factory.h
                │   │   ├── opus_audio_encoder_factory.cc
                │   │   ├── opus_audio_encoder_factory.h
                │   │   └── test/
                │   │       ├── BUILD.gn
                │   │       ├── audio_decoder_factory_template_unittest.cc
                │   │       └── audio_encoder_factory_template_unittest.cc
                │   ├── audio_options.cc
                │   ├── audio_options.h
                │   ├── call/
                │   │   ├── audio_sink.h
                │   │   ├── bitrate_allocation.h
                │   │   ├── call_factory_interface.h
                │   │   ├── transport.cc
                │   │   └── transport.h
                │   ├── candidate.cc
                │   ├── candidate.h
                │   ├── create_peerconnection_factory.cc
                │   ├── create_peerconnection_factory.h
                │   ├── crypto/
                │   │   ├── BUILD.gn
                │   │   ├── crypto_options.cc
                │   │   ├── crypto_options.h
                │   │   ├── frame_decryptor_interface.h
                │   │   └── frame_encryptor_interface.h
                │   ├── crypto_params.h
                │   ├── data_channel_interface.cc
                │   ├── data_channel_interface.h
                │   ├── dtls_transport_interface.cc
                │   ├── dtls_transport_interface.h
                │   ├── dtmf_sender_interface.h
                │   ├── fec_controller.h
                │   ├── fec_controller_override.h
                │   ├── frame_transformer_interface.h
                │   ├── function_view.h
                │   ├── function_view_unittest.cc
                │   ├── ice_transport_factory.cc
                │   ├── ice_transport_factory.h
                │   ├── ice_transport_interface.h
                │   ├── jsep.cc
                │   ├── jsep.h
                │   ├── jsep_ice_candidate.cc
                │   ├── jsep_ice_candidate.h
                │   ├── jsep_session_description.h
                │   ├── media_stream_interface.cc
                │   ├── media_stream_interface.h
                │   ├── media_stream_proxy.h
                │   ├── media_stream_track.h
                │   ├── media_stream_track_proxy.h
                │   ├── media_types.cc
                │   ├── media_types.h
                │   ├── neteq/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── custom_neteq_factory.cc
                │   │   ├── custom_neteq_factory.h
                │   │   ├── default_neteq_controller_factory.cc
                │   │   ├── default_neteq_controller_factory.h
                │   │   ├── neteq.cc
                │   │   ├── neteq.h
                │   │   ├── neteq_controller.h
                │   │   ├── neteq_controller_factory.h
                │   │   ├── neteq_factory.h
                │   │   ├── tick_timer.cc
                │   │   ├── tick_timer.h
                │   │   └── tick_timer_unittest.cc
                │   ├── network_state_predictor.h
                │   ├── notifier.h
                │   ├── numerics/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── samples_stats_counter.cc
                │   │   ├── samples_stats_counter.h
                │   │   └── samples_stats_counter_unittest.cc
                │   ├── packet_socket_factory.h
                │   ├── peer_connection_factory_proxy.h
                │   ├── peer_connection_interface.cc
                │   ├── peer_connection_interface.h
                │   ├── peer_connection_proxy.h
                │   ├── priority.h
                │   ├── proxy.cc
                │   ├── proxy.h
                │   ├── ref_counted_base.h
                │   ├── rtc_error.cc
                │   ├── rtc_error.h
                │   ├── rtc_error_unittest.cc
                │   ├── rtc_event_log/
                │   │   ├── BUILD.gn
                │   │   ├── rtc_event.cc
                │   │   ├── rtc_event.h
                │   │   ├── rtc_event_log.cc
                │   │   ├── rtc_event_log.h
                │   │   ├── rtc_event_log_factory.cc
                │   │   ├── rtc_event_log_factory.h
                │   │   └── rtc_event_log_factory_interface.h
                │   ├── rtc_event_log_output.h
                │   ├── rtc_event_log_output_file.cc
                │   ├── rtc_event_log_output_file.h
                │   ├── rtc_event_log_output_file_unittest.cc
                │   ├── rtp_headers.cc
                │   ├── rtp_headers.h
                │   ├── rtp_packet_info.cc
                │   ├── rtp_packet_info.h
                │   ├── rtp_packet_info_unittest.cc
                │   ├── rtp_packet_infos.h
                │   ├── rtp_packet_infos_unittest.cc
                │   ├── rtp_parameters.cc
                │   ├── rtp_parameters.h
                │   ├── rtp_parameters_unittest.cc
                │   ├── rtp_receiver_interface.cc
                │   ├── rtp_receiver_interface.h
                │   ├── rtp_sender_interface.cc
                │   ├── rtp_sender_interface.h
                │   ├── rtp_transceiver_direction.h
                │   ├── rtp_transceiver_interface.cc
                │   ├── rtp_transceiver_interface.h
                │   ├── scoped_refptr.h
                │   ├── scoped_refptr_unittest.cc
                │   ├── sctp_transport_interface.cc
                │   ├── sctp_transport_interface.h
                │   ├── sequence_checker.h
                │   ├── sequence_checker_unittest.cc
                │   ├── set_local_description_observer_interface.h
                │   ├── set_remote_description_observer_interface.h
                │   ├── stats/
                │   │   ├── OWNERS
                │   │   ├── rtc_stats.h
                │   │   ├── rtc_stats_collector_callback.h
                │   │   ├── rtc_stats_report.h
                │   │   └── rtcstats_objects.h
                │   ├── stats_types.cc
                │   ├── stats_types.h
                │   ├── task_queue/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── default_task_queue_factory.h
                │   │   ├── default_task_queue_factory_gcd.cc
                │   │   ├── default_task_queue_factory_libevent.cc
                │   │   ├── default_task_queue_factory_stdlib.cc
                │   │   ├── default_task_queue_factory_unittest.cc
                │   │   ├── default_task_queue_factory_win.cc
                │   │   ├── queued_task.h
                │   │   ├── task_queue_base.cc
                │   │   ├── task_queue_base.h
                │   │   ├── task_queue_factory.h
                │   │   ├── task_queue_test.cc
                │   │   └── task_queue_test.h
                │   ├── test/
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── audio_quality_analyzer_interface.h
                │   │   ├── audioproc_float.cc
                │   │   ├── audioproc_float.h
                │   │   ├── compile_all_headers.cc
                │   │   ├── create_frame_generator.cc
                │   │   ├── create_frame_generator.h
                │   │   ├── create_network_emulation_manager.cc
                │   │   ├── create_network_emulation_manager.h
                │   │   ├── create_peer_connection_quality_test_frame_generator.cc
                │   │   ├── create_peer_connection_quality_test_frame_generator.h
                │   │   ├── create_peerconnection_quality_test_fixture.cc
                │   │   ├── create_peerconnection_quality_test_fixture.h
                │   │   ├── create_simulcast_test_fixture.cc
                │   │   ├── create_simulcast_test_fixture.h
                │   │   ├── create_time_controller.cc
                │   │   ├── create_time_controller.h
                │   │   ├── create_time_controller_unittest.cc
                │   │   ├── create_video_quality_test_fixture.cc
                │   │   ├── create_video_quality_test_fixture.h
                │   │   ├── create_videocodec_test_fixture.cc
                │   │   ├── create_videocodec_test_fixture.h
                │   │   ├── dummy_peer_connection.h
                │   │   ├── fake_frame_decryptor.cc
                │   │   ├── fake_frame_decryptor.h
                │   │   ├── fake_frame_encryptor.cc
                │   │   ├── fake_frame_encryptor.h
                │   │   ├── frame_generator_interface.cc
                │   │   ├── frame_generator_interface.h
                │   │   ├── mock_audio_mixer.h
                │   │   ├── mock_data_channel.h
                │   │   ├── mock_fec_controller_override.h
                │   │   ├── mock_frame_decryptor.h
                │   │   ├── mock_frame_encryptor.h
                │   │   ├── mock_media_stream_interface.h
                │   │   ├── mock_peer_connection_factory_interface.h
                │   │   ├── mock_peerconnectioninterface.h
                │   │   ├── mock_rtp_transceiver.h
                │   │   ├── mock_rtpreceiver.h
                │   │   ├── mock_rtpsender.h
                │   │   ├── mock_transformable_video_frame.h
                │   │   ├── mock_video_bitrate_allocator.h
                │   │   ├── mock_video_bitrate_allocator_factory.h
                │   │   ├── mock_video_decoder.h
                │   │   ├── mock_video_decoder_factory.h
                │   │   ├── mock_video_encoder.h
                │   │   ├── mock_video_encoder_factory.h
                │   │   ├── neteq_simulator.cc
                │   │   ├── neteq_simulator.h
                │   │   ├── neteq_simulator_factory.cc
                │   │   ├── neteq_simulator_factory.h
                │   │   ├── network_emulation/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── create_cross_traffic.cc
                │   │   │   ├── create_cross_traffic.h
                │   │   │   ├── cross_traffic.h
                │   │   │   ├── network_emulation_interfaces.cc
                │   │   │   └── network_emulation_interfaces.h
                │   │   ├── network_emulation_manager.cc
                │   │   ├── network_emulation_manager.h
                │   │   ├── peerconnection_quality_test_fixture.h
                │   │   ├── simulated_network.h
                │   │   ├── simulcast_test_fixture.h
                │   │   ├── stats_observer_interface.h
                │   │   ├── test_dependency_factory.cc
                │   │   ├── test_dependency_factory.h
                │   │   ├── time_controller.cc
                │   │   ├── time_controller.h
                │   │   ├── track_id_stream_info_map.h
                │   │   ├── video/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── function_video_decoder_factory.h
                │   │   │   └── function_video_encoder_factory.h
                │   │   ├── video_quality_analyzer_interface.h
                │   │   ├── video_quality_test_fixture.h
                │   │   ├── videocodec_test_fixture.h
                │   │   ├── videocodec_test_stats.cc
                │   │   └── videocodec_test_stats.h
                │   ├── transport/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── bitrate_settings.cc
                │   │   ├── bitrate_settings.h
                │   │   ├── data_channel_transport_interface.h
                │   │   ├── enums.h
                │   │   ├── field_trial_based_config.cc
                │   │   ├── field_trial_based_config.h
                │   │   ├── goog_cc_factory.cc
                │   │   ├── goog_cc_factory.h
                │   │   ├── network_control.h
                │   │   ├── network_types.cc
                │   │   ├── network_types.h
                │   │   ├── rtp/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── dependency_descriptor.cc
                │   │   │   ├── dependency_descriptor.h
                │   │   │   └── rtp_source.h
                │   │   ├── sctp_transport_factory_interface.h
                │   │   ├── stun.cc
                │   │   ├── stun.h
                │   │   ├── stun_unittest.cc
                │   │   ├── test/
                │   │   │   ├── create_feedback_generator.cc
                │   │   │   ├── create_feedback_generator.h
                │   │   │   ├── feedback_generator_interface.h
                │   │   │   └── mock_network_control.h
                │   │   └── webrtc_key_value_config.h
                │   ├── turn_customizer.h
                │   ├── uma_metrics.h
                │   ├── units/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── data_rate.cc
                │   │   ├── data_rate.h
                │   │   ├── data_rate_unittest.cc
                │   │   ├── data_size.cc
                │   │   ├── data_size.h
                │   │   ├── data_size_unittest.cc
                │   │   ├── frequency.cc
                │   │   ├── frequency.h
                │   │   ├── frequency_unittest.cc
                │   │   ├── time_delta.cc
                │   │   ├── time_delta.h
                │   │   ├── time_delta_unittest.cc
                │   │   ├── timestamp.cc
                │   │   ├── timestamp.h
                │   │   └── timestamp_unittest.cc
                │   ├── video/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── builtin_video_bitrate_allocator_factory.cc
                │   │   ├── builtin_video_bitrate_allocator_factory.h
                │   │   ├── color_space.cc
                │   │   ├── color_space.h
                │   │   ├── encoded_frame.cc
                │   │   ├── encoded_frame.h
                │   │   ├── encoded_image.cc
                │   │   ├── encoded_image.h
                │   │   ├── hdr_metadata.cc
                │   │   ├── hdr_metadata.h
                │   │   ├── i010_buffer.cc
                │   │   ├── i010_buffer.h
                │   │   ├── i420_buffer.cc
                │   │   ├── i420_buffer.h
                │   │   ├── nv12_buffer.cc
                │   │   ├── nv12_buffer.h
                │   │   ├── recordable_encoded_frame.h
                │   │   ├── test/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── color_space_unittest.cc
                │   │   │   ├── mock_recordable_encoded_frame.h
                │   │   │   ├── nv12_buffer_unittest.cc
                │   │   │   ├── video_adaptation_counters_unittest.cc
                │   │   │   └── video_bitrate_allocation_unittest.cc
                │   │   ├── video_adaptation_counters.cc
                │   │   ├── video_adaptation_counters.h
                │   │   ├── video_adaptation_reason.h
                │   │   ├── video_bitrate_allocation.cc
                │   │   ├── video_bitrate_allocation.h
                │   │   ├── video_bitrate_allocator.cc
                │   │   ├── video_bitrate_allocator.h
                │   │   ├── video_bitrate_allocator_factory.h
                │   │   ├── video_codec_constants.h
                │   │   ├── video_codec_type.h
                │   │   ├── video_content_type.cc
                │   │   ├── video_content_type.h
                │   │   ├── video_frame.cc
                │   │   ├── video_frame.h
                │   │   ├── video_frame_buffer.cc
                │   │   ├── video_frame_buffer.h
                │   │   ├── video_frame_metadata.cc
                │   │   ├── video_frame_metadata.h
                │   │   ├── video_frame_metadata_unittest.cc
                │   │   ├── video_frame_type.h
                │   │   ├── video_layers_allocation.h
                │   │   ├── video_rotation.h
                │   │   ├── video_sink_interface.h
                │   │   ├── video_source_interface.cc
                │   │   ├── video_source_interface.h
                │   │   ├── video_stream_decoder.h
                │   │   ├── video_stream_decoder_create.cc
                │   │   ├── video_stream_decoder_create.h
                │   │   ├── video_stream_decoder_create_unittest.cc
                │   │   ├── video_stream_encoder_interface.h
                │   │   ├── video_stream_encoder_observer.h
                │   │   ├── video_stream_encoder_settings.h
                │   │   ├── video_timing.cc
                │   │   └── video_timing.h
                │   ├── video_codecs/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── bitstream_parser.h
                │   │   ├── builtin_video_decoder_factory.cc
                │   │   ├── builtin_video_decoder_factory.h
                │   │   ├── builtin_video_encoder_factory.cc
                │   │   ├── builtin_video_encoder_factory.h
                │   │   ├── sdp_video_format.cc
                │   │   ├── sdp_video_format.h
                │   │   ├── spatial_layer.cc
                │   │   ├── spatial_layer.h
                │   │   ├── test/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── builtin_video_encoder_factory_unittest.cc
                │   │   │   ├── video_decoder_software_fallback_wrapper_unittest.cc
                │   │   │   └── video_encoder_software_fallback_wrapper_unittest.cc
                │   │   ├── video_codec.cc
                │   │   ├── video_codec.h
                │   │   ├── video_decoder.cc
                │   │   ├── video_decoder.h
                │   │   ├── video_decoder_factory.cc
                │   │   ├── video_decoder_factory.h
                │   │   ├── video_decoder_software_fallback_wrapper.cc
                │   │   ├── video_decoder_software_fallback_wrapper.h
                │   │   ├── video_encoder.cc
                │   │   ├── video_encoder.h
                │   │   ├── video_encoder_config.cc
                │   │   ├── video_encoder_config.h
                │   │   ├── video_encoder_factory.h
                │   │   ├── video_encoder_software_fallback_wrapper.cc
                │   │   ├── video_encoder_software_fallback_wrapper.h
                │   │   ├── vp8_frame_buffer_controller.h
                │   │   ├── vp8_frame_config.cc
                │   │   ├── vp8_frame_config.h
                │   │   ├── vp8_temporal_layers.cc
                │   │   ├── vp8_temporal_layers.h
                │   │   ├── vp8_temporal_layers_factory.cc
                │   │   └── vp8_temporal_layers_factory.h
                │   ├── video_track_source_proxy.h
                │   └── voip/
                │       ├── BUILD.gn
                │       ├── DEPS
                │       ├── test/
                │       │   ├── compile_all_headers.cc
                │       │   ├── mock_voip_engine.h
                │       │   └── voip_engine_factory_unittest.cc
                │       ├── voip_base.h
                │       ├── voip_codec.h
                │       ├── voip_dtmf.h
                │       ├── voip_engine.h
                │       ├── voip_engine_factory.cc
                │       ├── voip_engine_factory.h
                │       ├── voip_network.h
                │       ├── voip_statistics.h
                │       └── voip_volume_control.h
                ├── audio/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── audio_level.cc
                │   ├── audio_level.h
                │   ├── audio_receive_stream.cc
                │   ├── audio_receive_stream.h
                │   ├── audio_receive_stream_unittest.cc
                │   ├── audio_send_stream.cc
                │   ├── audio_send_stream.h
                │   ├── audio_send_stream_tests.cc
                │   ├── audio_send_stream_unittest.cc
                │   ├── audio_state.cc
                │   ├── audio_state.h
                │   ├── audio_state_unittest.cc
                │   ├── audio_transport_impl.cc
                │   ├── audio_transport_impl.h
                │   ├── channel_receive.cc
                │   ├── channel_receive.h
                │   ├── channel_receive_frame_transformer_delegate.cc
                │   ├── channel_receive_frame_transformer_delegate.h
                │   ├── channel_receive_frame_transformer_delegate_unittest.cc
                │   ├── channel_send.cc
                │   ├── channel_send.h
                │   ├── channel_send_frame_transformer_delegate.cc
                │   ├── channel_send_frame_transformer_delegate.h
                │   ├── channel_send_frame_transformer_delegate_unittest.cc
                │   ├── conversion.h
                │   ├── mock_voe_channel_proxy.h
                │   ├── null_audio_poller.cc
                │   ├── null_audio_poller.h
                │   ├── remix_resample.cc
                │   ├── remix_resample.h
                │   ├── remix_resample_unittest.cc
                │   ├── test/
                │   │   ├── audio_bwe_integration_test.cc
                │   │   ├── audio_bwe_integration_test.h
                │   │   ├── audio_end_to_end_test.cc
                │   │   ├── audio_end_to_end_test.h
                │   │   ├── audio_stats_test.cc
                │   │   ├── low_bandwidth_audio_test.cc
                │   │   ├── low_bandwidth_audio_test.py
                │   │   ├── low_bandwidth_audio_test_flags.cc
                │   │   ├── pc_low_bandwidth_audio_test.cc
                │   │   └── unittests/
                │   │       └── low_bandwidth_audio_test_test.py
                │   ├── utility/
                │   │   ├── BUILD.gn
                │   │   ├── audio_frame_operations.cc
                │   │   ├── audio_frame_operations.h
                │   │   ├── audio_frame_operations_unittest.cc
                │   │   ├── channel_mixer.cc
                │   │   ├── channel_mixer.h
                │   │   ├── channel_mixer_unittest.cc
                │   │   ├── channel_mixing_matrix.cc
                │   │   ├── channel_mixing_matrix.h
                │   │   └── channel_mixing_matrix_unittest.cc
                │   └── voip/
                │       ├── BUILD.gn
                │       ├── audio_channel.cc
                │       ├── audio_channel.h
                │       ├── audio_egress.cc
                │       ├── audio_egress.h
                │       ├── audio_ingress.cc
                │       ├── audio_ingress.h
                │       ├── test/
                │       │   ├── BUILD.gn
                │       │   ├── audio_channel_unittest.cc
                │       │   ├── audio_egress_unittest.cc
                │       │   ├── audio_ingress_unittest.cc
                │       │   ├── mock_task_queue.h
                │       │   └── voip_core_unittest.cc
                │       ├── voip_core.cc
                │       └── voip_core.h
                ├── base/
                │   ├── android/
                │   │   ├── OWNERS
                │   │   ├── android_hardware_buffer_compat.cc
                │   │   ├── android_hardware_buffer_compat.h
                │   │   ├── android_image_reader_abi.h
                │   │   ├── android_image_reader_compat.cc
                │   │   ├── android_image_reader_compat.h
                │   │   ├── android_image_reader_compat_unittest.cc
                │   │   ├── animation_frame_time_histogram.cc
                │   │   ├── apk_assets.cc
                │   │   ├── apk_assets.h
                │   │   ├── application_status_listener.cc
                │   │   ├── application_status_listener.h
                │   │   ├── application_status_listener_unittest.cc
                │   │   ├── base_jni_onload.cc
                │   │   ├── base_jni_onload.h
                │   │   ├── build_info.cc
                │   │   ├── build_info.h
                │   │   ├── bundle_utils.cc
                │   │   ├── bundle_utils.h
                │   │   ├── callback_android.cc
                │   │   ├── callback_android.h
                │   │   ├── child_process_binding_types.h
                │   │   ├── child_process_service.cc
                │   │   ├── child_process_unittest.cc
                │   │   ├── command_line_android.cc
                │   │   ├── content_uri_utils.cc
                │   │   ├── content_uri_utils.h
                │   │   ├── content_uri_utils_unittest.cc
                │   │   ├── cpu_features.cc
                │   │   ├── early_trace_event_binding.cc
                │   │   ├── early_trace_event_binding.h
                │   │   ├── event_log.cc
                │   │   ├── event_log.h
                │   │   ├── field_trial_list.cc
                │   │   ├── important_file_writer_android.cc
                │   │   ├── int_string_callback.cc
                │   │   ├── int_string_callback.h
                │   │   ├── java/
                │   │   │   ├── src/
                │   │   │   │   └── org/
                │   │   │   │       └── chromium/
                │   │   │   │           └── base/
                │   │   │   │               ├── ActivityState.java
                │   │   │   │               ├── AnimationFrameTimeHistogram.java
                │   │   │   │               ├── ApiCompatibilityUtils.java
                │   │   │   │               ├── ApkAssets.java
                │   │   │   │               ├── ApplicationStatus.java
                │   │   │   │               ├── BaseSwitches.java
                │   │   │   │               ├── BuildInfo.java
                │   │   │   │               ├── BundleUtils.java
                │   │   │   │               ├── Callback.java
                │   │   │   │               ├── CollectionUtil.java
                │   │   │   │               ├── CommandLine.java
                │   │   │   │               ├── CommandLineInitUtil.java
                │   │   │   │               ├── Consumer.java
                │   │   │   │               ├── ContentUriUtils.java
                │   │   │   │               ├── ContextUtils.java
                │   │   │   │               ├── CpuFeatures.java
                │   │   │   │               ├── DiscardableReferencePool.java
                │   │   │   │               ├── EarlyTraceEvent.java
                │   │   │   │               ├── EventLog.java
                │   │   │   │               ├── FeatureList.java
                │   │   │   │               ├── FieldTrialList.java
                │   │   │   │               ├── FileUtils.java
                │   │   │   │               ├── Function.java
                │   │   │   │               ├── ImportantFileWriterAndroid.java
                │   │   │   │               ├── IntStringCallback.java
                │   │   │   │               ├── IntentUtils.java
                │   │   │   │               ├── JNIUtils.java
                │   │   │   │               ├── JavaExceptionReporter.java
                │   │   │   │               ├── JavaHandlerThread.java
                │   │   │   │               ├── JniException.java
                │   │   │   │               ├── JniStaticTestMocker.java
                │   │   │   │               ├── LifetimeAssert.java
                │   │   │   │               ├── LocaleUtils.java
                │   │   │   │               ├── Log.java
                │   │   │   │               ├── MathUtils.java
                │   │   │   │               ├── MemoryPressureListener.java
                │   │   │   │               ├── NativeLibraryLoadedStatus.java
                │   │   │   │               ├── NonThreadSafe.java
                │   │   │   │               ├── ObserverList.java
                │   │   │   │               ├── PackageManagerUtils.java
                │   │   │   │               ├── PackageUtils.java
                │   │   │   │               ├── PathService.java
                │   │   │   │               ├── PathUtils.java
                │   │   │   │               ├── PiiElider.java
                │   │   │   │               ├── PowerMonitor.java
                │   │   │   │               ├── Promise.java
                │   │   │   │               ├── SecureRandomInitializer.java
                │   │   │   │               ├── StreamUtil.java
                │   │   │   │               ├── StrictModeContext.java
                │   │   │   │               ├── SysUtils.java
                │   │   │   │               ├── ThreadUtils.java
                │   │   │   │               ├── TimeUtils.java
                │   │   │   │               ├── TimezoneUtils.java
                │   │   │   │               ├── TraceEvent.java
                │   │   │   │               ├── UnguessableToken.java
                │   │   │   │               ├── UserData.java
                │   │   │   │               ├── UserDataHost.java
                │   │   │   │               ├── annotations/
                │   │   │   │               │   ├── AccessedByNative.java
                │   │   │   │               │   ├── CalledByNative.java
                │   │   │   │               │   ├── CalledByNativeJavaTest.java
                │   │   │   │               │   ├── CalledByNativeUnchecked.java
                │   │   │   │               │   ├── CheckDiscard.java
                │   │   │   │               │   ├── DisabledCalledByNativeJavaTest.java
                │   │   │   │               │   ├── DoNotInline.java
                │   │   │   │               │   ├── JNIAdditionalImport.java
                │   │   │   │               │   ├── JNINamespace.java
                │   │   │   │               │   ├── JniIgnoreNatives.java
                │   │   │   │               │   ├── MainDex.java
                │   │   │   │               │   ├── NativeClassQualifiedName.java
                │   │   │   │               │   ├── NativeJavaTestFeatures.java
                │   │   │   │               │   ├── NativeMethods.java
                │   │   │   │               │   ├── RemovableInRelease.java
                │   │   │   │               │   ├── UsedByReflection.java
                │   │   │   │               │   ├── VerifiesOnLollipop.java
                │   │   │   │               │   ├── VerifiesOnLollipopMR1.java
                │   │   │   │               │   ├── VerifiesOnM.java
                │   │   │   │               │   ├── VerifiesOnN.java
                │   │   │   │               │   ├── VerifiesOnNMR1.java
                │   │   │   │               │   ├── VerifiesOnO.java
                │   │   │   │               │   ├── VerifiesOnOMR1.java
                │   │   │   │               │   ├── VerifiesOnP.java
                │   │   │   │               │   └── VerifiesOnQ.java
                │   │   │   │               ├── compat/
                │   │   │   │               │   ├── ApiHelperForM.java
                │   │   │   │               │   ├── ApiHelperForN.java
                │   │   │   │               │   ├── ApiHelperForO.java
                │   │   │   │               │   ├── ApiHelperForOMR1.java
                │   │   │   │               │   ├── ApiHelperForP.java
                │   │   │   │               │   └── ApiHelperForQ.java
                │   │   │   │               ├── library_loader/
                │   │   │   │               │   ├── LegacyLinker.java
                │   │   │   │               │   ├── LibraryLoader.java
                │   │   │   │               │   ├── LibraryPrefetcher.java
                │   │   │   │               │   ├── Linker.java
                │   │   │   │               │   ├── LoaderErrors.java
                │   │   │   │               │   ├── ModernLinker.java
                │   │   │   │               │   ├── NativeLibraryPreloader.java
                │   │   │   │               │   └── ProcessInitException.java
                │   │   │   │               ├── memory/
                │   │   │   │               │   ├── JavaHeapDumpGenerator.java
                │   │   │   │               │   ├── MemoryPressureCallback.java
                │   │   │   │               │   ├── MemoryPressureMonitor.java
                │   │   │   │               │   └── MemoryPressureUma.java
                │   │   │   │               ├── metrics/
                │   │   │   │               │   ├── CachingUmaRecorder.java
                │   │   │   │               │   ├── NativeUmaRecorder.java
                │   │   │   │               │   ├── NoopUmaRecorder.java
                │   │   │   │               │   ├── RecordHistogram.java
                │   │   │   │               │   ├── RecordUserAction.java
                │   │   │   │               │   ├── ScopedSysTraceEvent.java
                │   │   │   │               │   ├── StatisticsRecorderAndroid.java
                │   │   │   │               │   ├── UmaRecorder.java
                │   │   │   │               │   ├── UmaRecorderHolder.java
                │   │   │   │               │   └── forwarding_synchronization.md
                │   │   │   │               ├── multidex/
                │   │   │   │               │   └── ChromiumMultiDexInstaller.java
                │   │   │   │               ├── process_launcher/
                │   │   │   │               │   ├── BindService.java
                │   │   │   │               │   ├── ChildConnectionAllocator.java
                │   │   │   │               │   ├── ChildProcessConnection.java
                │   │   │   │               │   ├── ChildProcessConstants.java
                │   │   │   │               │   ├── ChildProcessLauncher.java
                │   │   │   │               │   ├── ChildProcessService.java
                │   │   │   │               │   ├── ChildProcessServiceDelegate.java
                │   │   │   │               │   ├── FileDescriptorInfo.aidl
                │   │   │   │               │   ├── FileDescriptorInfo.java
                │   │   │   │               │   ├── IChildProcessService.aidl
                │   │   │   │               │   ├── IParentProcess.aidl
                │   │   │   │               │   └── OWNERS
                │   │   │   │               ├── supplier/
                │   │   │   │               │   ├── DestroyableObservableSupplier.java
                │   │   │   │               │   ├── ObservableSupplier.java
                │   │   │   │               │   ├── ObservableSupplierImpl.java
                │   │   │   │               │   └── Supplier.java
                │   │   │   │               └── task/
                │   │   │   │                   ├── AsyncTask.java
                │   │   │   │                   ├── BackgroundOnlyAsyncTask.java
                │   │   │   │                   ├── ChoreographerTaskRunner.java
                │   │   │   │                   ├── ChromeThreadPoolExecutor.java
                │   │   │   │                   ├── DefaultTaskExecutor.java
                │   │   │   │                   ├── OWNERS
                │   │   │   │                   ├── PostTask.java
                │   │   │   │                   ├── SequencedTaskRunner.java
                │   │   │   │                   ├── SequencedTaskRunnerImpl.java
                │   │   │   │                   ├── SerialExecutor.java
                │   │   │   │                   ├── SingleThreadTaskRunner.java
                │   │   │   │                   ├── SingleThreadTaskRunnerImpl.java
                │   │   │   │                   ├── TaskExecutor.java
                │   │   │   │                   ├── TaskRunner.java
                │   │   │   │                   ├── TaskRunnerImpl.java
                │   │   │   │                   ├── TaskTraits.java
                │   │   │   │                   └── TaskTraitsExtensionDescriptor.java
                │   │   │   └── templates/
                │   │   │       └── BuildConfig.template
                │   │   ├── java_exception_reporter.cc
                │   │   ├── java_exception_reporter.h
                │   │   ├── java_handler_thread.cc
                │   │   ├── java_handler_thread.h
                │   │   ├── java_handler_thread_unittest.cc
                │   │   ├── java_heap_dump_generator.cc
                │   │   ├── java_heap_dump_generator.h
                │   │   ├── java_runtime.cc
                │   │   ├── java_runtime.h
                │   │   ├── javatests/
                │   │   │   └── src/
                │   │   │       └── org/
                │   │   │           └── chromium/
                │   │   │               └── base/
                │   │   │                   ├── AdvancedMockContextTest.java
                │   │   │                   ├── ApiCompatibilityUtilsTest.java
                │   │   │                   ├── AssertsTest.java
                │   │   │                   ├── CommandLineInitUtilTest.java
                │   │   │                   ├── CommandLineTest.java
                │   │   │                   ├── EarlyTraceEventTest.java
                │   │   │                   ├── LocaleUtilsTest.java
                │   │   │                   ├── ObserverListTest.java
                │   │   │                   ├── StrictModeContextTest.java
                │   │   │                   ├── UserDataHostTest.java
                │   │   │                   ├── library_loader/
                │   │   │                   │   └── EarlyNativeTest.java
                │   │   │                   ├── metrics/
                │   │   │                   │   └── RecordHistogramTest.java
                │   │   │                   ├── task/
                │   │   │                   │   ├── AsyncTaskTest.java
                │   │   │                   │   ├── PostTaskTest.java
                │   │   │                   │   ├── SequencedTaskRunnerImplTest.java
                │   │   │                   │   ├── SingleThreadTaskRunnerImplTest.java
                │   │   │                   │   └── TaskRunnerImplTest.java
                │   │   │                   └── util/
                │   │   │                       └── GarbageCollectionTestUtilsTest.java
                │   │   ├── jni_android.cc
                │   │   ├── jni_android.h
                │   │   ├── jni_android_unittest.cc
                │   │   ├── jni_array.cc
                │   │   ├── jni_array.h
                │   │   ├── jni_array_unittest.cc
                │   │   ├── jni_generator/
                │   │   │   ├── .style.yapf
                │   │   │   ├── AndroidManifest.xml
                │   │   │   ├── BUILD.gn
                │   │   │   ├── OWNERS
                │   │   │   ├── PRESUBMIT.py
                │   │   │   ├── ProcessorArgs.template
                │   │   │   ├── README.md
                │   │   │   ├── TestSampleFeatureList.java
                │   │   │   ├── android_jar.classes
                │   │   │   ├── config.gni
                │   │   │   ├── golden/
                │   │   │   │   ├── HashedSampleForAnnotationProcessorGenJni.golden
                │   │   │   │   ├── HashedSampleForAnnotationProcessor_jni.golden
                │   │   │   │   ├── SampleForAnnotationProcessor_jni.golden
                │   │   │   │   ├── SampleForTests_jni.golden
                │   │   │   │   ├── testCalledByNativeJavaTest.golden
                │   │   │   │   ├── testCalledByNatives.golden
                │   │   │   │   ├── testConstantsFromJavaP.golden
                │   │   │   │   ├── testFromJavaP.golden
                │   │   │   │   ├── testFromJavaPGenerics.golden
                │   │   │   │   ├── testGenJniFlagsDisabled.golden
                │   │   │   │   ├── testGenJniFlagsMocksEnabled.golden
                │   │   │   │   ├── testGenJniFlagsMocksRequired.golden
                │   │   │   │   ├── testInnerClassNatives.golden
                │   │   │   │   ├── testInnerClassNativesBothInnerAndOuter.golden
                │   │   │   │   ├── testInnerClassNativesBothInnerAndOuterRegistrations.golden
                │   │   │   │   ├── testInnerClassNativesMultiple.golden
                │   │   │   │   ├── testInputStream.javap
                │   │   │   │   ├── testMotionEvent.javap
                │   │   │   │   ├── testMotionEvent.javap7
                │   │   │   │   ├── testMultipleJNIAdditionalImport.golden
                │   │   │   │   ├── testNativeExportsOnlyOption.golden
                │   │   │   │   ├── testNatives.golden
                │   │   │   │   ├── testNativesLong.golden
                │   │   │   │   ├── testNativesRegistrations.golden
                │   │   │   │   ├── testProxyNatives.golden
                │   │   │   │   ├── testProxyNativesJava.golden
                │   │   │   │   ├── testProxyNativesMainDex.golden
                │   │   │   │   ├── testProxyNativesMainDexAndNonMainDex.golden
                │   │   │   │   ├── testProxyNativesRegistrations.golden
                │   │   │   │   ├── testProxyNativesWithNatives.golden
                │   │   │   │   ├── testREForNatives.golden
                │   │   │   │   ├── testSingleJNIAdditionalImport.golden
                │   │   │   │   ├── testStaticBindingCaller.golden
                │   │   │   │   └── testTracing.golden
                │   │   │   ├── java/
                │   │   │   │   └── src/
                │   │   │   │       └── org/
                │   │   │   │           └── chromium/
                │   │   │   │               ├── example/
                │   │   │   │               │   └── jni_generator/
                │   │   │   │               │       ├── SampleForAnnotationProcessor.java
                │   │   │   │               │       └── SampleForTests.java
                │   │   │   │               └── jni_generator/
                │   │   │   │                   └── JniProcessor.java
                │   │   │   ├── jni_generator.py
                │   │   │   ├── jni_generator.pydeps
                │   │   │   ├── jni_generator_helper.h
                │   │   │   ├── jni_generator_tests.py
                │   │   │   ├── jni_refactorer.py
                │   │   │   ├── jni_registration_generator.py
                │   │   │   ├── jni_registration_generator.pydeps
                │   │   │   ├── sample_entry_point.cc
                │   │   │   ├── sample_for_tests.cc
                │   │   │   └── sample_for_tests.h
                │   │   ├── jni_int_wrapper.h
                │   │   ├── jni_registrar.cc
                │   │   ├── jni_registrar.h
                │   │   ├── jni_string.cc
                │   │   ├── jni_string.h
                │   │   ├── jni_string_unittest.cc
                │   │   ├── jni_utils.cc
                │   │   ├── jni_utils.h
                │   │   ├── jni_weak_ref.cc
                │   │   ├── jni_weak_ref.h
                │   │   ├── junit/
                │   │   │   └── src/
                │   │   │       └── org/
                │   │   │           └── chromium/
                │   │   │               └── base/
                │   │   │                   ├── AnimationFrameTimeHistogramTest.java
                │   │   │                   ├── ApplicationStatusTest.java
                │   │   │                   ├── DiscardableReferencePoolTest.java
                │   │   │                   ├── FileUtilsTest.java
                │   │   │                   ├── LifetimeAssertTest.java
                │   │   │                   ├── LogTest.java
                │   │   │                   ├── NonThreadSafeTest.java
                │   │   │                   ├── PiiEliderTest.java
                │   │   │                   ├── PromiseTest.java
                │   │   │                   ├── memory/
                │   │   │                   │   └── MemoryPressureMonitorTest.java
                │   │   │                   ├── metrics/
                │   │   │                   │   ├── CachingUmaRecorderTest.java
                │   │   │                   │   └── test/
                │   │   │                   │       ├── DisableHistogramsRule.java
                │   │   │                   │       └── ShadowRecordHistogram.java
                │   │   │                   ├── process_launcher/
                │   │   │                   │   ├── ChildConnectionAllocatorTest.java
                │   │   │                   │   └── ChildProcessConnectionTest.java
                │   │   │                   ├── supplier/
                │   │   │                   │   └── ObservableSupplierImplTest.java
                │   │   │                   ├── task/
                │   │   │                   │   ├── AsyncTaskThreadTest.java
                │   │   │                   │   └── TaskTraitsTest.java
                │   │   │                   └── util/
                │   │   │                       └── GarbageCollectionTestUtilsUnitTest.java
                │   │   ├── library_loader/
                │   │   │   ├── README.md
                │   │   │   ├── anchor_functions.cc
                │   │   │   ├── anchor_functions.h
                │   │   │   ├── anchor_functions.lds
                │   │   │   ├── library_loader_hooks.cc
                │   │   │   ├── library_loader_hooks.h
                │   │   │   ├── library_prefetcher.cc
                │   │   │   ├── library_prefetcher.h
                │   │   │   ├── library_prefetcher_hooks.cc
                │   │   │   └── library_prefetcher_unittest.cc
                │   │   ├── linker/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── config.gni
                │   │   │   ├── legacy_linker_jni.cc
                │   │   │   ├── legacy_linker_jni.h
                │   │   │   ├── linker_jni.cc
                │   │   │   ├── linker_jni.h
                │   │   │   ├── modern_linker_jni.cc
                │   │   │   └── modern_linker_jni.h
                │   │   ├── locale_utils.cc
                │   │   ├── locale_utils.h
                │   │   ├── memory_pressure_listener_android.cc
                │   │   ├── memory_pressure_listener_android.h
                │   │   ├── native_uma_recorder.cc
                │   │   ├── orderfile/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── OWNERS
                │   │   │   ├── orderfile_call_graph_instrumentation.cc
                │   │   │   ├── orderfile_call_graph_instrumentation_perftest.cc
                │   │   │   ├── orderfile_instrumentation.cc
                │   │   │   ├── orderfile_instrumentation.h
                │   │   │   └── orderfile_instrumentation_perftest.cc
                │   │   ├── path_service_android.cc
                │   │   ├── path_utils.cc
                │   │   ├── path_utils.h
                │   │   ├── path_utils_unittest.cc
                │   │   ├── proguard/
                │   │   │   ├── OWNERS
                │   │   │   ├── chromium_apk.flags
                │   │   │   ├── chromium_code.flags
                │   │   │   ├── disable_all_obfuscation.flags
                │   │   │   └── enable_obfuscation.flags
                │   │   ├── reached_addresses_bitset.cc
                │   │   ├── reached_addresses_bitset.h
                │   │   ├── reached_addresses_bitset_unittest.cc
                │   │   ├── reached_code_profiler.cc
                │   │   ├── reached_code_profiler.h
                │   │   ├── reached_code_profiler_stub.cc
                │   │   ├── record_histogram.cc
                │   │   ├── record_user_action.cc
                │   │   ├── scoped_hardware_buffer_fence_sync.cc
                │   │   ├── scoped_hardware_buffer_fence_sync.h
                │   │   ├── scoped_hardware_buffer_handle.cc
                │   │   ├── scoped_hardware_buffer_handle.h
                │   │   ├── scoped_java_ref.cc
                │   │   ├── scoped_java_ref.h
                │   │   ├── scoped_java_ref_unittest.cc
                │   │   ├── statistics_recorder_android.cc
                │   │   ├── sys_utils.cc
                │   │   ├── sys_utils.h
                │   │   ├── sys_utils_unittest.cc
                │   │   ├── task_scheduler/
                │   │   │   ├── post_task_android.cc
                │   │   │   ├── post_task_android.h
                │   │   │   ├── task_runner_android.cc
                │   │   │   └── task_runner_android.h
                │   │   ├── time_utils.cc
                │   │   ├── timezone_utils.cc
                │   │   ├── timezone_utils.h
                │   │   ├── trace_event_binding.cc
                │   │   ├── unguessable_token_android.cc
                │   │   ├── unguessable_token_android.h
                │   │   └── unguessable_token_android_unittest.cc
                │   ├── compiler_specific.h
                │   └── third_party/
                │       └── libevent/
                │           ├── BUILD.gn
                │           ├── ChangeLog
                │           ├── Doxyfile
                │           ├── LICENSE
                │           ├── Makefile.am
                │           ├── Makefile.nmake
                │           ├── README
                │           ├── README.chromium
                │           ├── aix/
                │           │   └── event-config.h
                │           ├── android/
                │           │   └── event-config.h
                │           ├── autogen.sh
                │           ├── buffer.c
                │           ├── chromium.patch
                │           ├── compat/
                │           │   └── sys/
                │           │       ├── _libevent_time.h
                │           │       └── queue.h
                │           ├── configure.in
                │           ├── devpoll.c
                │           ├── epoll.c
                │           ├── epoll_sub.c
                │           ├── evbuffer.c
                │           ├── evdns.3
                │           ├── evdns.c
                │           ├── evdns.h
                │           ├── event-config.h
                │           ├── event-internal.h
                │           ├── event.3
                │           ├── event.c
                │           ├── event.h
                │           ├── event_rpcgen.py
                │           ├── event_tagging.c
                │           ├── evhttp.h
                │           ├── evport.c
                │           ├── evrpc-internal.h
                │           ├── evrpc.c
                │           ├── evrpc.h
                │           ├── evsignal.h
                │           ├── evutil.c
                │           ├── evutil.h
                │           ├── freebsd/
                │           │   └── event-config.h
                │           ├── http-internal.h
                │           ├── http.c
                │           ├── kqueue.c
                │           ├── linux/
                │           │   └── event-config.h
                │           ├── log.c
                │           ├── log.h
                │           ├── m4/
                │           │   └── .dummy
                │           ├── mac/
                │           │   └── event-config.h
                │           ├── min_heap.h
                │           ├── nacl_nonsfi/
                │           │   ├── event-config.h
                │           │   ├── random.c
                │           │   └── signal_stub.c
                │           ├── poll.c
                │           ├── sample/
                │           │   ├── Makefile.am
                │           │   ├── event-test.c
                │           │   ├── signal-test.c
                │           │   └── time-test.c
                │           ├── select.c
                │           ├── signal.c
                │           ├── solaris/
                │           │   └── event-config.h
                │           ├── stamp-h.in
                │           ├── strlcpy-internal.h
                │           ├── strlcpy.c
                │           └── test/
                │               ├── Makefile.am
                │               ├── Makefile.nmake
                │               ├── bench.c
                │               ├── regress.c
                │               ├── regress.h
                │               ├── regress.rpc
                │               ├── regress_dns.c
                │               ├── regress_http.c
                │               ├── regress_rpc.c
                │               ├── test-eof.c
                │               ├── test-init.c
                │               ├── test-time.c
                │               ├── test-weof.c
                │               └── test.sh
                ├── build/
                │   └── build_config.h
                ├── call/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── adaptation/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── adaptation_constraint.cc
                │   │   ├── adaptation_constraint.h
                │   │   ├── broadcast_resource_listener.cc
                │   │   ├── broadcast_resource_listener.h
                │   │   ├── broadcast_resource_listener_unittest.cc
                │   │   ├── degradation_preference_provider.cc
                │   │   ├── degradation_preference_provider.h
                │   │   ├── encoder_settings.cc
                │   │   ├── encoder_settings.h
                │   │   ├── resource_adaptation_processor.cc
                │   │   ├── resource_adaptation_processor.h
                │   │   ├── resource_adaptation_processor_interface.cc
                │   │   ├── resource_adaptation_processor_interface.h
                │   │   ├── resource_adaptation_processor_unittest.cc
                │   │   ├── resource_unittest.cc
                │   │   ├── test/
                │   │   │   ├── fake_adaptation_constraint.cc
                │   │   │   ├── fake_adaptation_constraint.h
                │   │   │   ├── fake_frame_rate_provider.cc
                │   │   │   ├── fake_frame_rate_provider.h
                │   │   │   ├── fake_resource.cc
                │   │   │   ├── fake_resource.h
                │   │   │   ├── fake_video_stream_input_state_provider.cc
                │   │   │   ├── fake_video_stream_input_state_provider.h
                │   │   │   └── mock_resource_listener.h
                │   │   ├── video_source_restrictions.cc
                │   │   ├── video_source_restrictions.h
                │   │   ├── video_source_restrictions_unittest.cc
                │   │   ├── video_stream_adapter.cc
                │   │   ├── video_stream_adapter.h
                │   │   ├── video_stream_adapter_unittest.cc
                │   │   ├── video_stream_input_state.cc
                │   │   ├── video_stream_input_state.h
                │   │   ├── video_stream_input_state_provider.cc
                │   │   ├── video_stream_input_state_provider.h
                │   │   └── video_stream_input_state_provider_unittest.cc
                │   ├── audio_receive_stream.cc
                │   ├── audio_receive_stream.h
                │   ├── audio_send_stream.cc
                │   ├── audio_send_stream.h
                │   ├── audio_sender.h
                │   ├── audio_state.cc
                │   ├── audio_state.h
                │   ├── bitrate_allocator.cc
                │   ├── bitrate_allocator.h
                │   ├── bitrate_allocator_unittest.cc
                │   ├── bitrate_estimator_tests.cc
                │   ├── call.cc
                │   ├── call.h
                │   ├── call_config.cc
                │   ├── call_config.h
                │   ├── call_factory.cc
                │   ├── call_factory.h
                │   ├── call_perf_tests.cc
                │   ├── call_unittest.cc
                │   ├── degraded_call.cc
                │   ├── degraded_call.h
                │   ├── fake_network_pipe.cc
                │   ├── fake_network_pipe.h
                │   ├── fake_network_pipe_unittest.cc
                │   ├── flexfec_receive_stream.cc
                │   ├── flexfec_receive_stream.h
                │   ├── flexfec_receive_stream_impl.cc
                │   ├── flexfec_receive_stream_impl.h
                │   ├── flexfec_receive_stream_unittest.cc
                │   ├── packet_receiver.h
                │   ├── rampup_tests.cc
                │   ├── rampup_tests.h
                │   ├── receive_time_calculator.cc
                │   ├── receive_time_calculator.h
                │   ├── receive_time_calculator_unittest.cc
                │   ├── rtp_bitrate_configurator.cc
                │   ├── rtp_bitrate_configurator.h
                │   ├── rtp_bitrate_configurator_unittest.cc
                │   ├── rtp_config.cc
                │   ├── rtp_config.h
                │   ├── rtp_demuxer.cc
                │   ├── rtp_demuxer.h
                │   ├── rtp_demuxer_unittest.cc
                │   ├── rtp_packet_sink_interface.h
                │   ├── rtp_payload_params.cc
                │   ├── rtp_payload_params.h
                │   ├── rtp_payload_params_unittest.cc
                │   ├── rtp_stream_receiver_controller.cc
                │   ├── rtp_stream_receiver_controller.h
                │   ├── rtp_stream_receiver_controller_interface.h
                │   ├── rtp_transport_controller_send.cc
                │   ├── rtp_transport_controller_send.h
                │   ├── rtp_transport_controller_send_interface.h
                │   ├── rtp_video_sender.cc
                │   ├── rtp_video_sender.h
                │   ├── rtp_video_sender_interface.h
                │   ├── rtp_video_sender_unittest.cc
                │   ├── rtx_receive_stream.cc
                │   ├── rtx_receive_stream.h
                │   ├── rtx_receive_stream_unittest.cc
                │   ├── simulated_network.cc
                │   ├── simulated_network.h
                │   ├── simulated_network_unittest.cc
                │   ├── simulated_packet_receiver.h
                │   ├── syncable.cc
                │   ├── syncable.h
                │   ├── test/
                │   │   ├── mock_audio_send_stream.h
                │   │   ├── mock_bitrate_allocator.h
                │   │   ├── mock_rtp_packet_sink_interface.h
                │   │   └── mock_rtp_transport_controller_send.h
                │   ├── version.cc
                │   ├── version.h
                │   ├── video_receive_stream.cc
                │   ├── video_receive_stream.h
                │   ├── video_send_stream.cc
                │   └── video_send_stream.h
                ├── common_audio/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── audio_converter.cc
                │   ├── audio_converter.h
                │   ├── audio_converter_unittest.cc
                │   ├── audio_util.cc
                │   ├── audio_util_unittest.cc
                │   ├── channel_buffer.cc
                │   ├── channel_buffer.h
                │   ├── channel_buffer_unittest.cc
                │   ├── fir_filter.h
                │   ├── fir_filter_avx2.cc
                │   ├── fir_filter_avx2.h
                │   ├── fir_filter_c.cc
                │   ├── fir_filter_c.h
                │   ├── fir_filter_factory.cc
                │   ├── fir_filter_factory.h
                │   ├── fir_filter_neon.cc
                │   ├── fir_filter_neon.h
                │   ├── fir_filter_sse.cc
                │   ├── fir_filter_sse.h
                │   ├── fir_filter_unittest.cc
                │   ├── include/
                │   │   └── audio_util.h
                │   ├── mocks/
                │   │   └── mock_smoothing_filter.h
                │   ├── real_fourier.cc
                │   ├── real_fourier.h
                │   ├── real_fourier_ooura.cc
                │   ├── real_fourier_ooura.h
                │   ├── real_fourier_unittest.cc
                │   ├── resampler/
                │   │   ├── include/
                │   │   │   ├── push_resampler.h
                │   │   │   └── resampler.h
                │   │   ├── push_resampler.cc
                │   │   ├── push_resampler_unittest.cc
                │   │   ├── push_sinc_resampler.cc
                │   │   ├── push_sinc_resampler.h
                │   │   ├── push_sinc_resampler_unittest.cc
                │   │   ├── resampler.cc
                │   │   ├── resampler_unittest.cc
                │   │   ├── sinc_resampler.cc
                │   │   ├── sinc_resampler.h
                │   │   ├── sinc_resampler_avx2.cc
                │   │   ├── sinc_resampler_neon.cc
                │   │   ├── sinc_resampler_sse.cc
                │   │   ├── sinc_resampler_unittest.cc
                │   │   ├── sinusoidal_linear_chirp_source.cc
                │   │   └── sinusoidal_linear_chirp_source.h
                │   ├── ring_buffer.c
                │   ├── ring_buffer.h
                │   ├── ring_buffer_unittest.cc
                │   ├── signal_processing/
                │   │   ├── auto_corr_to_refl_coef.c
                │   │   ├── auto_correlation.c
                │   │   ├── complex_bit_reverse.c
                │   │   ├── complex_bit_reverse_arm.S
                │   │   ├── complex_bit_reverse_mips.c
                │   │   ├── complex_fft.c
                │   │   ├── complex_fft_mips.c
                │   │   ├── complex_fft_tables.h
                │   │   ├── copy_set_operations.c
                │   │   ├── cross_correlation.c
                │   │   ├── cross_correlation_mips.c
                │   │   ├── cross_correlation_neon.c
                │   │   ├── division_operations.c
                │   │   ├── dot_product_with_scale.cc
                │   │   ├── dot_product_with_scale.h
                │   │   ├── downsample_fast.c
                │   │   ├── downsample_fast_mips.c
                │   │   ├── downsample_fast_neon.c
                │   │   ├── energy.c
                │   │   ├── filter_ar.c
                │   │   ├── filter_ar_fast_q12.c
                │   │   ├── filter_ar_fast_q12_armv7.S
                │   │   ├── filter_ar_fast_q12_mips.c
                │   │   ├── filter_ma_fast_q12.c
                │   │   ├── get_hanning_window.c
                │   │   ├── get_scaling_square.c
                │   │   ├── ilbc_specific_functions.c
                │   │   ├── include/
                │   │   │   ├── real_fft.h
                │   │   │   ├── signal_processing_library.h
                │   │   │   ├── spl_inl.h
                │   │   │   ├── spl_inl_armv7.h
                │   │   │   └── spl_inl_mips.h
                │   │   ├── levinson_durbin.c
                │   │   ├── lpc_to_refl_coef.c
                │   │   ├── min_max_operations.c
                │   │   ├── min_max_operations_mips.c
                │   │   ├── min_max_operations_neon.c
                │   │   ├── randomization_functions.c
                │   │   ├── real_fft.c
                │   │   ├── real_fft_unittest.cc
                │   │   ├── refl_coef_to_lpc.c
                │   │   ├── resample.c
                │   │   ├── resample_48khz.c
                │   │   ├── resample_by_2.c
                │   │   ├── resample_by_2_internal.c
                │   │   ├── resample_by_2_internal.h
                │   │   ├── resample_by_2_mips.c
                │   │   ├── resample_fractional.c
                │   │   ├── signal_processing_unittest.cc
                │   │   ├── spl_init.c
                │   │   ├── spl_inl.c
                │   │   ├── spl_sqrt.c
                │   │   ├── splitting_filter.c
                │   │   ├── sqrt_of_one_minus_x_squared.c
                │   │   ├── vector_scaling_operations.c
                │   │   └── vector_scaling_operations_mips.c
                │   ├── smoothing_filter.cc
                │   ├── smoothing_filter.h
                │   ├── smoothing_filter_unittest.cc
                │   ├── third_party/
                │   │   ├── ooura/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── LICENSE
                │   │   │   ├── README.chromium
                │   │   │   ├── fft_size_128/
                │   │   │   │   ├── ooura_fft.cc
                │   │   │   │   ├── ooura_fft.h
                │   │   │   │   ├── ooura_fft_mips.cc
                │   │   │   │   ├── ooura_fft_neon.cc
                │   │   │   │   ├── ooura_fft_sse2.cc
                │   │   │   │   ├── ooura_fft_tables_common.h
                │   │   │   │   └── ooura_fft_tables_neon_sse2.h
                │   │   │   └── fft_size_256/
                │   │   │       ├── fft4g.cc
                │   │   │       └── fft4g.h
                │   │   └── spl_sqrt_floor/
                │   │       ├── BUILD.gn
                │   │       ├── LICENSE
                │   │       ├── README.chromium
                │   │       ├── spl_sqrt_floor.c
                │   │       ├── spl_sqrt_floor.h
                │   │       ├── spl_sqrt_floor_arm.S
                │   │       └── spl_sqrt_floor_mips.c
                │   ├── vad/
                │   │   ├── include/
                │   │   │   ├── vad.h
                │   │   │   └── webrtc_vad.h
                │   │   ├── mock/
                │   │   │   └── mock_vad.h
                │   │   ├── vad.cc
                │   │   ├── vad_core.c
                │   │   ├── vad_core.h
                │   │   ├── vad_core_unittest.cc
                │   │   ├── vad_filterbank.c
                │   │   ├── vad_filterbank.h
                │   │   ├── vad_filterbank_unittest.cc
                │   │   ├── vad_gmm.c
                │   │   ├── vad_gmm.h
                │   │   ├── vad_gmm_unittest.cc
                │   │   ├── vad_sp.c
                │   │   ├── vad_sp.h
                │   │   ├── vad_sp_unittest.cc
                │   │   ├── vad_unittest.cc
                │   │   ├── vad_unittest.h
                │   │   └── webrtc_vad.c
                │   ├── wav_file.cc
                │   ├── wav_file.h
                │   ├── wav_file_unittest.cc
                │   ├── wav_header.cc
                │   ├── wav_header.h
                │   ├── wav_header_unittest.cc
                │   ├── window_generator.cc
                │   ├── window_generator.h
                │   └── window_generator_unittest.cc
                ├── common_video/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── bitrate_adjuster.cc
                │   ├── bitrate_adjuster_unittest.cc
                │   ├── frame_counts.h
                │   ├── frame_rate_estimator.cc
                │   ├── frame_rate_estimator.h
                │   ├── frame_rate_estimator_unittest.cc
                │   ├── generic_frame_descriptor/
                │   │   ├── BUILD.gn
                │   │   ├── OWNERS
                │   │   ├── generic_frame_info.cc
                │   │   └── generic_frame_info.h
                │   ├── h264/
                │   │   ├── OWNERS
                │   │   ├── h264_bitstream_parser.cc
                │   │   ├── h264_bitstream_parser.h
                │   │   ├── h264_bitstream_parser_unittest.cc
                │   │   ├── h264_common.cc
                │   │   ├── h264_common.h
                │   │   ├── pps_parser.cc
                │   │   ├── pps_parser.h
                │   │   ├── pps_parser_unittest.cc
                │   │   ├── prefix_parser.cc
                │   │   ├── prefix_parser.h
                │   │   ├── profile_level_id.h
                │   │   ├── profile_level_id_unittest.cc
                │   │   ├── sps_parser.cc
                │   │   ├── sps_parser.h
                │   │   ├── sps_parser_unittest.cc
                │   │   ├── sps_vui_rewriter.cc
                │   │   ├── sps_vui_rewriter.h
                │   │   └── sps_vui_rewriter_unittest.cc
                │   ├── h265/
                │   │   ├── h265_bitstream_parser.cc
                │   │   ├── h265_bitstream_parser.h
                │   │   ├── h265_common.cc
                │   │   ├── h265_common.h
                │   │   ├── h265_pps_parser.cc
                │   │   ├── h265_pps_parser.h
                │   │   ├── h265_sps_parser.cc
                │   │   ├── h265_sps_parser.h
                │   │   ├── h265_vps_parser.cc
                │   │   └── h265_vps_parser.h
                │   ├── include/
                │   │   ├── bitrate_adjuster.h
                │   │   ├── incoming_video_stream.h
                │   │   ├── quality_limitation_reason.h
                │   │   ├── video_frame_buffer.h
                │   │   └── video_frame_buffer_pool.h
                │   ├── incoming_video_stream.cc
                │   ├── libyuv/
                │   │   ├── include/
                │   │   │   └── webrtc_libyuv.h
                │   │   ├── libyuv_unittest.cc
                │   │   └── webrtc_libyuv.cc
                │   ├── test/
                │   │   ├── BUILD.gn
                │   │   ├── utilities.cc
                │   │   └── utilities.h
                │   ├── video_frame_buffer.cc
                │   ├── video_frame_buffer_pool.cc
                │   ├── video_frame_buffer_pool_unittest.cc
                │   ├── video_frame_unittest.cc
                │   ├── video_render_frames.cc
                │   └── video_render_frames.h
                ├── logging/
                │   ├── BUILD.gn
                │   ├── OWNERS
                │   └── rtc_event_log/
                │       ├── DEPS
                │       ├── encoder/
                │       │   ├── blob_encoding.cc
                │       │   ├── blob_encoding.h
                │       │   ├── blob_encoding_unittest.cc
                │       │   ├── delta_encoding.cc
                │       │   ├── delta_encoding.h
                │       │   ├── delta_encoding_unittest.cc
                │       │   ├── rtc_event_log_encoder.h
                │       │   ├── rtc_event_log_encoder_common.cc
                │       │   ├── rtc_event_log_encoder_common.h
                │       │   ├── rtc_event_log_encoder_common_unittest.cc
                │       │   ├── rtc_event_log_encoder_legacy.cc
                │       │   ├── rtc_event_log_encoder_legacy.h
                │       │   ├── rtc_event_log_encoder_new_format.cc
                │       │   ├── rtc_event_log_encoder_new_format.h
                │       │   ├── rtc_event_log_encoder_unittest.cc
                │       │   ├── var_int.cc
                │       │   └── var_int.h
                │       ├── events/
                │       │   ├── rtc_event_alr_state.cc
                │       │   ├── rtc_event_alr_state.h
                │       │   ├── rtc_event_audio_network_adaptation.cc
                │       │   ├── rtc_event_audio_network_adaptation.h
                │       │   ├── rtc_event_audio_playout.cc
                │       │   ├── rtc_event_audio_playout.h
                │       │   ├── rtc_event_audio_receive_stream_config.cc
                │       │   ├── rtc_event_audio_receive_stream_config.h
                │       │   ├── rtc_event_audio_send_stream_config.cc
                │       │   ├── rtc_event_audio_send_stream_config.h
                │       │   ├── rtc_event_bwe_update_delay_based.cc
                │       │   ├── rtc_event_bwe_update_delay_based.h
                │       │   ├── rtc_event_bwe_update_loss_based.cc
                │       │   ├── rtc_event_bwe_update_loss_based.h
                │       │   ├── rtc_event_dtls_transport_state.cc
                │       │   ├── rtc_event_dtls_transport_state.h
                │       │   ├── rtc_event_dtls_writable_state.cc
                │       │   ├── rtc_event_dtls_writable_state.h
                │       │   ├── rtc_event_frame_decoded.cc
                │       │   ├── rtc_event_frame_decoded.h
                │       │   ├── rtc_event_generic_ack_received.cc
                │       │   ├── rtc_event_generic_ack_received.h
                │       │   ├── rtc_event_generic_packet_received.cc
                │       │   ├── rtc_event_generic_packet_received.h
                │       │   ├── rtc_event_generic_packet_sent.cc
                │       │   ├── rtc_event_generic_packet_sent.h
                │       │   ├── rtc_event_ice_candidate_pair.cc
                │       │   ├── rtc_event_ice_candidate_pair.h
                │       │   ├── rtc_event_ice_candidate_pair_config.cc
                │       │   ├── rtc_event_ice_candidate_pair_config.h
                │       │   ├── rtc_event_probe_cluster_created.cc
                │       │   ├── rtc_event_probe_cluster_created.h
                │       │   ├── rtc_event_probe_result_failure.cc
                │       │   ├── rtc_event_probe_result_failure.h
                │       │   ├── rtc_event_probe_result_success.cc
                │       │   ├── rtc_event_probe_result_success.h
                │       │   ├── rtc_event_remote_estimate.h
                │       │   ├── rtc_event_route_change.cc
                │       │   ├── rtc_event_route_change.h
                │       │   ├── rtc_event_rtcp_packet_incoming.cc
                │       │   ├── rtc_event_rtcp_packet_incoming.h
                │       │   ├── rtc_event_rtcp_packet_outgoing.cc
                │       │   ├── rtc_event_rtcp_packet_outgoing.h
                │       │   ├── rtc_event_rtp_packet_incoming.cc
                │       │   ├── rtc_event_rtp_packet_incoming.h
                │       │   ├── rtc_event_rtp_packet_outgoing.cc
                │       │   ├── rtc_event_rtp_packet_outgoing.h
                │       │   ├── rtc_event_video_receive_stream_config.cc
                │       │   ├── rtc_event_video_receive_stream_config.h
                │       │   ├── rtc_event_video_send_stream_config.cc
                │       │   └── rtc_event_video_send_stream_config.h
                │       ├── fake_rtc_event_log.cc
                │       ├── fake_rtc_event_log.h
                │       ├── fake_rtc_event_log_factory.cc
                │       ├── fake_rtc_event_log_factory.h
                │       ├── ice_logger.cc
                │       ├── ice_logger.h
                │       ├── logged_events.cc
                │       ├── logged_events.h
                │       ├── mock/
                │       │   ├── mock_rtc_event_log.cc
                │       │   └── mock_rtc_event_log.h
                │       ├── output/
                │       │   └── rtc_event_log_output_file.h
                │       ├── rtc_event_log.proto
                │       ├── rtc_event_log2.proto
                │       ├── rtc_event_log2rtp_dump.cc
                │       ├── rtc_event_log_impl.cc
                │       ├── rtc_event_log_impl.h
                │       ├── rtc_event_log_parser.cc
                │       ├── rtc_event_log_parser.h
                │       ├── rtc_event_log_unittest.cc
                │       ├── rtc_event_log_unittest_helper.cc
                │       ├── rtc_event_log_unittest_helper.h
                │       ├── rtc_event_processor.cc
                │       ├── rtc_event_processor.h
                │       ├── rtc_event_processor_unittest.cc
                │       ├── rtc_stream_config.cc
                │       └── rtc_stream_config.h
                ├── media/
                │   ├── BUILD.gn
                │   ├── DEPS
                │   ├── OWNERS
                │   ├── base/
                │   │   ├── adapted_video_track_source.cc
                │   │   ├── adapted_video_track_source.h
                │   │   ├── audio_source.h
                │   │   ├── codec.cc
                │   │   ├── codec.h
                │   │   ├── codec_unittest.cc
                │   │   ├── delayable.h
                │   │   ├── fake_frame_source.cc
                │   │   ├── fake_frame_source.h
                │   │   ├── fake_media_engine.cc
                │   │   ├── fake_media_engine.h
                │   │   ├── fake_network_interface.h
                │   │   ├── fake_rtp.cc
                │   │   ├── fake_rtp.h
                │   │   ├── fake_video_renderer.cc
                │   │   ├── fake_video_renderer.h
                │   │   ├── h264_profile_level_id.cc
                │   │   ├── h264_profile_level_id.h
                │   │   ├── media_channel.cc
                │   │   ├── media_channel.h
                │   │   ├── media_config.h
                │   │   ├── media_constants.cc
                │   │   ├── media_constants.h
                │   │   ├── media_engine.cc
                │   │   ├── media_engine.h
                │   │   ├── media_engine_unittest.cc
                │   │   ├── rid_description.cc
                │   │   ├── rid_description.h
                │   │   ├── rtp_data_engine.cc
                │   │   ├── rtp_data_engine.h
                │   │   ├── rtp_data_engine_unittest.cc
                │   │   ├── rtp_utils.cc
                │   │   ├── rtp_utils.h
                │   │   ├── rtp_utils_unittest.cc
                │   │   ├── sdp_fmtp_utils.cc
                │   │   ├── sdp_fmtp_utils.h
                │   │   ├── sdp_fmtp_utils_unittest.cc
                │   │   ├── stream_params.cc
                │   │   ├── stream_params.h
                │   │   ├── stream_params_unittest.cc
                │   │   ├── test_utils.cc
                │   │   ├── test_utils.h
                │   │   ├── turn_utils.cc
                │   │   ├── turn_utils.h
                │   │   ├── turn_utils_unittest.cc
                │   │   ├── video_adapter.cc
                │   │   ├── video_adapter.h
                │   │   ├── video_adapter_unittest.cc
                │   │   ├── video_broadcaster.cc
                │   │   ├── video_broadcaster.h
                │   │   ├── video_broadcaster_unittest.cc
                │   │   ├── video_common.cc
                │   │   ├── video_common.h
                │   │   ├── video_common_unittest.cc
                │   │   ├── video_source_base.cc
                │   │   ├── video_source_base.h
                │   │   ├── vp9_profile.cc
                │   │   └── vp9_profile.h
                │   ├── engine/
                │   │   ├── adm_helpers.cc
                │   │   ├── adm_helpers.h
                │   │   ├── encoder_simulcast_proxy.cc
                │   │   ├── encoder_simulcast_proxy.h
                │   │   ├── encoder_simulcast_proxy_unittest.cc
                │   │   ├── fake_video_codec_factory.cc
                │   │   ├── fake_video_codec_factory.h
                │   │   ├── fake_webrtc_call.cc
                │   │   ├── fake_webrtc_call.h
                │   │   ├── fake_webrtc_video_engine.cc
                │   │   ├── fake_webrtc_video_engine.h
                │   │   ├── internal_decoder_factory.cc
                │   │   ├── internal_decoder_factory.h
                │   │   ├── internal_decoder_factory_unittest.cc
                │   │   ├── internal_encoder_factory.cc
                │   │   ├── internal_encoder_factory.h
                │   │   ├── multiplex_codec_factory.cc
                │   │   ├── multiplex_codec_factory.h
                │   │   ├── multiplex_codec_factory_unittest.cc
                │   │   ├── null_webrtc_video_engine.h
                │   │   ├── null_webrtc_video_engine_unittest.cc
                │   │   ├── payload_type_mapper.cc
                │   │   ├── payload_type_mapper.h
                │   │   ├── payload_type_mapper_unittest.cc
                │   │   ├── simulcast.cc
                │   │   ├── simulcast.h
                │   │   ├── simulcast_encoder_adapter.cc
                │   │   ├── simulcast_encoder_adapter.h
                │   │   ├── simulcast_encoder_adapter_unittest.cc
                │   │   ├── simulcast_unittest.cc
                │   │   ├── unhandled_packets_buffer.cc
                │   │   ├── unhandled_packets_buffer.h
                │   │   ├── unhandled_packets_buffer_unittest.cc
                │   │   ├── webrtc_media_engine.cc
                │   │   ├── webrtc_media_engine.h
                │   │   ├── webrtc_media_engine_defaults.cc
                │   │   ├── webrtc_media_engine_defaults.h
                │   │   ├── webrtc_media_engine_unittest.cc
                │   │   ├── webrtc_video_engine.cc
                │   │   ├── webrtc_video_engine.h
                │   │   ├── webrtc_video_engine_unittest.cc
                │   │   ├── webrtc_voice_engine.cc
                │   │   ├── webrtc_voice_engine.h
                │   │   └── webrtc_voice_engine_unittest.cc
                │   └── sctp/
                │       ├── OWNERS
                │       ├── noop.cc
                │       ├── sctp_transport.cc
                │       ├── sctp_transport.h
                │       ├── sctp_transport_internal.h
                │       ├── sctp_transport_reliability_unittest.cc
                │       └── sctp_transport_unittest.cc
                ├── modules/
                │   ├── BUILD.gn
                │   ├── async_audio_processing/
                │   │   ├── BUILD.gn
                │   │   ├── async_audio_processing.cc
                │   │   └── async_audio_processing.h
                │   ├── audio_coding/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── acm2/
                │   │   │   ├── acm_receive_test.cc
                │   │   │   ├── acm_receive_test.h
                │   │   │   ├── acm_receiver.cc
                │   │   │   ├── acm_receiver.h
                │   │   │   ├── acm_receiver_unittest.cc
                │   │   │   ├── acm_remixing.cc
                │   │   │   ├── acm_remixing.h
                │   │   │   ├── acm_remixing_unittest.cc
                │   │   │   ├── acm_resampler.cc
                │   │   │   ├── acm_resampler.h
                │   │   │   ├── acm_send_test.cc
                │   │   │   ├── acm_send_test.h
                │   │   │   ├── audio_coding_module.cc
                │   │   │   ├── audio_coding_module_unittest.cc
                │   │   │   ├── call_statistics.cc
                │   │   │   ├── call_statistics.h
                │   │   │   └── call_statistics_unittest.cc
                │   │   ├── audio_coding.gni
                │   │   ├── audio_network_adaptor/
                │   │   │   ├── audio_network_adaptor_config.cc
                │   │   │   ├── audio_network_adaptor_impl.cc
                │   │   │   ├── audio_network_adaptor_impl.h
                │   │   │   ├── audio_network_adaptor_impl_unittest.cc
                │   │   │   ├── bitrate_controller.cc
                │   │   │   ├── bitrate_controller.h
                │   │   │   ├── bitrate_controller_unittest.cc
                │   │   │   ├── channel_controller.cc
                │   │   │   ├── channel_controller.h
                │   │   │   ├── channel_controller_unittest.cc
                │   │   │   ├── config.proto
                │   │   │   ├── controller.cc
                │   │   │   ├── controller.h
                │   │   │   ├── controller_manager.cc
                │   │   │   ├── controller_manager.h
                │   │   │   ├── controller_manager_unittest.cc
                │   │   │   ├── debug_dump.proto
                │   │   │   ├── debug_dump_writer.cc
                │   │   │   ├── debug_dump_writer.h
                │   │   │   ├── dtx_controller.cc
                │   │   │   ├── dtx_controller.h
                │   │   │   ├── dtx_controller_unittest.cc
                │   │   │   ├── event_log_writer.cc
                │   │   │   ├── event_log_writer.h
                │   │   │   ├── event_log_writer_unittest.cc
                │   │   │   ├── fec_controller_plr_based.cc
                │   │   │   ├── fec_controller_plr_based.h
                │   │   │   ├── fec_controller_plr_based_unittest.cc
                │   │   │   ├── frame_length_controller.cc
                │   │   │   ├── frame_length_controller.h
                │   │   │   ├── frame_length_controller_unittest.cc
                │   │   │   ├── frame_length_controller_v2.cc
                │   │   │   ├── frame_length_controller_v2.h
                │   │   │   ├── frame_length_controller_v2_unittest.cc
                │   │   │   ├── include/
                │   │   │   │   ├── audio_network_adaptor.h
                │   │   │   │   └── audio_network_adaptor_config.h
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_audio_network_adaptor.h
                │   │   │   │   ├── mock_controller.h
                │   │   │   │   ├── mock_controller_manager.h
                │   │   │   │   └── mock_debug_dump_writer.h
                │   │   │   ├── parse_ana_dump.py
                │   │   │   └── util/
                │   │   │       ├── threshold_curve.h
                │   │   │       └── threshold_curve_unittest.cc
                │   │   ├── codecs/
                │   │   │   ├── audio_decoder.h
                │   │   │   ├── audio_encoder.h
                │   │   │   ├── builtin_audio_decoder_factory_unittest.cc
                │   │   │   ├── builtin_audio_encoder_factory_unittest.cc
                │   │   │   ├── cng/
                │   │   │   │   ├── audio_encoder_cng.cc
                │   │   │   │   ├── audio_encoder_cng.h
                │   │   │   │   ├── audio_encoder_cng_unittest.cc
                │   │   │   │   ├── cng_unittest.cc
                │   │   │   │   ├── webrtc_cng.cc
                │   │   │   │   └── webrtc_cng.h
                │   │   │   ├── g711/
                │   │   │   │   ├── audio_decoder_pcm.cc
                │   │   │   │   ├── audio_decoder_pcm.h
                │   │   │   │   ├── audio_encoder_pcm.cc
                │   │   │   │   ├── audio_encoder_pcm.h
                │   │   │   │   ├── g711_interface.c
                │   │   │   │   ├── g711_interface.h
                │   │   │   │   └── test/
                │   │   │   │       └── testG711.cc
                │   │   │   ├── g722/
                │   │   │   │   ├── audio_decoder_g722.cc
                │   │   │   │   ├── audio_decoder_g722.h
                │   │   │   │   ├── audio_encoder_g722.cc
                │   │   │   │   ├── audio_encoder_g722.h
                │   │   │   │   ├── g722_interface.c
                │   │   │   │   ├── g722_interface.h
                │   │   │   │   └── test/
                │   │   │   │       └── testG722.cc
                │   │   │   ├── ilbc/
                │   │   │   │   ├── abs_quant.c
                │   │   │   │   ├── abs_quant.h
                │   │   │   │   ├── abs_quant_loop.c
                │   │   │   │   ├── abs_quant_loop.h
                │   │   │   │   ├── audio_decoder_ilbc.cc
                │   │   │   │   ├── audio_decoder_ilbc.h
                │   │   │   │   ├── audio_encoder_ilbc.cc
                │   │   │   │   ├── audio_encoder_ilbc.h
                │   │   │   │   ├── augmented_cb_corr.c
                │   │   │   │   ├── augmented_cb_corr.h
                │   │   │   │   ├── bw_expand.c
                │   │   │   │   ├── bw_expand.h
                │   │   │   │   ├── cb_construct.c
                │   │   │   │   ├── cb_construct.h
                │   │   │   │   ├── cb_mem_energy.c
                │   │   │   │   ├── cb_mem_energy.h
                │   │   │   │   ├── cb_mem_energy_augmentation.c
                │   │   │   │   ├── cb_mem_energy_augmentation.h
                │   │   │   │   ├── cb_mem_energy_calc.c
                │   │   │   │   ├── cb_mem_energy_calc.h
                │   │   │   │   ├── cb_search.c
                │   │   │   │   ├── cb_search.h
                │   │   │   │   ├── cb_search_core.c
                │   │   │   │   ├── cb_search_core.h
                │   │   │   │   ├── cb_update_best_index.c
                │   │   │   │   ├── cb_update_best_index.h
                │   │   │   │   ├── chebyshev.c
                │   │   │   │   ├── chebyshev.h
                │   │   │   │   ├── comp_corr.c
                │   │   │   │   ├── comp_corr.h
                │   │   │   │   ├── complexityMeasures.m
                │   │   │   │   ├── constants.c
                │   │   │   │   ├── constants.h
                │   │   │   │   ├── create_augmented_vec.c
                │   │   │   │   ├── create_augmented_vec.h
                │   │   │   │   ├── decode.c
                │   │   │   │   ├── decode.h
                │   │   │   │   ├── decode_residual.c
                │   │   │   │   ├── decode_residual.h
                │   │   │   │   ├── decoder_interpolate_lsf.c
                │   │   │   │   ├── decoder_interpolate_lsf.h
                │   │   │   │   ├── defines.h
                │   │   │   │   ├── do_plc.c
                │   │   │   │   ├── do_plc.h
                │   │   │   │   ├── encode.c
                │   │   │   │   ├── encode.h
                │   │   │   │   ├── energy_inverse.c
                │   │   │   │   ├── energy_inverse.h
                │   │   │   │   ├── enh_upsample.c
                │   │   │   │   ├── enh_upsample.h
                │   │   │   │   ├── enhancer.c
                │   │   │   │   ├── enhancer.h
                │   │   │   │   ├── enhancer_interface.c
                │   │   │   │   ├── enhancer_interface.h
                │   │   │   │   ├── filtered_cb_vecs.c
                │   │   │   │   ├── filtered_cb_vecs.h
                │   │   │   │   ├── frame_classify.c
                │   │   │   │   ├── frame_classify.h
                │   │   │   │   ├── gain_dequant.c
                │   │   │   │   ├── gain_dequant.h
                │   │   │   │   ├── gain_quant.c
                │   │   │   │   ├── gain_quant.h
                │   │   │   │   ├── get_cd_vec.c
                │   │   │   │   ├── get_cd_vec.h
                │   │   │   │   ├── get_lsp_poly.c
                │   │   │   │   ├── get_lsp_poly.h
                │   │   │   │   ├── get_sync_seq.c
                │   │   │   │   ├── get_sync_seq.h
                │   │   │   │   ├── hp_input.c
                │   │   │   │   ├── hp_input.h
                │   │   │   │   ├── hp_output.c
                │   │   │   │   ├── hp_output.h
                │   │   │   │   ├── ilbc.c
                │   │   │   │   ├── ilbc.h
                │   │   │   │   ├── ilbc_unittest.cc
                │   │   │   │   ├── index_conv_dec.c
                │   │   │   │   ├── index_conv_dec.h
                │   │   │   │   ├── index_conv_enc.c
                │   │   │   │   ├── index_conv_enc.h
                │   │   │   │   ├── init_decode.c
                │   │   │   │   ├── init_decode.h
                │   │   │   │   ├── init_encode.c
                │   │   │   │   ├── init_encode.h
                │   │   │   │   ├── interpolate.c
                │   │   │   │   ├── interpolate.h
                │   │   │   │   ├── interpolate_samples.c
                │   │   │   │   ├── interpolate_samples.h
                │   │   │   │   ├── lpc_encode.c
                │   │   │   │   ├── lpc_encode.h
                │   │   │   │   ├── lsf_check.c
                │   │   │   │   ├── lsf_check.h
                │   │   │   │   ├── lsf_interpolate_to_poly_dec.c
                │   │   │   │   ├── lsf_interpolate_to_poly_dec.h
                │   │   │   │   ├── lsf_interpolate_to_poly_enc.c
                │   │   │   │   ├── lsf_interpolate_to_poly_enc.h
                │   │   │   │   ├── lsf_to_lsp.c
                │   │   │   │   ├── lsf_to_lsp.h
                │   │   │   │   ├── lsf_to_poly.c
                │   │   │   │   ├── lsf_to_poly.h
                │   │   │   │   ├── lsp_to_lsf.c
                │   │   │   │   ├── lsp_to_lsf.h
                │   │   │   │   ├── my_corr.c
                │   │   │   │   ├── my_corr.h
                │   │   │   │   ├── nearest_neighbor.c
                │   │   │   │   ├── nearest_neighbor.h
                │   │   │   │   ├── pack_bits.c
                │   │   │   │   ├── pack_bits.h
                │   │   │   │   ├── poly_to_lsf.c
                │   │   │   │   ├── poly_to_lsf.h
                │   │   │   │   ├── poly_to_lsp.c
                │   │   │   │   ├── poly_to_lsp.h
                │   │   │   │   ├── refiner.c
                │   │   │   │   ├── refiner.h
                │   │   │   │   ├── simple_interpolate_lsf.c
                │   │   │   │   ├── simple_interpolate_lsf.h
                │   │   │   │   ├── simple_lpc_analysis.c
                │   │   │   │   ├── simple_lpc_analysis.h
                │   │   │   │   ├── simple_lsf_dequant.c
                │   │   │   │   ├── simple_lsf_dequant.h
                │   │   │   │   ├── simple_lsf_quant.c
                │   │   │   │   ├── simple_lsf_quant.h
                │   │   │   │   ├── smooth.c
                │   │   │   │   ├── smooth.h
                │   │   │   │   ├── smooth_out_data.c
                │   │   │   │   ├── smooth_out_data.h
                │   │   │   │   ├── sort_sq.c
                │   │   │   │   ├── sort_sq.h
                │   │   │   │   ├── split_vq.c
                │   │   │   │   ├── split_vq.h
                │   │   │   │   ├── state_construct.c
                │   │   │   │   ├── state_construct.h
                │   │   │   │   ├── state_search.c
                │   │   │   │   ├── state_search.h
                │   │   │   │   ├── swap_bytes.c
                │   │   │   │   ├── swap_bytes.h
                │   │   │   │   ├── test/
                │   │   │   │   │   ├── empty.cc
                │   │   │   │   │   ├── iLBC_test.c
                │   │   │   │   │   ├── iLBC_testLib.c
                │   │   │   │   │   └── iLBC_testprogram.c
                │   │   │   │   ├── unpack_bits.c
                │   │   │   │   ├── unpack_bits.h
                │   │   │   │   ├── vq3.c
                │   │   │   │   ├── vq3.h
                │   │   │   │   ├── vq4.c
                │   │   │   │   ├── vq4.h
                │   │   │   │   ├── window32_w32.c
                │   │   │   │   ├── window32_w32.h
                │   │   │   │   ├── xcorr_coef.c
                │   │   │   │   └── xcorr_coef.h
                │   │   │   ├── isac/
                │   │   │   │   ├── audio_decoder_isac_t.h
                │   │   │   │   ├── audio_decoder_isac_t_impl.h
                │   │   │   │   ├── audio_encoder_isac_t.h
                │   │   │   │   ├── audio_encoder_isac_t_impl.h
                │   │   │   │   ├── bandwidth_info.h
                │   │   │   │   ├── empty.cc
                │   │   │   │   ├── fix/
                │   │   │   │   │   ├── include/
                │   │   │   │   │   │   ├── audio_decoder_isacfix.h
                │   │   │   │   │   │   ├── audio_encoder_isacfix.h
                │   │   │   │   │   │   └── isacfix.h
                │   │   │   │   │   ├── source/
                │   │   │   │   │   │   ├── arith_routines.c
                │   │   │   │   │   │   ├── arith_routines_hist.c
                │   │   │   │   │   │   ├── arith_routines_logist.c
                │   │   │   │   │   │   ├── arith_routins.h
                │   │   │   │   │   │   ├── audio_decoder_isacfix.cc
                │   │   │   │   │   │   ├── audio_encoder_isacfix.cc
                │   │   │   │   │   │   ├── bandwidth_estimator.c
                │   │   │   │   │   │   ├── bandwidth_estimator.h
                │   │   │   │   │   │   ├── codec.h
                │   │   │   │   │   │   ├── decode.c
                │   │   │   │   │   │   ├── decode_bwe.c
                │   │   │   │   │   │   ├── decode_plc.c
                │   │   │   │   │   │   ├── encode.c
                │   │   │   │   │   │   ├── entropy_coding.c
                │   │   │   │   │   │   ├── entropy_coding.h
                │   │   │   │   │   │   ├── entropy_coding_mips.c
                │   │   │   │   │   │   ├── entropy_coding_neon.c
                │   │   │   │   │   │   ├── fft.c
                │   │   │   │   │   │   ├── fft.h
                │   │   │   │   │   │   ├── filterbank_internal.h
                │   │   │   │   │   │   ├── filterbank_tables.c
                │   │   │   │   │   │   ├── filterbank_tables.h
                │   │   │   │   │   │   ├── filterbanks.c
                │   │   │   │   │   │   ├── filterbanks_mips.c
                │   │   │   │   │   │   ├── filterbanks_neon.c
                │   │   │   │   │   │   ├── filterbanks_unittest.cc
                │   │   │   │   │   │   ├── filters.c
                │   │   │   │   │   │   ├── filters_mips.c
                │   │   │   │   │   │   ├── filters_neon.c
                │   │   │   │   │   │   ├── filters_unittest.cc
                │   │   │   │   │   │   ├── initialize.c
                │   │   │   │   │   │   ├── isac_fix_type.h
                │   │   │   │   │   │   ├── isacfix.c
                │   │   │   │   │   │   ├── lattice.c
                │   │   │   │   │   │   ├── lattice_armv7.S
                │   │   │   │   │   │   ├── lattice_c.c
                │   │   │   │   │   │   ├── lattice_mips.c
                │   │   │   │   │   │   ├── lattice_neon.c
                │   │   │   │   │   │   ├── lpc_masking_model.c
                │   │   │   │   │   │   ├── lpc_masking_model.h
                │   │   │   │   │   │   ├── lpc_masking_model_mips.c
                │   │   │   │   │   │   ├── lpc_masking_model_unittest.cc
                │   │   │   │   │   │   ├── lpc_tables.c
                │   │   │   │   │   │   ├── lpc_tables.h
                │   │   │   │   │   │   ├── pitch_estimator.c
                │   │   │   │   │   │   ├── pitch_estimator.h
                │   │   │   │   │   │   ├── pitch_estimator_c.c
                │   │   │   │   │   │   ├── pitch_estimator_mips.c
                │   │   │   │   │   │   ├── pitch_filter.c
                │   │   │   │   │   │   ├── pitch_filter_armv6.S
                │   │   │   │   │   │   ├── pitch_filter_c.c
                │   │   │   │   │   │   ├── pitch_filter_mips.c
                │   │   │   │   │   │   ├── pitch_gain_tables.c
                │   │   │   │   │   │   ├── pitch_gain_tables.h
                │   │   │   │   │   │   ├── pitch_lag_tables.c
                │   │   │   │   │   │   ├── pitch_lag_tables.h
                │   │   │   │   │   │   ├── settings.h
                │   │   │   │   │   │   ├── spectrum_ar_model_tables.c
                │   │   │   │   │   │   ├── spectrum_ar_model_tables.h
                │   │   │   │   │   │   ├── structs.h
                │   │   │   │   │   │   ├── transform.c
                │   │   │   │   │   │   ├── transform_mips.c
                │   │   │   │   │   │   ├── transform_neon.c
                │   │   │   │   │   │   ├── transform_tables.c
                │   │   │   │   │   │   └── transform_unittest.cc
                │   │   │   │   │   └── test/
                │   │   │   │   │       ├── isac_speed_test.cc
                │   │   │   │   │       └── kenny.cc
                │   │   │   │   ├── isac_webrtc_api_test.cc
                │   │   │   │   └── main/
                │   │   │   │       ├── include/
                │   │   │   │       │   ├── audio_decoder_isac.h
                │   │   │   │       │   ├── audio_encoder_isac.h
                │   │   │   │       │   └── isac.h
                │   │   │   │       ├── source/
                │   │   │   │       │   ├── arith_routines.c
                │   │   │   │       │   ├── arith_routines.h
                │   │   │   │       │   ├── arith_routines_hist.c
                │   │   │   │       │   ├── arith_routines_logist.c
                │   │   │   │       │   ├── audio_decoder_isac.cc
                │   │   │   │       │   ├── audio_encoder_isac.cc
                │   │   │   │       │   ├── audio_encoder_isac_unittest.cc
                │   │   │   │       │   ├── bandwidth_estimator.c
                │   │   │   │       │   ├── bandwidth_estimator.h
                │   │   │   │       │   ├── codec.h
                │   │   │   │       │   ├── crc.c
                │   │   │   │       │   ├── crc.h
                │   │   │   │       │   ├── decode.c
                │   │   │   │       │   ├── decode_bwe.c
                │   │   │   │       │   ├── encode.c
                │   │   │   │       │   ├── encode_lpc_swb.c
                │   │   │   │       │   ├── encode_lpc_swb.h
                │   │   │   │       │   ├── entropy_coding.c
                │   │   │   │       │   ├── entropy_coding.h
                │   │   │   │       │   ├── filter_functions.c
                │   │   │   │       │   ├── filter_functions.h
                │   │   │   │       │   ├── filterbanks.c
                │   │   │   │       │   ├── intialize.c
                │   │   │   │       │   ├── isac.c
                │   │   │   │       │   ├── isac_float_type.h
                │   │   │   │       │   ├── isac_unittest.cc
                │   │   │   │       │   ├── isac_vad.c
                │   │   │   │       │   ├── isac_vad.h
                │   │   │   │       │   ├── lattice.c
                │   │   │   │       │   ├── lpc_analysis.c
                │   │   │   │       │   ├── lpc_analysis.h
                │   │   │   │       │   ├── lpc_gain_swb_tables.c
                │   │   │   │       │   ├── lpc_gain_swb_tables.h
                │   │   │   │       │   ├── lpc_shape_swb12_tables.c
                │   │   │   │       │   ├── lpc_shape_swb12_tables.h
                │   │   │   │       │   ├── lpc_shape_swb16_tables.c
                │   │   │   │       │   ├── lpc_shape_swb16_tables.h
                │   │   │   │       │   ├── lpc_tables.c
                │   │   │   │       │   ├── lpc_tables.h
                │   │   │   │       │   ├── os_specific_inline.h
                │   │   │   │       │   ├── pitch_estimator.c
                │   │   │   │       │   ├── pitch_estimator.h
                │   │   │   │       │   ├── pitch_filter.c
                │   │   │   │       │   ├── pitch_filter.h
                │   │   │   │       │   ├── pitch_gain_tables.c
                │   │   │   │       │   ├── pitch_gain_tables.h
                │   │   │   │       │   ├── pitch_lag_tables.c
                │   │   │   │       │   ├── pitch_lag_tables.h
                │   │   │   │       │   ├── settings.h
                │   │   │   │       │   ├── spectrum_ar_model_tables.c
                │   │   │   │       │   ├── spectrum_ar_model_tables.h
                │   │   │   │       │   ├── structs.h
                │   │   │   │       │   └── transform.c
                │   │   │   │       ├── test/
                │   │   │   │       │   ├── ReleaseTest-API/
                │   │   │   │       │   │   └── ReleaseTest-API.cc
                │   │   │   │       │   ├── SwitchingSampRate/
                │   │   │   │       │   │   └── SwitchingSampRate.cc
                │   │   │   │       │   └── simpleKenny.c
                │   │   │   │       └── util/
                │   │   │   │           ├── utility.c
                │   │   │   │           └── utility.h
                │   │   │   ├── legacy_encoded_audio_frame.cc
                │   │   │   ├── legacy_encoded_audio_frame.h
                │   │   │   ├── legacy_encoded_audio_frame_unittest.cc
                │   │   │   ├── opus/
                │   │   │   │   ├── audio_coder_opus_common.cc
                │   │   │   │   ├── audio_coder_opus_common.h
                │   │   │   │   ├── audio_decoder_multi_channel_opus_impl.cc
                │   │   │   │   ├── audio_decoder_multi_channel_opus_impl.h
                │   │   │   │   ├── audio_decoder_multi_channel_opus_unittest.cc
                │   │   │   │   ├── audio_decoder_opus.cc
                │   │   │   │   ├── audio_decoder_opus.h
                │   │   │   │   ├── audio_encoder_multi_channel_opus_impl.cc
                │   │   │   │   ├── audio_encoder_multi_channel_opus_impl.h
                │   │   │   │   ├── audio_encoder_multi_channel_opus_unittest.cc
                │   │   │   │   ├── audio_encoder_opus.cc
                │   │   │   │   ├── audio_encoder_opus.h
                │   │   │   │   ├── audio_encoder_opus_unittest.cc
                │   │   │   │   ├── opus_bandwidth_unittest.cc
                │   │   │   │   ├── opus_complexity_unittest.cc
                │   │   │   │   ├── opus_fec_test.cc
                │   │   │   │   ├── opus_inst.h
                │   │   │   │   ├── opus_interface.cc
                │   │   │   │   ├── opus_interface.h
                │   │   │   │   ├── opus_speed_test.cc
                │   │   │   │   ├── opus_unittest.cc
                │   │   │   │   └── test/
                │   │   │   │       ├── BUILD.gn
                │   │   │   │       ├── audio_ring_buffer.cc
                │   │   │   │       ├── audio_ring_buffer.h
                │   │   │   │       ├── audio_ring_buffer_unittest.cc
                │   │   │   │       ├── blocker.cc
                │   │   │   │       ├── blocker.h
                │   │   │   │       ├── blocker_unittest.cc
                │   │   │   │       ├── lapped_transform.cc
                │   │   │   │       ├── lapped_transform.h
                │   │   │   │       └── lapped_transform_unittest.cc
                │   │   │   ├── pcm16b/
                │   │   │   │   ├── audio_decoder_pcm16b.cc
                │   │   │   │   ├── audio_decoder_pcm16b.h
                │   │   │   │   ├── audio_encoder_pcm16b.cc
                │   │   │   │   ├── audio_encoder_pcm16b.h
                │   │   │   │   ├── pcm16b.c
                │   │   │   │   ├── pcm16b.h
                │   │   │   │   ├── pcm16b_common.cc
                │   │   │   │   └── pcm16b_common.h
                │   │   │   ├── red/
                │   │   │   │   ├── audio_encoder_copy_red.cc
                │   │   │   │   ├── audio_encoder_copy_red.h
                │   │   │   │   └── audio_encoder_copy_red_unittest.cc
                │   │   │   └── tools/
                │   │   │       ├── audio_codec_speed_test.cc
                │   │   │       └── audio_codec_speed_test.h
                │   │   ├── include/
                │   │   │   ├── audio_coding_module.h
                │   │   │   └── audio_coding_module_typedefs.h
                │   │   ├── neteq/
                │   │   │   ├── accelerate.cc
                │   │   │   ├── accelerate.h
                │   │   │   ├── audio_decoder_unittest.cc
                │   │   │   ├── audio_multi_vector.cc
                │   │   │   ├── audio_multi_vector.h
                │   │   │   ├── audio_multi_vector_unittest.cc
                │   │   │   ├── audio_vector.cc
                │   │   │   ├── audio_vector.h
                │   │   │   ├── audio_vector_unittest.cc
                │   │   │   ├── background_noise.cc
                │   │   │   ├── background_noise.h
                │   │   │   ├── background_noise_unittest.cc
                │   │   │   ├── buffer_level_filter.cc
                │   │   │   ├── buffer_level_filter.h
                │   │   │   ├── buffer_level_filter_unittest.cc
                │   │   │   ├── comfort_noise.cc
                │   │   │   ├── comfort_noise.h
                │   │   │   ├── comfort_noise_unittest.cc
                │   │   │   ├── cross_correlation.cc
                │   │   │   ├── cross_correlation.h
                │   │   │   ├── decision_logic.cc
                │   │   │   ├── decision_logic.h
                │   │   │   ├── decision_logic_unittest.cc
                │   │   │   ├── decoder_database.cc
                │   │   │   ├── decoder_database.h
                │   │   │   ├── decoder_database_unittest.cc
                │   │   │   ├── default_neteq_factory.cc
                │   │   │   ├── default_neteq_factory.h
                │   │   │   ├── delay_manager.cc
                │   │   │   ├── delay_manager.h
                │   │   │   ├── delay_manager_unittest.cc
                │   │   │   ├── dsp_helper.cc
                │   │   │   ├── dsp_helper.h
                │   │   │   ├── dsp_helper_unittest.cc
                │   │   │   ├── dtmf_buffer.cc
                │   │   │   ├── dtmf_buffer.h
                │   │   │   ├── dtmf_buffer_unittest.cc
                │   │   │   ├── dtmf_tone_generator.cc
                │   │   │   ├── dtmf_tone_generator.h
                │   │   │   ├── dtmf_tone_generator_unittest.cc
                │   │   │   ├── expand.cc
                │   │   │   ├── expand.h
                │   │   │   ├── expand_uma_logger.cc
                │   │   │   ├── expand_uma_logger.h
                │   │   │   ├── expand_unittest.cc
                │   │   │   ├── histogram.cc
                │   │   │   ├── histogram.h
                │   │   │   ├── histogram_unittest.cc
                │   │   │   ├── merge.cc
                │   │   │   ├── merge.h
                │   │   │   ├── merge_unittest.cc
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_buffer_level_filter.h
                │   │   │   │   ├── mock_decoder_database.h
                │   │   │   │   ├── mock_delay_manager.h
                │   │   │   │   ├── mock_dtmf_buffer.h
                │   │   │   │   ├── mock_dtmf_tone_generator.h
                │   │   │   │   ├── mock_expand.h
                │   │   │   │   ├── mock_histogram.h
                │   │   │   │   ├── mock_neteq_controller.h
                │   │   │   │   ├── mock_packet_buffer.h
                │   │   │   │   ├── mock_red_payload_splitter.h
                │   │   │   │   └── mock_statistics_calculator.h
                │   │   │   ├── nack_tracker.cc
                │   │   │   ├── nack_tracker.h
                │   │   │   ├── nack_tracker_unittest.cc
                │   │   │   ├── neteq_decoder_plc_unittest.cc
                │   │   │   ├── neteq_impl.cc
                │   │   │   ├── neteq_impl.h
                │   │   │   ├── neteq_impl_unittest.cc
                │   │   │   ├── neteq_network_stats_unittest.cc
                │   │   │   ├── neteq_stereo_unittest.cc
                │   │   │   ├── neteq_unittest.cc
                │   │   │   ├── neteq_unittest.proto
                │   │   │   ├── normal.cc
                │   │   │   ├── normal.h
                │   │   │   ├── normal_unittest.cc
                │   │   │   ├── packet.cc
                │   │   │   ├── packet.h
                │   │   │   ├── packet_buffer.cc
                │   │   │   ├── packet_buffer.h
                │   │   │   ├── packet_buffer_unittest.cc
                │   │   │   ├── post_decode_vad.cc
                │   │   │   ├── post_decode_vad.h
                │   │   │   ├── post_decode_vad_unittest.cc
                │   │   │   ├── preemptive_expand.cc
                │   │   │   ├── preemptive_expand.h
                │   │   │   ├── random_vector.cc
                │   │   │   ├── random_vector.h
                │   │   │   ├── random_vector_unittest.cc
                │   │   │   ├── red_payload_splitter.cc
                │   │   │   ├── red_payload_splitter.h
                │   │   │   ├── red_payload_splitter_unittest.cc
                │   │   │   ├── statistics_calculator.cc
                │   │   │   ├── statistics_calculator.h
                │   │   │   ├── statistics_calculator_unittest.cc
                │   │   │   ├── sync_buffer.cc
                │   │   │   ├── sync_buffer.h
                │   │   │   ├── sync_buffer_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── delay_tool/
                │   │   │   │   │   ├── parse_delay_file.m
                │   │   │   │   │   └── plot_neteq_delay.m
                │   │   │   │   ├── neteq_decoding_test.cc
                │   │   │   │   ├── neteq_decoding_test.h
                │   │   │   │   ├── neteq_ilbc_quality_test.cc
                │   │   │   │   ├── neteq_isac_quality_test.cc
                │   │   │   │   ├── neteq_opus_quality_test.cc
                │   │   │   │   ├── neteq_pcm16b_quality_test.cc
                │   │   │   │   ├── neteq_pcmu_quality_test.cc
                │   │   │   │   ├── neteq_performance_unittest.cc
                │   │   │   │   ├── neteq_speed_test.cc
                │   │   │   │   ├── result_sink.cc
                │   │   │   │   └── result_sink.h
                │   │   │   ├── time_stretch.cc
                │   │   │   ├── time_stretch.h
                │   │   │   ├── time_stretch_unittest.cc
                │   │   │   ├── timestamp_scaler.cc
                │   │   │   ├── timestamp_scaler.h
                │   │   │   ├── timestamp_scaler_unittest.cc
                │   │   │   └── tools/
                │   │   │       ├── DEPS
                │   │   │       ├── README.md
                │   │   │       ├── audio_checksum.h
                │   │   │       ├── audio_loop.cc
                │   │   │       ├── audio_loop.h
                │   │   │       ├── audio_sink.cc
                │   │   │       ├── audio_sink.h
                │   │   │       ├── constant_pcm_packet_source.cc
                │   │   │       ├── constant_pcm_packet_source.h
                │   │   │       ├── encode_neteq_input.cc
                │   │   │       ├── encode_neteq_input.h
                │   │   │       ├── fake_decode_from_file.cc
                │   │   │       ├── fake_decode_from_file.h
                │   │   │       ├── initial_packet_inserter_neteq_input.cc
                │   │   │       ├── initial_packet_inserter_neteq_input.h
                │   │   │       ├── input_audio_file.cc
                │   │   │       ├── input_audio_file.h
                │   │   │       ├── input_audio_file_unittest.cc
                │   │   │       ├── neteq_delay_analyzer.cc
                │   │   │       ├── neteq_delay_analyzer.h
                │   │   │       ├── neteq_event_log_input.cc
                │   │   │       ├── neteq_event_log_input.h
                │   │   │       ├── neteq_input.cc
                │   │   │       ├── neteq_input.h
                │   │   │       ├── neteq_packet_source_input.cc
                │   │   │       ├── neteq_packet_source_input.h
                │   │   │       ├── neteq_performance_test.cc
                │   │   │       ├── neteq_performance_test.h
                │   │   │       ├── neteq_quality_test.cc
                │   │   │       ├── neteq_quality_test.h
                │   │   │       ├── neteq_replacement_input.cc
                │   │   │       ├── neteq_replacement_input.h
                │   │   │       ├── neteq_rtpplay.cc
                │   │   │       ├── neteq_rtpplay_test.sh
                │   │   │       ├── neteq_stats_getter.cc
                │   │   │       ├── neteq_stats_getter.h
                │   │   │       ├── neteq_stats_plotter.cc
                │   │   │       ├── neteq_stats_plotter.h
                │   │   │       ├── neteq_test.cc
                │   │   │       ├── neteq_test.h
                │   │   │       ├── neteq_test_factory.cc
                │   │   │       ├── neteq_test_factory.h
                │   │   │       ├── output_audio_file.h
                │   │   │       ├── output_wav_file.h
                │   │   │       ├── packet.cc
                │   │   │       ├── packet.h
                │   │   │       ├── packet_source.cc
                │   │   │       ├── packet_source.h
                │   │   │       ├── packet_unittest.cc
                │   │   │       ├── resample_input_audio_file.cc
                │   │   │       ├── resample_input_audio_file.h
                │   │   │       ├── rtc_event_log_source.cc
                │   │   │       ├── rtc_event_log_source.h
                │   │   │       ├── rtp_analyze.cc
                │   │   │       ├── rtp_encode.cc
                │   │   │       ├── rtp_file_source.cc
                │   │   │       ├── rtp_file_source.h
                │   │   │       ├── rtp_generator.cc
                │   │   │       ├── rtp_generator.h
                │   │   │       ├── rtp_jitter.cc
                │   │   │       └── rtpcat.cc
                │   │   └── test/
                │   │       ├── Channel.cc
                │   │       ├── Channel.h
                │   │       ├── EncodeDecodeTest.cc
                │   │       ├── EncodeDecodeTest.h
                │   │       ├── PCMFile.cc
                │   │       ├── PCMFile.h
                │   │       ├── PacketLossTest.cc
                │   │       ├── PacketLossTest.h
                │   │       ├── RTPFile.cc
                │   │       ├── RTPFile.h
                │   │       ├── TestAllCodecs.cc
                │   │       ├── TestAllCodecs.h
                │   │       ├── TestRedFec.cc
                │   │       ├── TestRedFec.h
                │   │       ├── TestStereo.cc
                │   │       ├── TestStereo.h
                │   │       ├── TestVADDTX.cc
                │   │       ├── TestVADDTX.h
                │   │       ├── Tester.cc
                │   │       ├── TwoWayCommunication.cc
                │   │       ├── TwoWayCommunication.h
                │   │       ├── iSACTest.cc
                │   │       ├── iSACTest.h
                │   │       ├── opus_test.cc
                │   │       ├── opus_test.h
                │   │       └── target_delay_unittest.cc
                │   ├── audio_device/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── android/
                │   │   │   ├── aaudio_player.cc
                │   │   │   ├── aaudio_player.h
                │   │   │   ├── aaudio_recorder.cc
                │   │   │   ├── aaudio_recorder.h
                │   │   │   ├── aaudio_wrapper.cc
                │   │   │   ├── aaudio_wrapper.h
                │   │   │   ├── audio_common.h
                │   │   │   ├── audio_device_template.h
                │   │   │   ├── audio_device_unittest.cc
                │   │   │   ├── audio_manager.cc
                │   │   │   ├── audio_manager.h
                │   │   │   ├── audio_manager_unittest.cc
                │   │   │   ├── audio_record_jni.cc
                │   │   │   ├── audio_record_jni.h
                │   │   │   ├── audio_track_jni.cc
                │   │   │   ├── audio_track_jni.h
                │   │   │   ├── build_info.cc
                │   │   │   ├── build_info.h
                │   │   │   ├── ensure_initialized.cc
                │   │   │   ├── ensure_initialized.h
                │   │   │   ├── java/
                │   │   │   │   └── src/
                │   │   │   │       └── org/
                │   │   │   │           └── webrtc/
                │   │   │   │               └── voiceengine/
                │   │   │   │                   ├── BuildInfo.java
                │   │   │   │                   ├── WebRtcAudioEffects.java
                │   │   │   │                   ├── WebRtcAudioManager.java
                │   │   │   │                   ├── WebRtcAudioRecord.java
                │   │   │   │                   ├── WebRtcAudioTrack.java
                │   │   │   │                   └── WebRtcAudioUtils.java
                │   │   │   ├── opensles_common.cc
                │   │   │   ├── opensles_common.h
                │   │   │   ├── opensles_player.cc
                │   │   │   ├── opensles_player.h
                │   │   │   ├── opensles_recorder.cc
                │   │   │   └── opensles_recorder.h
                │   │   ├── audio_device_buffer.cc
                │   │   ├── audio_device_buffer.h
                │   │   ├── audio_device_config.h
                │   │   ├── audio_device_data_observer.cc
                │   │   ├── audio_device_generic.cc
                │   │   ├── audio_device_generic.h
                │   │   ├── audio_device_impl.cc
                │   │   ├── audio_device_impl.h
                │   │   ├── audio_device_name.cc
                │   │   ├── audio_device_name.h
                │   │   ├── audio_device_unittest.cc
                │   │   ├── dummy/
                │   │   │   ├── audio_device_dummy.cc
                │   │   │   ├── audio_device_dummy.h
                │   │   │   ├── file_audio_device.cc
                │   │   │   ├── file_audio_device.h
                │   │   │   ├── file_audio_device_factory.cc
                │   │   │   └── file_audio_device_factory.h
                │   │   ├── fine_audio_buffer.cc
                │   │   ├── fine_audio_buffer.h
                │   │   ├── fine_audio_buffer_unittest.cc
                │   │   ├── include/
                │   │   │   ├── audio_device.h
                │   │   │   ├── audio_device_data_observer.h
                │   │   │   ├── audio_device_default.h
                │   │   │   ├── audio_device_defines.h
                │   │   │   ├── audio_device_factory.cc
                │   │   │   ├── audio_device_factory.h
                │   │   │   ├── fake_audio_device.h
                │   │   │   ├── mock_audio_device.h
                │   │   │   ├── mock_audio_transport.h
                │   │   │   ├── test_audio_device.cc
                │   │   │   ├── test_audio_device.h
                │   │   │   └── test_audio_device_unittest.cc
                │   │   ├── linux/
                │   │   │   ├── alsasymboltable_linux.cc
                │   │   │   ├── alsasymboltable_linux.h
                │   │   │   ├── audio_device_alsa_linux.cc
                │   │   │   ├── audio_device_alsa_linux.h
                │   │   │   ├── audio_device_pulse_linux.cc
                │   │   │   ├── audio_device_pulse_linux.h
                │   │   │   ├── audio_mixer_manager_alsa_linux.cc
                │   │   │   ├── audio_mixer_manager_alsa_linux.h
                │   │   │   ├── audio_mixer_manager_pulse_linux.cc
                │   │   │   ├── audio_mixer_manager_pulse_linux.h
                │   │   │   ├── latebindingsymboltable_linux.cc
                │   │   │   ├── latebindingsymboltable_linux.h
                │   │   │   ├── pulseaudiosymboltable_linux.cc
                │   │   │   └── pulseaudiosymboltable_linux.h
                │   │   ├── mac/
                │   │   │   ├── audio_device_mac.cc
                │   │   │   ├── audio_device_mac.h
                │   │   │   ├── audio_mixer_manager_mac.cc
                │   │   │   └── audio_mixer_manager_mac.h
                │   │   ├── mock_audio_device_buffer.h
                │   │   └── win/
                │   │       ├── audio_device_core_win.cc
                │   │       ├── audio_device_core_win.h
                │   │       ├── audio_device_module_win.cc
                │   │       ├── audio_device_module_win.h
                │   │       ├── core_audio_base_win.cc
                │   │       ├── core_audio_base_win.h
                │   │       ├── core_audio_input_win.cc
                │   │       ├── core_audio_input_win.h
                │   │       ├── core_audio_output_win.cc
                │   │       ├── core_audio_output_win.h
                │   │       ├── core_audio_utility_win.cc
                │   │       ├── core_audio_utility_win.h
                │   │       └── core_audio_utility_win_unittest.cc
                │   ├── audio_mixer/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── audio_frame_manipulator.cc
                │   │   ├── audio_frame_manipulator.h
                │   │   ├── audio_frame_manipulator_unittest.cc
                │   │   ├── audio_mixer_impl.cc
                │   │   ├── audio_mixer_impl.h
                │   │   ├── audio_mixer_impl_unittest.cc
                │   │   ├── audio_mixer_test.cc
                │   │   ├── default_output_rate_calculator.cc
                │   │   ├── default_output_rate_calculator.h
                │   │   ├── frame_combiner.cc
                │   │   ├── frame_combiner.h
                │   │   ├── frame_combiner_unittest.cc
                │   │   ├── gain_change_calculator.cc
                │   │   ├── gain_change_calculator.h
                │   │   ├── output_rate_calculator.h
                │   │   ├── sine_wave_generator.cc
                │   │   └── sine_wave_generator.h
                │   ├── audio_processing/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── aec3/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── adaptive_fir_filter.cc
                │   │   │   ├── adaptive_fir_filter.h
                │   │   │   ├── adaptive_fir_filter_avx2.cc
                │   │   │   ├── adaptive_fir_filter_erl.cc
                │   │   │   ├── adaptive_fir_filter_erl.h
                │   │   │   ├── adaptive_fir_filter_erl_avx2.cc
                │   │   │   ├── adaptive_fir_filter_erl_unittest.cc
                │   │   │   ├── adaptive_fir_filter_unittest.cc
                │   │   │   ├── aec3_common.cc
                │   │   │   ├── aec3_common.h
                │   │   │   ├── aec3_fft.cc
                │   │   │   ├── aec3_fft.h
                │   │   │   ├── aec3_fft_unittest.cc
                │   │   │   ├── aec_state.cc
                │   │   │   ├── aec_state.h
                │   │   │   ├── aec_state_unittest.cc
                │   │   │   ├── alignment_mixer.cc
                │   │   │   ├── alignment_mixer.h
                │   │   │   ├── alignment_mixer_unittest.cc
                │   │   │   ├── api_call_jitter_metrics.cc
                │   │   │   ├── api_call_jitter_metrics.h
                │   │   │   ├── api_call_jitter_metrics_unittest.cc
                │   │   │   ├── block_buffer.cc
                │   │   │   ├── block_buffer.h
                │   │   │   ├── block_delay_buffer.cc
                │   │   │   ├── block_delay_buffer.h
                │   │   │   ├── block_delay_buffer_unittest.cc
                │   │   │   ├── block_framer.cc
                │   │   │   ├── block_framer.h
                │   │   │   ├── block_framer_unittest.cc
                │   │   │   ├── block_processor.cc
                │   │   │   ├── block_processor.h
                │   │   │   ├── block_processor_metrics.cc
                │   │   │   ├── block_processor_metrics.h
                │   │   │   ├── block_processor_metrics_unittest.cc
                │   │   │   ├── block_processor_unittest.cc
                │   │   │   ├── clockdrift_detector.cc
                │   │   │   ├── clockdrift_detector.h
                │   │   │   ├── clockdrift_detector_unittest.cc
                │   │   │   ├── coarse_filter_update_gain.cc
                │   │   │   ├── coarse_filter_update_gain.h
                │   │   │   ├── coarse_filter_update_gain_unittest.cc
                │   │   │   ├── comfort_noise_generator.cc
                │   │   │   ├── comfort_noise_generator.h
                │   │   │   ├── comfort_noise_generator_unittest.cc
                │   │   │   ├── decimator.cc
                │   │   │   ├── decimator.h
                │   │   │   ├── decimator_unittest.cc
                │   │   │   ├── delay_estimate.h
                │   │   │   ├── dominant_nearend_detector.cc
                │   │   │   ├── dominant_nearend_detector.h
                │   │   │   ├── downsampled_render_buffer.cc
                │   │   │   ├── downsampled_render_buffer.h
                │   │   │   ├── echo_audibility.cc
                │   │   │   ├── echo_audibility.h
                │   │   │   ├── echo_canceller3.cc
                │   │   │   ├── echo_canceller3.h
                │   │   │   ├── echo_canceller3_unittest.cc
                │   │   │   ├── echo_path_delay_estimator.cc
                │   │   │   ├── echo_path_delay_estimator.h
                │   │   │   ├── echo_path_delay_estimator_unittest.cc
                │   │   │   ├── echo_path_variability.cc
                │   │   │   ├── echo_path_variability.h
                │   │   │   ├── echo_path_variability_unittest.cc
                │   │   │   ├── echo_remover.cc
                │   │   │   ├── echo_remover.h
                │   │   │   ├── echo_remover_metrics.cc
                │   │   │   ├── echo_remover_metrics.h
                │   │   │   ├── echo_remover_metrics_unittest.cc
                │   │   │   ├── echo_remover_unittest.cc
                │   │   │   ├── erl_estimator.cc
                │   │   │   ├── erl_estimator.h
                │   │   │   ├── erl_estimator_unittest.cc
                │   │   │   ├── erle_estimator.cc
                │   │   │   ├── erle_estimator.h
                │   │   │   ├── erle_estimator_unittest.cc
                │   │   │   ├── fft_buffer.cc
                │   │   │   ├── fft_buffer.h
                │   │   │   ├── fft_data.h
                │   │   │   ├── fft_data_avx2.cc
                │   │   │   ├── fft_data_unittest.cc
                │   │   │   ├── filter_analyzer.cc
                │   │   │   ├── filter_analyzer.h
                │   │   │   ├── filter_analyzer_unittest.cc
                │   │   │   ├── frame_blocker.cc
                │   │   │   ├── frame_blocker.h
                │   │   │   ├── frame_blocker_unittest.cc
                │   │   │   ├── fullband_erle_estimator.cc
                │   │   │   ├── fullband_erle_estimator.h
                │   │   │   ├── matched_filter.cc
                │   │   │   ├── matched_filter.h
                │   │   │   ├── matched_filter_avx2.cc
                │   │   │   ├── matched_filter_lag_aggregator.cc
                │   │   │   ├── matched_filter_lag_aggregator.h
                │   │   │   ├── matched_filter_lag_aggregator_unittest.cc
                │   │   │   ├── matched_filter_unittest.cc
                │   │   │   ├── mock/
                │   │   │   │   ├── mock_block_processor.cc
                │   │   │   │   ├── mock_block_processor.h
                │   │   │   │   ├── mock_echo_remover.cc
                │   │   │   │   ├── mock_echo_remover.h
                │   │   │   │   ├── mock_render_delay_buffer.cc
                │   │   │   │   ├── mock_render_delay_buffer.h
                │   │   │   │   ├── mock_render_delay_controller.cc
                │   │   │   │   └── mock_render_delay_controller.h
                │   │   │   ├── moving_average.cc
                │   │   │   ├── moving_average.h
                │   │   │   ├── moving_average_unittest.cc
                │   │   │   ├── nearend_detector.h
                │   │   │   ├── refined_filter_update_gain.cc
                │   │   │   ├── refined_filter_update_gain.h
                │   │   │   ├── refined_filter_update_gain_unittest.cc
                │   │   │   ├── render_buffer.cc
                │   │   │   ├── render_buffer.h
                │   │   │   ├── render_buffer_unittest.cc
                │   │   │   ├── render_delay_buffer.cc
                │   │   │   ├── render_delay_buffer.h
                │   │   │   ├── render_delay_buffer_unittest.cc
                │   │   │   ├── render_delay_controller.cc
                │   │   │   ├── render_delay_controller.h
                │   │   │   ├── render_delay_controller_metrics.cc
                │   │   │   ├── render_delay_controller_metrics.h
                │   │   │   ├── render_delay_controller_metrics_unittest.cc
                │   │   │   ├── render_delay_controller_unittest.cc
                │   │   │   ├── render_signal_analyzer.cc
                │   │   │   ├── render_signal_analyzer.h
                │   │   │   ├── render_signal_analyzer_unittest.cc
                │   │   │   ├── residual_echo_estimator.cc
                │   │   │   ├── residual_echo_estimator.h
                │   │   │   ├── residual_echo_estimator_unittest.cc
                │   │   │   ├── reverb_decay_estimator.cc
                │   │   │   ├── reverb_decay_estimator.h
                │   │   │   ├── reverb_frequency_response.cc
                │   │   │   ├── reverb_frequency_response.h
                │   │   │   ├── reverb_model.cc
                │   │   │   ├── reverb_model.h
                │   │   │   ├── reverb_model_estimator.cc
                │   │   │   ├── reverb_model_estimator.h
                │   │   │   ├── reverb_model_estimator_unittest.cc
                │   │   │   ├── signal_dependent_erle_estimator.cc
                │   │   │   ├── signal_dependent_erle_estimator.h
                │   │   │   ├── signal_dependent_erle_estimator_unittest.cc
                │   │   │   ├── spectrum_buffer.cc
                │   │   │   ├── spectrum_buffer.h
                │   │   │   ├── stationarity_estimator.cc
                │   │   │   ├── stationarity_estimator.h
                │   │   │   ├── subband_erle_estimator.cc
                │   │   │   ├── subband_erle_estimator.h
                │   │   │   ├── subband_nearend_detector.cc
                │   │   │   ├── subband_nearend_detector.h
                │   │   │   ├── subtractor.cc
                │   │   │   ├── subtractor.h
                │   │   │   ├── subtractor_output.cc
                │   │   │   ├── subtractor_output.h
                │   │   │   ├── subtractor_output_analyzer.cc
                │   │   │   ├── subtractor_output_analyzer.h
                │   │   │   ├── subtractor_unittest.cc
                │   │   │   ├── suppression_filter.cc
                │   │   │   ├── suppression_filter.h
                │   │   │   ├── suppression_filter_unittest.cc
                │   │   │   ├── suppression_gain.cc
                │   │   │   ├── suppression_gain.h
                │   │   │   ├── suppression_gain_unittest.cc
                │   │   │   ├── transparent_mode.cc
                │   │   │   ├── transparent_mode.h
                │   │   │   ├── vector_math.h
                │   │   │   ├── vector_math_avx2.cc
                │   │   │   └── vector_math_unittest.cc
                │   │   ├── aec_dump/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── aec_dump_factory.h
                │   │   │   ├── aec_dump_impl.cc
                │   │   │   ├── aec_dump_impl.h
                │   │   │   ├── aec_dump_integration_test.cc
                │   │   │   ├── aec_dump_unittest.cc
                │   │   │   ├── capture_stream_info.cc
                │   │   │   ├── capture_stream_info.h
                │   │   │   ├── mock_aec_dump.cc
                │   │   │   ├── mock_aec_dump.h
                │   │   │   ├── null_aec_dump_factory.cc
                │   │   │   ├── write_to_file_task.cc
                │   │   │   └── write_to_file_task.h
                │   │   ├── aecm/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── aecm_core.cc
                │   │   │   ├── aecm_core.h
                │   │   │   ├── aecm_core_c.cc
                │   │   │   ├── aecm_core_mips.cc
                │   │   │   ├── aecm_core_neon.cc
                │   │   │   ├── aecm_defines.h
                │   │   │   ├── echo_control_mobile.cc
                │   │   │   └── echo_control_mobile.h
                │   │   ├── agc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── agc.cc
                │   │   │   ├── agc.h
                │   │   │   ├── agc_manager_direct.cc
                │   │   │   ├── agc_manager_direct.h
                │   │   │   ├── agc_manager_direct_unittest.cc
                │   │   │   ├── gain_control.h
                │   │   │   ├── gain_map_internal.h
                │   │   │   ├── legacy/
                │   │   │   │   ├── analog_agc.cc
                │   │   │   │   ├── analog_agc.h
                │   │   │   │   ├── digital_agc.cc
                │   │   │   │   ├── digital_agc.h
                │   │   │   │   └── gain_control.h
                │   │   │   ├── loudness_histogram.cc
                │   │   │   ├── loudness_histogram.h
                │   │   │   ├── loudness_histogram_unittest.cc
                │   │   │   ├── mock_agc.h
                │   │   │   ├── utility.cc
                │   │   │   └── utility.h
                │   │   ├── agc2/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── adaptive_agc.cc
                │   │   │   ├── adaptive_agc.h
                │   │   │   ├── adaptive_digital_gain_applier.cc
                │   │   │   ├── adaptive_digital_gain_applier.h
                │   │   │   ├── adaptive_digital_gain_applier_unittest.cc
                │   │   │   ├── adaptive_mode_level_estimator.cc
                │   │   │   ├── adaptive_mode_level_estimator.h
                │   │   │   ├── adaptive_mode_level_estimator_unittest.cc
                │   │   │   ├── agc2_common.h
                │   │   │   ├── agc2_testing_common.cc
                │   │   │   ├── agc2_testing_common.h
                │   │   │   ├── agc2_testing_common_unittest.cc
                │   │   │   ├── biquad_filter.cc
                │   │   │   ├── biquad_filter.h
                │   │   │   ├── biquad_filter_unittest.cc
                │   │   │   ├── compute_interpolated_gain_curve.cc
                │   │   │   ├── compute_interpolated_gain_curve.h
                │   │   │   ├── cpu_features.cc
                │   │   │   ├── cpu_features.h
                │   │   │   ├── down_sampler.cc
                │   │   │   ├── down_sampler.h
                │   │   │   ├── fixed_digital_level_estimator.cc
                │   │   │   ├── fixed_digital_level_estimator.h
                │   │   │   ├── fixed_digital_level_estimator_unittest.cc
                │   │   │   ├── gain_applier.cc
                │   │   │   ├── gain_applier.h
                │   │   │   ├── gain_applier_unittest.cc
                │   │   │   ├── interpolated_gain_curve.cc
                │   │   │   ├── interpolated_gain_curve.h
                │   │   │   ├── interpolated_gain_curve_unittest.cc
                │   │   │   ├── limiter.cc
                │   │   │   ├── limiter.h
                │   │   │   ├── limiter_db_gain_curve.cc
                │   │   │   ├── limiter_db_gain_curve.h
                │   │   │   ├── limiter_db_gain_curve_unittest.cc
                │   │   │   ├── limiter_unittest.cc
                │   │   │   ├── noise_level_estimator.cc
                │   │   │   ├── noise_level_estimator.h
                │   │   │   ├── noise_level_estimator_unittest.cc
                │   │   │   ├── noise_spectrum_estimator.cc
                │   │   │   ├── noise_spectrum_estimator.h
                │   │   │   ├── rnn_vad/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── DEPS
                │   │   │   │   ├── auto_correlation.cc
                │   │   │   │   ├── auto_correlation.h
                │   │   │   │   ├── auto_correlation_unittest.cc
                │   │   │   │   ├── common.h
                │   │   │   │   ├── features_extraction.cc
                │   │   │   │   ├── features_extraction.h
                │   │   │   │   ├── features_extraction_unittest.cc
                │   │   │   │   ├── lp_residual.cc
                │   │   │   │   ├── lp_residual.h
                │   │   │   │   ├── lp_residual_unittest.cc
                │   │   │   │   ├── pitch_search.cc
                │   │   │   │   ├── pitch_search.h
                │   │   │   │   ├── pitch_search_internal.cc
                │   │   │   │   ├── pitch_search_internal.h
                │   │   │   │   ├── pitch_search_internal_unittest.cc
                │   │   │   │   ├── pitch_search_unittest.cc
                │   │   │   │   ├── ring_buffer.h
                │   │   │   │   ├── ring_buffer_unittest.cc
                │   │   │   │   ├── rnn.cc
                │   │   │   │   ├── rnn.h
                │   │   │   │   ├── rnn_fc.cc
                │   │   │   │   ├── rnn_fc.h
                │   │   │   │   ├── rnn_fc_unittest.cc
                │   │   │   │   ├── rnn_gru.cc
                │   │   │   │   ├── rnn_gru.h
                │   │   │   │   ├── rnn_gru_unittest.cc
                │   │   │   │   ├── rnn_unittest.cc
                │   │   │   │   ├── rnn_vad_tool.cc
                │   │   │   │   ├── rnn_vad_unittest.cc
                │   │   │   │   ├── sequence_buffer.h
                │   │   │   │   ├── sequence_buffer_unittest.cc
                │   │   │   │   ├── spectral_features.cc
                │   │   │   │   ├── spectral_features.h
                │   │   │   │   ├── spectral_features_internal.cc
                │   │   │   │   ├── spectral_features_internal.h
                │   │   │   │   ├── spectral_features_internal_unittest.cc
                │   │   │   │   ├── spectral_features_unittest.cc
                │   │   │   │   ├── symmetric_matrix_buffer.h
                │   │   │   │   ├── symmetric_matrix_buffer_unittest.cc
                │   │   │   │   ├── test_utils.cc
                │   │   │   │   ├── test_utils.h
                │   │   │   │   ├── vector_math.h
                │   │   │   │   ├── vector_math_avx2.cc
                │   │   │   │   └── vector_math_unittest.cc
                │   │   │   ├── saturation_protector.cc
                │   │   │   ├── saturation_protector.h
                │   │   │   ├── saturation_protector_buffer.cc
                │   │   │   ├── saturation_protector_buffer.h
                │   │   │   ├── saturation_protector_buffer_unittest.cc
                │   │   │   ├── saturation_protector_unittest.cc
                │   │   │   ├── signal_classifier.cc
                │   │   │   ├── signal_classifier.h
                │   │   │   ├── signal_classifier_unittest.cc
                │   │   │   ├── vad_with_level.cc
                │   │   │   ├── vad_with_level.h
                │   │   │   ├── vad_with_level_unittest.cc
                │   │   │   ├── vector_float_frame.cc
                │   │   │   └── vector_float_frame.h
                │   │   ├── audio_buffer.cc
                │   │   ├── audio_buffer.h
                │   │   ├── audio_buffer_unittest.cc
                │   │   ├── audio_frame_view_unittest.cc
                │   │   ├── audio_processing_builder_impl.cc
                │   │   ├── audio_processing_impl.cc
                │   │   ├── audio_processing_impl.h
                │   │   ├── audio_processing_impl_locking_unittest.cc
                │   │   ├── audio_processing_impl_unittest.cc
                │   │   ├── audio_processing_performance_unittest.cc
                │   │   ├── audio_processing_unittest.cc
                │   │   ├── capture_levels_adjuster/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── audio_samples_scaler.cc
                │   │   │   ├── audio_samples_scaler.h
                │   │   │   ├── audio_samples_scaler_unittest.cc
                │   │   │   ├── capture_levels_adjuster.cc
                │   │   │   ├── capture_levels_adjuster.h
                │   │   │   └── capture_levels_adjuster_unittest.cc
                │   │   ├── common.h
                │   │   ├── config_unittest.cc
                │   │   ├── debug.proto
                │   │   ├── echo_control_mobile_bit_exact_unittest.cc
                │   │   ├── echo_control_mobile_impl.cc
                │   │   ├── echo_control_mobile_impl.h
                │   │   ├── echo_control_mobile_unittest.cc
                │   │   ├── echo_detector/
                │   │   │   ├── circular_buffer.cc
                │   │   │   ├── circular_buffer.h
                │   │   │   ├── circular_buffer_unittest.cc
                │   │   │   ├── mean_variance_estimator.cc
                │   │   │   ├── mean_variance_estimator.h
                │   │   │   ├── mean_variance_estimator_unittest.cc
                │   │   │   ├── moving_max.cc
                │   │   │   ├── moving_max.h
                │   │   │   ├── moving_max_unittest.cc
                │   │   │   ├── normalized_covariance_estimator.cc
                │   │   │   ├── normalized_covariance_estimator.h
                │   │   │   └── normalized_covariance_estimator_unittest.cc
                │   │   ├── gain_control_impl.cc
                │   │   ├── gain_control_impl.h
                │   │   ├── gain_control_unittest.cc
                │   │   ├── gain_controller2.cc
                │   │   ├── gain_controller2.h
                │   │   ├── gain_controller2_unittest.cc
                │   │   ├── high_pass_filter.cc
                │   │   ├── high_pass_filter.h
                │   │   ├── high_pass_filter_unittest.cc
                │   │   ├── include/
                │   │   │   ├── aec_dump.cc
                │   │   │   ├── aec_dump.h
                │   │   │   ├── audio_frame_proxies.cc
                │   │   │   ├── audio_frame_proxies.h
                │   │   │   ├── audio_frame_view.h
                │   │   │   ├── audio_processing.cc
                │   │   │   ├── audio_processing.h
                │   │   │   ├── audio_processing_statistics.cc
                │   │   │   ├── audio_processing_statistics.h
                │   │   │   ├── config.cc
                │   │   │   └── mock_audio_processing.h
                │   │   ├── level_estimator.cc
                │   │   ├── level_estimator.h
                │   │   ├── level_estimator_unittest.cc
                │   │   ├── logging/
                │   │   │   ├── apm_data_dumper.cc
                │   │   │   └── apm_data_dumper.h
                │   │   ├── ns/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── fast_math.cc
                │   │   │   ├── fast_math.h
                │   │   │   ├── histograms.cc
                │   │   │   ├── histograms.h
                │   │   │   ├── noise_estimator.cc
                │   │   │   ├── noise_estimator.h
                │   │   │   ├── noise_suppressor.cc
                │   │   │   ├── noise_suppressor.h
                │   │   │   ├── noise_suppressor_unittest.cc
                │   │   │   ├── ns_common.h
                │   │   │   ├── ns_config.h
                │   │   │   ├── ns_fft.cc
                │   │   │   ├── ns_fft.h
                │   │   │   ├── prior_signal_model.cc
                │   │   │   ├── prior_signal_model.h
                │   │   │   ├── prior_signal_model_estimator.cc
                │   │   │   ├── prior_signal_model_estimator.h
                │   │   │   ├── quantile_noise_estimator.cc
                │   │   │   ├── quantile_noise_estimator.h
                │   │   │   ├── signal_model.cc
                │   │   │   ├── signal_model.h
                │   │   │   ├── signal_model_estimator.cc
                │   │   │   ├── signal_model_estimator.h
                │   │   │   ├── speech_probability_estimator.cc
                │   │   │   ├── speech_probability_estimator.h
                │   │   │   ├── suppression_params.cc
                │   │   │   ├── suppression_params.h
                │   │   │   ├── wiener_filter.cc
                │   │   │   └── wiener_filter.h
                │   │   ├── optionally_built_submodule_creators.cc
                │   │   ├── optionally_built_submodule_creators.h
                │   │   ├── render_queue_item_verifier.h
                │   │   ├── residual_echo_detector.cc
                │   │   ├── residual_echo_detector.h
                │   │   ├── residual_echo_detector_unittest.cc
                │   │   ├── rms_level.cc
                │   │   ├── rms_level.h
                │   │   ├── rms_level_unittest.cc
                │   │   ├── splitting_filter.cc
                │   │   ├── splitting_filter.h
                │   │   ├── splitting_filter_unittest.cc
                │   │   ├── test/
                │   │   │   ├── aec_dump_based_simulator.cc
                │   │   │   ├── aec_dump_based_simulator.h
                │   │   │   ├── android/
                │   │   │   │   └── apmtest/
                │   │   │   │       ├── AndroidManifest.xml
                │   │   │   │       ├── default.properties
                │   │   │   │       ├── jni/
                │   │   │   │       │   └── main.c
                │   │   │   │       └── res/
                │   │   │   │           └── values/
                │   │   │   │               └── strings.xml
                │   │   │   ├── api_call_statistics.cc
                │   │   │   ├── api_call_statistics.h
                │   │   │   ├── apmtest.m
                │   │   │   ├── audio_buffer_tools.cc
                │   │   │   ├── audio_buffer_tools.h
                │   │   │   ├── audio_processing_builder_for_testing.cc
                │   │   │   ├── audio_processing_builder_for_testing.h
                │   │   │   ├── audio_processing_simulator.cc
                │   │   │   ├── audio_processing_simulator.h
                │   │   │   ├── audioproc_float_impl.cc
                │   │   │   ├── audioproc_float_impl.h
                │   │   │   ├── bitexactness_tools.cc
                │   │   │   ├── bitexactness_tools.h
                │   │   │   ├── conversational_speech/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── OWNERS
                │   │   │   │   ├── README.md
                │   │   │   │   ├── config.cc
                │   │   │   │   ├── generator.cc
                │   │   │   │   ├── generator_unittest.cc
                │   │   │   │   ├── mock_wavreader.cc
                │   │   │   │   ├── mock_wavreader.h
                │   │   │   │   ├── mock_wavreader_factory.cc
                │   │   │   │   ├── mock_wavreader_factory.h
                │   │   │   │   ├── multiend_call.cc
                │   │   │   │   ├── multiend_call.h
                │   │   │   │   ├── simulator.cc
                │   │   │   │   ├── simulator.h
                │   │   │   │   ├── timing.cc
                │   │   │   │   ├── timing.h
                │   │   │   │   ├── wavreader_abstract_factory.h
                │   │   │   │   ├── wavreader_factory.cc
                │   │   │   │   ├── wavreader_factory.h
                │   │   │   │   └── wavreader_interface.h
                │   │   │   ├── debug_dump_replayer.cc
                │   │   │   ├── debug_dump_replayer.h
                │   │   │   ├── debug_dump_test.cc
                │   │   │   ├── echo_canceller_test_tools.cc
                │   │   │   ├── echo_canceller_test_tools.h
                │   │   │   ├── echo_canceller_test_tools_unittest.cc
                │   │   │   ├── echo_control_mock.h
                │   │   │   ├── fake_recording_device.cc
                │   │   │   ├── fake_recording_device.h
                │   │   │   ├── fake_recording_device_unittest.cc
                │   │   │   ├── performance_timer.cc
                │   │   │   ├── performance_timer.h
                │   │   │   ├── protobuf_utils.cc
                │   │   │   ├── protobuf_utils.h
                │   │   │   ├── py_quality_assessment/
                │   │   │   │   ├── BUILD.gn
                │   │   │   │   ├── OWNERS
                │   │   │   │   ├── README.md
                │   │   │   │   ├── apm_configs/
                │   │   │   │   │   └── default.json
                │   │   │   │   ├── apm_quality_assessment.py
                │   │   │   │   ├── apm_quality_assessment.sh
                │   │   │   │   ├── apm_quality_assessment_boxplot.py
                │   │   │   │   ├── apm_quality_assessment_export.py
                │   │   │   │   ├── apm_quality_assessment_gencfgs.py
                │   │   │   │   ├── apm_quality_assessment_optimize.py
                │   │   │   │   ├── apm_quality_assessment_unittest.py
                │   │   │   │   ├── output/
                │   │   │   │   │   └── README.md
                │   │   │   │   └── quality_assessment/
                │   │   │   │       ├── __init__.py
                │   │   │   │       ├── annotations.py
                │   │   │   │       ├── annotations_unittest.py
                │   │   │   │       ├── apm_configs/
                │   │   │   │       │   └── default.json
                │   │   │   │       ├── apm_vad.cc
                │   │   │   │       ├── audioproc_wrapper.py
                │   │   │   │       ├── collect_data.py
                │   │   │   │       ├── data_access.py
                │   │   │   │       ├── echo_path_simulation.py
                │   │   │   │       ├── echo_path_simulation_factory.py
                │   │   │   │       ├── echo_path_simulation_unittest.py
                │   │   │   │       ├── eval_scores.py
                │   │   │   │       ├── eval_scores_factory.py
                │   │   │   │       ├── eval_scores_unittest.py
                │   │   │   │       ├── evaluation.py
                │   │   │   │       ├── exceptions.py
                │   │   │   │       ├── export.py
                │   │   │   │       ├── export_unittest.py
                │   │   │   │       ├── external_vad.py
                │   │   │   │       ├── fake_external_vad.py
                │   │   │   │       ├── fake_polqa.cc
                │   │   │   │       ├── input_mixer.py
                │   │   │   │       ├── input_mixer_unittest.py
                │   │   │   │       ├── input_signal_creator.py
                │   │   │   │       ├── results.css
                │   │   │   │       ├── results.js
                │   │   │   │       ├── signal_processing.py
                │   │   │   │       ├── signal_processing_unittest.py
                │   │   │   │       ├── simulation.py
                │   │   │   │       ├── simulation_unittest.py
                │   │   │   │       ├── sound_level.cc
                │   │   │   │       ├── test_data_generation.py
                │   │   │   │       ├── test_data_generation_factory.py
                │   │   │   │       ├── test_data_generation_unittest.py
                │   │   │   │       └── vad.cc
                │   │   │   ├── runtime_setting_util.cc
                │   │   │   ├── runtime_setting_util.h
                │   │   │   ├── simulator_buffers.cc
                │   │   │   ├── simulator_buffers.h
                │   │   │   ├── test_utils.cc
                │   │   │   ├── test_utils.h
                │   │   │   ├── unittest.proto
                │   │   │   ├── wav_based_simulator.cc
                │   │   │   └── wav_based_simulator.h
                │   │   ├── three_band_filter_bank.cc
                │   │   ├── three_band_filter_bank.h
                │   │   ├── transient/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── click_annotate.cc
                │   │   │   ├── common.h
                │   │   │   ├── daubechies_8_wavelet_coeffs.h
                │   │   │   ├── dyadic_decimator.h
                │   │   │   ├── dyadic_decimator_unittest.cc
                │   │   │   ├── file_utils.cc
                │   │   │   ├── file_utils.h
                │   │   │   ├── file_utils_unittest.cc
                │   │   │   ├── moving_moments.cc
                │   │   │   ├── moving_moments.h
                │   │   │   ├── moving_moments_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── plotDetection.m
                │   │   │   │   ├── readDetection.m
                │   │   │   │   └── readPCM.m
                │   │   │   ├── transient_detector.cc
                │   │   │   ├── transient_detector.h
                │   │   │   ├── transient_detector_unittest.cc
                │   │   │   ├── transient_suppression_test.cc
                │   │   │   ├── transient_suppressor.h
                │   │   │   ├── transient_suppressor_impl.cc
                │   │   │   ├── transient_suppressor_impl.h
                │   │   │   ├── transient_suppressor_unittest.cc
                │   │   │   ├── windows_private.h
                │   │   │   ├── wpd_node.cc
                │   │   │   ├── wpd_node.h
                │   │   │   ├── wpd_node_unittest.cc
                │   │   │   ├── wpd_tree.cc
                │   │   │   ├── wpd_tree.h
                │   │   │   └── wpd_tree_unittest.cc
                │   │   ├── typing_detection.cc
                │   │   ├── typing_detection.h
                │   │   ├── utility/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── DEPS
                │   │   │   ├── cascaded_biquad_filter.cc
                │   │   │   ├── cascaded_biquad_filter.h
                │   │   │   ├── cascaded_biquad_filter_unittest.cc
                │   │   │   ├── delay_estimator.cc
                │   │   │   ├── delay_estimator.h
                │   │   │   ├── delay_estimator_internal.h
                │   │   │   ├── delay_estimator_unittest.cc
                │   │   │   ├── delay_estimator_wrapper.cc
                │   │   │   ├── delay_estimator_wrapper.h
                │   │   │   ├── pffft_wrapper.cc
                │   │   │   ├── pffft_wrapper.h
                │   │   │   └── pffft_wrapper_unittest.cc
                │   │   ├── vad/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── common.h
                │   │   │   ├── gmm.cc
                │   │   │   ├── gmm.h
                │   │   │   ├── gmm_unittest.cc
                │   │   │   ├── noise_gmm_tables.h
                │   │   │   ├── pitch_based_vad.cc
                │   │   │   ├── pitch_based_vad.h
                │   │   │   ├── pitch_based_vad_unittest.cc
                │   │   │   ├── pitch_internal.cc
                │   │   │   ├── pitch_internal.h
                │   │   │   ├── pitch_internal_unittest.cc
                │   │   │   ├── pole_zero_filter.cc
                │   │   │   ├── pole_zero_filter.h
                │   │   │   ├── pole_zero_filter_unittest.cc
                │   │   │   ├── standalone_vad.cc
                │   │   │   ├── standalone_vad.h
                │   │   │   ├── standalone_vad_unittest.cc
                │   │   │   ├── vad_audio_proc.cc
                │   │   │   ├── vad_audio_proc.h
                │   │   │   ├── vad_audio_proc_internal.h
                │   │   │   ├── vad_audio_proc_unittest.cc
                │   │   │   ├── vad_circular_buffer.cc
                │   │   │   ├── vad_circular_buffer.h
                │   │   │   ├── vad_circular_buffer_unittest.cc
                │   │   │   ├── voice_activity_detector.cc
                │   │   │   ├── voice_activity_detector.h
                │   │   │   ├── voice_activity_detector_unittest.cc
                │   │   │   └── voice_gmm_tables.h
                │   │   ├── voice_detection.cc
                │   │   ├── voice_detection.h
                │   │   └── voice_detection_unittest.cc
                │   ├── congestion_controller/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── goog_cc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── acknowledged_bitrate_estimator.cc
                │   │   │   ├── acknowledged_bitrate_estimator.h
                │   │   │   ├── acknowledged_bitrate_estimator_interface.cc
                │   │   │   ├── acknowledged_bitrate_estimator_interface.h
                │   │   │   ├── acknowledged_bitrate_estimator_unittest.cc
                │   │   │   ├── alr_detector.cc
                │   │   │   ├── alr_detector.h
                │   │   │   ├── alr_detector_unittest.cc
                │   │   │   ├── bitrate_estimator.cc
                │   │   │   ├── bitrate_estimator.h
                │   │   │   ├── congestion_window_pushback_controller.cc
                │   │   │   ├── congestion_window_pushback_controller.h
                │   │   │   ├── congestion_window_pushback_controller_unittest.cc
                │   │   │   ├── delay_based_bwe.cc
                │   │   │   ├── delay_based_bwe.h
                │   │   │   ├── delay_based_bwe_unittest.cc
                │   │   │   ├── delay_based_bwe_unittest_helper.cc
                │   │   │   ├── delay_based_bwe_unittest_helper.h
                │   │   │   ├── delay_increase_detector_interface.h
                │   │   │   ├── goog_cc_network_control.cc
                │   │   │   ├── goog_cc_network_control.h
                │   │   │   ├── goog_cc_network_control_unittest.cc
                │   │   │   ├── inter_arrival_delta.cc
                │   │   │   ├── inter_arrival_delta.h
                │   │   │   ├── link_capacity_estimator.cc
                │   │   │   ├── link_capacity_estimator.h
                │   │   │   ├── loss_based_bandwidth_estimation.cc
                │   │   │   ├── loss_based_bandwidth_estimation.h
                │   │   │   ├── probe_bitrate_estimator.cc
                │   │   │   ├── probe_bitrate_estimator.h
                │   │   │   ├── probe_bitrate_estimator_unittest.cc
                │   │   │   ├── probe_controller.cc
                │   │   │   ├── probe_controller.h
                │   │   │   ├── probe_controller_unittest.cc
                │   │   │   ├── robust_throughput_estimator.cc
                │   │   │   ├── robust_throughput_estimator.h
                │   │   │   ├── robust_throughput_estimator_unittest.cc
                │   │   │   ├── send_side_bandwidth_estimation.cc
                │   │   │   ├── send_side_bandwidth_estimation.h
                │   │   │   ├── send_side_bandwidth_estimation_unittest.cc
                │   │   │   ├── test/
                │   │   │   │   ├── goog_cc_printer.cc
                │   │   │   │   └── goog_cc_printer.h
                │   │   │   ├── trendline_estimator.cc
                │   │   │   ├── trendline_estimator.h
                │   │   │   └── trendline_estimator_unittest.cc
                │   │   ├── include/
                │   │   │   └── receive_side_congestion_controller.h
                │   │   ├── pcc/
                │   │   │   ├── BUILD.gn
                │   │   │   ├── bitrate_controller.cc
                │   │   │   ├── bitrate_controller.h
                │   │   │   ├── bitrate_controller_unittest.cc
                │   │   │   ├── monitor_interval.cc
                │   │   │   ├── monitor_interval.h
                │   │   │   ├── monitor_interval_unittest.cc
                │   │   │   ├── pcc_factory.cc
                │   │   │   ├── pcc_factory.h
                │   │   │   ├── pcc_network_controller.cc
                │   │   │   ├── pcc_network_controller.h
                │   │   │   ├── pcc_network_controller_unittest.cc
                │   │   │   ├── rtt_tracker.cc
                │   │   │   ├── rtt_tracker.h
                │   │   │   ├── rtt_tracker_unittest.cc
                │   │   │   ├── utility_function.cc
                │   │   │   ├── utility_function.h
                │   │   │   └── utility_function_unittest.cc
                │   │   ├── receive_side_congestion_controller.cc
                │   │   ├── receive_side_congestion_controller_unittest.cc
                │   │   └── rtp/
                │   │       ├── BUILD.gn
                │   │       ├── control_handler.cc
                │   │       ├── control_handler.h
                │   │       ├── transport_feedback_adapter.cc
                │   │       ├── transport_feedback_adapter.h
                │   │       ├── transport_feedback_adapter_unittest.cc
                │   │       ├── transport_feedback_demuxer.cc
                │   │       ├── transport_feedback_demuxer.h
                │   │       └── transport_feedback_demuxer_unittest.cc
                │   ├── desktop_capture/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── blank_detector_desktop_capturer_wrapper.cc
                │   │   ├── blank_detector_desktop_capturer_wrapper.h
                │   │   ├── blank_detector_desktop_capturer_wrapper_unittest.cc
                │   │   ├── cropped_desktop_frame.cc
                │   │   ├── cropped_desktop_frame.h
                │   │   ├── cropped_desktop_frame_unittest.cc
                │   │   ├── cropping_window_capturer.cc
                │   │   ├── cropping_window_capturer.h
                │   │   ├── cropping_window_capturer_win.cc
                │   │   ├── desktop_and_cursor_composer.cc
                │   │   ├── desktop_and_cursor_composer.h
                │   │   ├── desktop_and_cursor_composer_unittest.cc
                │   │   ├── desktop_capture_options.cc
                │   │   ├── desktop_capture_options.h
                │   │   ├── desktop_capture_types.h
                │   │   ├── desktop_capturer.cc
                │   │   ├── desktop_capturer.h
                │   │   ├── desktop_capturer_differ_wrapper.cc
                │   │   ├── desktop_capturer_differ_wrapper.h
                │   │   ├── desktop_capturer_differ_wrapper_unittest.cc
                │   │   ├── desktop_capturer_wrapper.cc
                │   │   ├── desktop_capturer_wrapper.h
                │   │   ├── desktop_frame.cc
                │   │   ├── desktop_frame.h
                │   │   ├── desktop_frame_generator.cc
                │   │   ├── desktop_frame_generator.h
                │   │   ├── desktop_frame_rotation.cc
                │   │   ├── desktop_frame_rotation.h
                │   │   ├── desktop_frame_rotation_unittest.cc
                │   │   ├── desktop_frame_unittest.cc
                │   │   ├── desktop_frame_win.cc
                │   │   ├── desktop_frame_win.h
                │   │   ├── desktop_geometry.cc
                │   │   ├── desktop_geometry.h
                │   │   ├── desktop_geometry_unittest.cc
                │   │   ├── desktop_region.cc
                │   │   ├── desktop_region.h
                │   │   ├── desktop_region_unittest.cc
                │   │   ├── differ_block.cc
                │   │   ├── differ_block.h
                │   │   ├── differ_block_unittest.cc
                │   │   ├── differ_vector_sse2.cc
                │   │   ├── differ_vector_sse2.h
                │   │   ├── fake_desktop_capturer.cc
                │   │   ├── fake_desktop_capturer.h
                │   │   ├── fallback_desktop_capturer_wrapper.cc
                │   │   ├── fallback_desktop_capturer_wrapper.h
                │   │   ├── fallback_desktop_capturer_wrapper_unittest.cc
                │   │   ├── full_screen_application_handler.cc
                │   │   ├── full_screen_application_handler.h
                │   │   ├── full_screen_window_detector.cc
                │   │   ├── full_screen_window_detector.h
                │   │   ├── linux/
                │   │   │   ├── base_capturer_pipewire.cc
                │   │   │   ├── base_capturer_pipewire.h
                │   │   │   ├── mouse_cursor_monitor_x11.cc
                │   │   │   ├── mouse_cursor_monitor_x11.h
                │   │   │   ├── pipewire02.sigs
                │   │   │   ├── pipewire03.sigs
                │   │   │   ├── pipewire_stub_header.fragment
                │   │   │   ├── screen_capturer_x11.cc
                │   │   │   ├── screen_capturer_x11.h
                │   │   │   ├── shared_x_display.cc
                │   │   │   ├── shared_x_display.h
                │   │   │   ├── window_capturer_x11.cc
                │   │   │   ├── window_capturer_x11.h
                │   │   │   ├── window_finder_x11.cc
                │   │   │   ├── window_finder_x11.h
                │   │   │   ├── window_list_utils.cc
                │   │   │   ├── window_list_utils.h
                │   │   │   ├── x_atom_cache.cc
                │   │   │   ├── x_atom_cache.h
                │   │   │   ├── x_error_trap.cc
                │   │   │   ├── x_error_trap.h
                │   │   │   ├── x_server_pixel_buffer.cc
                │   │   │   ├── x_server_pixel_buffer.h
                │   │   │   ├── x_window_property.cc
                │   │   │   └── x_window_property.h
                │   │   ├── mac/
                │   │   │   ├── desktop_configuration.h
                │   │   │   ├── desktop_configuration.mm
                │   │   │   ├── desktop_configuration_monitor.cc
                │   │   │   ├── desktop_configuration_monitor.h
                │   │   │   ├── desktop_frame_cgimage.h
                │   │   │   ├── desktop_frame_cgimage.mm
                │   │   │   ├── desktop_frame_iosurface.h
                │   │   │   ├── desktop_frame_iosurface.mm
                │   │   │   ├── desktop_frame_provider.h
                │   │   │   ├── desktop_frame_provider.mm
                │   │   │   ├── full_screen_mac_application_handler.cc
                │   │   │   ├── full_screen_mac_application_handler.h
                │   │   │   ├── screen_capturer_mac.h
                │   │   │   ├── screen_capturer_mac.mm
                │   │   │   ├── window_list_utils.cc
                │   │   │   └── window_list_utils.h
                │   │   ├── mock_desktop_capturer_callback.cc
                │   │   ├── mock_desktop_capturer_callback.h
                │   │   ├── mouse_cursor.cc
                │   │   ├── mouse_cursor.h
                │   │   ├── mouse_cursor_monitor.h
                │   │   ├── mouse_cursor_monitor_linux.cc
                │   │   ├── mouse_cursor_monitor_mac.mm
                │   │   ├── mouse_cursor_monitor_null.cc
                │   │   ├── mouse_cursor_monitor_unittest.cc
                │   │   ├── mouse_cursor_monitor_win.cc
                │   │   ├── resolution_tracker.cc
                │   │   ├── resolution_tracker.h
                │   │   ├── rgba_color.cc
                │   │   ├── rgba_color.h
                │   │   ├── rgba_color_unittest.cc
                │   │   ├── screen_capture_frame_queue.h
                │   │   ├── screen_capturer_darwin.mm
                │   │   ├── screen_capturer_helper.cc
                │   │   ├── screen_capturer_helper.h
                │   │   ├── screen_capturer_helper_unittest.cc
                │   │   ├── screen_capturer_integration_test.cc
                │   │   ├── screen_capturer_linux.cc
                │   │   ├── screen_capturer_mac_unittest.cc
                │   │   ├── screen_capturer_null.cc
                │   │   ├── screen_capturer_unittest.cc
                │   │   ├── screen_capturer_win.cc
                │   │   ├── screen_drawer.cc
                │   │   ├── screen_drawer.h
                │   │   ├── screen_drawer_linux.cc
                │   │   ├── screen_drawer_lock_posix.cc
                │   │   ├── screen_drawer_lock_posix.h
                │   │   ├── screen_drawer_mac.cc
                │   │   ├── screen_drawer_unittest.cc
                │   │   ├── screen_drawer_win.cc
                │   │   ├── shared_desktop_frame.cc
                │   │   ├── shared_desktop_frame.h
                │   │   ├── shared_memory.cc
                │   │   ├── shared_memory.h
                │   │   ├── test_utils.cc
                │   │   ├── test_utils.h
                │   │   ├── test_utils_unittest.cc
                │   │   ├── win/
                │   │   │   ├── cursor.cc
                │   │   │   ├── cursor.h
                │   │   │   ├── cursor_test_data/
                │   │   │   │   ├── 1_24bpp.cur
                │   │   │   │   ├── 1_32bpp.cur
                │   │   │   │   ├── 1_8bpp.cur
                │   │   │   │   ├── 2_1bpp.cur
                │   │   │   │   ├── 2_32bpp.cur
                │   │   │   │   ├── 3_32bpp.cur
                │   │   │   │   └── 3_4bpp.cur
                │   │   │   ├── cursor_unittest.cc
                │   │   │   ├── cursor_unittest_resources.h
                │   │   │   ├── cursor_unittest_resources.rc
                │   │   │   ├── d3d_device.cc
                │   │   │   ├── d3d_device.h
                │   │   │   ├── desktop.cc
                │   │   │   ├── desktop.h
                │   │   │   ├── desktop_capture_utils.cc
                │   │   │   ├── desktop_capture_utils.h
                │   │   │   ├── display_configuration_monitor.cc
                │   │   │   ├── display_configuration_monitor.h
                │   │   │   ├── dxgi_adapter_duplicator.cc
                │   │   │   ├── dxgi_adapter_duplicator.h
                │   │   │   ├── dxgi_context.cc
                │   │   │   ├── dxgi_context.h
                │   │   │   ├── dxgi_duplicator_controller.cc
                │   │   │   ├── dxgi_duplicator_controller.h
                │   │   │   ├── dxgi_frame.cc
                │   │   │   ├── dxgi_frame.h
                │   │   │   ├── dxgi_output_duplicator.cc
                │   │   │   ├── dxgi_output_duplicator.h
                │   │   │   ├── dxgi_texture.cc
                │   │   │   ├── dxgi_texture.h
                │   │   │   ├── dxgi_texture_mapping.cc
                │   │   │   ├── dxgi_texture_mapping.h
                │   │   │   ├── dxgi_texture_staging.cc
                │   │   │   ├── dxgi_texture_staging.h
                │   │   │   ├── full_screen_win_application_handler.cc
                │   │   │   ├── full_screen_win_application_handler.h
                │   │   │   ├── scoped_gdi_object.h
                │   │   │   ├── scoped_thread_desktop.cc
                │   │   │   ├── scoped_thread_desktop.h
                │   │   │   ├── screen_capture_utils.cc
                │   │   │   ├── screen_capture_utils.h
                │   │   │   ├── screen_capture_utils_unittest.cc
                │   │   │   ├── screen_capturer_win_directx.cc
                │   │   │   ├── screen_capturer_win_directx.h
                │   │   │   ├── screen_capturer_win_directx_unittest.cc
                │   │   │   ├── screen_capturer_win_gdi.cc
                │   │   │   ├── screen_capturer_win_gdi.h
                │   │   │   ├── screen_capturer_win_magnifier.cc
                │   │   │   ├── screen_capturer_win_magnifier.h
                │   │   │   ├── selected_window_context.cc
                │   │   │   ├── selected_window_context.h
                │   │   │   ├── test_support/
                │   │   │   │   ├── test_window.cc
                │   │   │   │   └── test_window.h
                │   │   │   ├── wgc_capture_session.cc
                │   │   │   ├── wgc_capture_session.h
                │   │   │   ├── wgc_capture_source.cc
                │   │   │   ├── wgc_capture_source.h
                │   │   │   ├── wgc_capturer_win.cc
                │   │   │   ├── wgc_capturer_win.h
                │   │   │   ├── wgc_capturer_win_unittest.cc
                │   │   │   ├── wgc_desktop_frame.cc
                │   │   │   ├── wgc_desktop_frame.h
                │   │   │   ├── window_capture_utils.cc
                │   │   │   ├── window_capture_utils.h
                │   │   │   ├── window_capture_utils_unittest.cc
                │   │   │   ├── window_capturer_win_gdi.cc
                │   │   │   └── window_capturer_win_gdi.h
                │   │   ├── window_capturer_linux.cc
                │   │   ├── window_capturer_mac.mm
                │   │   ├── window_capturer_null.cc
                │   │   ├── window_capturer_unittest.cc
                │   │   ├── window_capturer_win.cc
                │   │   ├── window_finder.cc
                │   │   ├── window_finder.h
                │   │   ├── window_finder_mac.h
                │   │   ├── window_finder_mac.mm
                │   │   ├── window_finder_unittest.cc
                │   │   ├── window_finder_win.cc
                │   │   └── window_finder_win.h
                │   ├── include/
                │   │   ├── module.h
                │   │   ├── module_common_types.h
                │   │   ├── module_common_types_public.h
                │   │   └── module_fec_types.h
                │   ├── module_common_types_unittest.cc
                │   ├── pacing/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── bitrate_prober.cc
                │   │   ├── bitrate_prober.h
                │   │   ├── bitrate_prober_unittest.cc
                │   │   ├── interval_budget.cc
                │   │   ├── interval_budget.h
                │   │   ├── interval_budget_unittest.cc
                │   │   ├── paced_sender.cc
                │   │   ├── paced_sender.h
                │   │   ├── paced_sender_unittest.cc
                │   │   ├── pacing_controller.cc
                │   │   ├── pacing_controller.h
                │   │   ├── pacing_controller_unittest.cc
                │   │   ├── packet_router.cc
                │   │   ├── packet_router.h
                │   │   ├── packet_router_unittest.cc
                │   │   ├── round_robin_packet_queue.cc
                │   │   ├── round_robin_packet_queue.h
                │   │   ├── rtp_packet_pacer.h
                │   │   ├── task_queue_paced_sender.cc
                │   │   ├── task_queue_paced_sender.h
                │   │   └── task_queue_paced_sender_unittest.cc
                │   ├── remote_bitrate_estimator/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── aimd_rate_control.cc
                │   │   ├── aimd_rate_control.h
                │   │   ├── aimd_rate_control_unittest.cc
                │   │   ├── bwe_defines.cc
                │   │   ├── include/
                │   │   │   ├── bwe_defines.h
                │   │   │   └── remote_bitrate_estimator.h
                │   │   ├── inter_arrival.cc
                │   │   ├── inter_arrival.h
                │   │   ├── inter_arrival_unittest.cc
                │   │   ├── overuse_detector.cc
                │   │   ├── overuse_detector.h
                │   │   ├── overuse_detector_unittest.cc
                │   │   ├── overuse_estimator.cc
                │   │   ├── overuse_estimator.h
                │   │   ├── remote_bitrate_estimator_abs_send_time.cc
                │   │   ├── remote_bitrate_estimator_abs_send_time.h
                │   │   ├── remote_bitrate_estimator_abs_send_time_unittest.cc
                │   │   ├── remote_bitrate_estimator_single_stream.cc
                │   │   ├── remote_bitrate_estimator_single_stream.h
                │   │   ├── remote_bitrate_estimator_single_stream_unittest.cc
                │   │   ├── remote_bitrate_estimator_unittest_helper.cc
                │   │   ├── remote_bitrate_estimator_unittest_helper.h
                │   │   ├── remote_estimator_proxy.cc
                │   │   ├── remote_estimator_proxy.h
                │   │   ├── remote_estimator_proxy_unittest.cc
                │   │   ├── test/
                │   │   │   ├── bwe_test_logging.cc
                │   │   │   └── bwe_test_logging.h
                │   │   └── tools/
                │   │       ├── bwe_rtp.cc
                │   │       ├── bwe_rtp.h
                │   │       └── rtp_to_text.cc
                │   ├── rtp_rtcp/
                │   │   ├── BUILD.gn
                │   │   ├── DEPS
                │   │   ├── OWNERS
                │   │   ├── include/
                │   │   │   ├── flexfec_receiver.h
                │   │   │   ├── flexfec_sender.h
                │   │   │   ├── receive_statistics.h
                │   │   │   ├── remote_ntp_time_estimator.h
                │   │   │   ├── report_block_data.cc
                │   │   │   ├── report_block_data.h
                │   │   │   ├── rtcp_statistics.h
                │   │   │   ├── rtp_cvo.h
                │   │   │   ├── rtp_header_extension_map.h
                │   │   │   ├── rtp_packet_sender.h
                │   │   │   ├── rtp_rtcp.h
                │   │   │   ├── rtp_rtcp_defines.cc
                │   │   │   ├── rtp_rtcp_defines.h
                │   │   │   └── ulpfec_receiver.h
                │   │   ├── mocks/
                │   │   │   ├── mock_recovered_packet_receiver.h
                │   │   │   ├── mock_rtcp_bandwidth_observer.h
                │   │   │   ├── mock_rtcp_rtt_stats.h
                │   │   │   └── mock_rtp_rtcp.h
                │   │   ├── source/
                │   │   │   ├── absolute_capture_time_rece
Download .txt
Showing preview only (4,384K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (48743 symbols across 5974 files)

FILE: examples/device_playout.py
  function main (line 21) | async def main(client):

FILE: examples/file_playout.py
  function main (line 21) | async def main(client):

FILE: examples/player_as_smart_plugin.py
  function init_client_and_delete_message (line 15) | def init_client_and_delete_message(func):
  function start_playout (line 29) | async def start_playout(_, message: Message):
  function volume (line 58) | async def volume(_, message):
  function start (line 67) | async def start(_, message: Message):
  function stop (line 73) | async def stop(*_):
  function reconnect (line 79) | async def reconnect(*_):
  function restart_playout (line 85) | async def restart_playout(*_):
  function stop_playout (line 91) | async def stop_playout(*_):
  function mute (line 97) | async def mute(*_):
  function unmute (line 103) | async def unmute(*_):
  function pause (line 109) | async def pause(*_):
  function resume (line 115) | async def resume(*_):

FILE: examples/pyav.py
  function on_played_data (line 25) | def on_played_data(gc, length):
  function main (line 32) | async def main(client):

FILE: examples/radio_as_smart_plugin.py
  function anon_filter (line 21) | async def anon_filter(_, __, m: Message):
  function start (line 32) | async def start(client, message: Message):
  function stop (line 75) | async def stop(_, message: Message):

FILE: examples/recorder_as_smart_plugin.py
  function record_from_voice_chat (line 30) | async def record_from_voice_chat(client: Client, m: Message):
  function network_status_changed_handler (line 41) | async def network_status_changed_handler(context, is_connected: bool):
  function record_and_send_opus_and_stop (line 49) | async def record_and_send_opus_and_stop(context):
  function get_utcnow (line 109) | def get_utcnow():

FILE: examples/restream_using_raw_data.py
  function on_played_data (line 25) | def on_played_data(_, length: int) -> Optional[bytes]:
  function on_recorded_data (line 29) | def on_recorded_data(_, data: bytes, length: int) -> None:
  function main (line 34) | async def main(client):

FILE: pytgcalls/helpers.py
  function i2b (line 380) | def i2b(value: int) -> bytes:
  function b2i (line 396) | def b2i(value: bytes) -> int:
  function check_dhc (line 410) | def check_dhc(g: int, p: int) -> None:
  function check_g (line 447) | def check_g(g_x: int, p: int) -> None:
  function calc_fingerprint (line 464) | def calc_fingerprint(key: bytes) -> int:
  function generate_visualization (line 478) | def generate_visualization(key: Union[bytes, int], part2: Union[bytes, i...
  function get_real_elapsed_time (line 511) | def get_real_elapsed_time() -> float:

FILE: pytgcalls/pytgcalls/dispatcher/action.py
  class Action (line 21) | class Action:
    method __set_name__ (line 22) | def __set_name__(self, owner, name):
    method __get__ (line 25) | def __get__(self, instance, owner):

FILE: pytgcalls/pytgcalls/dispatcher/dispatcher.py
  class Dispatcher (line 34) | class Dispatcher:
    method __init__ (line 35) | def __init__(self, available_actions: type):
    method __build_handler_storage (line 39) | def __build_handler_storage(self):
    method add_handler (line 43) | def add_handler(self, callback: Callable, action: str) -> Callable:
    method remove_handler (line 61) | def remove_handler(self, callback: Callable, action: str) -> bool:
    method remove_all (line 74) | def remove_all(self):
    method get_handlers (line 77) | def get_handlers(self, action: str) -> List[Callable]:
    method trigger_handlers (line 84) | def trigger_handlers(self, action: str, instance: 'GroupCallNative', *...

FILE: pytgcalls/pytgcalls/dispatcher/dispatcher_mixin.py
  class DispatcherMixin (line 28) | class DispatcherMixin:
    method __init__ (line 29) | def __init__(self, actions):
    method add_handler (line 32) | def add_handler(self, callback: Callable, action: str) -> Callable:
    method remove_handler (line 45) | def remove_handler(self, callback: Callable, action: str) -> bool:
    method trigger_handlers (line 58) | def trigger_handlers(self, action: str, instance: 'GroupCallNative', *...

FILE: pytgcalls/pytgcalls/exceptions.py
  class PytgcallsBaseException (line 21) | class PytgcallsBaseException(Exception):
  class PytgcallsError (line 25) | class PytgcallsError(PytgcallsBaseException):
  class CallBeforeStartError (line 29) | class CallBeforeStartError(PytgcallsBaseException):
  class NotConnectedError (line 33) | class NotConnectedError(PytgcallsBaseException):
  class GroupCallNotFoundError (line 37) | class GroupCallNotFoundError(PytgcallsBaseException):

FILE: pytgcalls/pytgcalls/group_call_factory.py
  function hot_load_mtproto_lib_or_exception (line 33) | def hot_load_mtproto_lib_or_exception(module):
  class GroupCallFactory (line 43) | class GroupCallFactory:
    method __init__ (line 53) | def __init__(
    method get_mtproto_bridge (line 80) | def get_mtproto_bridge(self):
    method get (line 83) | def get(self, group_call_type: GroupCallType, **kwargs) -> Union[Group...
    method get_group_call (line 92) | def get_group_call(self) -> GroupCall:
    method get_file_group_call (line 100) | def get_file_group_call(
    method get_device_group_call (line 113) | def get_device_group_call(
    method get_raw_group_call (line 125) | def get_raw_group_call(

FILE: pytgcalls/pytgcalls/group_call_type.py
  class GroupCallType (line 23) | class GroupCallType(Enum):

FILE: pytgcalls/pytgcalls/implementation/group_call.py
  class MediaType (line 28) | class MediaType(Enum):
  class GroupCallAction (line 33) | class GroupCallAction(GroupCallBaseAction):
  class GroupCallDispatcherMixin (line 42) | class GroupCallDispatcherMixin(DispatcherMixin):
    method on_video_playout_ended (line 43) | def on_video_playout_ended(self, func: Callable) -> Callable:
    method on_audio_playout_ended (line 55) | def on_audio_playout_ended(self, func: Callable) -> Callable:
    method on_media_playout_ended (line 67) | def on_media_playout_ended(self, func: Callable) -> Callable:
  class GroupCall (line 83) | class GroupCall(GroupCallRaw, GroupCallDispatcherMixin):
    method __init__ (line 84) | def __init__(
    method __trigger_on_video_playout_ended (line 102) | def __trigger_on_video_playout_ended(self, source):
    method __trigger_on_audio_playout_ended (line 105) | def __trigger_on_audio_playout_ended(self, source):
    method __trigger_on_media_playout_ended (line 108) | def __trigger_on_media_playout_ended(self, source, media_type: MediaTy...
    method __combined_video_trigger (line 111) | def __combined_video_trigger(self, source):
    method __combined_audio_trigger (line 115) | def __combined_audio_trigger(self, source):
    method __on_video_played_data (line 120) | def __on_video_played_data(self: 'GroupCallRaw') -> bytes:
    method __on_audio_played_data (line 125) | def __on_audio_played_data(self: 'GroupCallRaw', length: int) -> bytes:
    method __on_audio_recorded_data (line 130) | def __on_audio_recorded_data(self, data, length):
    method join (line 134) | async def join(self, group, join_as=None, invite_hash: Optional[str] =...
    method leave (line 137) | async def leave(self):
    method start_video (line 140) | async def start_video(
    method start_audio (line 172) | async def start_audio(self, source: Optional[str] = None, repeat=True,...
    method start_audio_record (line 197) | async def start_audio_record(self, path):
    method set_video_pause (line 201) | async def set_video_pause(self, pause: bool, with_mtproto=True):
    method set_audio_pause (line 208) | async def set_audio_pause(self, pause: bool, with_mtproto=True):
    method set_pause (line 215) | async def set_pause(self, pause: bool):
    method stop_audio (line 223) | async def stop_audio(self, with_mtproto=True):
    method stop_video (line 230) | async def stop_video(self, with_mtproto=True):
    method stop_media (line 237) | async def stop_media(self):
    method is_video_paused (line 246) | def is_video_paused(self):
    method is_audio_paused (line 250) | def is_audio_paused(self):
    method is_paused (line 254) | def is_paused(self):
    method is_video_running (line 258) | def is_video_running(self):
    method is_audio_running (line 262) | def is_audio_running(self):
    method is_running (line 266) | def is_running(self):

FILE: pytgcalls/pytgcalls/implementation/group_call_base.py
  class GroupCallBaseAction (line 38) | class GroupCallBaseAction:
  class GroupCallBaseDispatcherMixin (line 45) | class GroupCallBaseDispatcherMixin(DispatcherMixin):
    method on_network_status_changed (line 46) | def on_network_status_changed(self, func: Callable) -> Callable:
    method on_participant_list_updated (line 58) | def on_participant_list_updated(self, func: Callable) -> Callable:
  class GroupCallBase (line 75) | class GroupCallBase(ABC, GroupCallBaseDispatcherMixin, GroupCallNative):
    method __init__ (line 81) | def __init__(
    method _group_call_participants_update_callback (line 122) | async def _group_call_participants_update_callback(self, update: Updat...
    method _group_call_update_callback (line 141) | async def _group_call_update_callback(self, update: UpdateGroupCallWra...
    method __set_join_response_payload (line 151) | def __set_join_response_payload(self, payload):
    method __emit_join_payload_callback (line 162) | def __emit_join_payload_callback(self, payload):
    method __network_state_updated_callback (line 202) | def __network_state_updated_callback(self, state: bool):
    method __start_status_worker (line 219) | def __start_status_worker(self):
    method start (line 228) | async def start(self, group, join_as=None, invite_hash: Optional[str] ...
    method stop (line 266) | async def stop(self):
    method reconnect (line 318) | async def reconnect(self):
    method leave_current_group_call (line 335) | async def leave_current_group_call(self):
    method edit_group_call (line 346) | async def edit_group_call(self, volume: int = None, muted=None, video_...
    method edit_group_call_member (line 374) | async def edit_group_call_member(self, peer, volume: int = None, muted...
    method set_is_mute (line 391) | async def set_is_mute(self, is_muted: bool):
    method set_my_volume (line 404) | async def set_my_volume(self, volume):
    method client (line 424) | def client(self):
    method full_chat (line 428) | def full_chat(self):
    method chat_peer (line 432) | def chat_peer(self):
    method group_call (line 436) | def group_call(self):
    method my_ssrc (line 440) | def my_ssrc(self):
    method my_peer (line 444) | def my_peer(self):
    method join_as (line 448) | def join_as(self):

FILE: pytgcalls/pytgcalls/implementation/group_call_device.py
  class GroupCallDevice (line 25) | class GroupCallDevice(GroupCallBase):
    method __init__ (line 26) | def __init__(
    method _setup_and_start_group_call (line 43) | def _setup_and_start_group_call(self):
    method audio_input_device (line 47) | def audio_input_device(self):
    method audio_input_device (line 57) | def audio_input_device(self, name=None):
    method audio_output_device (line 61) | def audio_output_device(self):
    method audio_output_device (line 71) | def audio_output_device(self, name=None):

FILE: pytgcalls/pytgcalls/implementation/group_call_file.py
  class GroupCallFileAction (line 27) | class GroupCallFileAction(GroupCallBaseAction):
  class GroupCallFileDispatcherMixin (line 32) | class GroupCallFileDispatcherMixin(GroupCallBaseDispatcherMixin):
    method on_playout_ended (line 33) | def on_playout_ended(self, func: Callable) -> Callable:
  class GroupCallFile (line 46) | class GroupCallFile(GroupCallBase, GroupCallFileDispatcherMixin):
    method __init__ (line 47) | def __init__(
    method __create_and_return_file_audio_device_descriptor (line 70) | def __create_and_return_file_audio_device_descriptor(self):
    method _setup_and_start_group_call (line 81) | def _setup_and_start_group_call(self):
    method stop_playout (line 84) | def stop_playout(self):
    method stop_output (line 89) | def stop_output(self):
    method input_filename (line 95) | def input_filename(self):
    method input_filename (line 101) | def input_filename(self, filename):
    method output_filename (line 107) | def output_filename(self):
    method output_filename (line 113) | def output_filename(self, filename):
    method pause_playout (line 118) | def pause_playout(self):
    method resume_playout (line 122) | def resume_playout(self):
    method pause_recording (line 126) | def pause_recording(self):
    method resume_recording (line 130) | def resume_recording(self):
    method __get_input_filename_callback (line 134) | def __get_input_filename_callback(self):
    method __get_output_filename_callback (line 137) | def __get_output_filename_callback(self):
    method __is_endless_playout_callback (line 140) | def __is_endless_playout_callback(self):
    method __is_playout_paused_callback (line 143) | def __is_playout_paused_callback(self):
    method __is_recording_paused_callback (line 146) | def __is_recording_paused_callback(self):
    method __playout_ended_callback (line 149) | def __playout_ended_callback(self, input_filename: str):

FILE: pytgcalls/pytgcalls/implementation/group_call_native.py
  function if_native_instance_created (line 30) | def if_native_instance_created(func):
  class GroupCallNative (line 40) | class GroupCallNative:
    method __init__ (line 41) | def __init__(
    method get_event_loop (line 73) | def get_event_loop(self):
    method is_group_call_native_created (line 76) | def is_group_call_native_created(self):
    method _setup_and_start_group_call (line 79) | def _setup_and_start_group_call(self):
    method _set_connection_mode (line 83) | def _set_connection_mode(self, mode: tgcalls.GroupConnectionMode, keep...
    method _emit_join_payload (line 88) | def _emit_join_payload(self, callback):
    method _start_native_group_call (line 92) | def _start_native_group_call(self, *args):
    method _emit_join_payload (line 97) | def _emit_join_payload(self, callback):
    method _set_join_response_payload (line 102) | def _set_join_response_payload(self, payload):
    method _set_is_mute (line 107) | def _set_is_mute(self, is_muted: bool):
    method _set_volume (line 112) | def _set_volume(self, ssrc, volume):
    method _stop_audio_device_module (line 117) | def _stop_audio_device_module(self):
    method _start_audio_device_module (line 122) | def _start_audio_device_module(self):
    method _set_video_capture (line 127) | def _set_video_capture(self, source_path: Callable, width: int, height...
    method get_playout_devices (line 132) | def get_playout_devices(self) -> List['tgcalls.AudioDevice']:
    method get_recording_devices (line 143) | def get_recording_devices(self) -> List['tgcalls.AudioDevice']:
    method set_audio_input_device (line 154) | def set_audio_input_device(self, name: Optional[str] = None):
    method set_audio_output_device (line 169) | def set_audio_output_device(self, name: Optional[str] = None):
    method restart_playout (line 184) | def restart_playout(self):
    method restart_recording (line 195) | def restart_recording(self):

FILE: pytgcalls/pytgcalls/implementation/group_call_raw.py
  class GroupCallRaw (line 27) | class GroupCallRaw(GroupCallBase):
    method __init__ (line 28) | def __init__(
    method __create_and_return_raw_audio_device_descriptor (line 50) | def __create_and_return_raw_audio_device_descriptor(self):
    method _setup_and_start_group_call (line 59) | def _setup_and_start_group_call(self):
    method _configure_video_capture (line 63) | def _configure_video_capture(self, video_info: VideoInfo):
    method __get_played_video_buffer_callback (line 68) | def __get_played_video_buffer_callback(self):
    method __get_played_audio_buffer_callback (line 82) | def __get_played_audio_buffer_callback(self, length: int):
    method __set_recorded_audio_buffer_callback (line 91) | def __set_recorded_audio_buffer_callback(self, frame: bytes, length: i...
    method __is_playout_paused_callback (line 95) | def __is_playout_paused_callback(self):
    method __is_recording_paused_callback (line 99) | def __is_recording_paused_callback(self):

FILE: pytgcalls/pytgcalls/mtproto/base_bridge.py
  class MTProtoBridgeBase (line 25) | class MTProtoBridgeBase(ABC):
    method __init__ (line 26) | def __init__(self, client):
    method reset (line 51) | def reset(self):
    method register_group_call_native_callback (line 54) | def register_group_call_native_callback(
    method re_register_update_handlers (line 60) | def re_register_update_handlers(self):
    method check_group_call (line 65) | async def check_group_call(self) -> bool:
    method leave_current_group_call (line 76) | async def leave_current_group_call(self):
    method edit_group_call_member (line 82) | async def edit_group_call_member(self, peer, volume: int = None, muted...
    method get_and_set_self_peer (line 88) | async def get_and_set_self_peer(self):
    method get_and_set_group_call (line 94) | async def get_and_set_group_call(self, group):
    method unregister_update_handlers (line 105) | def unregister_update_handlers(self):
    method register_update_handlers (line 111) | def register_update_handlers(self):
    method resolve_and_set_join_as (line 117) | async def resolve_and_set_join_as(self, join_as):
    method send_speaking_group_call_action (line 124) | async def send_speaking_group_call_action(self):
    method join_group_call (line 130) | async def join_group_call(
    method set_my_ssrc (line 142) | def set_my_ssrc(self, ssrc):
    method handle_updates (line 145) | def handle_updates(self, updates):

FILE: pytgcalls/pytgcalls/mtproto/data/base_wrapper.py
  class WrapperBase (line 21) | class WrapperBase:
    method __repr__ (line 24) | def __repr__(self):
    method __str__ (line 27) | def __str__(self):

FILE: pytgcalls/pytgcalls/mtproto/data/group_call_discarded_wrapper.py
  class GroupCallDiscardedWrapper (line 23) | class GroupCallDiscardedWrapper(WrapperBase):
    method __init__ (line 24) | def __init__(self):

FILE: pytgcalls/pytgcalls/mtproto/data/group_call_participant_wrapper.py
  class GroupCallParticipantWrapper (line 26) | class GroupCallParticipantWrapper(WrapperBase):
    method __init__ (line 41) | def __init__(
    method create (line 90) | def create(cls, participant):

FILE: pytgcalls/pytgcalls/mtproto/data/group_call_wrapper.py
  class GroupCallWrapper (line 23) | class GroupCallWrapper(WrapperBase):
    method __init__ (line 24) | def __init__(self, call_id: int, params):

FILE: pytgcalls/pytgcalls/mtproto/data/update/update_group_call_participants_wrapper.py
  class UpdateGroupCallParticipantsWrapper (line 28) | class UpdateGroupCallParticipantsWrapper(WrapperBase):
    method __init__ (line 29) | def __init__(self, participants: List['GroupCallParticipantWrapper']):

FILE: pytgcalls/pytgcalls/mtproto/data/update/update_group_call_wrapper.py
  class UpdateGroupCallWrapper (line 28) | class UpdateGroupCallWrapper(WrapperBase):
    method __init__ (line 29) | def __init__(self, chat_id: int, call: Union['GroupCallWrapper', 'Grou...

FILE: pytgcalls/pytgcalls/mtproto/exceptions.py
  class GroupcallSsrcDuplicateMuch (line 21) | class GroupcallSsrcDuplicateMuch(Exception):
  class BadRequest (line 25) | class BadRequest(Exception):

FILE: pytgcalls/pytgcalls/mtproto/pyrogram_bridge.py
  class PyrogramBridge (line 48) | class PyrogramBridge(MTProtoBridgeBase):
    method __init__ (line 49) | def __init__(self, client: Client):
    method _process_update (line 64) | async def _process_update(self, _, update, users, chats):
    method _process_group_call_participants_update (line 74) | async def _process_group_call_participants_update(self, update):
    method _process_group_call_update (line 80) | async def _process_group_call_update(self, update):
    method _process_group_call_connection (line 89) | async def _process_group_call_connection(self, update):
    method check_group_call (line 96) | async def check_group_call(self) -> bool:
    method leave_current_group_call (line 116) | async def leave_current_group_call(self):
    method edit_group_call_member (line 125) | async def edit_group_call_member(
    method get_and_set_self_peer (line 140) | async def get_and_set_self_peer(self):
    method get_and_set_group_call (line 145) | async def get_and_set_group_call(self, group):
    method unregister_update_handlers (line 175) | def unregister_update_handlers(self):
    method register_update_handlers (line 180) | def register_update_handlers(self):
    method resolve_and_set_join_as (line 187) | async def resolve_and_set_join_as(self, join_as):
    method send_speaking_group_call_action (line 202) | async def send_speaking_group_call_action(self):
    method join_group_call (line 207) | async def join_group_call(
    method handle_updates (line 237) | async def handle_updates(self, updates):

FILE: pytgcalls/pytgcalls/mtproto/telethon_bridge.py
  class TelethonBridge (line 49) | class TelethonBridge(MTProtoBridgeBase):
    method __init__ (line 50) | def __init__(self, client):
    method _process_update (line 60) | async def _process_update(self, update):
    method _process_group_call_participants_update (line 71) | async def _process_group_call_participants_update(self, update):
    method _process_group_call_update (line 77) | async def _process_group_call_update(self, update):
    method _process_group_call_connection (line 86) | async def _process_group_call_connection(self, update):
    method check_group_call (line 93) | async def check_group_call(self) -> bool:
    method leave_current_group_call (line 111) | async def leave_current_group_call(self):
    method edit_group_call_member (line 121) | async def edit_group_call_member(
    method get_and_set_self_peer (line 137) | async def get_and_set_self_peer(self):
    method get_and_set_group_call (line 142) | async def get_and_set_group_call(self, group):
    method unregister_update_handlers (line 160) | def unregister_update_handlers(self):
    method register_update_handlers (line 163) | def register_update_handlers(self):
    method resolve_and_set_join_as (line 166) | async def resolve_and_set_join_as(self, join_as):
    method send_speaking_group_call_action (line 174) | async def send_speaking_group_call_action(self):
    method join_group_call (line 177) | async def join_group_call(
    method handle_updates (line 203) | async def handle_updates(self, updates):

FILE: pytgcalls/pytgcalls/mtproto_client_type.py
  class MTProtoClientType (line 23) | class MTProtoClientType(Enum):

FILE: pytgcalls/pytgcalls/utils.py
  class VideoInfo (line 50) | class VideoInfo:
    method __init__ (line 51) | def __init__(self, width: int, height: int, fps: int):
    method default (line 57) | def default(cls):
  class QueueStream (line 61) | class QueueStream:
    method __init__ (line 62) | def __init__(self, on_end_callback, queue_size):
    method set_pause (line 74) | def set_pause(self, pause: bool):
    method create_queue (line 77) | def create_queue(self, queue_size=None):
    method start (line 83) | def start(self):
    method stop (line 88) | def stop(self):
    method read (line 92) | def read(self):
    method put (line 95) | def put(self, item, block=True):
    method _update (line 98) | def _update(self):
  class VideoStream (line 102) | class VideoStream(QueueStream):
    method __init__ (line 103) | def __init__(self, source, repeat, on_end_callback, queue_size=VIDEO_Q...
    method start (line 118) | def start(self):
    method get_video_info (line 121) | def get_video_info(self) -> VideoInfo:
    method read (line 131) | def read(self):
    method get_pts (line 141) | def get_pts(self):
    method skip_next_frame (line 144) | def skip_next_frame(self):
    method get_next_frame (line 147) | def get_next_frame(self) -> Optional[bytes]:
    method _update (line 174) | def _update(self):
  class AudioStream (line 192) | class AudioStream(QueueStream):
    method __init__ (line 195) | def __init__(
    method read (line 232) | def read(self, length: int):
    method get_pts (line 243) | def get_pts(self):
    method get_next_frame (line 246) | def get_next_frame(self) -> Optional[List[bytes]]:
    method _update (line 308) | def _update(self):

FILE: pytgcalls/test.py
  class DH (line 39) | class DH:
    method __init__ (line 40) | def __init__(self, dhc: types.messages.DhConfig):
    method __repr__ (line 45) | def __repr__(self):
  class Call (line 49) | class Call:
    method __init__ (line 50) | def __init__(self, client: pyrogram.Client):
    method process_update (line 82) | async def process_update(self, _, update, users, chats):
    method auth_key_bytes (line 108) | def auth_key_bytes(self) -> bytes:
    method call_id (line 112) | def call_id(self) -> int:
    method get_protocol (line 116) | def get_protocol() -> types.PhoneCallProtocol:
    method get_dhc (line 125) | async def get_dhc(self):
    method check_g (line 129) | def check_g(self, g_x: int, p: int) -> None:
    method stop (line 136) | def stop(self) -> None:
    method update_state (line 145) | def update_state(self, val) -> None:
    method call_ended (line 148) | def call_ended(self) -> None:
    method call_failed (line 152) | def call_failed(self, error=None) -> None:
    method call_discarded (line 157) | def call_discarded(self):
    method received_call (line 164) | async def received_call(self):
    method discard_call (line 170) | async def discard_call(self, reason=None):
    method signalling_data_emitted_callback (line 188) | def signalling_data_emitted_callback(self, data):
    method _initiate_encrypted_call (line 200) | async def _initiate_encrypted_call(self) -> None:
    method on_init_encrypted_call (line 209) | def on_init_encrypted_call(self, func: callable) -> callable:
  class OutgoingCall (line 214) | class OutgoingCall(Call):
    method __init__ (line 217) | def __init__(self, client, user_id: Union[int, str]):
    method request (line 221) | async def request(self):
    method process_update (line 244) | async def process_update(self, _, update, users, chats) -> None:
    method call_accepted (line 253) | async def call_accepted(self) -> None:
  class IncomingCall (line 277) | class IncomingCall(Call):
    method __init__ (line 280) | def __init__(self, call: types.PhoneCallRequested, *args, **kwargs):
    method process_update (line 287) | async def process_update(self, _, update, users, chats):
    method on_call_accepted (line 294) | async def on_call_accepted(self, func: callable) -> callable:
    method accept (line 298) | async def accept(self) -> bool:
    method call_accepted (line 336) | async def call_accepted(self) -> None:
  class Tgcalls (line 360) | class Tgcalls:
    method __init__ (line 364) | def __init__(self, client: pyrogram.Client, receive_calls=True):
    method get_incoming_call_class (line 371) | def get_incoming_call_class(self):
    method get_outgoing_call_class (line 374) | def get_outgoing_call_class(self):
    method on_incoming_call (line 377) | def on_incoming_call(self, func) -> callable:
    method start_call (line 381) | async def start_call(self, user_id: Union[str, int]):
    method update_handler (line 386) | def update_handler(self, _, update, users, chats):
  function rtc_servers (line 402) | def rtc_servers(connections):
  function start (line 406) | async def start(client1, client2, make_out, make_inc):
  function main (line 470) | async def main(client1, client2, telethon1, make_out, make_inc):

FILE: pytgcalls/tgcalls_dev.py
  function __bootstrap__ (line 4) | def __bootstrap__():

FILE: setup.py
  class CMakeExtension (line 43) | class CMakeExtension(Extension):
    method __init__ (line 44) | def __init__(self, name, sourcedir=''):
  class CMakeBuild (line 49) | class CMakeBuild(build_ext):
    method run (line 50) | def run(self):
    method build_extension (line 65) | def build_extension(self, ext):

FILE: tgcalls/src/FileAudioDevice.h
  function namespace (line 24) | namespace rtc {
  function class (line 31) | class FileAudioDevice : public webrtc::AudioDeviceGeneric {

FILE: tgcalls/src/FileAudioDeviceDescriptor.h
  function class (line 6) | class FileAudioDeviceDescriptor {

FILE: tgcalls/src/InstanceHolder.h
  type InstanceHolder (line 6) | struct InstanceHolder {

FILE: tgcalls/src/NativeInstance.cpp
  class PytgcallsRequestMediaChannelDescriptionTask (line 37) | class PytgcallsRequestMediaChannelDescriptionTask final : public tgcalls...

FILE: tgcalls/src/NativeInstance.h
  function class (line 19) | class NativeInstance {

FILE: tgcalls/src/RawAudioDevice.h
  function namespace (line 14) | namespace rtc {
  function class (line 18) | class RawAudioDevice : public webrtc::AudioDeviceGeneric {

FILE: tgcalls/src/RawAudioDeviceDescriptor.h
  function class (line 10) | class RawAudioDeviceDescriptor {

FILE: tgcalls/src/RtcServer.h
  type RtcServer (line 7) | struct RtcServer

FILE: tgcalls/src/WrappedAudioDeviceModuleImpl.h
  function namespace (line 12) | namespace rtc {
  function class (line 16) | class WrappedAudioDeviceModuleImpl : public webrtc::AudioDeviceModule {

FILE: tgcalls/src/tgcalls.cpp
  function ping (line 12) | void ping() {
  function PYBIND11_MODULE (line 23) | PYBIND11_MODULE(tgcalls, m) {

FILE: tgcalls/src/video/PythonSource.h
  function class (line 12) | class PythonSource {

FILE: tgcalls/src/video/PythonVideoTrackSource.cpp
  class PythonVideoSource (line 6) | class PythonVideoSource : public rtc::VideoSourceInterface<webrtc::Video...
    method PythonVideoSource (line 8) | PythonVideoSource(std::unique_ptr<PythonSource> source, int fps) {
    method AddOrUpdateSink (line 41) | void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrameT> *sink, const...
    method RemoveSink (line 48) | void RemoveSink(rtc::VideoSinkInterface<VideoFrameT> *sink) {
    type Data (line 54) | struct Data {
  class PythonVideoSourceImpl (line 61) | class PythonVideoSourceImpl : public webrtc::VideoTrackSource {
    method Create (line 63) | static rtc::scoped_refptr<PythonVideoSourceImpl> Create(std::unique_pt...
    method PythonVideoSourceImpl (line 67) | explicit PythonVideoSourceImpl(std::unique_ptr<PythonSource> source, f...

FILE: tgcalls/src/video/PythonVideoTrackSource.h
  function namespace (line 13) | namespace webrtc {
  function class (line 18) | class PythonVideoTrackSource {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/AudioDeviceHelper.cpp
  type tgcalls (line 6) | namespace tgcalls {
    function SkipDefaultDevice (line 9) | bool SkipDefaultDevice(const char *name) {
    function SetAudioInputDeviceById (line 24) | void SetAudioInputDeviceById(webrtc::AudioDeviceModule *adm, const std...
    function SetAudioOutputDeviceById (line 73) | void SetAudioOutputDeviceById(webrtc::AudioDeviceModule *adm, const st...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/AudioDeviceHelper.h
  function namespace (line 6) | namespace webrtc {
  function namespace (line 10) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/AudioFrame.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/CodecSelectHelper.cpp
  type tgcalls (line 11) | namespace tgcalls {
    function CompareFormats (line 16) | bool CompareFormats(const VideoFormat &a, const VideoFormat &b) {
    function FormatPriority (line 26) | int FormatPriority(const VideoFormat &format, const std::vector<std::s...
    function ComparePriorities (line 67) | bool ComparePriorities(const VideoFormat &a, const VideoFormat &b, con...
    function FilterAndSortEncoders (line 71) | std::vector<VideoFormat> FilterAndSortEncoders(std::vector<VideoFormat...
    function AppendUnique (line 88) | std::vector<VideoFormat> AppendUnique(
    function FindEqualFormat (line 105) | std::vector<VideoFormat>::const_iterator FindEqualFormat(
    function AddDefaultFeedbackParams (line 117) | void AddDefaultFeedbackParams(cricket::VideoCodec *codec) {
    function VideoFormatsMessage (line 138) | VideoFormatsMessage ComposeSupportedFormats(
    function CommonFormats (line 154) | CommonFormats ComputeCommonFormats(
    function CommonCodecs (line 224) | CommonCodecs AssignPayloadTypesAndDefaultCodecs(CommonFormats &&format...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/CodecSelectHelper.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/CryptoHelper.cpp
  type tgcalls (line 6) | namespace tgcalls {
    function AesKeyIv (line 8) | AesKeyIv PrepareAesKeyIv(const uint8_t *key, const uint8_t *msgKey, in...
    function AesProcessCtr (line 29) | void AesProcessCtr(MemorySpan from, void *to, AesKeyIv &&aesKeyIv) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/CryptoHelper.h
  function namespace (line 16) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/EncryptedConnection.cpp
  type tgcalls (line 8) | namespace tgcalls {
    function AppendSeq (line 37) | void AppendSeq(rtc::CopyOnWriteBuffer &buffer, uint32_t seq) {
    function WriteSeq (line 42) | void WriteSeq(void *bytes, uint32_t seq) {
    function ReadSeq (line 46) | uint32_t ReadSeq(const void *bytes) {
    function CounterFromSeq (line 50) | uint32_t CounterFromSeq(uint32_t seq) {
    function LogError (line 54) | absl::nullopt_t LogError(
    function ConstTimeIsDifferent (line 61) | bool ConstTimeIsDifferent(const void *a, const void *b, size_t size) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/EncryptedConnection.h
  function namespace (line 7) | namespace rtc {
  function namespace (line 11) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/FakeAudioDeviceModule.cpp
  type tgcalls (line 12) | namespace tgcalls {
    class FakeAudioDeviceModuleImpl (line 13) | class FakeAudioDeviceModuleImpl : public webrtc::webrtc_impl::AudioDev...
      method Create (line 15) | static rtc::scoped_refptr<webrtc::AudioDeviceModule> Create(webrtc::...
      method FakeAudioDeviceModuleImpl (line 23) | FakeAudioDeviceModuleImpl(webrtc::TaskQueueFactory*, FakeAudioDevice...
      method PlayoutIsAvailable (line 54) | int32_t PlayoutIsAvailable(bool* available) override {
      method StereoPlayoutIsAvailable (line 61) | int32_t StereoPlayoutIsAvailable(bool* available) const override {
      method StereoPlayout (line 67) | int32_t StereoPlayout(bool* enabled) const override {
      method SetStereoPlayout (line 73) | int32_t SetStereoPlayout(bool enable) override {
      method Init (line 81) | int32_t Init() override {
      method RegisterAudioCallback (line 85) | int32_t RegisterAudioCallback(webrtc::AudioTransport* callback) over...
      method StartPlayout (line 91) | int32_t StartPlayout() override {
      method StopPlayout (line 107) | int32_t StopPlayout() override {
      method Playing (line 119) | bool Playing() const override {
      method StartRecording (line 123) | int32_t StartRecording() override {
      method StopRecording (line 138) | int32_t StopRecording() override {
      method Recording (line 149) | bool Recording() const override {
      method Render (line 155) | int32_t Render() {
      method Record (line 195) | int32_t Record() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/FakeAudioDeviceModule.h
  function namespace (line 8) | namespace webrtc {
  function namespace (line 13) | namespace rtc {
  function namespace (line 18) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/FakeVideoTrackSource.cpp
  type tgcalls (line 11) | namespace tgcalls {
    class ChessFrameSource (line 16) | class ChessFrameSource : public FrameSource {
      method ChessFrameSource (line 18) | ChessFrameSource() {
      method Info (line 25) | Info info() const override{
      method next_frame_rgb0 (line 32) | void next_frame_rgb0(char *buf, double *pts) override {
      type Frame (line 40) | struct Frame {
      method Frame (line 46) | Frame genFrame(int i, int n) {
    class FakeVideoSource (line 103) | class FakeVideoSource : public rtc::VideoSourceInterface<webrtc::Video...
      method FakeVideoSource (line 105) | FakeVideoSource(std::unique_ptr<FrameSource> source) {
      method AddOrUpdateSink (line 123) | void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrameT> *sink, con...
      method RemoveSink (line 129) | void RemoveSink(rtc::VideoSinkInterface<VideoFrameT> *sink) {
      type Data (line 135) | struct Data {
    class FakeVideoTrackSourceImpl (line 142) | class FakeVideoTrackSourceImpl : public webrtc::VideoTrackSource {
      method Create (line 144) | static rtc::scoped_refptr<FakeVideoTrackSourceImpl> Create(std::uniq...
      method FakeVideoTrackSourceImpl (line 148) | explicit FakeVideoTrackSourceImpl(std::unique_ptr<FrameSource> sourc...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/FakeVideoTrackSource.h
  function namespace (line 6) | namespace webrtc {
  function namespace (line 11) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Instance.cpp
  type tgcalls (line 6) | namespace tgcalls {
    function SetLoggingFunction (line 62) | void SetLoggingFunction(std::function<void(std::string const &)> loggi...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Instance.h
  function namespace (line 12) | namespace rtc {
  function namespace (line 19) | namespace webrtc {
  type FilePath (line 29) | struct FilePath {
  type Proxy (line 37) | struct Proxy {
  type RtcServer (line 44) | struct RtcServer {
  function EndpointType (line 52) | enum class EndpointType {
  type class (line 72) | enum class
  type class (line 77) | enum class
  function DataSaving (line 92) | enum class DataSaving {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/InstanceImpl.cpp
  type tgcalls (line 9) | namespace tgcalls {
    function TrafficStats (line 159) | TrafficStats InstanceImpl::getTrafficStats() {
    function PersistentState (line 163) | PersistentState InstanceImpl::getPersistentState() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/InstanceImpl.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/LogSinkImpl.cpp
  type tgcalls (line 12) | namespace tgcalls {
    type tm (line 31) | struct tm

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/LogSinkImpl.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Manager.cpp
  type tgcalls (line 8) | namespace tgcalls {
    function dumpStatsLog (line 11) | void dumpStatsLog(const FilePath &path, const CallStats &stats) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Manager.h
  function namespace (line 11) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/MediaManager.cpp
  type tgcalls (line 26) | namespace tgcalls {
    function VideoCaptureInterfaceObject (line 39) | VideoCaptureInterfaceObject *GetVideoCaptureAssumingSameThread(VideoCa...
    class AudioCaptureAnalyzer (line 45) | class AudioCaptureAnalyzer : public webrtc::CustomAudioAnalyzer {
      method Initialize (line 47) | void Initialize(int sample_rate_hz, int num_channels) override {
      method Analyze (line 51) | void Analyze(const webrtc::AudioBuffer* audio) override {
      method ToString (line 55) | std::string ToString() const override {
      method AudioCaptureAnalyzer (line 62) | AudioCaptureAnalyzer(std::function<void(const webrtc::AudioBuffer*)>...
    class AudioCapturePostProcessor (line 69) | class AudioCapturePostProcessor : public webrtc::CustomProcessing {
      method AudioCapturePostProcessor (line 71) | AudioCapturePostProcessor(std::function<void(float)> updated, std::v...
      method Initialize (line 81) | virtual void Initialize(int sample_rate_hz, int num_channels) overri...
      method Process (line 84) | virtual void Process(webrtc::AudioBuffer *buffer) override {
      method ToString (line 137) | virtual std::string ToString() const override {
      method SetRuntimeSetting (line 141) | virtual void SetRuntimeSetting(webrtc::AudioProcessing::RuntimeSetti...
    class VideoSinkInterfaceProxyImpl (line 156) | class VideoSinkInterfaceProxyImpl : public rtc::VideoSinkInterface<web...
      method VideoSinkInterfaceProxyImpl (line 158) | VideoSinkInterfaceProxyImpl(bool rewriteRotation) :
      method OnFrame (line 165) | virtual void OnFrame(const webrtc::VideoFrame& frame) override {
      method OnDiscardedFrame (line 177) | virtual void OnDiscardedFrame() override {
      method setSink (line 183) | void setSink(std::shared_ptr<rtc::VideoSinkInterface<webrtc::VideoFr...
    class AudioTrackSinkInterfaceImpl (line 193) | class AudioTrackSinkInterfaceImpl: public webrtc::AudioSinkInterface {
      method AudioTrackSinkInterfaceImpl (line 201) | AudioTrackSinkInterfaceImpl(std::function<void(float)> update) :
      method OnData (line 208) | virtual void OnData(const Data& audio) override {
    function IsRtcp (line 908) | static bool IsRtcp(const uint8_t* packet, size_t length) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/MediaManager.h
  function namespace (line 18) | namespace webrtc {
  function namespace (line 27) | namespace cricket {
  function namespace (line 33) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Message.cpp
  type tgcalls (line 6) | namespace tgcalls {
    function Serialize (line 11) | void Serialize(rtc::ByteBufferWriter &to, const std::string &from) {
    function Deserialize (line 18) | bool Deserialize(std::string &to, rtc::ByteBufferReader &from) {
    function Serialize (line 33) | void Serialize(rtc::ByteBufferWriter &to, const webrtc::SdpVideoFormat...
    function Deserialize (line 44) | bool Deserialize(webrtc::SdpVideoFormat &to, rtc::ByteBufferReader &fr...
    function Serialize (line 69) | void Serialize(rtc::ByteBufferWriter &to, const cricket::Candidate &fr...
    function Deserialize (line 79) | bool Deserialize(cricket::Candidate &to, rtc::ByteBufferReader &from) {
    function Serialize (line 94) | void Serialize(rtc::ByteBufferWriter &to, const RequestVideoMessage &f...
    function Deserialize (line 97) | bool Deserialize(RequestVideoMessage &to, rtc::ByteBufferReader &reade...
    function Serialize (line 101) | void Serialize(rtc::ByteBufferWriter &to, const RemoteMediaStateMessag...
    function Deserialize (line 106) | bool Deserialize(RemoteMediaStateMessage &to, rtc::ByteBufferReader &r...
    function Serialize (line 121) | void Serialize(rtc::ByteBufferWriter &to, const CandidatesListMessage ...
    function Deserialize (line 133) | bool Deserialize(CandidatesListMessage &to, rtc::ByteBufferReader &rea...
    function Serialize (line 156) | void Serialize(rtc::ByteBufferWriter &to, const VideoFormatsMessage &f...
    function Deserialize (line 167) | bool Deserialize(VideoFormatsMessage &to, rtc::ByteBufferReader &from,...
    function Serialize (line 193) | void Serialize(rtc::ByteBufferWriter &to, const rtc::CopyOnWriteBuffer...
    function Deserialize (line 201) | bool Deserialize(rtc::CopyOnWriteBuffer &to, rtc::ByteBufferReader &fr...
    function Serialize (line 217) | void Serialize(rtc::ByteBufferWriter &to, const AudioDataMessage &from...
    function Deserialize (line 221) | bool Deserialize(AudioDataMessage &to, rtc::ByteBufferReader &from, bo...
    function Serialize (line 225) | void Serialize(rtc::ByteBufferWriter &to, const VideoDataMessage &from...
    function Deserialize (line 229) | bool Deserialize(VideoDataMessage &to, rtc::ByteBufferReader &from, bo...
    function Serialize (line 233) | void Serialize(rtc::ByteBufferWriter &to, const UnstructuredDataMessag...
    function Deserialize (line 237) | bool Deserialize(UnstructuredDataMessage &to, rtc::ByteBufferReader &f...
    function Serialize (line 241) | void Serialize(rtc::ByteBufferWriter &to, const VideoParametersMessage...
    function Deserialize (line 245) | bool Deserialize(VideoParametersMessage &to, rtc::ByteBufferReader &fr...
    function Serialize (line 254) | void Serialize(rtc::ByteBufferWriter &to, const RemoteBatteryLevelIsLo...
    function Deserialize (line 258) | bool Deserialize(RemoteBatteryLevelIsLowMessage &to, rtc::ByteBufferRe...
    function Serialize (line 268) | void Serialize(rtc::ByteBufferWriter &to, const RemoteNetworkStatusMes...
    function Deserialize (line 273) | bool Deserialize(RemoteNetworkStatusMessage &to, rtc::ByteBufferReader...
    type TryResult (line 286) | enum class TryResult : uint8_t {
    function TryResult (line 293) | TryResult TryDeserialize(
    type TryDeserializeNext (line 314) | struct TryDeserializeNext
    type TryDeserializeNext<> (line 317) | struct TryDeserializeNext<> {
      method Call (line 318) | static bool Call(
    function TryDeserializeRecursive (line 340) | bool TryDeserializeRecursive(
    function SerializeMessageWithSeq (line 351) | rtc::CopyOnWriteBuffer SerializeMessageWithSeq(
    function DeserializeMessage (line 368) | absl::optional<Message> DeserializeMessage(
  type TryDeserializeNext<T, Other...> (line 327) | struct TryDeserializeNext<T, Other...> {
    method Call (line 328) | static bool Call(

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Message.h
  type class (line 15) | enum class
  type class (line 16) | enum class
  type PeerIceParameters (line 18) | struct PeerIceParameters {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/NetworkManager.cpp
  type tgcalls (line 28) | namespace tgcalls {
    class TgCallsCryptStringImpl (line 30) | class TgCallsCryptStringImpl : public rtc::CryptStringImpl {
      method TgCallsCryptStringImpl (line 32) | TgCallsCryptStringImpl(std::string const &value) :
      method GetLength (line 39) | virtual size_t GetLength() const override {
      method CopyTo (line 43) | virtual void CopyTo(char* dest, bool nullterminate) const override {
      method UrlEncode (line 49) | virtual std::string UrlEncode() const override {
      method CryptStringImpl (line 52) | virtual CryptStringImpl* Copy() const override {
      method CopyRawTo (line 56) | virtual void CopyRawTo(std::vector<unsigned char>* dest) const overr...
    function TrafficStats (line 250) | TrafficStats NetworkManager::getNetworkStats() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/NetworkManager.h
  function namespace (line 18) | namespace rtc {
  function namespace (line 25) | namespace cricket {
  function namespace (line 31) | namespace webrtc {
  function namespace (line 36) | namespace tgcalls {
  type InterfaceTrafficStats (line 47) | struct InterfaceTrafficStats {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/PlatformContext.h
  function namespace (line 4) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/SctpDataChannelProviderInterfaceImpl.cpp
  type tgcalls (line 5) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/SctpDataChannelProviderInterfaceImpl.h
  function namespace (line 11) | namespace cricket {
  function namespace (line 15) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/StaticThreads.cpp
  type tgcalls (line 9) | namespace tgcalls {
    class Pool (line 12) | class Pool : public std::enable_shared_from_this<Pool<ValueT, CreatorT...
      type Entry (line 13) | struct Entry {
      method Pool (line 23) | explicit Pool(CreatorT creator) : creator_(std::move(creator)) {
      method get (line 25) | std::shared_ptr<ValueT> get() {
      method set_pool_size (line 35) | void set_pool_size(size_t size) {
      method dec_ref (line 40) | void dec_ref(size_t i) {
      method set_pool_size_locked (line 51) | void set_pool_size_locked(size_t size) {
    class ThreadsImpl (line 58) | class ThreadsImpl : public Threads {
      method ThreadsImpl (line 61) | explicit ThreadsImpl(size_t i) {
      method getSharedModuleThread (line 80) | rtc::scoped_refptr<webrtc::SharedModuleThread> getSharedModuleThread...
      method Thread (line 97) | static Thread create(const std::string &name) {
      method Thread (line 100) | static Thread create_network(const std::string &name) {
      method Thread (line 104) | static Thread init(Thread value, const std::string &name) {
    class ThreadsCreator (line 111) | class ThreadsCreator {
    type StaticThreads (line 130) | namespace StaticThreads {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/StaticThreads.h
  function namespace (line 6) | namespace rtc {
  function namespace (line 11) | namespace webrtc {
  function namespace (line 15) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/Stats.h
  function CallStatsConnectionEndpointType (line 6) | enum class CallStatsConnectionEndpointType {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/ThreadLocalObject.h
  function namespace (line 10) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/TurnCustomizerImpl.cpp
  type tgcalls (line 5) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/TurnCustomizerImpl.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterface.cpp
  type tgcalls (line 5) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterface.h
  function namespace (line 9) | namespace rtc {
  function namespace (line 14) | namespace webrtc {
  function VideoState (line 23) | enum class VideoState {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterfaceImpl.cpp
  type tgcalls (line 9) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterfaceImpl.h
  function namespace (line 10) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/VideoCapturerInterface.h
  function namespace (line 9) | namespace rtc {
  function namespace (line 14) | namespace webrtc {
  function namespace (line 18) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSource.cpp
  type tgcalls (line 11) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSource.h
  function namespace (line 18) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceHelper.cpp
  type tgcalls (line 33) | namespace tgcalls {
    function DesktopSize (line 36) | DesktopSize AspectFitted(DesktopSize from, DesktopSize to) {
    class CaptureScheduler (line 47) | class CaptureScheduler {
      method runAsync (line 49) | void runAsync(std::function<void()> method) {
      method runDelayed (line 54) | void runDelayed(int delayMs, std::function<void()> method) {
      method CaptureScheduler (line 76) | CaptureScheduler() : _thread(GlobalCapturerThread()) {
      method runAsync (line 79) | void runAsync(std::function<void()> method) {
      method runDelayed (line 82) | void runDelayed(int delayMs, std::function<void()> method) {
    class CaptureScheduler (line 74) | class CaptureScheduler {
      method runAsync (line 49) | void runAsync(std::function<void()> method) {
      method runDelayed (line 54) | void runDelayed(int delayMs, std::function<void()> method) {
      method CaptureScheduler (line 76) | CaptureScheduler() : _thread(GlobalCapturerThread()) {
      method runAsync (line 79) | void runAsync(std::function<void()> method) {
      method runDelayed (line 82) | void runDelayed(int delayMs, std::function<void()> method) {
    class SourceFrameCallbackImpl (line 92) | class SourceFrameCallbackImpl : public webrtc::DesktopCapturer::Callba...
    class DesktopSourceRenderer (line 115) | class DesktopSourceRenderer {
    type DesktopCaptureSourceHelper::Renderer (line 378) | struct DesktopCaptureSourceHelper::Renderer {
    function DesktopCaptureSource (line 383) | DesktopCaptureSource DesktopCaptureSourceForKey(
    function ShouldBeDesktopCapture (line 408) | bool ShouldBeDesktopCapture(const std::string &uniqueKey) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceHelper.h
  function namespace (line 16) | namespace webrtc {
  function namespace (line 20) | namespace rtc {
  function namespace (line 25) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceManager.cpp
  type tgcalls (line 18) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceManager.h
  function namespace (line 17) | namespace webrtc {
  function DesktopCaptureType (line 24) | enum class DesktopCaptureType {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceCustomImpl.cpp
  type tgcalls (line 69) | namespace tgcalls {
    function splitString (line 74) | void splitString(const std::string &s, char delim, Out result) {
    function splitString (line 82) | std::vector<std::string> splitString(const std::string &s, char delim) {
    function stringToInt (line 88) | static int stringToInt(std::string const &string) {
    function intToString (line 95) | static std::string intToString(int value) {
    function uint32ToString (line 101) | static std::string uint32ToString(uint32_t value) {
    function stringToUInt32 (line 107) | static uint32_t stringToUInt32(std::string const &string) {
    function stringToUInt16 (line 114) | static uint16_t stringToUInt16(std::string const &string) {
    function formatTimestampMillis (line 121) | static std::string formatTimestampMillis(int64_t timestamp) {
    function VideoCaptureInterfaceObject (line 127) | static VideoCaptureInterfaceObject *GetVideoCaptureAssumingSameThread(...
    type OutgoingVideoFormat (line 133) | struct OutgoingVideoFormat {
    function addDefaultFeedbackParams (line 138) | static void addDefaultFeedbackParams(cricket::VideoCodec *codec) {
    type H264FormatParameters (line 154) | struct H264FormatParameters {
    function H264FormatParameters (line 160) | H264FormatParameters parseH264FormatParameters(webrtc::SdpVideoFormat ...
    function getH264ProfileLevelIdPriority (line 176) | static int getH264ProfileLevelIdPriority(std::string const &profileLev...
    function getH264PacketizationModePriority (line 186) | static int getH264PacketizationModePriority(std::string const &packeti...
    function getH264LevelAssymetryAllowedPriority (line 194) | static int getH264LevelAssymetryAllowedPriority(std::string const &lev...
    function filterSupportedVideoFormats (line 202) | static std::vector<webrtc::SdpVideoFormat> filterSupportedVideoFormats...
    function assignPayloadTypes (line 282) | static std::vector<OutgoingVideoFormat> assignPayloadTypes(std::vector...
    type VideoSsrcs (line 341) | struct VideoSsrcs {
      type SimulcastLayer (line 342) | struct SimulcastLayer {
        method SimulcastLayer (line 346) | SimulcastLayer(uint32_t ssrc_, uint32_t fidSsrc_) :
        method SimulcastLayer (line 350) | SimulcastLayer(const SimulcastLayer &other) :
      method VideoSsrcs (line 357) | VideoSsrcs() {
      method VideoSsrcs (line 360) | VideoSsrcs(const VideoSsrcs &other) :
    type InternalGroupLevelValue (line 365) | struct InternalGroupLevelValue {
    type ChannelId (line 370) | struct ChannelId {
      method ChannelId (line 374) | ChannelId(uint32_t networkSsrc_, uint32_t actualSsrc_) :
      method ChannelId (line 379) | explicit ChannelId(uint32_t networkSsrc_) :
      method name (line 391) | std::string name() {
    type VideoChannelId (line 400) | struct VideoChannelId {
      method VideoChannelId (line 403) | explicit VideoChannelId(std::string const &endpointId_) :
    type ChannelSsrcInfo (line 412) | struct ChannelSsrcInfo {
      type Type (line 413) | enum class Type {
    type RequestedMediaChannelDescriptions (line 423) | struct RequestedMediaChannelDescriptions {
      method RequestedMediaChannelDescriptions (line 427) | RequestedMediaChannelDescriptions(std::shared_ptr<RequestMediaChanne...
    class VadHistory (line 434) | class VadHistory {
      method VadHistory (line 439) | VadHistory() {
      method update (line 448) | bool update(float vadProbability) {
    class CombinedVad (line 469) | class CombinedVad {
      method CombinedVad (line 475) | CombinedVad() {
      method update (line 481) | bool update(webrtc::AudioBuffer *buffer) {
      method update (line 499) | bool update() {
    class SparseVad (line 504) | class SparseVad {
      method SparseVad (line 506) | SparseVad() {
      method update (line 509) | bool update(webrtc::AudioBuffer *buffer) {
    class AudioSinkImpl (line 527) | class AudioSinkImpl: public webrtc::AudioSinkInterface {
      type Update (line 529) | struct Update {
        method Update (line 533) | Update(float level_, bool hasSpech_) :
        method Update (line 537) | Update(const Update &other) :
      method AudioSinkImpl (line 543) | AudioSinkImpl(std::function<void(Update)> update,
      method OnData (line 551) | virtual void OnData(const Data& audio) override {
    class VideoSinkImpl (line 614) | class VideoSinkImpl : public rtc::VideoSinkInterface<webrtc::VideoFram...
      method VideoSinkImpl (line 616) | VideoSinkImpl(std::string const &endpointId) :
      method OnFrame (line 623) | virtual void OnFrame(const webrtc::VideoFrame& frame) override {
      method OnDiscardedFrame (line 651) | virtual void OnDiscardedFrame() override {
      method addSink (line 663) | void addSink(std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFram...
      method getSinks (line 674) | std::vector<std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFrame...
    type NoiseSuppressionConfiguration (line 688) | struct NoiseSuppressionConfiguration {
      method NoiseSuppressionConfiguration (line 689) | NoiseSuppressionConfiguration(bool isEnabled_) :
    class AudioCapturePostProcessor (line 698) | class AudioCapturePostProcessor : public webrtc::CustomProcessing {
      method AudioCapturePostProcessor (line 700) | AudioCapturePostProcessor(std::function<void(GroupLevelValue const &...
      method Initialize (line 718) | virtual void Initialize(int sample_rate_hz, int num_channels) overri...
      method Process (line 721) | virtual void Process(webrtc::AudioBuffer *buffer) override {
      method ToString (line 832) | virtual std::string ToString() const override {
      method SetRuntimeSetting (line 836) | virtual void SetRuntimeSetting(webrtc::AudioProcessing::RuntimeSetti...
    class ExternalAudioRecorder (line 855) | class ExternalAudioRecorder : public FakeAudioDeviceModule::Recorder {
      method ExternalAudioRecorder (line 857) | ExternalAudioRecorder(std::vector<float> *externalAudioSamples, webr...
      method AudioFrame (line 866) | virtual AudioFrame Record() override {
      method WaitForUs (line 894) | virtual int32_t WaitForUs() override {
    class AudioCaptureAnalyzer (line 908) | class AudioCaptureAnalyzer : public webrtc::CustomAudioAnalyzer {
      method Initialize (line 910) | void Initialize(int sample_rate_hz, int num_channels) override {
      method Analyze (line 914) | void Analyze(const webrtc::AudioBuffer* buffer) override {
      method ToString (line 955) | std::string ToString() const override {
      method AudioCaptureAnalyzer (line 967) | AudioCaptureAnalyzer(std::function<void(GroupLevelValue const &)> up...
    class IncomingAudioChannel (line 975) | class IncomingAudioChannel : public sigslot::has_slots<> {
      method IncomingAudioChannel (line 977) | IncomingAudioChannel(
      method setVolume (line 1063) | void setVolume(double value) {
      method updateActivity (line 1069) | void updateActivity() {
      method getActivity (line 1073) | int64_t getActivity() {
      method OnSentPacket_w (line 1078) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class IncomingVideoChannel (line 1094) | class IncomingVideoChannel : public sigslot::has_slots<> {
      method IncomingVideoChannel (line 1096) | IncomingVideoChannel(
      method addSink (line 1202) | void addSink(std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFram...
      method getSinks (line 1206) | std::vector<std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFrame...
      method requestedMinQuality (line 1214) | VideoChannelDescription::Quality requestedMinQuality() {
      method requestedMaxQuality (line 1218) | VideoChannelDescription::Quality requestedMaxQuality() {
      method setRequstedMinQuality (line 1222) | void setRequstedMinQuality(VideoChannelDescription::Quality quality) {
      method setRequstedMaxQuality (line 1226) | void setRequstedMaxQuality(VideoChannelDescription::Quality quality) {
      method setStats (line 1230) | void setStats(absl::optional<GroupInstanceStats::IncomingVideoStats>...
      method getStats (line 1234) | absl::optional<GroupInstanceStats::IncomingVideoStats> getStats() {
      method OnSentPacket_w (line 1239) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class MissingSsrcPacketBuffer (line 1262) | class MissingSsrcPacketBuffer {
      method MissingSsrcPacketBuffer (line 1264) | MissingSsrcPacketBuffer(int limit) :
      method add (line 1271) | void add(uint32_t ssrc, rtc::CopyOnWriteBuffer const &packet) {
      method get (line 1278) | std::vector<rtc::CopyOnWriteBuffer> get(uint32_t ssrc) {
    class RequestedBroadcastPart (line 1297) | class RequestedBroadcastPart {
      method RequestedBroadcastPart (line 1302) | explicit RequestedBroadcastPart(int64_t timestamp_, std::shared_ptr<...
    type DecodedBroadcastPart (line 1307) | struct DecodedBroadcastPart {
      type DecodedBroadcastPartChannel (line 1308) | struct DecodedBroadcastPartChannel {
      method DecodedBroadcastPart (line 1313) | DecodedBroadcastPart(int numSamples_, std::vector<DecodedBroadcastPa...
    function videoCaptureToGetVideoSource (line 1321) | std::function<webrtc::VideoTrackSourceInterface*()> videoCaptureToGetV...
    class GroupInstanceCustomInternal (line 1330) | class GroupInstanceCustomInternal : public sigslot::has_slots<>, publi...
      method GroupInstanceCustomInternal (line 1332) | GroupInstanceCustomInternal(GroupInstanceDescriptor &&descriptor, st...
      method start (line 1398) | void start() {
      method destroyOutgoingVideoChannel (line 1577) | void destroyOutgoingVideoChannel() {
      method createOutgoingVideoChannel (line 1590) | void createOutgoingVideoChannel() {
      method adjustVideoSendParams (line 1676) | void adjustVideoSendParams() {
      method updateVideoSend (line 1760) | void updateVideoSend() {
      method destroyOutgoingAudioChannel (line 1777) | void destroyOutgoingAudioChannel() {
      method createOutgoingAudioChannel (line 1791) | void createOutgoingAudioChannel() {
      method stop (line 1870) | void stop() {
      method updateSsrcAudioLevel (line 1873) | void updateSsrcAudioLevel(uint32_t ssrc, uint8_t audioLevel, bool is...
      method beginLevelsTimer (line 1898) | void beginLevelsTimer(int timeoutMs) {
      method beginAudioChannelCleanupTimer (line 1957) | void beginAudioChannelCleanupTimer(int delayMs) {
      method beginRemoteConstraintsUpdateTimer (line 1986) | void beginRemoteConstraintsUpdateTimer(int delayMs) {
      method beginNetworkStatusTimer (line 2000) | void beginNetworkStatusTimer(int delayMs) {
      method updateBroadcastNetworkStatus (line 2016) | void updateBroadcastNetworkStatus() {
      method getNextBroadcastPart (line 2044) | absl::optional<DecodedBroadcastPart> getNextBroadcastPart() {
      method commitBroadcastPackets (line 2075) | void commitBroadcastPackets() {
      method requestNextBroadcastPart (line 2154) | void requestNextBroadcastPart() {
      method requestNextBroadcastPartWithDelay (line 2177) | void requestNextBroadcastPartWithDelay(int timeoutMs) {
      method onReceivedNextBroadcastPart (line 2189) | void onReceivedNextBroadcastPart(BroadcastPart &&part) {
      method beginBroadcastPartsDecodeTimer (line 2235) | void beginBroadcastPartsDecodeTimer(int timeoutMs) {
      method configureVideoParams (line 2253) | void configureVideoParams() {
      method OnSentPacket_w (line 2377) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
      method OnRtcpPacketReceived_n (line 2381) | void OnRtcpPacketReceived_n(rtc::CopyOnWriteBuffer *buffer, int64_t ...
      method adjustBitratePreferences (line 2390) | void adjustBitratePreferences(bool resetStartBitrate) {
      method setIsRtcConnected (line 2421) | void setIsRtcConnected(bool isConnected) {
      method updateIsConnected (line 2442) | void updateIsConnected() {
      method updateIsDataChannelOpen (line 2481) | void updateIsDataChannelOpen(bool isDataChannelOpen) {
      method receivePacket (line 2492) | void receivePacket(rtc::CopyOnWriteBuffer const &packet, bool isUnre...
      method receiveRtcpPacket (line 2550) | void receiveRtcpPacket(rtc::CopyOnWriteBuffer const &packet, int64_t...
      method receiveDataChannelMessage (line 2556) | void receiveDataChannelMessage(std::string const &message) {
      method maybeRequestUnknownSsrc (line 2661) | void maybeRequestUnknownSsrc(uint32_t ssrc) {
      method processMediaChannelDescriptionsResponse (line 2694) | void processMediaChannelDescriptionsResponse(int requestId, std::vec...
      method maybeDeliverBufferedPackets (line 2719) | void maybeDeliverBufferedPackets(uint32_t ssrc) {
      method maybeUpdateRemoteVideoConstraints (line 2734) | void maybeUpdateRemoteVideoConstraints() {
      method setConnectionMode (line 2802) | void setConnectionMode(GroupConnectionMode connectionMode, bool keep...
      method onConnectionModeUpdated (line 2810) | void onConnectionModeUpdated(GroupConnectionMode previousMode, bool ...
      method generateSsrcs (line 2872) | void generateSsrcs() {
      method emitJoinPayload (line 2916) | void emitJoinPayload(std::function<void(GroupJoinPayload const &)> c...
      method setVideoSource (line 2952) | void setVideoSource(std::function<webrtc::VideoTrackSourceInterface*...
      method setVideoCapture (line 2965) | void setVideoCapture(std::shared_ptr<VideoCaptureInterface> videoCap...
      method setAudioOutputDevice (line 2970) | void setAudioOutputDevice(const std::string &id) {
      method setAudioInputDevice (line 2978) | void setAudioInputDevice(const std::string &id) {
      method addExternalAudioSamples (line 2986) | void addExternalAudioSamples(std::vector<uint8_t> &&samples) {
      method setJoinResponsePayload (line 3003) | void setJoinResponsePayload(std::string const &payload) {
      method setServerBandwidthProbingChannelSsrc (line 3064) | void setServerBandwidthProbingChannelSsrc(uint32_t probingSsrc) {
      method removeSsrcs (line 3099) | void removeSsrcs(std::vector<uint32_t> ssrcs) {
      method removeIncomingVideoSource (line 3102) | void removeIncomingVideoSource(uint32_t ssrc) {
      method setIsMuted (line 3105) | void setIsMuted(bool isMuted) {
      method onUpdatedIsMuted (line 3118) | void onUpdatedIsMuted() {
      method setIsNoiseSuppressionEnabled (line 3127) | void setIsNoiseSuppressionEnabled(bool isNoiseSuppressionEnabled) {
      method addIncomingVideoOutput (line 3131) | void addIncomingVideoOutput(std::string const &endpointId, std::weak...
      method addIncomingAudioChannel (line 3147) | void addIncomingAudioChannel(ChannelId ssrc, bool isRawPcm = false) {
      method removeIncomingAudioChannel (line 3248) | void removeIncomingAudioChannel(ChannelId const &channelId) {
      method addIncomingVideoChannel (line 3268) | void addIncomingVideoChannel(uint32_t audioSsrc, GroupParticipantVid...
      method setVolume (line 3327) | void setVolume(uint32_t ssrc, double volume) {
      method setRequestedVideoChannels (line 3346) | void setRequestedVideoChannels(std::vector<VideoChannelDescription> ...
      method getStats (line 3408) | void getStats(std::function<void(GroupInstanceStats)> completion) {
      method performWithAudioDeviceModule (line 3421) | void performWithAudioDeviceModule(std::function<void(rtc::scoped_ref...
      method createAudioDeviceModule (line 3427) | rtc::scoped_refptr<WrappedAudioDeviceModule> createAudioDeviceModule...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceCustomImpl.h
  function namespace (line 14) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceImpl.h
  function namespace (line 15) | namespace webrtc {
  function namespace (line 21) | namespace rtc {
  function namespace (line 26) | namespace tgcalls {
  type class (line 73) | enum class
  type GroupNetworkState (line 79) | struct GroupNetworkState {
  function VideoContentType (line 84) | enum class VideoContentType {
  type GroupInstanceStats (line 132) | struct GroupInstanceStats {
  type GroupInstanceDescriptor (line 141) | struct GroupInstanceDescriptor {
  function VideoContentType (line 157) | VideoContentType videoContentType{VideoContentType::None};

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayload.h
  function namespace (line 8) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayloadInternal.cpp
  type tgcalls (line 6) | namespace tgcalls {
    function parseInt (line 10) | absl::optional<int32_t> parseInt(json11::Json::object const &object, s...
    function parseString (line 18) | absl::optional<std::string> parseString(json11::Json::object const &ob...
    function splitString (line 27) | void splitString(const std::string &s, char delim, Out result) {
    function splitString (line 35) | std::vector<std::string> splitString(const std::string &s, char delim) {
    function parseTransportDescription (line 41) | absl::optional<GroupJoinTransportDescription> parseTransportDescriptio...
    function parsePayloadType (line 177) | absl::optional<GroupJoinPayloadVideoPayloadType> parsePayloadType(json...
    function parseVideoInformation (line 248) | absl::optional<GroupJoinVideoInformation> parseVideoInformation(json11...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayloadInternal.h
  function namespace (line 12) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupNetworkManager.cpp
  type tgcalls (line 23) | namespace tgcalls {
    function updateHeaderWithVoiceActivity (line 34) | static void updateHeaderWithVoiceActivity(rtc::CopyOnWriteBuffer *pack...
    function readHeaderVoiceActivity (line 83) | static void readHeaderVoiceActivity(const uint8_t* ptrRTPDataExtension...
    function maybeUpdateRtpVoiceActivity (line 128) | static void maybeUpdateRtpVoiceActivity(rtc::CopyOnWriteBuffer *packet...
    function maybeReadRtpVoiceActivity (line 203) | static void maybeReadRtpVoiceActivity(rtc::CopyOnWriteBuffer *packet, ...
    class WrappedDtlsSrtpTransport (line 279) | class WrappedDtlsSrtpTransport : public webrtc::DtlsSrtpTransport {
      method WrappedDtlsSrtpTransport (line 284) | WrappedDtlsSrtpTransport(bool rtcp_mux_enabled) :
      method SendRtpPacket (line 292) | bool SendRtpPacket(rtc::CopyOnWriteBuffer *packet, const rtc::Packet...
    function PeerIceParameters (line 461) | PeerIceParameters GroupNetworkManager::getLocalIceParameters() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupNetworkManager.h
  function namespace (line 22) | namespace rtc {
  function namespace (line 29) | namespace cricket {
  function namespace (line 36) | namespace webrtc {
  function namespace (line 43) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/StreamingPart.cpp
  type tgcalls (line 17) | namespace tgcalls {
    function readInt32 (line 21) | static absl::optional<uint32_t> readInt32(std::string const &data, int...
    type ChannelUpdate (line 33) | struct ChannelUpdate {
    function parseChannelUpdates (line 39) | static std::vector<ChannelUpdate> parseChannelUpdates(std::string cons...
    class AVIOContextImpl (line 79) | class AVIOContextImpl {
      method AVIOContextImpl (line 81) | AVIOContextImpl(std::vector<uint8_t> &&fileData) :
      method read (line 91) | static int read(void *opaque, unsigned char *buffer, int bufferSize) {
      method seek (line 109) | static int64_t seek(void *opaque, int64_t offset, int whence) {
      method AVIOContext (line 124) | AVIOContext *getContext() {
    type ReadPcmResult (line 138) | struct ReadPcmResult {
    class StreamingPartInternal (line 143) | class StreamingPartInternal {
      method StreamingPartInternal (line 145) | StreamingPartInternal(std::vector<uint8_t> &&fileData) :
      method ReadPcmResult (line 250) | ReadPcmResult readPcm(std::vector<int16_t> &outPcm) {
      method getDurationInMilliseconds (line 279) | int getDurationInMilliseconds() {
      method getChannelCount (line 283) | int getChannelCount() {
      method sampleFloatToInt16 (line 292) | static int16_t sampleFloatToInt16(float sample) {
      method fillPcmBuffer (line 296) | void fillPcmBuffer() {
    class StreamingPartState (line 409) | class StreamingPartState {
      type ChannelMapping (line 410) | struct ChannelMapping {
        method ChannelMapping (line 414) | ChannelMapping(uint32_t ssrc_, int channelIndex_) :
      method StreamingPartState (line 420) | StreamingPartState(std::vector<uint8_t> &&data) :
      method getRemainingMilliseconds (line 438) | int getRemainingMilliseconds() const {
      method get10msPerChannel (line 442) | std::vector<StreamingPart::StreamingPartChannel> get10msPerChannel() {
      method getCurrentMappedChannelIndex (line 491) | absl::optional<int> getCurrentMappedChannelIndex(uint32_t ssrc) {
      method updateCurrentMapping (line 500) | void updateCurrentMapping(uint32_t ssrc, int channelIndex) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/group/StreamingPart.h
  function namespace (line 8) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/legacy/InstanceImplLegacy.cpp
  function tgvoip_openssl_aes_ige_encrypt (line 14) | void tgvoip_openssl_aes_ige_encrypt(uint8_t* in, uint8_t* out, size_t le...
  function tgvoip_openssl_aes_ige_decrypt (line 20) | void tgvoip_openssl_aes_ige_decrypt(uint8_t* in, uint8_t* out, size_t le...
  function tgvoip_openssl_rand_bytes (line 26) | void tgvoip_openssl_rand_bytes(uint8_t* buffer, size_t len){
  function tgvoip_openssl_sha1 (line 30) | void tgvoip_openssl_sha1(uint8_t* msg, size_t len, uint8_t* output){
  function tgvoip_openssl_sha256 (line 34) | void tgvoip_openssl_sha256(uint8_t* msg, size_t len, uint8_t* output){
  function tgvoip_openssl_aes_ctr_encrypt (line 38) | void tgvoip_openssl_aes_ctr_encrypt(uint8_t* inout, size_t length, uint8...
  function tgvoip_openssl_aes_cbc_encrypt (line 48) | void tgvoip_openssl_aes_cbc_encrypt(uint8_t* in, uint8_t* out, size_t le...
  function tgvoip_openssl_aes_cbc_decrypt (line 54) | void tgvoip_openssl_aes_cbc_decrypt(uint8_t* in, uint8_t* out, size_t le...
  type tgcalls (line 71) | namespace tgcalls {
    function TrafficStats (line 272) | TrafficStats InstanceImplLegacy::getTrafficStats() {
    function PersistentState (line 283) | PersistentState InstanceImplLegacy::getPersistentState() {
    function SetLegacyGlobalServerConfig (line 348) | void SetLegacyGlobalServerConfig(const std::string &serverConfig) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/legacy/InstanceImplLegacy.h
  function namespace (line 9) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/PlatformInterface.h
  function namespace (line 13) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidContext.cpp
  type tgcalls (line 5) | namespace tgcalls {
    function jobject (line 24) | jobject AndroidContext::getJavaCapturer() {
    function jclass (line 28) | jclass AndroidContext::getJavaCapturerClass() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidContext.h
  function namespace (line 8) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidInterface.cpp
  type tgcalls (line 21) | namespace tgcalls {
    function CreatePlatformInterface (line 91) | std::unique_ptr<PlatformInterface> CreatePlatformInterface() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidInterface.h
  function namespace (line 8) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCameraCapturer.cpp
  type tgcalls (line 11) | namespace tgcalls {
  function JNIEXPORT (line 58) | JNIEXPORT jobject Java_org_telegram_messenger_voip_VideoCameraCapturer_n...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCameraCapturer.h
  function namespace (line 16) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCapturerInterfaceImpl.cpp
  type tgcalls (line 5) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCapturerInterfaceImpl.h
  function namespace (line 8) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/AudioDeviceModuleIOS.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/AudioDeviceModuleMacos.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinInterface.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinVideoSource.h
  function namespace (line 23) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/VideoCapturerInterfaceImpl.h
  function interface (line 9) | interface VideoCapturerInterfaceImplHolder : NSObject

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/macOS/TGRTCMTLRenderer.h
  type MTLFrameSize (line 19) | struct MTLFrameSize {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/objc_video_decoder_factory.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/objc_video_encoder_factory.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/fake/FakeInterface.cpp
  type tgcalls (line 7) | namespace tgcalls {
    function CreatePlatformInterface (line 39) | std::unique_ptr<PlatformInterface> CreatePlatformInterface() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/fake/FakeInterface.h
  function namespace (line 6) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/DesktopInterface.cpp
  type tgcalls (line 10) | namespace tgcalls {
    function CreatePlatformInterface (line 41) | std::unique_ptr<PlatformInterface> CreatePlatformInterface() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/DesktopInterface.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCameraCapturer.cpp
  type tgcalls (line 14) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCameraCapturer.h
  function namespace (line 16) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCapturerInterfaceImpl.cpp
  type tgcalls (line 12) | namespace tgcalls {
    function GetSink (line 15) | std::shared_ptr<rtc::VideoSinkInterface<webrtc::VideoFrame>> GetSink(

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCapturerInterfaceImpl.h
  function namespace (line 13) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCapturerTrackSource.cpp
  type tgcalls (line 3) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/tdesktop/VideoCapturerTrackSource.h
  function namespace (line 10) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/uwp/UwpContext.h
  function namespace (line 10) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/uwp/UwpScreenCapturer.cpp
  type tgcalls (line 16) | namespace tgcalls {
    function HRESULT (line 257) | HRESULT UwpScreenCapturer::CreateMappedTexture(winrt::com_ptr<ID3D11Te...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/platform/uwp/UwpScreenCapturer.h
  function namespace (line 28) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/reference/InstanceImplReference.cpp
  type tgcalls (line 27) | namespace tgcalls {
    function VideoCaptureInterfaceObject (line 30) | VideoCaptureInterfaceObject *GetVideoCaptureAssumingSameThread(VideoCa...
    class PeerConnectionObserverImpl (line 36) | class PeerConnectionObserverImpl : public webrtc::PeerConnectionObserv...
      method PeerConnectionObserverImpl (line 43) | PeerConnectionObserverImpl(
      method OnSignalingChange (line 53) | virtual void OnSignalingChange(webrtc::PeerConnectionInterface::Sign...
      method OnAddStream (line 61) | virtual void OnAddStream(rtc::scoped_refptr<webrtc::MediaStreamInter...
      method OnRemoveStream (line 64) | virtual void OnRemoveStream(rtc::scoped_refptr<webrtc::MediaStreamIn...
      method OnDataChannel (line 67) | virtual void OnDataChannel(rtc::scoped_refptr<webrtc::DataChannelInt...
      method OnRenegotiationNeeded (line 70) | virtual void OnRenegotiationNeeded() {
      method OnIceConnectionChange (line 73) | virtual void OnIceConnectionChange(webrtc::PeerConnectionInterface::...
      method OnStandardizedIceConnectionChange (line 76) | virtual void OnStandardizedIceConnectionChange(webrtc::PeerConnectio...
      method OnConnectionChange (line 79) | virtual void OnConnectionChange(webrtc::PeerConnectionInterface::Pee...
      method OnIceGatheringChange (line 82) | virtual void OnIceGatheringChange(webrtc::PeerConnectionInterface::I...
      method OnIceCandidate (line 85) | virtual void OnIceCandidate(const webrtc::IceCandidateInterface* can...
      method OnIceCandidateError (line 91) | virtual void OnIceCandidateError(const std::string& host_candidate, ...
      method OnIceCandidateError (line 94) | virtual void OnIceCandidateError(const std::string& address,
      method OnIceCandidatesRemoved (line 101) | virtual void OnIceCandidatesRemoved(const std::vector<cricket::Candi...
      method OnIceConnectionReceivingChange (line 104) | virtual void OnIceConnectionReceivingChange(bool receiving) {
      method OnIceSelectedCandidatePairChanged (line 107) | virtual void OnIceSelectedCandidatePairChanged(const cricket::Candid...
      method OnAddTrack (line 110) | virtual void OnAddTrack(rtc::scoped_refptr<webrtc::RtpReceiverInterf...
      method OnTrack (line 113) | virtual void OnTrack(rtc::scoped_refptr<webrtc::RtpTransceiverInterf...
      method OnRemoveTrack (line 117) | virtual void OnRemoveTrack(rtc::scoped_refptr<webrtc::RtpReceiverInt...
      method OnInterestingUsage (line 120) | virtual void OnInterestingUsage(int usage_pattern) {
    class RTCStatsCollectorCallbackImpl (line 124) | class RTCStatsCollectorCallbackImpl : public webrtc::RTCStatsCollector...
      method RTCStatsCollectorCallbackImpl (line 126) | RTCStatsCollectorCallbackImpl(std::function<void(const rtc::scoped_r...
      method OnStatsDelivered (line 130) | virtual void OnStatsDelivered(const rtc::scoped_refptr<const webrtc:...
    class CreateSessionDescriptionObserverImpl (line 138) | class CreateSessionDescriptionObserverImpl : public webrtc::CreateSess...
      method CreateSessionDescriptionObserverImpl (line 143) | CreateSessionDescriptionObserverImpl(std::function<void(std::string,...
      method OnSuccess (line 147) | virtual void OnSuccess(webrtc::SessionDescriptionInterface* desc) ov...
      method OnFailure (line 156) | virtual void OnFailure(webrtc::RTCError error) override {
    class SetSessionDescriptionObserverImpl (line 160) | class SetSessionDescriptionObserverImpl : public webrtc::SetSessionDes...
      method SetSessionDescriptionObserverImpl (line 165) | SetSessionDescriptionObserverImpl(std::function<void()> completion) :
      method OnSuccess (line 169) | virtual void OnSuccess() override {
      method OnFailure (line 173) | virtual void OnFailure(webrtc::RTCError error) override {
    type StatsData (line 177) | struct StatsData {
    type IceCandidateData (line 182) | struct IceCandidateData {
      method IceCandidateData (line 187) | IceCandidateData(std::string _sdpMid, int _mid, std::string _sdp) :
    class InstanceImplReferenceInternal (line 196) | class InstanceImplReferenceInternal final : public std::enable_shared_...
      method InstanceImplReferenceInternal (line 198) | InstanceImplReferenceInternal(
      method start (line 236) | void start() {
      method setMuteMicrophone (line 382) | void setMuteMicrophone(bool muteMicrophone) {
      method setIncomingVideoOutput (line 387) | void setIncomingVideoOutput(std::shared_ptr<rtc::VideoSinkInterface<...
      method setVideoCapture (line 397) | void setVideoCapture(std::shared_ptr<VideoCaptureInterface> videoCap...
      method sendVideoDeviceUpdated (line 409) | void sendVideoDeviceUpdated() {
      method setRequestedVideoAspect (line 412) | void setRequestedVideoAspect(float aspect) {
      method receiveSignalingData (line 415) | void receiveSignalingData(const std::vector<uint8_t> &data) {
      method processSignalingData (line 437) | void processSignalingData(const rtc::CopyOnWriteBuffer &decryptedPac...
      method beginStatsTimer (line 552) | void beginStatsTimer(int timeoutMs) {
      method collectStats (line 565) | void collectStats() {
      method reportStats (line 581) | void reportStats(const rtc::scoped_refptr<const webrtc::RTCStatsRepo...
      method sendPendingServiceMessages (line 617) | void sendPendingServiceMessages(int cause) {
      method emitSignaling (line 623) | void emitSignaling(const rtc::ByteBufferWriter &buffer) {
      method emitIceCandidate (line 640) | void emitIceCandidate(std::string sdp, int mid, std::string sdpMid) {
      method emitOffer (line 654) | void emitOffer() {
      method emitOfferData (line 687) | void emitOfferData(std::string sdp, std::string type) {
      method emitAnswerData (line 698) | void emitAnswerData(std::string sdp, std::string type) {
      method emitAnswer (line 709) | void emitAnswer() {
      method changeVideoState (line 743) | void changeVideoState(VideoState state) {
      method changeAudioState (line 750) | void changeAudioState(AudioState state) {
      method emitMediaState (line 757) | void emitMediaState() {
      method emitRequestVideo (line 765) | void emitRequestVideo() {
      method emitVideoParameters (line 772) | void emitVideoParameters() {
      method processRemoteIceCandidatesIfReady (line 782) | void processRemoteIceCandidatesIfReady() {
      method updateIsConnected (line 799) | void updateIsConnected(bool isConnected) {
      method onTrack (line 811) | void onTrack(rtc::scoped_refptr<webrtc::RtpTransceiverInterface> tra...
      method beginSendingVideo (line 822) | void beginSendingVideo() {
    function TrafficStats (line 1007) | TrafficStats InstanceImplReference::getTrafficStats() {
    function PersistentState (line 1012) | PersistentState InstanceImplReference::getPersistentState() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/reference/InstanceImplReference.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/third-party/json11.cpp
  type json11 (line 29) | namespace json11 {
    type NullStruct (line 44) | struct NullStruct {
    function dump (line 53) | static void dump(NullStruct, string &out) {
    function dump (line 57) | static void dump(double value, string &out) {
    function dump (line 67) | static void dump(int value, string &out) {
    function dump (line 73) | static void dump(bool value, string &out) {
    function dump (line 77) | static void dump(const string &value, string &out) {
    function dump (line 114) | static void dump(const Json::array &values, string &out) {
    function dump (line 126) | static void dump(const Json::object &values, string &out) {
    class Value (line 149) | class Value : public JsonValue {
      method Value (line 153) | explicit Value(const T &value) : m_value(value) {}
      method Value (line 154) | explicit Value(T &&value)      : m_value(move(value)) {}
      method type (line 157) | Json::Type type() const override {
      method equals (line 162) | bool equals(const JsonValue * other) const override {
      method less (line 165) | bool less(const JsonValue * other) const override {
      method dump (line 170) | void dump(string &out) const override { json11::dump(m_value, out); }
    class JsonDouble (line 173) | class JsonDouble final : public Value<Json::NUMBER, double> {
      method number_value (line 174) | double number_value() const override { return m_value; }
      method int_value (line 175) | int int_value() const override { return static_cast<int>(m_value); }
      method equals (line 176) | bool equals(const JsonValue * other) const override { return m_value...
      method less (line 177) | bool less(const JsonValue * other)   const override { return m_value...
      method JsonDouble (line 179) | explicit JsonDouble(double value) : Value(value) {}
    class JsonInt (line 182) | class JsonInt final : public Value<Json::NUMBER, int> {
      method number_value (line 183) | double number_value() const override { return m_value; }
      method int_value (line 184) | int int_value() const override { return m_value; }
      method equals (line 185) | bool equals(const JsonValue * other) const override { return m_value...
      method less (line 186) | bool less(const JsonValue * other)   const override { return m_value...
      method JsonInt (line 188) | explicit JsonInt(int value) : Value(value) {}
    class JsonBoolean (line 191) | class JsonBoolean final : public Value<Json::BOOL, bool> {
      method bool_value (line 192) | bool bool_value() const override { return m_value; }
      method JsonBoolean (line 194) | explicit JsonBoolean(bool value) : Value(value) {}
    class JsonString (line 197) | class JsonString final : public Value<Json::STRING, string> {
      method string (line 198) | const string &string_value() const override { return m_value; }
      method JsonString (line 200) | explicit JsonString(const string &value) : Value(value) {}
      method JsonString (line 201) | explicit JsonString(string &&value)      : Value(move(value)) {}
    class JsonArray (line 204) | class JsonArray final : public Value<Json::ARRAY, Json::array> {
      method JsonArray (line 208) | explicit JsonArray(const Json::array &value) : Value(value) {}
      method JsonArray (line 209) | explicit JsonArray(Json::array &&value)      : Value(move(value)) {}
    class JsonObject (line 212) | class JsonObject final : public Value<Json::OBJECT, Json::object> {
      method JsonObject (line 216) | explicit JsonObject(const Json::object &value) : Value(value) {}
      method JsonObject (line 217) | explicit JsonObject(Json::object &&value)      : Value(move(value)) {}
    class JsonNull (line 220) | class JsonNull final : public Value<Json::NUL, NullStruct> {
      method JsonNull (line 222) | JsonNull() : Value({}) {}
    type Statics (line 228) | struct Statics {
      method Statics (line 235) | Statics() {}
    function Statics (line 238) | static const Statics & statics() {
      method Statics (line 235) | Statics() {}
    function Json (line 243) | static const Json & static_null() {
    function string (line 274) | const string & Json::string_value()               const { return m_ptr...
    function Json (line 277) | const Json & Json::operator[] (size_t i)          const { return (*m_p...
    function Json (line 278) | const Json & Json::operator[] (const string &key) const { return (*m_p...
    function string (line 283) | const string &            JsonValue::string_value()              const...
    function Json (line 286) | const Json &              JsonValue::operator[] (size_t)         const...
    function Json (line 287) | const Json &              JsonValue::operator[] (const string &) const...
    function Json (line 289) | const Json & JsonObject::operator[] (const string &key) const {
    function Json (line 293) | const Json & JsonArray::operator[] (size_t i) const {
    function string (line 328) | static inline string esc(char c) {
    function in_range (line 338) | static inline bool in_range(long x, long lower, long upper) {
    type JsonParser (line 347) | struct JsonParser final {
      method Json (line 361) | Json fail(string &&msg) {
      method T (line 366) | T fail(string &&msg, const T err_ret) {
      method consume_whitespace (line 377) | void consume_whitespace() {
      method consume_comment (line 386) | bool consume_comment() {
      method consume_garbage (line 424) | void consume_garbage() {
      method get_next_token (line 442) | char get_next_token() {
      method encode_utf8 (line 455) | void encode_utf8(long pt, string & out) {
      method string (line 480) | string parse_string() {
      method Json (line 573) | Json parse_number() {
      method Json (line 629) | Json expect(const string &expected, Json res) {
      method Json (line 644) | Json parse_json(int depth) {
    function Json (line 732) | Json Json::parse(const string &in, string &err, JsonParse strategy) {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/third-party/json11.hpp
  type json11 (line 71) | namespace json11 {
    type JsonParse (line 73) | enum JsonParse {
    class JsonValue (line 77) | class JsonValue
    class Json (line 79) | class Json final {
      type Type (line 82) | enum Type {
      method Json (line 106) | Json(const T & t) : Json(t.to_json()) {}
      method Json (line 113) | Json(const M & m) : Json(object(m.begin(), m.end())) {}
      method Json (line 119) | Json(const V & v) : Json(array(v.begin(), v.end())) {}
      method Json (line 123) | Json(void *) = delete;
      method is_null (line 128) | bool is_null()   const { return type() == NUL; }
      method is_number (line 129) | bool is_number() const { return type() == NUMBER; }
      method is_bool (line 130) | bool is_bool()   const { return type() == BOOL; }
      method is_string (line 131) | bool is_string() const { return type() == STRING; }
      method is_array (line 132) | bool is_array()  const { return type() == ARRAY; }
      method is_object (line 133) | bool is_object() const { return type() == OBJECT; }
      method dump (line 157) | std::string dump() const {
      method Json (line 167) | static Json parse(const char * in,
      method parse_multi (line 184) | static inline std::vector<Json> parse_multi(
    class JsonValue (line 212) | class JsonValue {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/InstanceV2Impl.cpp
  type tgcalls (line 53) | namespace tgcalls {
    function stringToInt (line 56) | static int stringToInt(std::string const &string) {
    function intToString (line 63) | static std::string intToString(int value) {
    function VideoCaptureInterfaceObject (line 69) | static VideoCaptureInterfaceObject *GetVideoCaptureAssumingSameThread(...
    type OutgoingVideoFormat (line 75) | struct OutgoingVideoFormat {
    function addDefaultFeedbackParams (line 80) | static void addDefaultFeedbackParams(cricket::VideoCodec *codec) {
    function IsRtxCodec (line 97) | static bool IsRtxCodec(const C& codec) {
    function ReferencedCodecsMatch (line 102) | static bool ReferencedCodecsMatch(const std::vector<C>& codecs1,
    function FindMatchingCodec (line 115) | static bool FindMatchingCodec(const std::vector<C>& codecs1,
    function NegotiatePacketization (line 151) | static void NegotiatePacketization(const C& local_codec,
    function NegotiatePacketization (line 156) | void NegotiatePacketization(const cricket::VideoCodec& local_codec,
    function NegotiateCodecs (line 164) | static void NegotiateCodecs(const std::vector<C>& local_codecs,
    function C (line 212) | static const C* GetAssociatedCodec(const std::vector<C>& codec_list,
    function MergeCodecs (line 244) | static void MergeCodecs(const std::vector<C>& reference_codecs,
    function generateAvailableVideoFormats (line 287) | static std::vector<OutgoingVideoFormat> generateAvailableVideoFormats(...
    function getCodecsFromMediaContent (line 344) | static void getCodecsFromMediaContent(signaling::MediaContent const &c...
    function getPayloadTypesFromVideoCodecs (line 357) | static std::vector<signaling::PayloadType> getPayloadTypesFromVideoCod...
    function getCodecsFromMediaContent (line 385) | static void getCodecsFromMediaContent(signaling::MediaContent const &c...
    function getPayloadTypesFromAudioCodecs (line 398) | static std::vector<signaling::PayloadType> getPayloadTypesFromAudioCod...
    type NegotiatedMediaContent (line 427) | struct NegotiatedMediaContent {
    function FindByUri (line 434) | static bool FindByUri(const cricket::RtpHeaderExtensions& extensions,
    function negotiateMediaContent (line 451) | static NegotiatedMediaContent<C> negotiateMediaContent(signaling::Medi...
    class OutgoingAudioChannel (line 498) | class OutgoingAudioChannel : public sigslot::has_slots<> {
      method createOutgoingContentDescription (line 500) | static absl::optional<signaling::MediaContent> createOutgoingContent...
      method OutgoingAudioChannel (line 524) | OutgoingAudioChannel(
      method setIsMuted (line 618) | void setIsMuted(bool isMuted) {
      method OnSentPacket_w (line 628) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class IncomingV2AudioChannel (line 642) | class IncomingV2AudioChannel : public sigslot::has_slots<> {
      method IncomingV2AudioChannel (line 644) | IncomingV2AudioChannel(
      method setVolume (line 712) | void setVolume(double value) {
      method updateActivity (line 716) | void updateActivity() {
      method getActivity (line 720) | int64_t getActivity() {
      method OnSentPacket_w (line 725) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class OutgoingVideoChannel (line 740) | class OutgoingVideoChannel : public sigslot::has_slots<>, public std::...
      method createOutgoingContentDescription (line 742) | static absl::optional<signaling::MediaContent> createOutgoingContent...
      method OutgoingVideoChannel (line 813) | OutgoingVideoChannel(
      method setVideoCapture (line 891) | void setVideoCapture(std::shared_ptr<VideoCaptureInterface> videoCap...
      method videoCapture (line 966) | std::shared_ptr<VideoCaptureInterface> videoCapture() {
      method getRotation (line 970) | signaling::MediaStateMessage::VideoRotation getRotation() {
      method OnSentPacket_w (line 975) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class VideoSinkImpl (line 993) | class VideoSinkImpl : public rtc::VideoSinkInterface<webrtc::VideoFram...
      method VideoSinkImpl (line 995) | VideoSinkImpl() {
      method OnFrame (line 1001) | virtual void OnFrame(const webrtc::VideoFrame& frame) override {
      method OnDiscardedFrame (line 1013) | virtual void OnDiscardedFrame() override {
      method addSink (line 1024) | void addSink(std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFram...
    class IncomingV2VideoChannel (line 1039) | class IncomingV2VideoChannel : public sigslot::has_slots<> {
      method IncomingV2VideoChannel (line 1041) | IncomingV2VideoChannel(
      method addSink (line 1120) | void addSink(std::weak_ptr<rtc::VideoSinkInterface<webrtc::VideoFram...
      method OnSentPacket_w (line 1125) | void OnSentPacket_w(const rtc::SentPacket& sent_packet) {
    class InstanceV2ImplInternal (line 1142) | class InstanceV2ImplInternal : public std::enable_shared_from_this<Ins...
      method InstanceV2ImplInternal (line 1144) | InstanceV2ImplInternal(Descriptor &&descriptor, std::shared_ptr<Thre...
      method start (line 1169) | void start() {
      method sendSignalingMessage (line 1295) | void sendSignalingMessage(signaling::Message const &message) {
      method beginSignaling (line 1311) | void beginSignaling() {
      method createNegotiatedChannels (line 1322) | void createNegotiatedChannels() {
      method sendInitialSetup (line 1365) | void sendInitialSetup() {
      method receiveSignalingData (line 1414) | void receiveSignalingData(const std::vector<uint8_t> &data) {
      method processSignalingData (line 1433) | void processSignalingData(const std::vector<uint8_t> &data) {
      method commitPendingIceCandidates (line 1624) | void commitPendingIceCandidates() {
      method onNetworkStateUpdated (line 1634) | void onNetworkStateUpdated(NativeNetworkingImpl::State const &state) {
      method onDataChannelStateUpdated (line 1644) | void onDataChannelStateUpdated(bool isDataChannelOpen) {
      method sendDataChannelMessage (line 1654) | void sendDataChannelMessage(signaling::Message const &message) {
      method onDataChannelMessage (line 1667) | void onDataChannelMessage(std::string const &message) {
      method sendMediaState (line 1673) | void sendMediaState() {
      method sendCandidate (line 1696) | void sendCandidate(const cricket::Candidate &candidate) {
      method setVideoCapture (line 1719) | void setVideoCapture(std::shared_ptr<VideoCaptureInterface> videoCap...
      method setRequestedVideoAspect (line 1731) | void setRequestedVideoAspect(float aspect) {
      method setNetworkType (line 1735) | void setNetworkType(NetworkType networkType) {
      method setMuteMicrophone (line 1739) | void setMuteMicrophone(bool muteMicrophone) {
      method setIncomingVideoOutput (line 1751) | void setIncomingVideoOutput(std::shared_ptr<rtc::VideoSinkInterface<...
      method setAudioInputDevice (line 1757) | void setAudioInputDevice(std::string id) {
      method setAudioOutputDevice (line 1761) | void setAudioOutputDevice(std::string id) {
      method setIsLowBatteryLevel (line 1765) | void setIsLowBatteryLevel(bool isLowBatteryLevel) {
      method stop (line 1772) | void stop(std::function<void(FinalState)> completion) {
      method adjustBitratePreferences (line 1776) | void adjustBitratePreferences(bool resetStartBitrate) {
      method createAudioDeviceModule (line 1796) | rtc::scoped_refptr<webrtc::AudioDeviceModule> createAudioDeviceModul...
    function TrafficStats (line 1982) | TrafficStats InstanceV2Impl::getTrafficStats() {
    function PersistentState (line 1986) | PersistentState InstanceV2Impl::getPersistentState() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/InstanceV2Impl.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/NativeNetworkingImpl.cpp
  type tgcalls (line 20) | namespace tgcalls {
    function PeerIceParameters (line 228) | PeerIceParameters NativeNetworkingImpl::getLocalIceParameters() {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/NativeNetworkingImpl.h
  function namespace (line 23) | namespace rtc {
  function namespace (line 30) | namespace cricket {
  function namespace (line 37) | namespace webrtc {
  function namespace (line 44) | namespace tgcalls {
  type Configuration (line 57) | struct Configuration {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/Signaling.cpp
  type tgcalls (line 9) | namespace tgcalls {
    type signaling (line 10) | namespace signaling {
      function uint32ToString (line 12) | static std::string uint32ToString(uint32_t value) {
      function stringToUInt32 (line 18) | static uint32_t stringToUInt32(std::string const &string) {
      function SsrcGroup_serialize (line 25) | json11::Json::object SsrcGroup_serialize(SsrcGroup const &ssrcGroup) {
      function SsrcGroup_parse (line 38) | absl::optional<SsrcGroup> SsrcGroup_parse(json11::Json::object const...
      function FeedbackType_serialize (line 69) | json11::Json::object FeedbackType_serialize(FeedbackType const &feed...
      function FeedbackType_parse (line 78) | absl::optional<FeedbackType> FeedbackType_parse(json11::Json::object...
      function RtpExtension_serialize (line 96) | json11::Json::object RtpExtension_serialize(webrtc::RtpExtension con...
      function RtpExtension_parse (line 105) | absl::optional<webrtc::RtpExtension> RtpExtension_parse(json11::Json...
      function PayloadType_serialize (line 119) | json11::Json::object PayloadType_serialize(PayloadType const &payloa...
      function PayloadType_parse (line 142) | absl::optional<PayloadType> PayloadType_parse(json11::Json::object c...
      function MediaContent_serialize (line 204) | json11::Json::object MediaContent_serialize(MediaContent const &medi...
      function MediaContent_parse (line 234) | absl::optional<MediaContent> MediaContent_parse(json11::Json::object...
      function InitialSetupMessage_serialize (line 303) | std::vector<uint8_t> InitialSetupMessage_serialize(const InitialSetu...
      function InitialSetupMessage_parse (line 333) | absl::optional<InitialSetupMessage> InitialSetupMessage_parse(json11...
      function ConnectionAddress_serialize (line 404) | json11::Json::object ConnectionAddress_serialize(ConnectionAddress c...
      function ConnectionAddress_parse (line 413) | absl::optional<ConnectionAddress> ConnectionAddress_parse(json11::Js...
      function CandidatesMessage_serialize (line 430) | std::vector<uint8_t> CandidatesMessage_serialize(const CandidatesMes...
      function CandidatesMessage_parse (line 450) | absl::optional<CandidatesMessage> CandidatesMessage_parse(json11::Js...
      function MediaStateMessage_serialize (line 479) | std::vector<uint8_t> MediaStateMessage_serialize(const MediaStateMes...
      function MediaStateMessage_parse (line 537) | absl::optional<MediaStateMessage> MediaStateMessage_parse(json11::Js...

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/Signaling.h
  function namespace (line 11) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/SignalingEncryption.cpp
  type tgcalls (line 3) | namespace tgcalls {

FILE: tgcalls/third_party/lib_tgcalls/tgcalls/v2/SignalingEncryption.h
  function namespace (line 7) | namespace tgcalls {

FILE: tgcalls/third_party/webrtc/src/api/adaptation/resource.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/adaptation/resource.h
  function ResourceUsageState (line 24) | enum class ResourceUsageState {

FILE: tgcalls/third_party/webrtc/src/api/array_view.h
  function namespace (line 22) | namespace rtc {
  function T (line 258) | T* begin() const { return this->data(); }
  function T (line 259) | T* end() const { return this->data() + this->size(); }
  function T (line 260) | const T* cbegin() const { return this->data(); }
  function T (line 261) | const T* cend() const { return this->data() + this->size(); }

FILE: tgcalls/third_party/webrtc/src/api/array_view_unittest.cc
  type rtc (line 24) | namespace rtc {
    function Call (line 32) | size_t Call(ArrayView<T> av) {
    function CallFixed (line 37) | void CallFixed(ArrayView<T, N> av) {}
    function TEST (line 41) | TEST(ArrayViewDeathTest, TestConstructFromPtrAndArray) {
    function TEST (line 85) | TEST(ArrayViewTest, TestCopyConstructorVariableLvalue) {
    function TEST (line 102) | TEST(ArrayViewTest, TestCopyConstructorVariableRvalue) {
    function TEST (line 119) | TEST(ArrayViewTest, TestCopyConstructorFixedLvalue) {
    function TEST (line 150) | TEST(ArrayViewTest, TestCopyConstructorFixedRvalue) {
    function TEST (line 181) | TEST(ArrayViewTest, TestCopyAssignmentVariableLvalue) {
    function TEST (line 202) | TEST(ArrayViewTest, TestCopyAssignmentVariableRvalue) {
    function TEST (line 223) | TEST(ArrayViewTest, TestCopyAssignmentFixedLvalue) {
    function TEST (line 259) | TEST(ArrayViewTest, TestCopyAssignmentFixedRvalue) {
    function TEST (line 295) | TEST(ArrayViewTest, TestStdArray) {
    function TEST (line 310) | TEST(ArrayViewTest, TestConstStdArray) {
    function TEST (line 329) | TEST(ArrayViewTest, TestStdVector) {
    function TEST (line 354) | TEST(ArrayViewTest, TestRtcBuffer) {
    function TEST (line 376) | TEST(ArrayViewTest, TestSwapVariable) {
    function TEST (line 395) | TEST(FixArrayViewTest, TestSwapFixed) {
    function TEST (line 412) | TEST(ArrayViewDeathTest, TestIndexing) {
    function TEST (line 434) | TEST(ArrayViewTest, TestIterationEmpty) {
    function TEST (line 454) | TEST(ArrayViewTest, TestReverseIterationEmpty) {
    function TEST (line 468) | TEST(ArrayViewTest, TestIterationVariable) {
    function TEST (line 489) | TEST(ArrayViewTest, TestReverseIterationVariable) {
    function TEST (line 508) | TEST(ArrayViewTest, TestIterationFixed) {
    function TEST (line 529) | TEST(ArrayViewTest, TestReverseIterationFixed) {
    function TEST (line 548) | TEST(ArrayViewTest, TestEmpty) {
    function TEST (line 557) | TEST(ArrayViewTest, TestCompare) {
    function TEST (line 577) | TEST(ArrayViewTest, TestSubViewVariable) {
    function TEST (line 594) | TEST(ArrayViewTest, TestSubViewFixed) {
    function TEST (line 611) | TEST(ArrayViewTest, TestReinterpretCastFixedSize) {
    function TEST (line 621) | TEST(ArrayViewTest, TestReinterpretCastVariableSize) {

FILE: tgcalls/third_party/webrtc/src/api/async_dns_resolver.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/async_resolver_factory.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/audio_frame.cc
  type webrtc (line 20) | namespace webrtc {
    function swap (line 27) | void swap(AudioFrame& a, AudioFrame& b) {

FILE: tgcalls/third_party/webrtc/src/api/audio/audio_frame.h
  function class (line 36) | class AudioFrame {

FILE: tgcalls/third_party/webrtc/src/api/audio/audio_frame_processor.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/audio_mixer.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/channel_layout.cc
  type webrtc (line 19) | namespace webrtc {
    function ChannelLayoutToChannelCount (line 172) | int ChannelLayoutToChannelCount(ChannelLayout layout) {
    function ChannelLayout (line 179) | ChannelLayout GuessChannelLayout(int channels) {
    function ChannelOrder (line 203) | int ChannelOrder(ChannelLayout layout, Channels channel) {

FILE: tgcalls/third_party/webrtc/src/api/audio/channel_layout.h
  function namespace (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_config.cc
  type webrtc (line 18) | namespace webrtc {
    function Limit (line 20) | bool Limit(float* value, float min, float max) {
    function Limit (line 28) | bool Limit(size_t* value, size_t min, size_t max) {
    function Limit (line 35) | bool Limit(int* value, int min, int max) {
    function FloorLimit (line 42) | bool FloorLimit(size_t* value, size_t min) {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_config.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_config_json.cc
  type webrtc (line 22) | namespace webrtc {
    function ReadParam (line 24) | void ReadParam(const Json::Value& root, std::string param_name, bool* ...
    function ReadParam (line 32) | void ReadParam(const Json::Value& root, std::string param_name, size_t...
    function ReadParam (line 40) | void ReadParam(const Json::Value& root, std::string param_name, int* p...
    function ReadParam (line 48) | void ReadParam(const Json::Value& root, std::string param_name, float*...
    function ReadParam (line 56) | void ReadParam(const Json::Value& root,
    function ReadParam (line 77) | void ReadParam(const Json::Value& root,
    function ReadParam (line 95) | void ReadParam(const Json::Value& root,
    function ReadParam (line 111) | void ReadParam(
    function ReadParam (line 130) | void ReadParam(const Json::Value& root,
    function Aec3ConfigFromJsonString (line 149) | void Aec3ConfigFromJsonString(absl::string_view json_string,
    function EchoCanceller3Config (line 395) | EchoCanceller3Config Aec3ConfigFromJsonString(absl::string_view json_s...
    function Aec3ConfigToJsonString (line 402) | std::string Aec3ConfigToJsonString(const EchoCanceller3Config& config) {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_config_json.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_factory.cc
  type webrtc (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_canceller3_factory.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_control.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_detector_creator.cc
  type webrtc (line 15) | namespace webrtc {
    function CreateEchoDetector (line 17) | rtc::scoped_refptr<EchoDetector> CreateEchoDetector() {

FILE: tgcalls/third_party/webrtc/src/api/audio/echo_detector_creator.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio/test/audio_frame_unittest.cc
  type webrtc (line 18) | namespace webrtc {
    function AllSamplesAre (line 22) | bool AllSamplesAre(int16_t sample, const AudioFrame& frame) {
    function TEST (line 41) | TEST(AudioFrameTest, FrameStartsMuted) {
    function TEST (line 47) | TEST(AudioFrameTest, UnmutedFrameIsInitiallyZeroed) {
    function TEST (line 54) | TEST(AudioFrameTest, MutedFrameBufferIsZeroed) {
    function TEST (line 66) | TEST(AudioFrameTest, UpdateFrameMono) {
    function TEST (line 90) | TEST(AudioFrameTest, UpdateFrameMultiChannel) {
    function TEST (line 107) | TEST(AudioFrameTest, CopyFrom) {
    function TEST (line 136) | TEST(AudioFrameTest, SwapFrames) {

FILE: tgcalls/third_party/webrtc/src/api/audio/test/echo_canceller3_config_json_unittest.cc
  type webrtc (line 16) | namespace webrtc {
    function TEST (line 18) | TEST(EchoCanceller3JsonHelpers, ToStringAndParseJson) {

FILE: tgcalls/third_party/webrtc/src/api/audio/test/echo_canceller3_config_unittest.cc
  type webrtc (line 16) | namespace webrtc {
    function TEST (line 18) | TEST(EchoCanceller3Config, ValidConfigIsNotModified) {
    function TEST (line 26) | TEST(EchoCanceller3Config, InvalidConfigIsCorrected) {
    function TEST (line 40) | TEST(EchoCanceller3Config, ValidatedConfigsAreValid) {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/L16/audio_decoder_L16.cc
  type webrtc (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/L16/audio_decoder_L16.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/L16/audio_encoder_L16.cc
  type webrtc (line 22) | namespace webrtc {
    function AudioCodecInfo (line 49) | AudioCodecInfo AudioEncoderL16::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/L16/audio_encoder_L16.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_codec_pair_id.cc
  type webrtc (line 18) | namespace webrtc {
    function GetNextId (line 25) | uint64_t GetNextId() {
    function ObfuscateId (line 47) | constexpr uint64_t ObfuscateId(uint64_t id) {
    function AudioCodecPairId (line 87) | AudioCodecPairId AudioCodecPairId::Create() {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_codec_pair_id.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_decoder.cc
  type webrtc (line 23) | namespace webrtc {
    class OldStyleEncodedFrame (line 27) | class OldStyleEncodedFrame final : public AudioDecoder::EncodedAudioFr...
      method OldStyleEncodedFrame (line 29) | OldStyleEncodedFrame(AudioDecoder* decoder, rtc::Buffer&& payload)
      method Duration (line 32) | size_t Duration() const override {
      method Decode (line 37) | absl::optional<DecodeResult> Decode(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_decoder.h
  type SpeechType (line 29) | enum SpeechType {
  type DecodeResult (line 42) | struct DecodeResult {
  type ParseResult (line 66) | struct ParseResult {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_decoder_factory.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_decoder_factory_template.h
  function namespace (line 21) | namespace webrtc {
  function IsSupportedDecoder (line 74) | bool IsSupportedDecoder(const SdpAudioFormat& format) override {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_encoder.cc
  type webrtc (line 16) | namespace webrtc {
    function ANAStats (line 109) | ANAStats AudioEncoder::GetANAStats() const {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_encoder.h
  function namespace (line 26) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_encoder_factory.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_encoder_factory_template.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_format.cc
  type webrtc (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/audio_format.h
  function namespace (line 23) | namespace webrtc {
  type AudioCodecSpec (line 120) | struct AudioCodecSpec {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/builtin_audio_decoder_factory.cc
  type webrtc (line 29) | namespace webrtc {
    type NotAdvertised (line 35) | struct NotAdvertised {
      method SdpToConfig (line 37) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedDecoders (line 41) | static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* spe...
      method MakeAudioDecoder (line 44) | static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
    function CreateBuiltinAudioDecoderFactory (line 53) | rtc::scoped_refptr<AudioDecoderFactory> CreateBuiltinAudioDecoderFacto...

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/builtin_audio_decoder_factory.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/builtin_audio_encoder_factory.cc
  type webrtc (line 29) | namespace webrtc {
    type NotAdvertised (line 35) | struct NotAdvertised {
      method SdpToConfig (line 37) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedEncoders (line 41) | static void AppendSupportedEncoders(std::vector<AudioCodecSpec>* spe...
      method AudioCodecInfo (line 44) | static AudioCodecInfo QueryAudioEncoder(const Config& config) {
      method MakeAudioEncoder (line 47) | static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
    function CreateBuiltinAudioEncoderFactory (line 57) | rtc::scoped_refptr<AudioEncoderFactory> CreateBuiltinAudioEncoderFacto...

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/builtin_audio_encoder_factory.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g711/audio_decoder_g711.cc
  type webrtc (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g711/audio_decoder_g711.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g711/audio_encoder_g711.cc
  type webrtc (line 22) | namespace webrtc {
    function AudioCodecInfo (line 55) | AudioCodecInfo AudioEncoderG711::QueryAudioEncoder(const Config& confi...

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g711/audio_encoder_g711.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g722/audio_decoder_g722.cc
  type webrtc (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g722/audio_decoder_g722.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g722/audio_encoder_g722.cc
  type webrtc (line 22) | namespace webrtc {
    function AudioCodecInfo (line 52) | AudioCodecInfo AudioEncoderG722::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g722/audio_encoder_g722.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/g722/audio_encoder_g722_config.h
  function namespace (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/ilbc/audio_decoder_ilbc.cc
  type webrtc (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/ilbc/audio_decoder_ilbc.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/ilbc/audio_encoder_ilbc.cc
  type webrtc (line 22) | namespace webrtc {
    function GetIlbcBitrate (line 24) | int GetIlbcBitrate(int ptime) {
    function AudioCodecInfo (line 67) | AudioCodecInfo AudioEncoderIlbc::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/ilbc/audio_encoder_ilbc.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/ilbc/audio_encoder_ilbc_config.h
  function namespace (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_decoder_isac.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_decoder_isac_fix.cc
  type webrtc (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_decoder_isac_fix.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_decoder_isac_float.cc
  type webrtc (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_decoder_isac_float.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_encoder_isac.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_encoder_isac_fix.cc
  type webrtc (line 19) | namespace webrtc {
    function AudioCodecInfo (line 46) | AudioCodecInfo AudioEncoderIsacFix::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_encoder_isac_fix.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_encoder_isac_float.cc
  type webrtc (line 19) | namespace webrtc {
    function AudioCodecInfo (line 55) | AudioCodecInfo AudioEncoderIsacFloat::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/isac/audio_encoder_isac_float.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_decoder_multi_channel_opus.cc
  type webrtc (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_decoder_multi_channel_opus.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_decoder_multi_channel_opus_config.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_decoder_opus.cc
  type webrtc (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_decoder_opus.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_multi_channel_opus.cc
  type webrtc (line 17) | namespace webrtc {
    function AudioCodecInfo (line 61) | AudioCodecInfo AudioEncoderMultiChannelOpus::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_multi_channel_opus.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_multi_channel_opus_config.h
  function AudioEncoderMultiChannelOpusConfig (line 24) | struct RTC_EXPORT AudioEncoderMultiChannelOpusConfig {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_opus.cc
  type webrtc (line 15) | namespace webrtc {
    function AudioCodecInfo (line 27) | AudioCodecInfo AudioEncoderOpus::QueryAudioEncoder(

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_opus.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_opus_config.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus/audio_encoder_opus_config.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus_audio_decoder_factory.cc
  type webrtc (line 20) | namespace webrtc {
    type NotAdvertised (line 26) | struct NotAdvertised {
      method SdpToConfig (line 28) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedDecoders (line 32) | static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* spe...
      method MakeAudioDecoder (line 35) | static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
    function CreateOpusAudioDecoderFactory (line 44) | rtc::scoped_refptr<AudioDecoderFactory> CreateOpusAudioDecoderFactory() {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus_audio_decoder_factory.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus_audio_encoder_factory.cc
  type webrtc (line 20) | namespace webrtc {
    type NotAdvertised (line 25) | struct NotAdvertised {
      method SdpToConfig (line 27) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedEncoders (line 31) | static void AppendSupportedEncoders(std::vector<AudioCodecSpec>* spe...
      method AudioCodecInfo (line 34) | static AudioCodecInfo QueryAudioEncoder(const Config& config) {
      method MakeAudioEncoder (line 37) | static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
    function CreateOpusAudioEncoderFactory (line 47) | rtc::scoped_refptr<AudioEncoderFactory> CreateOpusAudioEncoderFactory() {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/opus_audio_encoder_factory.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/test/audio_decoder_factory_template_unittest.cc
  type webrtc (line 26) | namespace webrtc {
    type BogusParams (line 30) | struct BogusParams {
      method SdpAudioFormat (line 31) | static SdpAudioFormat AudioFormat() { return {"bogus", 8000, 1}; }
      method AudioCodecInfo (line 32) | static AudioCodecInfo CodecInfo() { return {8000, 1, 12345}; }
    type ShamParams (line 35) | struct ShamParams {
      method SdpAudioFormat (line 36) | static SdpAudioFormat AudioFormat() {
      method AudioCodecInfo (line 39) | static AudioCodecInfo CodecInfo() { return {16000, 2, 23456}; }
    type AudioDecoderFakeApi (line 43) | struct AudioDecoderFakeApi {
      type Config (line 44) | struct Config {
      method SdpToConfig (line 48) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedDecoders (line 58) | static void AppendSupportedDecoders(std::vector<AudioCodecSpec>* spe...
      method AudioCodecInfo (line 62) | static AudioCodecInfo QueryAudioDecoder(const Config&) {
      method MakeAudioDecoder (line 66) | static std::unique_ptr<AudioDecoder> MakeAudioDecoder(
    function TEST (line 79) | TEST(AudioDecoderFactoryTemplateTest, NoDecoderTypes) {
    function TEST (line 89) | TEST(AudioDecoderFactoryTemplateTest, OneDecoderType) {
    function TEST (line 103) | TEST(AudioDecoderFactoryTemplateTest, TwoDecoderTypes) {
    function TEST (line 128) | TEST(AudioDecoderFactoryTemplateTest, G711) {
    function TEST (line 147) | TEST(AudioDecoderFactoryTemplateTest, G722) {
    function TEST (line 168) | TEST(AudioDecoderFactoryTemplateTest, Ilbc) {
    function TEST (line 182) | TEST(AudioDecoderFactoryTemplateTest, IsacFix) {
    function TEST (line 197) | TEST(AudioDecoderFactoryTemplateTest, IsacFloat) {
    function TEST (line 217) | TEST(AudioDecoderFactoryTemplateTest, L16) {
    function TEST (line 238) | TEST(AudioDecoderFactoryTemplateTest, Opus) {

FILE: tgcalls/third_party/webrtc/src/api/audio_codecs/test/audio_encoder_factory_template_unittest.cc
  type webrtc (line 26) | namespace webrtc {
    type BogusParams (line 30) | struct BogusParams {
      method SdpAudioFormat (line 31) | static SdpAudioFormat AudioFormat() { return {"bogus", 8000, 1}; }
      method AudioCodecInfo (line 32) | static AudioCodecInfo CodecInfo() { return {8000, 1, 12345}; }
    type ShamParams (line 35) | struct ShamParams {
      method SdpAudioFormat (line 36) | static SdpAudioFormat AudioFormat() {
      method AudioCodecInfo (line 39) | static AudioCodecInfo CodecInfo() { return {16000, 2, 23456}; }
    type AudioEncoderFakeApi (line 43) | struct AudioEncoderFakeApi {
      type Config (line 44) | struct Config {
      method SdpToConfig (line 48) | static absl::optional<Config> SdpToConfig(
      method AppendSupportedEncoders (line 58) | static void AppendSupportedEncoders(std::vector<AudioCodecSpec>* spe...
      method AudioCodecInfo (line 62) | static AudioCodecInfo QueryAudioEncoder(const Config&) {
      method MakeAudioEncoder (line 66) | static std::unique_ptr<AudioEncoder> MakeAudioEncoder(
    function TEST (line 79) | TEST(AudioEncoderFactoryTemplateTest, NoEncoderTypes) {
    function TEST (line 89) | TEST(AudioEncoderFactoryTemplateTest, OneEncoderType) {
    function TEST (line 104) | TEST(AudioEncoderFactoryTemplateTest, TwoEncoderTypes) {
    function TEST (line 131) | TEST(AudioEncoderFactoryTemplateTest, G711) {
    function TEST (line 150) | TEST(AudioEncoderFactoryTemplateTest, G722) {
    function TEST (line 165) | TEST(AudioEncoderFactoryTemplateTest, Ilbc) {
    function TEST (line 180) | TEST(AudioEncoderFactoryTemplateTest, IsacFix) {
    function TEST (line 201) | TEST(AudioEncoderFactoryTemplateTest, IsacFloat) {
    function TEST (line 223) | TEST(AudioEncoderFactoryTemplateTest, L16) {
    function TEST (line 244) | TEST(AudioEncoderFactoryTemplateTest, Opus) {

FILE: tgcalls/third_party/webrtc/src/api/audio_options.cc
  type cricket (line 16) | namespace cricket {
    function ToStringIfSet (line 20) | void ToStringIfSet(rtc::SimpleStringBuilder* result,
    function SetFrom (line 29) | void SetFrom(absl::optional<T>* s, const absl::optional<T>& o) {

FILE: tgcalls/third_party/webrtc/src/api/audio_options.h
  function namespace (line 21) | namespace cricket {

FILE: tgcalls/third_party/webrtc/src/api/call/audio_sink.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/call/bitrate_allocation.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/call/call_factory_interface.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/call/transport.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/call/transport.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/candidate.cc
  type cricket (line 17) | namespace cricket {
    function Candidate (line 128) | Candidate Candidate::ToSanitizedCopy(bool use_hostname_address,

FILE: tgcalls/third_party/webrtc/src/api/candidate.h
  function namespace (line 25) | namespace cricket {

FILE: tgcalls/third_party/webrtc/src/api/create_peerconnection_factory.cc
  type webrtc (line 28) | namespace webrtc {
    function CreatePeerConnectionFactory (line 30) | rtc::scoped_refptr<PeerConnectionFactoryInterface> CreatePeerConnectio...

FILE: tgcalls/third_party/webrtc/src/api/create_peerconnection_factory.h
  function namespace (line 24) | namespace rtc {
  function namespace (line 31) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/crypto/crypto_options.cc
  type webrtc (line 15) | namespace webrtc {
    function CryptoOptions (line 27) | CryptoOptions CryptoOptions::NoGcm() {
    type data_being_tested_for_equality (line 59) | struct data_being_tested_for_equality {
      type Srtp (line 60) | struct Srtp {
      type SFrame (line 66) | struct SFrame {

FILE: tgcalls/third_party/webrtc/src/api/crypto/crypto_options.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/crypto/frame_decryptor_interface.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/crypto/frame_encryptor_interface.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/crypto_params.h
  function namespace (line 16) | namespace cricket {

FILE: tgcalls/third_party/webrtc/src/api/data_channel_interface.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/data_channel_interface.h
  function namespace (line 30) | namespace webrtc {
  function class (line 92) | class DataChannelObserver {
  type DataState (line 110) | enum DataState {

FILE: tgcalls/third_party/webrtc/src/api/dtls_transport_interface.cc
  type webrtc (line 13) | namespace webrtc {
    function DtlsTransportInformation (line 43) | DtlsTransportInformation& DtlsTransportInformation::operator=(

FILE: tgcalls/third_party/webrtc/src/api/dtls_transport_interface.h
  function DtlsTransportState (line 29) | enum class DtlsTransportState {

FILE: tgcalls/third_party/webrtc/src/api/dtmf_sender_interface.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/fec_controller.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/fec_controller_override.h
  function namespace (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/frame_transformer_interface.h
  function virtual (line 31) | virtual rtc::ArrayView<const uint8_t> GetData() const = 0;

FILE: tgcalls/third_party/webrtc/src/api/function_view.h
  function namespace (line 39) | namespace rtc {

FILE: tgcalls/third_party/webrtc/src/api/function_view_unittest.cc
  type rtc (line 18) | namespace rtc {
    function CallWith33 (line 22) | int CallWith33(rtc::FunctionView<int(int)> fv) {
    function Add33 (line 26) | int Add33(int x) {
    function TEST (line 34) | TEST(FunctionViewTest, ImplicitConversion) {
    function TEST (line 40) | TEST(FunctionViewTest, IntIntLambdaWithoutState) {
    function TEST (line 48) | TEST(FunctionViewTest, IntVoidLambdaWithState) {
    function TEST (line 59) | TEST(FunctionViewTest, IntIntFunction) {
    function TEST (line 65) | TEST(FunctionViewTest, IntIntFunctionPointer) {
    function TEST (line 71) | TEST(FunctionViewTest, Null) {
    function TEST (line 81) | TEST(FunctionViewTest, UniquePtrPassthrough) {
    function TEST (line 90) | TEST(FunctionViewTest, CopyConstructor) {
    function TEST (line 98) | TEST(FunctionViewTest, MoveConstructorIsCopy) {
    function TEST (line 106) | TEST(FunctionViewTest, CopyAssignment) {
    function TEST (line 118) | TEST(FunctionViewTest, MoveAssignmentIsCopy) {
    function TEST (line 130) | TEST(FunctionViewTest, Swap) {
    function TEST (line 146) | TEST(FunctionViewTest, CopyConstructorChaining) {
    function TEST (line 160) | TEST(FunctionViewTest, CopyAssignmentChaining) {

FILE: tgcalls/third_party/webrtc/src/api/ice_transport_factory.cc
  type webrtc (line 22) | namespace webrtc {
    class IceTransportWithTransportChannel (line 29) | class IceTransportWithTransportChannel : public IceTransportInterface {
      method IceTransportWithTransportChannel (line 31) | IceTransportWithTransportChannel(
    function CreateIceTransport (line 52) | rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(
    function CreateIceTransport (line 59) | rtc::scoped_refptr<IceTransportInterface> CreateIceTransport(

FILE: tgcalls/third_party/webrtc/src/api/ice_transport_factory.h
  function namespace (line 18) | namespace cricket {
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/ice_transport_interface.h
  function namespace (line 22) | namespace cricket {
  function namespace (line 27) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/jsep.cc
  type webrtc (line 13) | namespace webrtc {
    function SdpTypeFromString (line 43) | absl::optional<SdpType> SdpTypeFromString(const std::string& type_str) {

FILE: tgcalls/third_party/webrtc/src/api/jsep.h
  function namespace (line 34) | namespace cricket {
  type SdpParseError (line 41) | struct SdpParseError {
  function virtual (line 93) | virtual size_t count() const = 0;

FILE: tgcalls/third_party/webrtc/src/api/jsep_ice_candidate.cc
  type webrtc (line 19) | namespace webrtc {
    function IceCandidateInterface (line 50) | const IceCandidateInterface* JsepCandidateCollection::at(size_t index)...

FILE: tgcalls/third_party/webrtc/src/api/jsep_ice_candidate.h
  function SetCandidate (line 42) | void SetCandidate(const cricket::Candidate& candidate) {
  function sdp_mline_index (line 47) | int sdp_mline_index() const override;

FILE: tgcalls/third_party/webrtc/src/api/jsep_session_description.h
  function namespace (line 27) | namespace cricket {
  function namespace (line 31) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/media_stream_interface.cc
  type webrtc (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/media_stream_interface.h
  function class (line 38) | class ObserverInterface {
  function class (line 46) | class NotifierInterface {
  type SourceState (line 59) | enum SourceState { kInitializing, kLive, kEnded, kMuted }
  function virtual (line 61) | virtual SourceState state() const = 0;
  function virtual (line 246) | virtual void SetVolume(double volume) {}
  function virtual (line 249) | virtual void RegisterAudioObserver(AudioObserver* observer) {}
  function virtual (line 250) | virtual void UnregisterAudioObserver(AudioObserver* observer) {}
  function virtual (line 253) | virtual void AddSink(AudioTrackSinkInterface* sink) {}
  function virtual (line 254) | virtual void RemoveSink(AudioTrackSinkInterface* sink) {}
  function class (line 264) | class AudioProcessorInterface : public rtc::RefCountInterface {
  type std (line 307) | typedef std::vector<rtc::scoped_refptr<AudioTrackInterface> > AudioTrack...
  type std (line 308) | typedef std::vector<rtc::scoped_refptr<VideoTrackInterface> > VideoTrack...

FILE: tgcalls/third_party/webrtc/src/api/media_stream_proxy.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/media_stream_track.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/media_stream_track_proxy.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/media_types.cc
  type cricket (line 15) | namespace cricket {
    function MediaTypeToString (line 21) | std::string MediaTypeToString(MediaType type) {

FILE: tgcalls/third_party/webrtc/src/api/media_types.h
  function namespace (line 21) | namespace cricket {
  function namespace (line 38) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/custom_neteq_factory.cc
  type webrtc (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/custom_neteq_factory.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/default_neteq_controller_factory.cc
  type webrtc (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/default_neteq_controller_factory.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/neteq.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/neteq.h
  type NetEqNetworkStatistics (line 34) | struct NetEqNetworkStatistics {
  type NetEqLifetimeStatistics (line 61) | struct NetEqLifetimeStatistics {
  type NetEqOperationsAndState (line 95) | struct NetEqOperationsAndState {
  type Config (line 119) | struct Config {
  type ReturnCodes (line 145) | enum ReturnCodes { kOK = 0, kFail = -1 }
  function Operation (line 147) | enum class Operation {

FILE: tgcalls/third_party/webrtc/src/api/neteq/neteq_controller.h
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/neteq_controller_factory.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/neteq_factory.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/tick_timer.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/neteq/tick_timer.h
  function class (line 27) | class TickTimer {

FILE: tgcalls/third_party/webrtc/src/api/neteq/tick_timer_unittest.cc
  type webrtc (line 18) | namespace webrtc {
    function TEST (line 21) | TEST(TickTimer, DefaultMsPerTick) {
    function TEST (line 26) | TEST(TickTimer, CustomMsPerTick) {
    function TEST (line 31) | TEST(TickTimer, Increment) {
    function TEST (line 46) | TEST(TickTimer, WrapAround) {
    function TEST (line 54) | TEST(TickTimer, Stopwatch) {
    function TEST (line 69) | TEST(TickTimer, StopwatchWrapAround) {
    function TEST (line 87) | TEST(TickTimer, StopwatchMsOverflow) {
    function TEST (line 103) | TEST(TickTimer, StopwatchWithCustomTicktime) {
    function TEST (line 114) | TEST(TickTimer, Countdown) {

FILE: tgcalls/third_party/webrtc/src/api/network_state_predictor.h
  function BandwidthUsage (line 19) | enum class BandwidthUsage {

FILE: tgcalls/third_party/webrtc/src/api/notifier.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/numerics/samples_stats_counter.cc
  type webrtc (line 19) | namespace webrtc {
    function SamplesStatsCounter (line 77) | SamplesStatsCounter operator*(const SamplesStatsCounter& counter,
    function SamplesStatsCounter (line 87) | SamplesStatsCounter operator/(const SamplesStatsCounter& counter,

FILE: tgcalls/third_party/webrtc/src/api/numerics/samples_stats_counter.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/numerics/samples_stats_counter_unittest.cc
  type webrtc (line 21) | namespace webrtc {
    function SamplesStatsCounter (line 24) | SamplesStatsCounter CreateStatsFilledWithIntsFrom1ToN(int n) {
    function SamplesStatsCounter (line 39) | SamplesStatsCounter CreateStatsFromUniformDistribution(int n,
    class SamplesStatsCounterTest (line 52) | class SamplesStatsCounterTest : public ::testing::TestWithParam<int> {}
    function TEST (line 58) | TEST(SamplesStatsCounterTest, FullSimpleTest) {
    function TEST (line 72) | TEST(SamplesStatsCounterTest, VarianceAndDeviation) {
    function TEST (line 84) | TEST(SamplesStatsCounterTest, FractionPercentile) {
    function TEST (line 90) | TEST(SamplesStatsCounterTest, TestBorderValues) {
    function TEST (line 98) | TEST(SamplesStatsCounterTest, VarianceFromUniformDistribution) {
    function TEST (line 106) | TEST(SamplesStatsCounterTest, NumericStabilityForVariance) {
    function TEST_P (line 119) | TEST_P(SamplesStatsCounterTest, AddSamples) {
    function TEST (line 148) | TEST(SamplesStatsCounterTest, MultiplyRight) {
    function TEST (line 170) | TEST(SamplesStatsCounterTest, MultiplyLeft) {
    function TEST (line 192) | TEST(SamplesStatsCounterTest, Divide) {

FILE: tgcalls/third_party/webrtc/src/api/packet_socket_factory.h
  function namespace (line 21) | namespace rtc {

FILE: tgcalls/third_party/webrtc/src/api/peer_connection_factory_proxy.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/peer_connection_interface.cc
  type webrtc (line 16) | namespace webrtc {
    function RTCError (line 45) | RTCError PeerConnectionInterface::RemoveTrackNew(
    function RTCError (line 51) | RTCError PeerConnectionInterface::SetConfiguration(
    function RtpCapabilities (line 97) | RtpCapabilities PeerConnectionFactoryInterface::GetRtpSenderCapabilities(
    function RtpCapabilities (line 102) | RtpCapabilities PeerConnectionFactoryInterface::GetRtpReceiverCapabili...

FILE: tgcalls/third_party/webrtc/src/api/peer_connection_interface.h
  function namespace (line 125) | namespace rtc {
  function class (line 132) | class StreamCollectionInterface : public rtc::RefCountInterface {
  function class (line 146) | class StatsObserver : public rtc::RefCountInterface {
  type class (line 154) | enum class
  type SignalingState (line 159) | enum SignalingState {
  type IceGatheringState (line 169) | enum IceGatheringState {
  function PeerConnectionState (line 176) | enum class PeerConnectionState {

FILE: tgcalls/third_party/webrtc/src/api/peer_connection_proxy.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/priority.h
  function Priority (line 17) | enum class Priority {

FILE: tgcalls/third_party/webrtc/src/api/proxy.h
  function namespace (line 77) | namespace rtc {
  function namespace (line 81) | namespace webrtc {
  function moved_result (line 105) | void moved_result() {}
  function R (line 117) | R Marshal(const rtc::Location& posted_from, rtc::Thread* t) {

FILE: tgcalls/third_party/webrtc/src/api/ref_counted_base.h
  function namespace (line 17) | namespace rtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_error.cc
  type webrtc (line 55) | namespace webrtc {
    function RTCError (line 58) | RTCError RTCError::OK() {

FILE: tgcalls/third_party/webrtc/src/api/rtc_error.h
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_error_unittest.cc
  type MoveOnlyInt (line 22) | struct MoveOnlyInt {
    method MoveOnlyInt (line 23) | MoveOnlyInt() {}
    method MoveOnlyInt (line 24) | explicit MoveOnlyInt(int value) : value(value) {}
    method MoveOnlyInt (line 25) | MoveOnlyInt(const MoveOnlyInt& other) = delete;
    method MoveOnlyInt (line 26) | MoveOnlyInt& operator=(const MoveOnlyInt& other) = delete;
    method MoveOnlyInt (line 27) | MoveOnlyInt(MoveOnlyInt&& other) : value(other.value) {}
    method MoveOnlyInt (line 28) | MoveOnlyInt& operator=(MoveOnlyInt&& other) {
  type MoveOnlyInt2 (line 38) | struct MoveOnlyInt2 {
    method MoveOnlyInt2 (line 39) | MoveOnlyInt2() {}
    method MoveOnlyInt2 (line 40) | explicit MoveOnlyInt2(int value) : value(value) {}
    method MoveOnlyInt2 (line 41) | MoveOnlyInt2(const MoveOnlyInt2& other) = delete;
    method MoveOnlyInt2 (line 42) | MoveOnlyInt2& operator=(const MoveOnlyInt2& other) = delete;
    method MoveOnlyInt2 (line 43) | MoveOnlyInt2(MoveOnlyInt2&& other) : value(other.value) {}
    method MoveOnlyInt2 (line 44) | MoveOnlyInt2& operator=(MoveOnlyInt2&& other) {
    method MoveOnlyInt2 (line 49) | explicit MoveOnlyInt2(MoveOnlyInt&& other) : value(other.value) {}
    method MoveOnlyInt2 (line 50) | MoveOnlyInt2& operator=(MoveOnlyInt&& other) {
  type webrtc (line 60) | namespace webrtc {
    function TEST (line 63) | TEST(RTCErrorTest, DefaultConstructor) {
    function TEST (line 70) | TEST(RTCErrorTest, NormalConstructors) {
    function TEST (line 86) | TEST(RTCErrorTest, MoveConstructor) {
    function TEST (line 100) | TEST(RTCErrorTest, MoveAssignment) {
    function TEST (line 119) | TEST(RTCErrorTest, OKConstant) {
    function TEST (line 127) | TEST(RTCErrorTest, OkMethod) {
    function TEST (line 136) | TEST(RTCErrorTest, SetMessage) {
    function TEST (line 156) | TEST(RTCErrorOrTest, DefaultConstructor) {
    function TEST (line 162) | TEST(RTCErrorOrTest, ImplicitValueConstructor) {
    function TEST (line 168) | TEST(RTCErrorOrTest, ImplicitErrorConstructor) {
    function TEST (line 175) | TEST(RTCErrorOrTest, MoveConstructor) {
    function TEST (line 181) | TEST(RTCErrorOrTest, MoveAssignment) {
    function TEST (line 188) | TEST(RTCErrorOrTest, ConversionConstructor) {
    function TEST (line 193) | TEST(RTCErrorOrTest, ConversionAssignment) {
    function TEST (line 200) | TEST(RTCErrorOrTest, OkMethod) {
    function TEST (line 207) | TEST(RTCErrorOrTest, MoveError) {
    function TEST (line 214) | TEST(RTCErrorOrTest, MoveValue) {
    function TEST (line 225) | TEST(RTCErrorOrDeathTest, ConstructWithOkError) {
    function TEST (line 230) | TEST(RTCErrorOrDeathTest, DereferenceErrorValue) {
    function TEST (line 235) | TEST(RTCErrorOrDeathTest, MoveErrorValue) {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event_log.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event_log.h
  function EncodingType (line 32) | enum class EncodingType { Legacy, NewFormat };
  function StopLogging (line 63) | void StopLogging() override {}
  function Log (line 64) | void Log(std::unique_ptr<RtcEvent> event) override {}

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event_log_factory.cc
  type webrtc (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event_log_factory.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log/rtc_event_log_factory_interface.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log_output.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log_output_file.cc
  type webrtc (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log_output_file.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtc_event_log_output_file_unittest.cc
  type webrtc (line 22) | namespace webrtc {
    class RtcEventLogOutputFileTest (line 24) | class RtcEventLogOutputFileTest : public ::testing::Test {
      method RtcEventLogOutputFileTest (line 26) | RtcEventLogOutputFileTest() : output_file_name_(GetOutputFilePath()) {
      method GetOutputFilePath (line 35) | std::string GetOutputFilePath() const {
      method GetOutputFileContents (line 40) | std::string GetOutputFileContents() const {
    function TEST_F (line 53) | TEST_F(RtcEventLogOutputFileTest, NonDefectiveOutputsStartOutActive) {
    function TEST_F (line 58) | TEST_F(RtcEventLogOutputFileTest, DefectiveOutputsStartOutInactive) {
    function TEST_F (line 65) | TEST_F(RtcEventLogOutputFileTest, UnlimitedOutputFile) {
    function TEST_F (line 76) | TEST_F(RtcEventLogOutputFileTest, LimitedOutputFileCappedToCapacity) {
    function TEST_F (line 92) | TEST_F(RtcEventLogOutputFileTest, DoNotWritePartialLines) {
    function TEST_F (line 108) | TEST_F(RtcEventLogOutputFileTest, UnsuccessfulWriteReturnsFalse) {
    function TEST_F (line 114) | TEST_F(RtcEventLogOutputFileTest, SuccessfulWriteReturnsTrue) {
    function TEST_F (line 121) | TEST_F(RtcEventLogOutputFileTest, FileStillActiveAfterSuccessfulWrite) {
    function TEST_F (line 130) | TEST_F(RtcEventLogOutputFileTest, FileInactiveAfterUnsuccessfulWrite) {
    function TEST_F (line 137) | TEST_F(RtcEventLogOutputFileTest, AllowReasonableFileSizeLimits) {
    class RtcEventLogOutputFileDeathTest (line 144) | class RtcEventLogOutputFileDeathTest : public RtcEventLogOutputFileTes...
    function TEST_F (line 146) | TEST_F(RtcEventLogOutputFileDeathTest, WritingToInactiveFileForbidden) {
    function TEST_F (line 153) | TEST_F(RtcEventLogOutputFileDeathTest, DisallowUnreasonableFileSizeLim...

FILE: tgcalls/third_party/webrtc/src/api/rtp_headers.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_headers.h
  function namespace (line 27) | namespace webrtc {
  function GetAbsoluteSendTimeDelta (line 92) | struct RTPHeaderExtension {
  type RTPHeader (line 160) | struct RTPHeader {
  function RtcpMode (line 180) | enum class RtcpMode { kOff, kCompound, kReducedSize };

FILE: tgcalls/third_party/webrtc/src/api/rtp_packet_info.cc
  type webrtc (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_packet_info.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_packet_info_unittest.cc
  type webrtc (line 15) | namespace webrtc {
    function TEST (line 17) | TEST(RtpPacketInfoTest, Ssrc) {
    function TEST (line 44) | TEST(RtpPacketInfoTest, Csrcs) {
    function TEST (line 71) | TEST(RtpPacketInfoTest, RtpTimestamp) {
    function TEST (line 98) | TEST(RtpPacketInfoTest, AudioLevel) {
    function TEST (line 125) | TEST(RtpPacketInfoTest, AbsoluteCaptureTime) {
    function TEST (line 152) | TEST(RtpPacketInfoTest, ReceiveTimeMs) {

FILE: tgcalls/third_party/webrtc/src/api/rtp_packet_infos.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_packet_infos_unittest.cc
  type webrtc (line 16) | namespace webrtc {
    function ToVector (line 23) | RtpPacketInfos::vector_type ToVector(Iterator begin, Iterator end) {
    function TEST (line 29) | TEST(RtpPacketInfosTest, BasicFunctionality) {
    function TEST (line 54) | TEST(RtpPacketInfosTest, CopyShareData) {

FILE: tgcalls/third_party/webrtc/src/api/rtp_parameters.cc
  type webrtc (line 19) | namespace webrtc {
    function RtpExtension (line 195) | const RtpExtension* RtpExtension::FindHeaderExtensionByUri(

FILE: tgcalls/third_party/webrtc/src/api/rtp_parameters.h
  type class (line 48) | enum class
  type class (line 55) | enum class
  type class (line 64) | enum class
  type class (line 71) | enum class
  function DegradationPreference (line 83) | enum class DegradationPreference {

FILE: tgcalls/third_party/webrtc/src/api/rtp_parameters_unittest.cc
  type webrtc (line 15) | namespace webrtc {
    function TEST (line 26) | TEST(RtpExtensionTest, FilterDuplicateNonEncrypted) {

FILE: tgcalls/third_party/webrtc/src/api/rtp_receiver_interface.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_receiver_interface.h
  function class (line 34) | class RtpReceiverObserverInterface {
  function virtual (line 65) | virtual std::vector<std::string> stream_ids() const;

FILE: tgcalls/third_party/webrtc/src/api/rtp_sender_interface.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/rtp_sender_interface.h
  function virtual (line 52) | virtual uint32_t ssrc() const = 0;

FILE: tgcalls/third_party/webrtc/src/api/rtp_transceiver_direction.h
  function RtpTransceiverDirection (line 17) | enum class RtpTransceiverDirection {

FILE: tgcalls/third_party/webrtc/src/api/rtp_transceiver_interface.cc
  type webrtc (line 15) | namespace webrtc {
    function RTCError (line 36) | RTCError RtpTransceiverInterface::StopStandard() {
    function RTCError (line 45) | RTCError RtpTransceiverInterface::SetCodecPreferences(
    function RTCError (line 79) | RTCError RtpTransceiverInterface::SetDirectionWithError(

FILE: tgcalls/third_party/webrtc/src/api/rtp_transceiver_interface.h
  function namespace (line 29) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/scoped_refptr.h
  function namespace (line 69) | namespace rtc {
  function T (line 105) | T* get() const { return ptr_; }
  function operator (line 106) | operator T*() const { return ptr_; }
  function swap (line 151) | void swap(T** pp) noexcept {
  function swap (line 157) | void swap(scoped_refptr<T>& r) noexcept { swap(&r.ptr_); }

FILE: tgcalls/third_party/webrtc/src/api/scoped_refptr_unittest.cc
  type rtc (line 18) | namespace rtc {
    type FunctionsCalled (line 21) | struct FunctionsCalled {
    class ScopedRefCounted (line 26) | class ScopedRefCounted {
      method ScopedRefCounted (line 28) | explicit ScopedRefCounted(FunctionsCalled* called) : called_(*called...
      method ScopedRefCounted (line 29) | ScopedRefCounted(const ScopedRefCounted&) = delete;
      method ScopedRefCounted (line 30) | ScopedRefCounted& operator=(const ScopedRefCounted&) = delete;
      method AddRef (line 32) | void AddRef() {
      method Release (line 36) | void Release() {
    function TEST (line 49) | TEST(ScopedRefptrTest, IsCopyConstructable) {
    function TEST (line 59) | TEST(ScopedRefptrTest, IsCopyAssignable) {
    function TEST (line 70) | TEST(ScopedRefptrTest, IsMoveConstructableWithoutExtraAddRefRelease) {
    function TEST (line 81) | TEST(ScopedRefptrTest, IsMoveAssignableWithoutExtraAddRefRelease) {
    function TEST (line 93) | TEST(ScopedRefptrTest, MovableDuringVectorReallocation) {

FILE: tgcalls/third_party/webrtc/src/api/sctp_transport_interface.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/sctp_transport_interface.h
  function SctpTransportState (line 24) | enum class SctpTransportState {

FILE: tgcalls/third_party/webrtc/src/api/sequence_checker.h
  function public (line 40) | public webrtc_sequence_checker_internal::SequenceCheckerImpl {

FILE: tgcalls/third_party/webrtc/src/api/sequence_checker_unittest.cc
  type webrtc (line 22) | namespace webrtc {
    class CompileTimeTestForGuardedBy (line 28) | class CompileTimeTestForGuardedBy {
      method RTC_RUN_ON (line 30) | RTC_RUN_ON(sequence_checker_) { return guarded_; }
      method CallMeFromSequence (line 32) | void CallMeFromSequence() {
    function RunOnDifferentThread (line 42) | void RunOnDifferentThread(rtc::FunctionView<void()> run) {
    function TEST (line 62) | TEST(SequenceCheckerTest, CallsAllowedOnSameThread) {
    function TEST (line 67) | TEST(SequenceCheckerTest, DestructorAllowedOnDifferentThread) {
    function TEST (line 76) | TEST(SequenceCheckerTest, Detach) {
    function TEST (line 82) | TEST(SequenceCheckerTest, DetachFromThreadAndUseOnTaskQueue) {
    function TEST (line 90) | TEST(SequenceCheckerTest, DetachFromTaskQueueAndUseOnThread) {
    function TEST (line 102) | TEST(SequenceCheckerTest, MethodNotAllowedOnDifferentThreadInDebug) {
    function TEST (line 108) | TEST(SequenceCheckerTest, MethodNotAllowedOnDifferentTaskQueueInDebug) {
    function TEST (line 116) | TEST(SequenceCheckerTest, DetachFromTaskQueueInDebug) {
    class TestAnnotations (line 132) | class TestAnnotations {
      method TestAnnotations (line 134) | TestAnnotations() : test_var_(false) {}
      method ModifyTestVar (line 136) | void ModifyTestVar() {
    function TEST (line 146) | TEST(SequenceCheckerTest, TestAnnotations) {
    function TestAnnotationsOnWrongQueue (line 153) | void TestAnnotationsOnWrongQueue() {
    function TEST (line 165) | TEST(SequenceCheckerDeathTest, TestAnnotationsOnWrongQueueDebug) {
    function TEST (line 169) | TEST(SequenceCheckerTest, TestAnnotationsOnWrongQueueRelease) {

FILE: tgcalls/third_party/webrtc/src/api/set_local_description_observer_interface.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/set_remote_description_observer_interface.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/stats/rtc_stats.h
  function namespace (line 26) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/stats/rtc_stats_collector_callback.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/stats/rtc_stats_report.h
  function namespace (line 28) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/stats/rtcstats_objects.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/stats_types.cc
  type webrtc (line 27) | namespace webrtc {
    class BandwidthEstimationId (line 66) | class BandwidthEstimationId : public StatsReport::IdBase {
      method BandwidthEstimationId (line 68) | BandwidthEstimationId()
      method ToString (line 70) | std::string ToString() const override { return kStatsReportVideoBweI...
    class TypedId (line 73) | class TypedId : public StatsReport::IdBase {
      method TypedId (line 75) | TypedId(StatsReport::StatsType type, const std::string& id)
      method Equals (line 78) | bool Equals(const IdBase& other) const override {
      method ToString (line 83) | std::string ToString() const override {
    class TypedIntId (line 91) | class TypedIntId : public StatsReport::IdBase {
      method TypedIntId (line 93) | TypedIntId(StatsReport::StatsType type, int id)
      method Equals (line 96) | bool Equals(const IdBase& other) const override {
      method ToString (line 101) | std::string ToString() const override {
    class IdWithDirection (line 110) | class IdWithDirection : public TypedId {
      method IdWithDirection (line 112) | IdWithDirection(StatsReport::StatsType type,
      method Equals (line 117) | bool Equals(const IdBase& other) const override {
      method ToString (line 122) | std::string ToString() const override {
    class CandidateId (line 133) | class CandidateId : public TypedId {
      method CandidateId (line 135) | CandidateId(bool local, const std::string& id)
      method ToString (line 140) | std::string ToString() const override { return "Cand-" + id_; }
    class ComponentId (line 143) | class ComponentId : public StatsReport::IdBase {
      method ComponentId (line 145) | ComponentId(const std::string& content_name, int component)
      method Equals (line 150) | bool Equals(const IdBase& other) const override {
      method ToString (line 157) | std::string ToString() const override { return ToString("Channel-"); }
      method ComponentId (line 160) | ComponentId(StatsReport::StatsType type,
      method ToString (line 165) | std::string ToString(const char* prefix) const {
    class CandidatePairId (line 178) | class CandidatePairId : public ComponentId {
      method CandidatePairId (line 180) | CandidatePairId(const std::string& content_name, int component, int ...
      method Equals (line 186) | bool Equals(const IdBase& other) const override {
      method ToString (line 191) | std::string ToString() const override {
    function StatsReport (line 808) | StatsReport* StatsCollection::InsertNew(const StatsReport::Id& id) {
    function StatsReport (line 816) | StatsReport* StatsCollection::FindOrAddNew(const StatsReport::Id& id) {
    function StatsReport (line 822) | StatsReport* StatsCollection::ReplaceOrAddNew(const StatsReport::Id& i...
    function StatsReport (line 839) | StatsReport* StatsCollection::Find(const StatsReport::Id& id) {

FILE: tgcalls/third_party/webrtc/src/api/stats_types.h
  type Direction (line 36) | enum Direction {
  type StatsType (line 41) | enum StatsType {
  type StatsValueName (line 99) | enum StatsValueName {
  function StatsType (line 248) | StatsType type() const;
  type std (line 420) | typedef std::vector<const StatsReport*> StatsReports;
  function class (line 425) | class StatsCollection {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory_gcd.cc
  type webrtc (line 15) | namespace webrtc {
    function CreateDefaultTaskQueueFactory (line 17) | std::unique_ptr<TaskQueueFactory> CreateDefaultTaskQueueFactory() {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory_libevent.cc
  type webrtc (line 15) | namespace webrtc {
    function CreateDefaultTaskQueueFactory (line 17) | std::unique_ptr<TaskQueueFactory> CreateDefaultTaskQueueFactory() {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory_stdlib.cc
  type webrtc (line 15) | namespace webrtc {
    function CreateDefaultTaskQueueFactory (line 17) | std::unique_ptr<TaskQueueFactory> CreateDefaultTaskQueueFactory() {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory_unittest.cc
  type webrtc (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/default_task_queue_factory_win.cc
  type webrtc (line 15) | namespace webrtc {
    function CreateDefaultTaskQueueFactory (line 17) | std::unique_ptr<TaskQueueFactory> CreateDefaultTaskQueueFactory() {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/queued_task.h
  function namespace (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/task_queue_base.cc
  type webrtc (line 18) | namespace webrtc {
    function TaskQueueBase (line 25) | TaskQueueBase* TaskQueueBase::Current() {
    function InitializeTls (line 49) | void InitializeTls() {
    function pthread_key_t (line 53) | pthread_key_t GetQueuePtrTls() {
    function TaskQueueBase (line 61) | TaskQueueBase* TaskQueueBase::Current() {
  type webrtc (line 44) | namespace webrtc {
    function TaskQueueBase (line 25) | TaskQueueBase* TaskQueueBase::Current() {
    function InitializeTls (line 49) | void InitializeTls() {
    function pthread_key_t (line 53) | pthread_key_t GetQueuePtrTls() {
    function TaskQueueBase (line 61) | TaskQueueBase* TaskQueueBase::Current() {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/task_queue_base.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/task_queue_factory.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/task_queue_test.cc
  type webrtc (line 19) | namespace webrtc {
    function CreateTaskQueue (line 22) | std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(
    function TEST_P (line 29) | TEST_P(TaskQueueTest, Construct) {
    function TEST_P (line 35) | TEST_P(TaskQueueTest, PostAndCheckCurrent) {
    function TEST_P (line 53) | TEST_P(TaskQueueTest, PostCustomTask) {
    function TEST_P (line 75) | TEST_P(TaskQueueTest, PostDelayedZero) {
    function TEST_P (line 84) | TEST_P(TaskQueueTest, PostFromQueue) {
    function TEST_P (line 95) | TEST_P(TaskQueueTest, PostDelayed) {
    function TEST_P (line 116) | TEST_P(TaskQueueTest, PostMultipleDelayed) {
    function TEST_P (line 134) | TEST_P(TaskQueueTest, PostDelayedAfterDestruct) {
    function TEST_P (line 148) | TEST_P(TaskQueueTest, PostAndReuse) {
    function TEST_P (line 192) | TEST_P(TaskQueueTest, PostALot) {
    function TEST_P (line 251) | TEST_P(TaskQueueTest, PostTwoWithSharedUnprotectedState) {

FILE: tgcalls/third_party/webrtc/src/api/task_queue/task_queue_test.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/audio_quality_analyzer_interface.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/audioproc_float.cc
  type webrtc (line 17) | namespace webrtc {
    type test (line 18) | namespace test {
      function AudioprocFloat (line 20) | int AudioprocFloat(rtc::scoped_refptr<AudioProcessing> audio_process...
      function AudioprocFloat (line 26) | int AudioprocFloat(std::unique_ptr<AudioProcessingBuilder> ap_builder,
      function AudioprocFloat (line 34) | int AudioprocFloat(std::unique_ptr<AudioProcessingBuilder> ap_builder,

FILE: tgcalls/third_party/webrtc/src/api/test/audioproc_float.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_frame_generator.cc
  type webrtc (line 20) | namespace webrtc {
    type test (line 21) | namespace test {
      function CreateSquareFrameGenerator (line 23) | std::unique_ptr<FrameGeneratorInterface> CreateSquareFrameGenerator(
      function CreateFromYuvFileFrameGenerator (line 33) | std::unique_ptr<FrameGeneratorInterface> CreateFromYuvFileFrameGener...
      function CreateFromIvfFileFrameGenerator (line 50) | std::unique_ptr<FrameGeneratorInterface> CreateFromIvfFileFrameGener...
      function CreateScrollingInputFromYuvFilesFrameGenerator (line 55) | std::unique_ptr<FrameGeneratorInterface>
      function CreateSlideFrameGenerator (line 78) | std::unique_ptr<FrameGeneratorInterface>

FILE: tgcalls/third_party/webrtc/src/api/test/create_frame_generator.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_network_emulation_manager.cc
  type webrtc (line 18) | namespace webrtc {
    function CreateNetworkEmulationManager (line 20) | std::unique_ptr<NetworkEmulationManager> CreateNetworkEmulationManager(

FILE: tgcalls/third_party/webrtc/src/api/test/create_network_emulation_manager.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_peer_connection_quality_test_frame_generator.cc
  type webrtc (line 21) | namespace webrtc {
    type webrtc_pc_e2e (line 22) | namespace webrtc_pc_e2e {
      function ValidateScreenShareConfig (line 29) | void ValidateScreenShareConfig(const VideoConfig& video_config,
      function CreateSquareFrameGenerator (line 55) | std::unique_ptr<test::FrameGeneratorInterface> CreateSquareFrameGene...
      function CreateFromYuvFileFrameGenerator (line 62) | std::unique_ptr<test::FrameGeneratorInterface> CreateFromYuvFileFram...
      function CreateScreenShareFrameGenerator (line 70) | std::unique_ptr<test::FrameGeneratorInterface> CreateScreenShareFram...

FILE: tgcalls/third_party/webrtc/src/api/test/create_peer_connection_quality_test_frame_generator.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_peerconnection_quality_test_fixture.cc
  type webrtc (line 19) | namespace webrtc {
    type webrtc_pc_e2e (line 20) | namespace webrtc_pc_e2e {
      function CreatePeerConnectionE2EQualityTestFixture (line 22) | std::unique_ptr<PeerConnectionE2EQualityTestFixture>

FILE: tgcalls/third_party/webrtc/src/api/test/create_peerconnection_quality_test_fixture.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_simulcast_test_fixture.cc
  type webrtc (line 19) | namespace webrtc {
    type test (line 20) | namespace test {
      function CreateSimulcastTestFixture (line 22) | std::unique_ptr<SimulcastTestFixture> CreateSimulcastTestFixture(

FILE: tgcalls/third_party/webrtc/src/api/test/create_simulcast_test_fixture.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_time_controller.cc
  type webrtc (line 19) | namespace webrtc {
    function CreateTimeController (line 21) | std::unique_ptr<TimeController> CreateTimeController(
    function CreateSimulatedTimeController (line 26) | std::unique_ptr<TimeController> CreateSimulatedTimeController() {
    function CreateTimeControllerBasedCallFactory (line 31) | std::unique_ptr<CallFactoryInterface> CreateTimeControllerBasedCallFac...

FILE: tgcalls/third_party/webrtc/src/api/test/create_time_controller.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_time_controller_unittest.cc
  type webrtc (line 19) | namespace webrtc {
    class FakeAlarm (line 22) | class FakeAlarm : public ControlledAlarmClock {
    function Clock (line 42) | Clock* FakeAlarm::GetClock() {
    function TEST (line 70) | TEST(CreateTimeControllerTest, CreatesNonNullController) {

FILE: tgcalls/third_party/webrtc/src/api/test/create_video_quality_test_fixture.cc
  type webrtc (line 18) | namespace webrtc {
    function CreateVideoQualityTestFixture (line 20) | std::unique_ptr<VideoQualityTestFixtureInterface>
    function CreateVideoQualityTestFixture (line 26) | std::unique_ptr<VideoQualityTestFixtureInterface> CreateVideoQualityTe...
    function CreateVideoQualityTestFixture (line 34) | std::unique_ptr<VideoQualityTestFixtureInterface> CreateVideoQualityTe...

FILE: tgcalls/third_party/webrtc/src/api/test/create_video_quality_test_fixture.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/create_videocodec_test_fixture.cc
  type webrtc (line 19) | namespace webrtc {
    type test (line 20) | namespace test {
      function CreateVideoCodecTestFixture (line 24) | std::unique_ptr<VideoCodecTestFixture> CreateVideoCodecTestFixture(
      function CreateVideoCodecTestFixture (line 29) | std::unique_ptr<VideoCodecTestFixture> CreateVideoCodecTestFixture(

FILE: tgcalls/third_party/webrtc/src/api/test/create_videocodec_test_fixture.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/dummy_peer_connection.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/fake_frame_decryptor.cc
  type webrtc (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/fake_frame_decryptor.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/fake_frame_encryptor.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/fake_frame_encryptor.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/frame_generator_interface.cc
  type webrtc (line 13) | namespace webrtc {
    type test (line 14) | namespace test {

FILE: tgcalls/third_party/webrtc/src/api/test/frame_generator_interface.h
  function namespace (line 22) | namespace test {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_audio_mixer.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_data_channel.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_fec_controller_override.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_frame_decryptor.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_frame_encryptor.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_media_stream_interface.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_peer_connection_factory_interface.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_peerconnectioninterface.h
  function namespace (line 24) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_rtp_transceiver.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_rtpreceiver.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_rtpsender.h
  function namespace (line 20) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_transformable_video_frame.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_bitrate_allocator.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_bitrate_allocator_factory.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_decoder.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_decoder_factory.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_encoder.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/mock_video_encoder_factory.h
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/neteq_simulator.cc
  type webrtc (line 13) | namespace webrtc {
    type test (line 14) | namespace test {

FILE: tgcalls/third_party/webrtc/src/api/test/neteq_simulator.h
  function namespace (line 20) | namespace test {

FILE: tgcalls/third_party/webrtc/src/api/test/neteq_simulator_factory.cc
  type webrtc (line 22) | namespace webrtc {
    type test (line 23) | namespace test {
      function convertConfig (line 25) | NetEqTestFactory::Config convertConfig(

FILE: tgcalls/third_party/webrtc/src/api/test/neteq_simulator_factory.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation/create_cross_traffic.cc
  type webrtc (line 17) | namespace webrtc {
    function CreateRandomWalkCrossTraffic (line 19) | std::unique_ptr<CrossTrafficGenerator> CreateRandomWalkCrossTraffic(
    function CreatePulsedPeaksCrossTraffic (line 25) | std::unique_ptr<CrossTrafficGenerator> CreatePulsedPeaksCrossTraffic(
    function CreateFakeTcpCrossTraffic (line 31) | std::unique_ptr<CrossTrafficGenerator> CreateFakeTcpCrossTraffic(

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation/create_cross_traffic.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation/cross_traffic.h
  function class (line 26) | class CrossTrafficRoute {
  type RandomWalkConfig (line 56) | struct RandomWalkConfig {
  type PulsedPeaksConfig (line 68) | struct PulsedPeaksConfig {
  type FakeTcpConfig (line 76) | struct FakeTcpConfig {

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation/network_emulation_interfaces.cc
  type webrtc (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation/network_emulation_interfaces.h
  function namespace (line 27) | namespace webrtc {
  function class (line 58) | class EmulatedNetworkReceiverInterface {
  function virtual (line 98) | virtual int64_t PacketsReceived() const = 0;

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation_manager.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/network_emulation_manager.h
  type EmulatedEndpointConfig (line 49) | struct EmulatedEndpointConfig {
  function StatsGatheringMode (line 51) | enum class StatsGatheringMode {
  type EmulatedTURNServerConfig (line 81) | struct EmulatedTURNServerConfig {
  function class (line 87) | class EmulatedTURNServerInterface {

FILE: tgcalls/third_party/webrtc/src/api/test/peerconnection_quality_test_fixture.h
  function namespace (line 48) | namespace webrtc {
  type VideoConfig (line 179) | struct VideoConfig {
  type AudioConfig (line 245) | struct AudioConfig {
  function class (line 272) | class PeerConfigurer {
  type EchoEmulationConfig (line 349) | struct EchoEmulationConfig {
  type VideoCodecConfig (line 355) | struct VideoCodecConfig {
  type RunParams (line 378) | struct RunParams {
  function class (line 413) | class QualityMetricsReporter : public StatsObserverInterface {

FILE: tgcalls/third_party/webrtc/src/api/test/simulated_network.h
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/simulcast_test_fixture.h
  function namespace (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/stats_observer_interface.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/test_dependency_factory.cc
  type webrtc (line 19) | namespace webrtc {
    function IsValidTestDependencyFactoryThread (line 24) | bool IsValidTestDependencyFactoryThread() {
    function TestDependencyFactory (line 33) | const TestDependencyFactory& TestDependencyFactory::GetInstance() {

FILE: tgcalls/third_party/webrtc/src/api/test/test_dependency_factory.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/time_controller.cc
  type webrtc (line 12) | namespace webrtc {
    class FactoryWrapper (line 14) | class FactoryWrapper final : public TaskQueueFactory {
      method FactoryWrapper (line 16) | explicit FactoryWrapper(TaskQueueFactory* inner_factory)
      method CreateTaskQueue (line 18) | std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(

FILE: tgcalls/third_party/webrtc/src/api/test/time_controller.h
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/track_id_stream_info_map.h
  function namespace (line 16) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/video/function_video_decoder_factory.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/video/function_video_encoder_factory.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/video_quality_analyzer_interface.h
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/video_quality_test_fixture.h
  function namespace (line 30) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/videocodec_test_fixture.h
  function namespace (line 23) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/test/videocodec_test_stats.cc
  type webrtc (line 15) | namespace webrtc {
    type test (line 16) | namespace test {

FILE: tgcalls/third_party/webrtc/src/api/test/videocodec_test_stats.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/bitrate_settings.cc
  type webrtc (line 13) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/bitrate_settings.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/data_channel_transport_interface.h
  function DataMessageType (line 22) | enum class DataMessageType {

FILE: tgcalls/third_party/webrtc/src/api/transport/enums.h
  function IceTransportState (line 20) | enum class IceTransportState {

FILE: tgcalls/third_party/webrtc/src/api/transport/field_trial_based_config.cc
  type webrtc (line 14) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/field_trial_based_config.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/goog_cc_factory.cc
  type webrtc (line 18) | namespace webrtc {
    function TimeDelta (line 54) | TimeDelta GoogCcNetworkControllerFactory::GetProcessInterval() const {

FILE: tgcalls/third_party/webrtc/src/api/transport/goog_cc_factory.h
  function namespace (line 19) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/network_control.h
  function namespace (line 22) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/network_types.cc
  type webrtc (line 15) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/network_types.h
  function namespace (line 23) | namespace webrtc {
  type TransportPacketsFeedback (line 165) | struct TransportPacketsFeedback {
  type NetworkEstimate (line 187) | struct NetworkEstimate {
  type PacerConfig (line 199) | struct PacerConfig {
  type ProbeClusterConfig (line 210) | struct ProbeClusterConfig {
  type TargetTransferRate (line 218) | struct TargetTransferRate {
  type NetworkControlUpdate (line 230) | struct NetworkControlUpdate {
  type ProcessInterval (line 241) | struct ProcessInterval {
  type NetworkStateEstimate (line 250) | struct NetworkStateEstimate {

FILE: tgcalls/third_party/webrtc/src/api/transport/rtp/dependency_descriptor.cc
  type webrtc (line 17) | namespace webrtc {
    type webrtc_impl (line 24) | namespace webrtc_impl {
      function StringToDecodeTargetIndications (line 26) | absl::InlinedVector<DecodeTargetIndication, 10> StringToDecodeTarget...

FILE: tgcalls/third_party/webrtc/src/api/transport/rtp/dependency_descriptor.h
  function namespace (line 24) | namespace webrtc {
  type DependencyDescriptor (line 100) | struct DependencyDescriptor {
  function namespace (line 116) | namespace webrtc_impl {
  function FrameDependencyTemplate (line 121) | inline FrameDependencyTemplate& FrameDependencyTemplate::S(int spatial_l...
  function FrameDependencyTemplate (line 125) | inline FrameDependencyTemplate& FrameDependencyTemplate::T(int temporal_...
  function FrameDependencyTemplate (line 129) | inline FrameDependencyTemplate& FrameDependencyTemplate::Dtis(
  function FrameDependencyTemplate (line 135) | inline FrameDependencyTemplate& FrameDependencyTemplate::FrameDiffs(
  function FrameDependencyTemplate (line 140) | inline FrameDependencyTemplate& FrameDependencyTemplate::ChainDiffs(

FILE: tgcalls/third_party/webrtc/src/api/transport/rtp/rtp_source.h
  function RtpSourceType (line 22) | enum class RtpSourceType {

FILE: tgcalls/third_party/webrtc/src/api/transport/sctp_transport_factory_interface.h
  function namespace (line 17) | namespace cricket {
  function namespace (line 21) | namespace rtc {
  function namespace (line 25) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/stun.cc
  type cricket (line 29) | namespace cricket {
    function ReduceTransactionId (line 38) | uint32_t ReduceTransactionId(const std::string& transaction_id) {
    function LengthValid (line 52) | bool LengthValid(int type, int length) {
    function DesignatedExpertRange (line 138) | static bool DesignatedExpertRange(int attr_type) {
    function StunAddressAttribute (line 201) | const StunAddressAttribute* StunMessage::GetAddress(int type) const {
    function StunUInt32Attribute (line 218) | const StunUInt32Attribute* StunMessage::GetUInt32(int type) const {
    function StunUInt64Attribute (line 222) | const StunUInt64Attribute* StunMessage::GetUInt64(int type) const {
    function StunByteStringAttribute (line 226) | const StunByteStringAttribute* StunMessage::GetByteString(int type) co...
    function StunUInt16ListAttribute (line 230) | const StunUInt16ListAttribute* StunMessage::GetUInt16List(int type) co...
    function StunErrorCodeAttribute (line 234) | const StunErrorCodeAttribute* StunMessage::GetErrorCode() const {
    function StunUInt16ListAttribute (line 244) | const StunUInt16ListAttribute* StunMessage::GetUnknownAttributes() con...
    function StunMessage (line 592) | StunMessage* StunMessage::CreateNew() const {
    function StunAttributeValueType (line 600) | StunAttributeValueType StunMessage::GetAttributeValueType(int type) co...
    function StunAttribute (line 637) | StunAttribute* StunMessage::CreateAttribute(int type, size_t length) /...
    function StunAttribute (line 651) | const StunAttribute* StunMessage::GetAttribute(int type) const {
    function StunAttribute (line 723) | StunAttribute* StunAttribute::Create(StunAttributeValueType value_type,
    function StunAttributeValueType (line 797) | StunAttributeValueType StunAddressAttribute::value_type() const {
    function StunAttributeValueType (line 872) | StunAttributeValueType StunXorAddressAttribute::value_type() const {
    function StunAttributeValueType (line 959) | StunAttributeValueType StunUInt32Attribute::value_type() const {
    function StunAttributeValueType (line 991) | StunAttributeValueType StunUInt64Attribute::value_type() const {
    function StunAttributeValueType (line 1029) | StunAttributeValueType StunByteStringAttribute::value_type() const {
    function StunAttributeValueType (line 1096) | StunAttributeValueType StunErrorCodeAttribute::value_type() const {
    function StunAttributeValueType (line 1148) | StunAttributeValueType StunUInt16ListAttribute::value_type() const {
    function StunMethodToString (line 1205) | std::string StunMethodToString(int msg_type) {
    function GetStunSuccessResponseType (line 1254) | int GetStunSuccessResponseType(int req_type) {
    function GetStunErrorResponseType (line 1258) | int GetStunErrorResponseType(int req_type) {
    function IsStunRequestType (line 1262) | bool IsStunRequestType(int msg_type) {
    function IsStunIndicationType (line 1266) | bool IsStunIndicationType(int msg_type) {
    function IsStunSuccessResponseType (line 1270) | bool IsStunSuccessResponseType(int msg_type) {
    function IsStunErrorResponseType (line 1274) | bool IsStunErrorResponseType(int msg_type) {
    function ComputeStunCredentialHash (line 1278) | bool ComputeStunCredentialHash(const std::string& username,
    function CopyStunAttribute (line 1302) | std::unique_ptr<StunAttribute> CopyStunAttribute(
    function StunAttributeValueType (line 1329) | StunAttributeValueType RelayMessage::GetAttributeValueType(int type) c...
    function StunMessage (line 1350) | StunMessage* RelayMessage::CreateNew() const {
    function StunAttributeValueType (line 1354) | StunAttributeValueType TurnMessage::GetAttributeValueType(int type) co...
    function StunMessage (line 1379) | StunMessage* TurnMessage::CreateNew() const {
    function StunAttributeValueType (line 1383) | StunAttributeValueType IceMessage::GetAttributeValueType(int type) con...
    function StunMessage (line 1400) | StunMessage* IceMessage::CreateNew() const {

FILE: tgcalls/third_party/webrtc/src/api/transport/stun.h
  type StunMessageType (line 34) | enum StunMessageType {
  type StunAttributeType (line 53) | enum StunAttributeType {
  type StunAttributeValueType (line 73) | enum StunAttributeValueType {
  type StunAddressFamily (line 85) | enum StunAddressFamily {
  type StunErrorCode (line 93) | enum StunErrorCode {
  function IntegrityStatus (line 155) | enum class IntegrityStatus {
  function class (line 321) | class StunAttribute {
  function class (line 373) | class StunAddressAttribute : public StunAttribute {
  function StunAttributeValueType (line 438) | StunAttributeValueType value_type() const override;
  function class (line 470) | class StunUInt64Attribute : public StunAttribute {
  function class (line 489) | class StunByteStringAttribute : public StunAttribute {
  function class (line 518) | class StunErrorCodeAttribute : public StunAttribute {
  function class (line 549) | class StunUInt16ListAttribute : public StunAttribute {

FILE: tgcalls/third_party/webrtc/src/api/transport/stun_unittest.cc
  type cricket (line 25) | namespace cricket {
    class StunTest (line 27) | class StunTest : public ::testing::Test {
      method CheckStunHeader (line 29) | void CheckStunHeader(const StunMessage& msg,
      method CheckStunTransactionID (line 36) | void CheckStunTransactionID(const StunMessage& msg,
      method CheckStunAddressAttribute (line 45) | void CheckStunAddressAttribute(const StunAddressAttribute* addr,
      method ReadStunMessageTestCase (line 66) | size_t ReadStunMessageTestCase(StunMessage* msg,
    function TEST_F (line 567) | TEST_F(StunTest, MessageTypes) {
    function TEST_F (line 590) | TEST_F(StunTest, ReadMessageWithIPv4AddressAttribute) {
    function TEST_F (line 602) | TEST_F(StunTest, ReadMessageWithIPv4XorAddressAttribute) {
    function TEST_F (line 616) | TEST_F(StunTest, ReadMessageWithIPv6AddressAttribute) {
    function TEST_F (line 629) | TEST_F(StunTest, ReadMessageWithInvalidAddressAttribute) {
    function TEST_F (line 642) | TEST_F(StunTest, ReadMessageWithIPv6XorAddressAttribute) {
    function TEST_F (line 658) | TEST_F(StunTest, ReadRfc5769RequestMessage) {
    function TEST_F (line 685) | TEST_F(StunTest, ReadRfc5769ResponseMessage) {
    function TEST_F (line 708) | TEST_F(StunTest, ReadRfc5769ResponseMessageIPv6) {
    function TEST_F (line 731) | TEST_F(StunTest, ReadRfc5769RequestMessageLongTermAuth) {
    function TEST_F (line 759) | TEST_F(StunTest, ReadLegacyMessage) {
    function TEST_F (line 777) | TEST_F(StunTest, SetIPv6XorAddressAttributeOwner) {
    function TEST_F (line 822) | TEST_F(StunTest, SetIPv4XorAddressAttributeOwner) {
    function TEST_F (line 869) | TEST_F(StunTest, CreateIPv6AddressAttribute) {
    function TEST_F (line 880) | TEST_F(StunTest, CreateIPv4AddressAttribute) {
    function TEST_F (line 894) | TEST_F(StunTest, CreateAddressInArbitraryOrder) {
    function TEST_F (line 910) | TEST_F(StunTest, WriteMessageWithIPv6AddressAttribute) {
    function TEST_F (line 939) | TEST_F(StunTest, WriteMessageWithIPv4AddressAttribute) {
    function TEST_F (line 968) | TEST_F(StunTest, WriteMessageWithIPv6XorAddressAttribute) {
    function TEST_F (line 998) | TEST_F(StunTest, WriteMessageWithIPv4XoreAddressAttribute) {
    function TEST_F (line 1028) | TEST_F(StunTest, ReadByteStringAttribute) {
    function TEST_F (line 1040) | TEST_F(StunTest, ReadPaddedByteStringAttribute) {
    function TEST_F (line 1053) | TEST_F(StunTest, ReadErrorCodeAttribute) {
    function TEST_F (line 1070) | TEST_F(StunTest, GetErrorCodeValueWithNoErrorAttribute) {
    function TEST_F (line 1076) | TEST_F(StunTest, ReadMessageWithAUInt16ListAttribute) {
    function TEST_F (line 1088) | TEST_F(StunTest, ReadMessageWithAnUnknownAttribute) {
    function TEST_F (line 1100) | TEST_F(StunTest, ReadMessageWithOriginAttribute) {
    function TEST_F (line 1109) | TEST_F(StunTest, WriteMessageWithAnErrorCodeAttribute) {
    function TEST_F (line 1131) | TEST_F(StunTest, WriteMessageWithAUInt16ListAttribute) {
    function TEST_F (line 1155) | TEST_F(StunTest, WriteMessageWithOriginAttribute) {
    function CheckFailureToRead (line 1175) | void CheckFailureToRead(const unsigned char* testcase, size_t length) {
    function TEST_F (line 1182) | TEST_F(StunTest, FailToReadInvalidMessages) {
    function TEST_F (line 1192) | TEST_F(StunTest, FailToReadRtcpPacket) {
    function TEST_F (line 1197) | TEST_F(StunTest, ValidateMessageIntegrity) {
    function TEST_F (line 1279) | TEST_F(StunTest, AddMessageIntegrity) {
    function TEST_F (line 1318) | TEST_F(StunTest, ValidateMessageIntegrity32) {
    function TEST_F (line 1372) | TEST_F(StunTest, AddMessageIntegrity32) {
    function TEST_F (line 1413) | TEST_F(StunTest, AddMessageIntegrity32AndMessageIntegrity) {
    function TEST_F (line 1435) | TEST_F(StunTest, ValidateFingerprint) {
    function TEST_F (line 1471) | TEST_F(StunTest, AddFingerprint) {
    function TEST_F (line 1520) | TEST_F(StunTest, ReadRelayMessage) {
    function TEST_F (line 1637) | TEST_F(StunTest, RemoveAttribute) {
    function TEST_F (line 1695) | TEST_F(StunTest, ClearAttributes) {
    function TEST_F (line 1709) | TEST_F(StunTest, CopyAttribute) {
    function TEST_F (line 1755) | TEST_F(StunTest, Clone) {
    function TEST_F (line 1795) | TEST_F(StunTest, EqualAttributes) {
    function TEST_F (line 1857) | TEST_F(StunTest, ReduceTransactionIdIsHostOrderIndependent) {
    function TEST_F (line 1865) | TEST_F(StunTest, GoogMiscInfo) {
    function TEST_F (line 1899) | TEST_F(StunTest, IsStunMethod) {
    function TEST_F (line 1906) | TEST_F(StunTest, SizeRestrictionOnAttributes) {

FILE: tgcalls/third_party/webrtc/src/api/transport/test/create_feedback_generator.cc
  type webrtc (line 16) | namespace webrtc {
    function CreateFeedbackGenerator (line 18) | std::unique_ptr<FeedbackGenerator> CreateFeedbackGenerator(

FILE: tgcalls/third_party/webrtc/src/api/transport/test/create_feedback_generator.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/test/feedback_generator_interface.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/test/mock_network_control.h
  function namespace (line 17) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/transport/webrtc_key_value_config.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/turn_customizer.h
  function namespace (line 16) | namespace cricket {
  function namespace (line 21) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/uma_metrics.h
  function namespace (line 18) | namespace webrtc {

FILE: tgcalls/third_party/webrtc/src/api/units/data_rate.cc
  type webrtc (line 16) | namespace webrtc {
    function ToString (line 18) | std::string ToString(DataRate value) {

FILE: tgcalls/third_party/webrtc/src/api/units/data_rate.h
  function namespace (line 28) | namespace webrtc {
  function bps_or (line 65) | constexpr int64_t bps_or(int64_t fallback_value) const {
  function kbps_or (line 68) | constexpr int64_t kbps_or(int64_t fallback_value) const {
  function namespace (line 80) | namespace data_rate_impl {
  function std (line 141) | inline std::string ToLogString(DataRate value) {

FILE: tgcalls/third_party/webrtc/src/api/units/data_rate_unittest.cc
  type webrtc (line 16) | namespace webrtc {
    type test (line 17) | namespace test {
      function TEST (line 19) | TEST(DataRateTest, CompilesWithChecksAndLogs) {
      function TEST (line 26) | TEST(DataRateTest, ConstExpr) {
      function TEST (line 42) | TEST(DataRateTest, GetBackSameValues) {
      function TEST (line 48) | TEST(DataRateTest, GetDifferentPrefix) {
      function TEST (line 53) | TEST(DataRateTest, IdentityChecks) {
      function TEST (line 67) | TEST(DataRateTest, ComparisonOperators) {
      function TEST (line 87) | TEST(DataRateTest, ConvertsToAndFromDouble) {
      function TEST (line 104) | TEST(DataRateTest, Clamping) {
      function TEST (line 125) | TEST(DataRateTest, MathOperations) {
      function TEST (line 152) | TEST(UnitConversionTest, DataRateAndDataSizeAndTimeDelta) {
      function TEST (line 165) | TEST(UnitConversionTest, DataRateAndDataSizeAndFrequency) {
      function TEST (line 178) | TEST(UnitConversionDeathTest, DivisionFailsOnLargeSize) {

FILE: tgcalls/third_party/webrtc/src/api/units/data_size.cc
  type webrtc (line 16) | namespace webrtc {
    function ToString (line 18) | std::string ToString(DataSize value) {

FILE: tgcalls/third_party/webrtc/src/api/units/data_size.h
  function namespace (line 23) | namespace webrtc {
  function std (line 52) | inline std::string ToLogString(DataSize value) {

FILE: tgcalls/third_party/webrtc/src/api/units/data_size_unittest.cc
  type webrtc (line 17) | namespace webrtc {
    type test (line 18) | namespace test {
      function TEST (line 20) | TEST(DataSizeTest, ConstExpr) {
      function TEST (line 35) | TEST(DataSizeTest, GetBackSameValues) {
      function TEST (line 40) | TEST(DataSizeTest, IdentityChecks) {
      function TEST (line 54) | TEST(DataSizeTest, ComparisonOperators) {
      function TEST (line 74) | TEST(DataSizeTest, ConvertsToAndFromDouble) {
      function TEST (line 86) | TEST(DataSizeTest, MathOperations) {

FILE: tgcalls/third_party/webrtc/src/api/units/frequency.cc
  type webrtc (line 14) | namespace webrtc {
    function ToString (line 15) | std::string ToString(Frequency value) {

FILE: tgcalls/third_party/webrtc/src/api/units/frequency.h
  function namespace (line 25) | namespace webrtc {
  function std (line 88) | inline std::string ToLogString(Frequency value) {

FILE: tgcalls/third_party/webrtc/src/api/units/frequency_unittest.cc
  type webrtc (line 16) | namespace webrtc {
    type test (line 17) | namespace test {
      function TEST (line 18) | TEST(FrequencyTest, ConstExpr) {
      function TEST (line 29) | TEST(FrequencyTest, GetBackSameValues) {
      function TEST (line 35) | TEST(FrequencyTest, GetDifferentPrefix) {
      function TEST (line 42) | TEST(FrequencyTest, IdentityChecks) {
      function TEST (line 64) | TEST(FrequencyTest, ComparisonOperators) {
      function TEST (line 86) | TEST(FrequencyTest, Clamping) {
      function TEST (line 107) | TEST(FrequencyTest, MathOperations) {
      function TEST (line 127) | TEST(FrequencyTest, Rounding) {
      function TEST (line 141) | TEST(FrequencyTest, InfinityOperations) {
      function TEST (line 155) | TEST(UnitConversionTest, TimeDeltaAndFrequency) {

FILE: tgcalls/third_party/webrtc/src/api/units/time_delta.cc
  type webrtc (line 16) | namespace webrtc {
    function ToString (line 18) | std::string ToString(TimeDelta value) {

FILE: tgcalls/third_party/webrtc/sr
Copy disabled (too large) Download .json
Condensed preview — 8265 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (70,831K chars).
[
  {
    "path": ".clang-format",
    "chars": 40,
    "preview": "DisableFormat: true\nSortIncludes: false\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 16,
    "preview": "github: MarshalX"
  },
  {
    "path": ".github/workflows/build_and_deploy_pytgcalls_documentation.yaml",
    "chars": 859,
    "preview": "name: Build and deploy pytgcalls documentation to GitHub Pages\non:\n  push:\n    branches:\n      - main\n    paths:\n      -"
  },
  {
    "path": ".github/workflows/build_and_publish_linux_python_wheels_for_many_versions.yaml",
    "chars": 2169,
    "preview": "name: Build and publish wheels for Linux and many Python versions\non:\n  push:\n    branches:\n      - main\n      - pypi-de"
  },
  {
    "path": ".github/workflows/build_and_publish_macos_wheels_for_many_python_versions.yaml",
    "chars": 12936,
    "preview": "name: Build and publish wheels for macOS and many Python versions\non:\n  push:\n    branches:\n      - main\n      - pypi-de"
  },
  {
    "path": ".github/workflows/build_and_publish_win_x32_wheels_for_many_python_versions.yaml",
    "chars": 7541,
    "preview": "name: Build and publish wheels for Windows x32 and many Python versions\non:\n  push:\n    branches:\n      - main\n      - p"
  },
  {
    "path": ".github/workflows/build_and_publish_win_x64_wheels_for_many_python_versions.yaml",
    "chars": 7416,
    "preview": "name: Build and publish wheels for Windows x64 and many Python versions\non:\n  push:\n    branches:\n      - main\n      - p"
  },
  {
    "path": ".github/workflows/build_and_push_manylinux_images.yaml",
    "chars": 1555,
    "preview": "name: Build manylinux with dependencies and deploy images to GitHub Packages\non:\n  push:\n    branches:\n      - main\n    "
  },
  {
    "path": ".github/workflows/build_and_push_manylinux_webrtc_entrypoint_images.yaml",
    "chars": 1805,
    "preview": "name: Build manylinux with dependencies, WebRTC and entrypoint. Deploy images to GitHub Packages\non:\n  push:\n    branche"
  },
  {
    "path": ".github/workflows/build_and_push_manylinux_webrtc_images.yaml",
    "chars": 1661,
    "preview": "name: Build manylinux with dependencies and WebRTC. Deploy images to GitHub Packages\non:\n  push:\n    branches:\n      - m"
  },
  {
    "path": ".gitignore",
    "chars": 190,
    "preview": ".idea/\n\nLibraries/\n\ndist/\ncmake-build-debug/\n\n__pycache__/\n*.egg-info/\n\ncopy_build.sh\n\nconfig.h\n\n*.so\n\n*.session\n*.sessi"
  },
  {
    "path": ".gitmodules",
    "chars": 612,
    "preview": "[submodule \"cmake\"]\n    path = cmake\n    url = https://github.com/desktop-app/cmake_helpers\n[submodule \"tgcalls/third_pa"
  },
  {
    "path": "LICENSE",
    "chars": 7651,
    "preview": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007"
  },
  {
    "path": "MANIFEST.in",
    "chars": 15,
    "preview": "include LICENSE"
  },
  {
    "path": "README.md",
    "chars": 9756,
    "preview": "<p align=\"center\">\n    <a href=\"https://github.com/MarshalX/tgcalls\">\n        <img src=\"https://github.com/MarshalX/tgca"
  },
  {
    "path": "build/macos/README.md",
    "chars": 5683,
    "preview": "# Build instruction for macOS\n\n**It works on Apple Silicon (M1). But there is problem with building deps \non GitHub CI f"
  },
  {
    "path": "build/manylinux/Dockerfile",
    "chars": 5352,
    "preview": "ARG MANYLINUX_PLATFORM\nFROM quay.io/pypa/$MANYLINUX_PLATFORM AS builder\n\nENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:"
  },
  {
    "path": "build/manylinux/dev/Dockerfile",
    "chars": 6813,
    "preview": "ARG MANYLINUX_PLATFORM\nFROM quay.io/pypa/$MANYLINUX_PLATFORM AS builder\n\nENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:"
  },
  {
    "path": "build/manylinux/dev/entrypoint.sh",
    "chars": 767,
    "preview": "#!/bin/bash\nset -e -u -x\n\nPYTHON_VERSIONS=$1\nMANYLINUX_PLATFORM=$2\n\nfunction repair_wheel {\n    wheel=\"$1\"\n    if ! audi"
  },
  {
    "path": "build/manylinux/entrypoint/Dockerfile",
    "chars": 218,
    "preview": "ARG MANYLINUX_PLATFORM\nFROM ghcr.io/marshalx/tgcalls/$MANYLINUX_PLATFORM-webrtc:latest\n\nCOPY build/manylinux/entrypoint/"
  },
  {
    "path": "build/manylinux/entrypoint/entrypoint.sh",
    "chars": 824,
    "preview": "#!/bin/bash\nset -e -u -x\n\nPYTHON_VERSIONS=$1\nMANYLINUX_PLATFORM=$2\n\nexport TWINE_USERNAME=$3\nexport TWINE_PASSWORD=$4\n\nc"
  },
  {
    "path": "build/manylinux/webrtc/Dockerfile",
    "chars": 649,
    "preview": "ARG MANYLINUX_PLATFORM\nFROM ghcr.io/marshalx/tgcalls/$MANYLINUX_PLATFORM:latest AS builder\n\nCOPY tgcalls/third_party/web"
  },
  {
    "path": "build/ubuntu/Dockerfile",
    "chars": 6778,
    "preview": "FROM ubuntu:latest AS builder\n\nENV DEBIAN_FRONTEND=noninteractive\nENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig:/usr/lo"
  },
  {
    "path": "build/windows/README.md",
    "chars": 288,
    "preview": "# Build instructions for Windows\n\n- [Build instruction for Windows x32](../../.github/workflows/build_and_publish_win_x3"
  },
  {
    "path": "docker-compose.yaml",
    "chars": 955,
    "preview": "version: \"3.0\"\nservices:\n  tgcalls_x86_64:\n    build:\n      context: .\n      dockerfile: build/manylinux/dev/Dockerfile\n"
  },
  {
    "path": "examples/LICENSE",
    "chars": 6554,
    "preview": "CC0 1.0 Universal\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclus"
  },
  {
    "path": "examples/README.md",
    "chars": 1549,
    "preview": "## Examples\n\nAll examples are licensed under the [CC0 License](LICENSE) and are therefore fully \ndedicated to the public"
  },
  {
    "path": "examples/device_playout.py",
    "chars": 1519,
    "preview": "import os\nimport asyncio\n\nimport pytgcalls\n\n# choose one of this\nimport telethon\nimport pyrogram\n\n# EDIT VALUES!\nAPI_HAS"
  },
  {
    "path": "examples/file_playout.py",
    "chars": 1946,
    "preview": "import os\nimport asyncio\n\nimport pytgcalls\n\n# choose one of this\nimport telethon\nimport pyrogram\n\n# EDIT VALUES!\nAPI_HAS"
  },
  {
    "path": "examples/player_as_smart_plugin.py",
    "chars": 3120,
    "preview": "import os\n\nimport ffmpeg  # pip install ffmpeg-python\nfrom pyrogram import Client, filters\nfrom pyrogram.types import Me"
  },
  {
    "path": "examples/pyav.py",
    "chars": 2059,
    "preview": "# Example of processing audio using pyav: https://github.com/PyAV-Org/PyAV.\n# Requires av (pip3 install av) and numpy (p"
  },
  {
    "path": "examples/radio_as_smart_plugin.py",
    "chars": 2469,
    "preview": "import signal\n\nimport ffmpeg  # pip install ffmpeg-python\nfrom pyrogram import Client, filters\nfrom pyrogram.types impor"
  },
  {
    "path": "examples/recorder_as_smart_plugin.py",
    "chars": 3417,
    "preview": "\"\"\"Record Audio from Telegram Voice Chat\n\nDependencies:\n- ffmpeg\n\nRequirements (pip):\n- pytgcalls[pyrogram]\n- ffmpeg-pyt"
  },
  {
    "path": "examples/restream_using_raw_data.py",
    "chars": 2116,
    "preview": "import asyncio\nimport os\nfrom typing import Optional\n\nfrom pytgcalls import GroupCallFactory\n\n# choose one of this\nimpor"
  },
  {
    "path": "pytgcalls/LICENSE",
    "chars": 7651,
    "preview": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007"
  },
  {
    "path": "pytgcalls/MANIFEST.in",
    "chars": 15,
    "preview": "include LICENSE"
  },
  {
    "path": "pytgcalls/helpers.py",
    "chars": 17158,
    "preview": "# PytgVoIP - Telegram VoIP Library for Python\n# Copyright (C) 2020 bakatrouble <https://github.com/bakatrouble>\n#\n# This"
  },
  {
    "path": "pytgcalls/pdoc/config.mako",
    "chars": 90,
    "preview": "<%!\n\nshow_inherited_members = True\n\ngoogle_search_query = '''\n    site:tgcalls.org\n'''\n\n%>"
  },
  {
    "path": "pytgcalls/pdoc/credits.mako",
    "chars": 101,
    "preview": "<p>© Copyright 2020-2021 <a target=\"_blank\" href=\"https://github.com/MarshalX\">Il`ya (Marshal)</a></>"
  },
  {
    "path": "pytgcalls/pdoc/head.mako",
    "chars": 348,
    "preview": "<meta property=\"og:type\" content=\"object\" />\n<meta property=\"og:title\" content=\"pytgcalls documentation\" />\n<meta proper"
  },
  {
    "path": "pytgcalls/pdoc/logo.mako",
    "chars": 590,
    "preview": "<p align=\"center\">\n    <a href=\"/\">\n        <img src=\"https://github.com/MarshalX/tgcalls/raw/main/.github/images/pytgca"
  },
  {
    "path": "pytgcalls/pyproject.toml",
    "chars": 271,
    "preview": "[tool.black]\nline-length = 120\nskip-string-normalization=true\ntarget-version = ['py36']\ninclude = '\\.pyi?$'\nexclude = ''"
  },
  {
    "path": "pytgcalls/pytgcalls/__init__.py",
    "chars": 1378,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/dispatcher/__init__.py",
    "chars": 1169,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/dispatcher/action.py",
    "chars": 1078,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/dispatcher/dispatcher.py",
    "chars": 3313,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/dispatcher/dispatcher_mixin.py",
    "chars": 2345,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/exceptions.py",
    "chars": 1222,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/group_call_factory.py",
    "chars": 5392,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/group_call_type.py",
    "chars": 1038,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/__init__.py",
    "chars": 1615,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call.py",
    "chars": 9585,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call_base.py",
    "chars": 16475,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call_device.py",
    "chars": 2542,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call_file.py",
    "chars": 5356,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call_native.py",
    "chars": 7198,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/implementation/group_call_raw.py",
    "chars": 4191,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/__init__.py",
    "chars": 1031,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/base_bridge.py",
    "chars": 4923,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/__init__.py",
    "chars": 1284,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/base_wrapper.py",
    "chars": 1113,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/group_call_discarded_wrapper.py",
    "chars": 1063,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/group_call_participant_wrapper.py",
    "chars": 3964,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/group_call_wrapper.py",
    "chars": 1165,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/update/__init__.py",
    "chars": 1167,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/update/update_group_call_participants_wrapper.py",
    "chars": 1277,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/data/update/update_group_call_wrapper.py",
    "chars": 1322,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/exceptions.py",
    "chars": 1026,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/pyrogram_bridge.py",
    "chars": 9097,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto/telethon_bridge.py",
    "chars": 7956,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/mtproto_client_type.py",
    "chars": 1038,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/pytgcalls/utils.py",
    "chars": 9638,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/setup.py",
    "chars": 3812,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/test.py",
    "chars": 19962,
    "preview": "#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting the Python binding with MT"
  },
  {
    "path": "pytgcalls/tgcalls_dev.py",
    "chars": 341,
    "preview": "import os\n\n\ndef __bootstrap__():\n    global __bootstrap__, __loader__, __file__\n    import sys, pkg_resources, imp\n\n    "
  },
  {
    "path": "setup.py",
    "chars": 8231,
    "preview": "# -*- coding: utf-8 -*-\n\n#  tgcalls - a Python binding for C++ library by Telegram\n#  pytgcalls - a library connecting t"
  },
  {
    "path": "tgcalls/cmake/external_ffmpeg.cmake",
    "chars": 2569,
    "preview": "# This file is part of Desktop App Toolkit,\n# a set of libraries for developing nice desktop applications.\n#\n# For licen"
  },
  {
    "path": "tgcalls/cmake/lib_tgcalls.cmake",
    "chars": 7442,
    "preview": "add_library(lib_tgcalls STATIC)\n\nif (WIN32)\n    init_target(lib_tgcalls cxx_std_17) # Small amount of patches required h"
  },
  {
    "path": "tgcalls/getSourcesList.py",
    "chars": 234,
    "preview": "import os\n\nSRC_DIR = 'src'\n\nif __name__ == '__main__':\n    sources = list()\n    for root, _, files in os.walk(SRC_DIR):\n"
  },
  {
    "path": "tgcalls/src/FileAudioDevice.cpp",
    "chars": 13035,
    "preview": "#include \"FileAudioDevice.h\"\n\n#include <cstring>\n\n#include <modules/audio_device/audio_device_impl.h>\n#include <rtc_base"
  },
  {
    "path": "tgcalls/src/FileAudioDevice.h",
    "chars": 5855,
    "preview": "/*\n *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by"
  },
  {
    "path": "tgcalls/src/FileAudioDeviceDescriptor.h",
    "chars": 441,
    "preview": "#pragma once\n\n#include <string>\n\n\nclass FileAudioDeviceDescriptor {\npublic:\n    std::function<std::string()> _getInputFi"
  },
  {
    "path": "tgcalls/src/InstanceHolder.h",
    "chars": 320,
    "preview": "#pragma once\n\n#include \"tgcalls/Instance.h\"\n#include \"tgcalls/group/GroupInstanceCustomImpl.h\"\n\nstruct InstanceHolder {\n"
  },
  {
    "path": "tgcalls/src/NativeInstance.cpp",
    "chars": 14433,
    "preview": "#include <iostream>\n#include <utility>\n\n#include <rtc_base/ssl_adapter.h>\n\n#include \"NativeInstance.h\"\n\nnamespace py = p"
  },
  {
    "path": "tgcalls/src/NativeInstance.h",
    "chars": 2840,
    "preview": "#pragma once\n\n#include <pybind11/pybind11.h>\n\n#include <modules/audio_device/include/audio_device.h>\n#include <tgcalls/T"
  },
  {
    "path": "tgcalls/src/RawAudioDevice.cpp",
    "chars": 11208,
    "preview": "#include \"RawAudioDevice.h\"\n\n#include <cstring>\n\n#include <modules/audio_device/audio_device_impl.h>\n#include <rtc_base/"
  },
  {
    "path": "tgcalls/src/RawAudioDevice.h",
    "chars": 4403,
    "preview": "#include <cstdio>\n\n#include <memory>\n#include <string>\n\n#include <modules/audio_device/audio_device_impl.h>\n#include <mo"
  },
  {
    "path": "tgcalls/src/RawAudioDeviceDescriptor.cpp",
    "chars": 422,
    "preview": "#include \"RawAudioDeviceDescriptor.h\"\n\nvoid RawAudioDeviceDescriptor::_setRecordedBuffer(int8_t *frame, size_t length) c"
  },
  {
    "path": "tgcalls/src/RawAudioDeviceDescriptor.h",
    "chars": 540,
    "preview": "#pragma once\n\n#include <string>\n#include <functional>\n\n#include <pybind11/pybind11.h>\n\nnamespace py = pybind11;\n\nclass R"
  },
  {
    "path": "tgcalls/src/RtcServer.cpp",
    "chars": 721,
    "preview": "#include \"RtcServer.h\"\n\nusing namespace std;\n\nRtcServer::RtcServer(string ip, string ipv6, int port, string login, strin"
  },
  {
    "path": "tgcalls/src/RtcServer.h",
    "chars": 395,
    "preview": "#pragma once\n\n#include <tgcalls/Instance.h>\n\nusing namespace std;\n\nstruct RtcServer\n{\n    RtcServer(string ip, string ip"
  },
  {
    "path": "tgcalls/src/WrappedAudioDeviceModuleImpl.cpp",
    "chars": 2775,
    "preview": "#include \"WrappedAudioDeviceModuleImpl.h\"\n\nrtc::scoped_refptr<webrtc::AudioDeviceModuleImpl>\nWrappedAudioDeviceModuleImp"
  },
  {
    "path": "tgcalls/src/WrappedAudioDeviceModuleImpl.h",
    "chars": 1112,
    "preview": "#pragma once\n\n#include <rtc_base/logging.h>\n#include <rtc_base/ref_counted_object.h>\n#include <modules/audio_device/audi"
  },
  {
    "path": "tgcalls/src/config.h.in",
    "chars": 278,
    "preview": "#ifndef CONFIG_H\n#define CONFIG_H\n\n#define PROJECT_NAME \"@PROJECT_NAME@\"\n#define PROJECT_VER  \"@PROJECT_VERSION@\"\n#defin"
  },
  {
    "path": "tgcalls/src/tgcalls.cpp",
    "chars": 7813,
    "preview": "#include <cstdio>\n#include <sstream>\n\n#include <pybind11/smart_holder.h>\n#include <pybind11/stl.h>\n#include <pybind11/fu"
  },
  {
    "path": "tgcalls/src/video/PythonSource.cpp",
    "chars": 882,
    "preview": "#include \"PythonSource.h\"\n\n\nPythonSource::PythonSource(std::function<std::string()> getNextFrameBuffer, float fps, int w"
  },
  {
    "path": "tgcalls/src/video/PythonSource.h",
    "chars": 531,
    "preview": "#pragma once\n\n#include <functional>\n#include <memory>\n#include <string>\n#include <api/scoped_refptr.h>\n#include <api/vid"
  },
  {
    "path": "tgcalls/src/video/PythonVideoTrackSource.cpp",
    "chars": 2789,
    "preview": "#include <system_wrappers/include/sleep.h>\n\n#include \"PythonVideoTrackSource.h\"\n\n\nclass PythonVideoSource : public rtc::"
  },
  {
    "path": "tgcalls/src/video/PythonVideoTrackSource.h",
    "chars": 588,
    "preview": "#pragma once\n\n#include <thread>\n#include <memory>\n#include <functional>\n#include <api/scoped_refptr.h>\n#include <media/b"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/.clang-format",
    "chars": 40,
    "preview": "DisableFormat: true\nSortIncludes: false\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/.gitignore",
    "chars": 19,
    "preview": ".DS_Store\n._*\n*.*~\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/LICENSE",
    "chars": 7651,
    "preview": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/README.md",
    "chars": 343,
    "preview": "# Telegram Calls Library\n\nCopyright (c) 2020 The Telegram Calls Library Authors.\n\nThis code is published under the terms"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/AudioDeviceHelper.cpp",
    "chars": 4267,
    "preview": "#include \"AudioDeviceHelper.h\"\n\n#include \"modules/audio_device/include/audio_device.h\"\n#include \"rtc_base/logging.h\"\n\nna"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/AudioDeviceHelper.h",
    "chars": 387,
    "preview": "#ifndef TGCALLS_AUDIO_DEVICE_HELPER_H\n#define TGCALLS_AUDIO_DEVICE_HELPER_H\n\n#include <string>\n\nnamespace webrtc {\nclass"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/AudioFrame.h",
    "chars": 304,
    "preview": "#pragma once\n\n#include <cinttypes>\n#include <cstring>\n\nnamespace tgcalls {\nstruct AudioFrame {\n  const int16_t *audio_sa"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/CodecSelectHelper.cpp",
    "chars": 9329,
    "preview": "#include \"CodecSelectHelper.h\"\n\n#include \"platform/PlatformInterface.h\"\n\n#include \"media/base/media_constants.h\"\n#includ"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/CodecSelectHelper.h",
    "chars": 737,
    "preview": "#ifndef TGCALLS_CODEC_SELECT_HELPER_H\n#define TGCALLS_CODEC_SELECT_HELPER_H\n\n#include \"Message.h\"\n#include \"media/base/c"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/CryptoHelper.cpp",
    "chars": 1584,
    "preview": "#include \"CryptoHelper.h\"\n\n#include <cstring>\n#include <limits.h>\n\nnamespace tgcalls {\n\nAesKeyIv PrepareAesKeyIv(const u"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/CryptoHelper.h",
    "chars": 1609,
    "preview": "#ifndef TGCALLS_CRYPTO_HELPER_H\n#define TGCALLS_CRYPTO_HELPER_H\n\nextern \"C\" {\n#include <openssl/sha.h>\n#include <openssl"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/EncryptedConnection.cpp",
    "chars": 20623,
    "preview": "#include \"EncryptedConnection.h\"\n\n#include \"CryptoHelper.h\"\n#include \"rtc_base/logging.h\"\n#include \"rtc_base/byte_buffer"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/EncryptedConnection.h",
    "chars": 3110,
    "preview": "#ifndef TGCALLS_ENCRYPTED_CONNECTION_H\n#define TGCALLS_ENCRYPTED_CONNECTION_H\n\n#include \"Instance.h\"\n#include \"Message.h"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/FakeAudioDeviceModule.cpp",
    "chars": 8170,
    "preview": "#include \"FakeAudioDeviceModule.h\"\n\n#include \"modules/audio_device/include/audio_device_default.h\"\n#include \"rtc_base/re"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/FakeAudioDeviceModule.h",
    "chars": 1238,
    "preview": "#pragma once\n\n#include <functional>\n#include <memory>\n\n#include \"AudioFrame.h\"\n\nnamespace webrtc {\nclass AudioDeviceModu"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/FakeVideoTrackSource.cpp",
    "chars": 5811,
    "preview": "#include \"FakeVideoTrackSource.h\"\n\n#include \"api/video/i420_buffer.h\"\n#include \"media/base/video_broadcaster.h\"\n#include"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/FakeVideoTrackSource.h",
    "chars": 765,
    "preview": "#pragma once\n\n#include <functional>\n#include <memory>\n\nnamespace webrtc {\nclass VideoTrackSourceInterface;\nclass VideoFr"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Instance.cpp",
    "chars": 1531,
    "preview": "#include \"Instance.h\"\n\n#include <algorithm>\n#include <stdarg.h>\n\nnamespace tgcalls {\nnamespace {\n\nstd::function<void(std"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Instance.h",
    "chars": 6538,
    "preview": "#ifndef TGCALLS_INSTANCE_H\n#define TGCALLS_INSTANCE_H\n\n#include <functional>\n#include <vector>\n#include <string>\n#includ"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/InstanceImpl.cpp",
    "chars": 5607,
    "preview": "#include \"InstanceImpl.h\"\n\n#include \"LogSinkImpl.h\"\n#include \"Manager.h\"\n#include \"MediaManager.h\"\n#include \"VideoCaptur"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/InstanceImpl.h",
    "chars": 1856,
    "preview": "#ifndef TGCALLS_INSTANCE_IMPL_H\n#define TGCALLS_INSTANCE_IMPL_H\n\n#include \"Instance.h\"\n\nnamespace tgcalls {\n\nclass LogSi"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/LogSinkImpl.cpp",
    "chars": 1743,
    "preview": "#include \"LogSinkImpl.h\"\n\n#include \"Instance.h\"\n\n#ifdef WEBRTC_WIN\n#include \"windows.h\"\n#include <ctime>\n#else // WEBRTC"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/LogSinkImpl.h",
    "chars": 647,
    "preview": "#ifndef TGCALLS_LOG_SINK_IMPL_H\n#define TGCALLS_LOG_SINK_IMPL_H\n\n#include \"rtc_base/logging.h\"\n#include <fstream>\n\nnames"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Manager.cpp",
    "chars": 16607,
    "preview": "#include \"Manager.h\"\n\n#include \"rtc_base/byte_buffer.h\"\n#include \"StaticThreads.h\"\n\n#include <fstream>\n\nnamespace tgcall"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Manager.h",
    "chars": 3411,
    "preview": "#ifndef TGCALLS_MANAGER_H\n#define TGCALLS_MANAGER_H\n\n#include \"ThreadLocalObject.h\"\n#include \"EncryptedConnection.h\"\n#in"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/MediaManager.cpp",
    "chars": 38480,
    "preview": "#include \"MediaManager.h\"\n\n#include \"Instance.h\"\n#include \"VideoCaptureInterfaceImpl.h\"\n#include \"VideoCapturerInterface"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/MediaManager.h",
    "chars": 6247,
    "preview": "#ifndef TGCALLS_MEDIA_MANAGER_H\n#define TGCALLS_MEDIA_MANAGER_H\n\n#include \"rtc_base/thread.h\"\n#include \"rtc_base/copy_on"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Message.cpp",
    "chars": 11474,
    "preview": "#include \"Message.h\"\n\n#include \"rtc_base/byte_buffer.h\"\n#include \"api/jsep_ice_candidate.h\"\n\nnamespace tgcalls {\nnamespa"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Message.h",
    "chars": 3089,
    "preview": "#ifndef TGCALLS_MESSAGE_H\n#define TGCALLS_MESSAGE_H\n\n#include \"api/candidate.h\"\n#include \"api/video_codecs/sdp_video_for"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/NetworkManager.cpp",
    "chars": 13139,
    "preview": "#include \"NetworkManager.h\"\n\n#include \"Message.h\"\n\n#include \"p2p/base/basic_packet_socket_factory.h\"\n#include \"p2p/clien"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/NetworkManager.h",
    "chars": 3920,
    "preview": "#ifndef TGCALLS_NETWORK_MANAGER_H\n#define TGCALLS_NETWORK_MANAGER_H\n\n#include \"rtc_base/thread.h\"\n\n#include \"EncryptedCo"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/PlatformContext.h",
    "chars": 203,
    "preview": "#ifndef TGCALLS_PLATFORM_CONTEXT_H\n#define TGCALLS_PLATFORM_CONTEXT_H\n\nnamespace tgcalls {\n\nclass PlatformContext {\n\npub"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/SctpDataChannelProviderInterfaceImpl.cpp",
    "chars": 5320,
    "preview": "#include \"SctpDataChannelProviderInterfaceImpl.h\"\n\n#include \"p2p/base/dtls_transport.h\"\n\nnamespace tgcalls {\n\nSctpDataCh"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/SctpDataChannelProviderInterfaceImpl.h",
    "chars": 2318,
    "preview": "#ifndef TGCALLS_SCTP_DATA_CHANNEL_PROVIDER_IMPL_H\n#define TGCALLS_SCTP_DATA_CHANNEL_PROVIDER_IMPL_H\n\n#include \"api/turn_"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/StaticThreads.cpp",
    "chars": 3904,
    "preview": "#include \"StaticThreads.h\"\n\n#include \"rtc_base/thread.h\"\n#include \"call/call.h\"\n\n#include <mutex>\n#include <algorithm>\n\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/StaticThreads.h",
    "chars": 852,
    "preview": "#pragma once\n\n#include <cstddef>\n#include <memory>\n\nnamespace rtc {\nclass Thread;\ntemplate <class T>\nclass scoped_refptr"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/Stats.h",
    "chars": 664,
    "preview": "#ifndef TGCALLS_STATS_H\n#define TGCALLS_STATS_H\n\nnamespace tgcalls {\n\nenum class CallStatsConnectionEndpointType {\n    C"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/ThreadLocalObject.cpp",
    "chars": 1,
    "preview": "\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/ThreadLocalObject.h",
    "chars": 1505,
    "preview": "#ifndef TGCALLS_THREAD_LOCAL_OBJECT_H\n#define TGCALLS_THREAD_LOCAL_OBJECT_H\n\n#include \"rtc_base/thread.h\"\n#include \"rtc_"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/TurnCustomizerImpl.cpp",
    "chars": 564,
    "preview": "#include \"TurnCustomizerImpl.h\"\n\n#include \"api/transport/stun.h\"\n\nnamespace tgcalls {\n\nTurnCustomizerImpl::TurnCustomize"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/TurnCustomizerImpl.h",
    "chars": 510,
    "preview": "#ifndef TGCALLS_TURN_CUSTOMIZER_H\n#define TGCALLS_TURN_CUSTOMIZER_H\n\n#include \"api/turn_customizer.h\"\n\nnamespace tgcalls"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterface.cpp",
    "chars": 596,
    "preview": "#include \"VideoCaptureInterface.h\"\n\n#include \"VideoCaptureInterfaceImpl.h\"\n\nnamespace tgcalls {\n\nstd::unique_ptr<VideoCa"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterface.h",
    "chars": 1830,
    "preview": "#ifndef TGCALLS_VIDEO_CAPTURE_INTERFACE_H\n#define TGCALLS_VIDEO_CAPTURE_INTERFACE_H\n\n#include <string>\n#include <memory>"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterfaceImpl.cpp",
    "chars": 8521,
    "preview": "#include \"VideoCaptureInterfaceImpl.h\"\n\n#include \"VideoCapturerInterface.h\"\n#include \"Manager.h\"\n#include \"MediaManager."
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/VideoCaptureInterfaceImpl.h",
    "chars": 3180,
    "preview": "#ifndef TGCALLS_VIDEO_CAPTURE_INTERFACE_IMPL_H\n#define TGCALLS_VIDEO_CAPTURE_INTERFACE_IMPL_H\n\n#include \"VideoCaptureInt"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/VideoCapturerInterface.h",
    "chars": 1119,
    "preview": "#ifndef TGCALLS_VIDEO_CAPTURER_INTERFACE_H\n#define TGCALLS_VIDEO_CAPTURER_INTERFACE_H\n\n#include \"Instance.h\"\n\n#include <"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSource.cpp",
    "chars": 1647,
    "preview": "//\n//  DesktopCaptureSource.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 29.12.2020.\n//  Copyright © 2020 M"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSource.h",
    "chars": 1619,
    "preview": "//\n//  DesktopCaptureSource.h\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 29.12.2020.\n//  Copyright © 2020 M"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceHelper.cpp",
    "chars": 13461,
    "preview": "//\n//  DesktopCaptureSourceHelper.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © "
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceHelper.h",
    "chars": 1346,
    "preview": "//\n//  DesktopCaptureSourceHelper.h\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © "
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceHelper.mm",
    "chars": 9448,
    "preview": "//\n//  DesktopCaptureSourceHelper.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © "
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceManager.cpp",
    "chars": 2130,
    "preview": "//\n//  DesktopCaptureSourceManager.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright ©"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/desktop_capturer/DesktopCaptureSourceManager.h",
    "chars": 1164,
    "preview": "//\n//  DesktopCaptureSourceManager.h\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright ©"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceCustomImpl.cpp",
    "chars": 148374,
    "preview": "#include \"GroupInstanceCustomImpl.h\"\n\n#include <memory>\n#include <iomanip>\n\n#include \"Instance.h\"\n#include \"VideoCapture"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceCustomImpl.h",
    "chars": 2046,
    "preview": "#ifndef TGCALLS_GROUP_INSTANCE_CUSTOM_IMPL_H\n#define TGCALLS_GROUP_INSTANCE_CUSTOM_IMPL_H\n\n#include <functional>\n#includ"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupInstanceImpl.h",
    "chars": 5687,
    "preview": "#ifndef TGCALLS_GROUP_INSTANCE_IMPL_H\n#define TGCALLS_GROUP_INSTANCE_IMPL_H\n\n#include <functional>\n#include <vector>\n#in"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayload.h",
    "chars": 1764,
    "preview": "#ifndef TGCALLS_GROUP_JOIN_PAYLOAD_H\n#define TGCALLS_GROUP_JOIN_PAYLOAD_H\n\n#include <vector>\n#include <string>\n#include "
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayloadInternal.cpp",
    "chars": 13205,
    "preview": "#include \"GroupJoinPayloadInternal.h\"\n\n#include \"third-party/json11.hpp\"\n#include <sstream>\n\nnamespace tgcalls {\n\nnamesp"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupJoinPayloadInternal.h",
    "chars": 691,
    "preview": "#ifndef TGCALLS_GROUP_JOIN_PAYLOAD_INTERNAL_H\n#define TGCALLS_GROUP_JOIN_PAYLOAD_INTERNAL_H\n\n#include \"GroupJoinPayload."
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupNetworkManager.cpp",
    "chars": 21278,
    "preview": "#include \"group/GroupNetworkManager.h\"\n\n#include \"p2p/base/basic_packet_socket_factory.h\"\n#include \"p2p/client/basic_por"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/GroupNetworkManager.h",
    "chars": 4808,
    "preview": "#ifndef TGCALLS_GROUP_NETWORK_MANAGER_H\n#define TGCALLS_GROUP_NETWORK_MANAGER_H\n\n#ifdef WEBRTC_WIN\n// Compiler errors in"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/StreamingPart.cpp",
    "chars": 15864,
    "preview": "#include \"StreamingPart.h\"\n\n#include \"rtc_base/logging.h\"\n#include \"rtc_base/third_party/base64/base64.h\"\n\nextern \"C\" {\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/group/StreamingPart.h",
    "chars": 867,
    "preview": "#ifndef TGCALLS_STREAMING_PART_H\n#define TGCALLS_STREAMING_PART_H\n\n#include \"absl/types/optional.h\"\n#include <vector>\n#i"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/legacy/InstanceImplLegacy.cpp",
    "chars": 10695,
    "preview": "#include \"InstanceImplLegacy.h\"\n\n#include <stdarg.h>\n\nextern \"C\" {\n#include <openssl/sha.h>\n#include <openssl/aes.h>\n#if"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/legacy/InstanceImplLegacy.h",
    "chars": 2048,
    "preview": "#ifndef TGCALLS_INSTANCE_IMPL_LEGACY_H\n#define TGCALLS_INSTANCE_IMPL_LEGACY_H\n\n#include \"Instance.h\"\n\n#include \"VoIPCont"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/PlatformInterface.h",
    "chars": 10203,
    "preview": "#ifndef TGCALLS_PLATFORM_INTERFACE_H\n#define TGCALLS_PLATFORM_INTERFACE_H\n\n#include \"rtc_base/thread.h\"\n#include \"api/vi"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidContext.cpp",
    "chars": 1012,
    "preview": "#include \"AndroidContext.h\"\n\n#include \"sdk/android/native_api/jni/jvm.h\"\n\nnamespace tgcalls {\n\nAndroidContext::AndroidCo"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidContext.h",
    "chars": 461,
    "preview": "#ifndef TGCALLS_ANDROID_CONTEXT_H\n#define TGCALLS_ANDROID_CONTEXT_H\n\n#include \"PlatformContext.h\"\n\n#include <jni.h>\n\nnam"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidInterface.cpp",
    "chars": 4429,
    "preview": "#include \"AndroidInterface.h\"\n\n#include <rtc_base/ssl_adapter.h>\n#include <modules/utility/include/jvm_android.h>\n#inclu"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/AndroidInterface.h",
    "chars": 1379,
    "preview": "#ifndef TGCALLS_ANDROID_INTERFACE_H\n#define TGCALLS_ANDROID_INTERFACE_H\n\n#include \"sdk/android/native_api/video/video_so"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCameraCapturer.cpp",
    "chars": 2726,
    "preview": "#include \"VideoCameraCapturer.h\"\n\n#include <stdint.h>\n#include <memory>\n#include <algorithm>\n\n#include \"AndroidInterface"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCameraCapturer.h",
    "chars": 1317,
    "preview": "#ifndef TGCALLS_VIDEO_CAMERA_CAPTURER_H\n#define TGCALLS_VIDEO_CAMERA_CAPTURER_H\n\n#include \"api/scoped_refptr.h\"\n#include"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCapturerInterfaceImpl.cpp",
    "chars": 887,
    "preview": "#include \"VideoCapturerInterfaceImpl.h\"\n\n#include \"VideoCameraCapturer.h\"\n\nnamespace tgcalls {\n\nVideoCapturerInterfaceIm"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/android/VideoCapturerInterfaceImpl.h",
    "chars": 829,
    "preview": "#ifndef TGCALLS_VIDEO_CAPTURER_INTERFACE_IMPL_H\n#define TGCALLS_VIDEO_CAPTURER_INTERFACE_IMPL_H\n\n#include \"VideoCapturer"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/AudioDeviceModuleIOS.h",
    "chars": 813,
    "preview": "#ifndef TGCALLS_AUDIO_DEVICE_MODULE_IOS\n#define TGCALLS_AUDIO_DEVICE_MODULE_IOS\n\n#include \"platform/PlatformInterface.h\""
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/AudioDeviceModuleMacos.h",
    "chars": 588,
    "preview": "\n#ifndef TGCALLS_AUDIO_DEVICE_MODULE_MACOS\n#define TGCALLS_AUDIO_DEVICE_MODULE_MACOS\n\n#include \"platform/PlatformInterfa"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/CustomExternalCapturer.h",
    "chars": 711,
    "preview": "#ifndef TGCALLS_CUSTOM_EXTERNAL_CAPTURER_H\n#define TGCALLS_CUSTOM_EXTERNAL_CAPTURER_H\n#ifdef WEBRTC_IOS\n#import <Foundat"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/CustomExternalCapturer.mm",
    "chars": 3112,
    "preview": "#include \"CustomExternalCapturer.h\"\n\n#import <AVFoundation/AVFoundation.h>\n\n#include \"rtc_base/logging.h\"\n#import \"base/"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinInterface.h",
    "chars": 1354,
    "preview": "#ifndef TGCALLS_DARWIN_INTERFACE_H\n#define TGCALLS_DARWIN_INTERFACE_H\n\n#include \"platform/PlatformInterface.h\"\n\nnamespac"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinInterface.mm",
    "chars": 5439,
    "preview": "#include \"DarwinInterface.h\"\n\n#include \"VideoCapturerInterfaceImpl.h\"\n#include \"sdk/objc/native/src/objc_video_track_sou"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinVideoSource.h",
    "chars": 1707,
    "preview": "/*\n *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DarwinVideoSource.mm",
    "chars": 5913,
    "preview": "/*\n *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceView.h",
    "chars": 1099,
    "preview": "//\n//  DesktopCaptureSourceView.h\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © 20"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceView.mm",
    "chars": 2486,
    "preview": "//\n//  DesktopCaptureSourceView.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © 20"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceViewMac.h",
    "chars": 1394,
    "preview": "//\n//  DesktopCaptureSourceView.h\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © 20"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopCaptureSourceViewMac.mm",
    "chars": 6732,
    "preview": "//\n//  DesktopCaptureSourceView.m\n//  TgVoipWebrtc\n//\n//  Created by Mikhail Filimonov on 28.12.2020.\n//  Copyright © 20"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopSharingCapturer.h",
    "chars": 827,
    "preview": "#ifndef SCREEN_CAPTURER_H\n#define SCREEN_CAPTURER_H\n#ifndef WEBRTC_IOS\n#import <Foundation/Foundation.h>\n\n\n#import \"api/"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/DesktopSharingCapturer.mm",
    "chars": 4020,
    "preview": "#import \"DesktopSharingCapturer.h\"\n\n#include \"modules/desktop_capture/mac/screen_capturer_mac.h\"\n#include \"modules/deskt"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/GLVideoView.h",
    "chars": 1871,
    "preview": "/*\n *  Copyright 2015 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/GLVideoView.mm",
    "chars": 14608,
    "preview": "/*\n *  Copyright 2015 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/GLVideoViewMac.h",
    "chars": 1629,
    "preview": "/*\n *  Copyright 2015 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/GLVideoViewMac.mm",
    "chars": 17059,
    "preview": "/*\n *  Copyright 2015 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGCMIOCapturer.h",
    "chars": 448,
    "preview": "//\n//  Capturer.h\n//  CoreMediaMacCapture\n//\n//  Created by Mikhail Filimonov on 21.06.2021.\n//\n\n#import <Foundation/Fou"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGCMIOCapturer.m",
    "chars": 721,
    "preview": "//\n//  Capturer.m\n//  CoreMediaMacCapture\n//\n//  Created by Mikhail Filimonov on 21.06.2021.\n//\n\n#import \"TGCMIOCapturer"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGCMIODevice.h",
    "chars": 570,
    "preview": "//\n//  CoreMediaVideoHAL.h\n//  CoreMediaMacCapture\n//\n//  Created by Mikhail Filimonov on 21.06.2021.\n//\n\n#import <Found"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGCMIODevice.mm",
    "chars": 6204,
    "preview": "//\n//  CoreMediaVideoHAL.m\n//  CoreMediaMacCapture\n//\n//  Created by Mikhail Filimonov on 21.06.2021.\n//\n\n#import \"TGCMI"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGRTCCVPixelBuffer.h",
    "chars": 228,
    "preview": "#ifndef TGRTCCVPIXELBUFFER_H\n#define TGRTCCVPIXELBUFFER_H\n\n#import \"components/video_frame_buffer/RTCCVPixelBuffer.h\"\n\n@"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGRTCCVPixelBuffer.mm",
    "chars": 73,
    "preview": "#import \"TGRTCCVPixelBuffer.h\"\n\n@implementation TGRTCCVPixelBuffer\n\n@end\n"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGRTCDefaultVideoDecoderFactory.h",
    "chars": 844,
    "preview": "/*\n *  Copyright 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGRTCDefaultVideoDecoderFactory.mm",
    "chars": 3697,
    "preview": "/*\n *  Copyright 2017 The WebRTC Project Authors. All rights reserved.\n *\n *  Use of this source code is governed by a B"
  },
  {
    "path": "tgcalls/third_party/lib_tgcalls/tgcalls/platform/darwin/TGRTCDefaultVideoEncoderFactory.h",
    "chars": 962,
    "preview": "/*\n *  Copyright 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a B"
  }
]

// ... and 8065 more files (download for full content)

About this extraction

This page contains the full source code of the MarshalX/tgcalls GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 8265 files (64.5 MB), approximately 17.4M tokens, and a symbol index with 48743 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!