Skip to content

Commit 3d49be3

Browse files
committed
Added crc32c, libevent, tgcalls to the project + Work on WebRTC build instructions
1 parent c7e032d commit 3d49be3

File tree

9 files changed

+247
-40
lines changed

9 files changed

+247
-40
lines changed

‎.gitmodules

+9
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,12 @@
9898
[submodule "app/jni/third_party/pffft"]
9999
path = app/jni/third_party/pffft
100100
url = https://github.com/TGX-Android/pffft
101+
[submodule "app/jni/third_party/tgcalls"]
102+
path = app/jni/third_party/tgcalls
103+
url = https://github.com/TelegramMessenger/tgcalls
104+
[submodule "app/jni/third_party/libevent"]
105+
path = app/jni/third_party/libevent
106+
url = https://github.com/TGX-Android/libevent
107+
[submodule "app/jni/third_party/crc32c"]
108+
path = app/jni/third_party/crc32c
109+
url = https://github.com/google/crc32c

‎app/jni/BuildTgCalls.cmake

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# tgcalls
2+
3+
set(TGCALLS_DIR "${THIRDPARTY_DIR}/tgcalls")
4+
5+
# Commit Telegram X currently relies on:
6+
# https://github.com/TelegramMessenger/tgcalls/tree/92640c4db6d99de3754bf5ada8419a40d0c4aac4
7+
8+
# Source files list:
9+
# https://github.com/TelegramMessenger/Telegram-iOS/blob/930d1fcc46e39830e6d590986a6a838c3ff49e27/submodules/TgVoipWebrtc/BUILD

‎app/jni/BuildWebRTC.cmake

+179-39
Original file line numberDiff line numberDiff line change
@@ -2577,8 +2577,6 @@ add_library(webrtc STATIC
25772577
"${WEBRTC_DIR}/modules/audio_processing/aec3/config_selector.cc"
25782578
"${WEBRTC_DIR}/modules/rtp_rtcp/source/ulpfec_receiver.cc"
25792579
"${WEBRTC_DIR}/api/video_codecs/av1_profile.cc"
2580-
"${WEBRTC_DIR}/modules/utility/source/helpers_android.cc"
2581-
"${WEBRTC_DIR}/modules/utility/source/jvm_android.cc"
25822580
"${WEBRTC_DIR}/modules/utility/maybe_worker_thread.cc"
25832581
"${WEBRTC_DIR}/pc/legacy_stats_collector.cc"
25842582
"${WEBRTC_DIR}/modules/audio_coding/neteq/packet_arrival_history.cc"
@@ -2608,7 +2606,162 @@ add_library(webrtc STATIC
26082606
"${WEBRTC_DIR}/modules/video_coding/timing/rtt_filter.cc"
26092607
"${WEBRTC_DIR}/video/config/simulcast.cc"
26102608
"${WEBRTC_DIR}/api/video_codecs/simulcast_stream.cc"
2611-
)
2609+
)
2610+
2611+
target_sources(webrtc PRIVATE
2612+
"${WEBRTC_DIR}/rtc_base/system/warn_current_thread_is_deadlocked.cc"
2613+
"${WEBRTC_DIR}/rtc_base/task_queue_libevent.cc"
2614+
"${WEBRTC_DIR}/rtc_base/task_queue_stdlib.cc"
2615+
2616+
"${WEBRTC_DIR}/api/field_trials.cc"
2617+
"${WEBRTC_DIR}/api/numerics/samples_stats_counter.cc"
2618+
"${WEBRTC_DIR}/api/task_queue/default_task_queue_factory_libevent.cc"
2619+
"${WEBRTC_DIR}/api/voip/voip_engine_factory.cc"
2620+
"${WEBRTC_DIR}/api/video/rtp_video_frame_assembler.cc"
2621+
"${WEBRTC_DIR}/api/video_codecs/spatial_layer.cc"
2622+
"${WEBRTC_DIR}/api/video_codecs/scalability_mode_helper.cc"
2623+
2624+
"${WEBRTC_DIR}/audio/voip/audio_channel.cc"
2625+
"${WEBRTC_DIR}/audio/voip/audio_ingress.cc"
2626+
"${WEBRTC_DIR}/audio/voip/voip_core.cc"
2627+
2628+
"${WEBRTC_DIR}/common_audio/third_party/ooura/fft_size_256/fft4g.cc"
2629+
2630+
"${WEBRTC_DIR}/sdk/media_constraints.cc"
2631+
2632+
"${WEBRTC_DIR}/logging/rtc_event_log/rtc_event_log_impl.cc"
2633+
2634+
"${WEBRTC_DIR}/modules/audio_device/audio_device_impl.cc"
2635+
"${WEBRTC_DIR}/modules/audio_processing/agc2/speech_probability_buffer.cc"
2636+
"${WEBRTC_DIR}/modules/video_capture/linux/device_info_linux.cc"
2637+
"${WEBRTC_DIR}/modules/video_capture/linux/video_capture_linux.cc"
2638+
"${WEBRTC_DIR}/modules/video_capture/video_capture_factory_null.cc"
2639+
"${WEBRTC_DIR}/modules/video_coding/decoding_state.cc"
2640+
"${WEBRTC_DIR}/modules/video_coding/event_wrapper.cc"
2641+
"${WEBRTC_DIR}/modules/video_coding/frame_buffer.cc"
2642+
"${WEBRTC_DIR}/modules/video_coding/jitter_buffer.cc"
2643+
"${WEBRTC_DIR}/modules/video_coding/packet.cc"
2644+
"${WEBRTC_DIR}/modules/video_coding/receiver.cc"
2645+
"${WEBRTC_DIR}/modules/video_coding/session_info.cc"
2646+
"${WEBRTC_DIR}/modules/video_coding/video_coding_impl.cc"
2647+
"${WEBRTC_DIR}/modules/video_coding/video_receiver.cc"
2648+
"${WEBRTC_DIR}/modules/video_coding/h264_packet_buffer.cc"
2649+
"${WEBRTC_DIR}/modules/rtp_rtcp/source/deprecated/deprecated_rtp_sender_egress.cc"
2650+
"${WEBRTC_DIR}/modules/utility/source/helpers_android.cc"
2651+
"${WEBRTC_DIR}/modules/utility/source/jvm_android.cc"
2652+
2653+
"${WEBRTC_DIR}/net/dcsctp/public/dcsctp_socket_factory.cc"
2654+
"${WEBRTC_DIR}/net/dcsctp/public/dcsctp_handover_state.cc"
2655+
"${WEBRTC_DIR}/net/dcsctp/public/text_pcap_packet_observer.cc"
2656+
"${WEBRTC_DIR}/net/dcsctp/socket/callback_deferrer.cc"
2657+
"${WEBRTC_DIR}/net/dcsctp/socket/dcsctp_socket.cc"
2658+
"${WEBRTC_DIR}/net/dcsctp/socket/heartbeat_handler.cc"
2659+
"${WEBRTC_DIR}/net/dcsctp/socket/packet_sender.cc"
2660+
"${WEBRTC_DIR}/net/dcsctp/socket/state_cookie.cc"
2661+
"${WEBRTC_DIR}/net/dcsctp/socket/stream_reset_handler.cc"
2662+
"${WEBRTC_DIR}/net/dcsctp/socket/transmission_control_block.cc"
2663+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk_validators.cc"
2664+
"${WEBRTC_DIR}/net/dcsctp/packet/crc32c.cc"
2665+
"${WEBRTC_DIR}/net/dcsctp/packet/sctp_packet.cc"
2666+
"${WEBRTC_DIR}/net/dcsctp/packet/tlv_trait.cc"
2667+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/abort_chunk.cc"
2668+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/chunk.cc"
2669+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/cookie_ack_chunk.cc"
2670+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/cookie_echo_chunk.cc"
2671+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/data_chunk.cc"
2672+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/error_chunk.cc"
2673+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/forward_tsn_chunk.cc"
2674+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/heartbeat_ack_chunk.cc"
2675+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/heartbeat_request_chunk.cc"
2676+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/idata_chunk.cc"
2677+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/iforward_tsn_chunk.cc"
2678+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/init_ack_chunk.cc"
2679+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/init_chunk.cc"
2680+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/reconfig_chunk.cc"
2681+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/sack_chunk.cc"
2682+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/shutdown_ack_chunk.cc"
2683+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/shutdown_chunk.cc"
2684+
"${WEBRTC_DIR}/net/dcsctp/packet/chunk/shutdown_complete_chunk.cc"
2685+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/cookie_received_while_shutting_down_cause.cc"
2686+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/error_cause.cc"
2687+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/invalid_mandatory_parameter_cause.cc"
2688+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/invalid_stream_identifier_cause.cc"
2689+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/missing_mandatory_parameter_cause.cc"
2690+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/no_user_data_cause.cc"
2691+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/out_of_resource_error_cause.cc"
2692+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/protocol_violation_cause.cc"
2693+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/stale_cookie_error_cause.cc"
2694+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/restart_of_an_association_with_new_address_cause.cc"
2695+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/unrecognized_chunk_type_cause.cc"
2696+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/unrecognized_parameter_cause.cc"
2697+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/unresolvable_address_cause.cc"
2698+
"${WEBRTC_DIR}/net/dcsctp/packet/error_cause/user_initiated_abort_cause.cc"
2699+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/add_incoming_streams_request_parameter.cc"
2700+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/add_outgoing_streams_request_parameter.cc"
2701+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/forward_tsn_supported_parameter.cc"
2702+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/heartbeat_info_parameter.cc"
2703+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/incoming_ssn_reset_request_parameter.cc"
2704+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/outgoing_ssn_reset_request_parameter.cc"
2705+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/parameter.cc"
2706+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/reconfiguration_response_parameter.cc"
2707+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/ssn_tsn_reset_request_parameter.cc"
2708+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/state_cookie_parameter.cc"
2709+
"${WEBRTC_DIR}/net/dcsctp/packet/parameter/supported_extensions_parameter.cc"
2710+
"${WEBRTC_DIR}/net/dcsctp/rx/data_tracker.cc"
2711+
"${WEBRTC_DIR}/net/dcsctp/rx/reassembly_queue.cc"
2712+
"${WEBRTC_DIR}/net/dcsctp/rx/traditional_reassembly_streams.cc"
2713+
"${WEBRTC_DIR}/net/dcsctp/rx/interleaved_reassembly_streams.cc"
2714+
"${WEBRTC_DIR}/net/dcsctp/tx/outstanding_data.cc"
2715+
"${WEBRTC_DIR}/net/dcsctp/tx/retransmission_error_counter.cc"
2716+
"${WEBRTC_DIR}/net/dcsctp/tx/retransmission_queue.cc"
2717+
"${WEBRTC_DIR}/net/dcsctp/tx/retransmission_timeout.cc"
2718+
"${WEBRTC_DIR}/net/dcsctp/tx/rr_send_queue.cc"
2719+
"${WEBRTC_DIR}/net/dcsctp/tx/stream_scheduler.cc"
2720+
"${WEBRTC_DIR}/net/dcsctp/timer/task_queue_timeout.cc"
2721+
"${WEBRTC_DIR}/net/dcsctp/timer/timer.cc"
2722+
)
2723+
2724+
# TODO?: "${WEBRTC_DIR}/sdk/android/src/jni/pc/add_ice_candidate_observer.cc"
2725+
2726+
# crc32
2727+
2728+
target_sources(webrtc PRIVATE
2729+
"${THIRDPARTY_DIR}/crc32c/src/crc32c_portable.cc"
2730+
"${THIRDPARTY_DIR}/crc32c/src/crc32c.cc"
2731+
)
2732+
target_include_directories(webrtc PRIVATE
2733+
"${THIRDPARTY_DIR}/crc32c/include"
2734+
)
2735+
2736+
# libevent
2737+
2738+
target_sources(webrtc PRIVATE
2739+
"${THIRDPARTY_DIR}/libevent/buffer.c"
2740+
"${THIRDPARTY_DIR}/libevent/epoll.c"
2741+
"${THIRDPARTY_DIR}/libevent/evbuffer.c"
2742+
"${THIRDPARTY_DIR}/libevent/evdns.c"
2743+
"${THIRDPARTY_DIR}/libevent/event.c"
2744+
"${THIRDPARTY_DIR}/libevent/event_tagging.c"
2745+
"${THIRDPARTY_DIR}/libevent/evrpc.c"
2746+
"${THIRDPARTY_DIR}/libevent/evutil.c"
2747+
"${THIRDPARTY_DIR}/libevent/http.c"
2748+
"${THIRDPARTY_DIR}/libevent/log.c"
2749+
"${THIRDPARTY_DIR}/libevent/poll.c"
2750+
"${THIRDPARTY_DIR}/libevent/select.c"
2751+
"${THIRDPARTY_DIR}/libevent/signal.c"
2752+
"${THIRDPARTY_DIR}/libevent/strlcpy.c"
2753+
)
2754+
2755+
# Unknown files:
2756+
2757+
# "${WEBRTC_DIR}/video/rtp_video_stream_receiver.cc"
2758+
# "${WEBRTC_DIR}/common_video/h264/prefix_parser.cc"
2759+
# "${WEBRTC_DIR}/api/field_trials_registry.cc"
2760+
# "${WEBRTC_DIR}/modules/audio_processing/agc2/speech_level_estimator.cc"
2761+
# "${WEBRTC_DIR}/modules/audio_processing/agc2/input_volume_stats_reporter.cc"
2762+
2763+
# "${WEBRTC_DIR}/third_party/crc32c/src/crc32c_portable.cc"
2764+
# "${WEBRTC_DIR}/third_party/crc32c/src/crc32c.cc"
26122765

26132766
target_compile_definitions(webrtc PRIVATE
26142767
RTC_DISABLE_TRACE_EVENTS
@@ -2663,51 +2816,38 @@ if(${ANDROID_ABI} STREQUAL "armeabi-v7a" OR ${ANDROID_ABI} STREQUAL "arm64-v8a")
26632816
"${WEBRTC_DIR}/common_audio/signal_processing/downsample_fast_neon.c"
26642817
"${WEBRTC_DIR}/common_audio/signal_processing/min_max_operations_neon.c"
26652818
"${WEBRTC_DIR}/common_audio/resampler/sinc_resampler_neon.cc"
2819+
"${WEBRTC_DIR}/common_audio/third_party/ooura/fft_size_128/ooura_fft_neon.cc"
26662820
)
2821+
if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
2822+
target_sources(webrtc PRIVATE
2823+
"${WEBRTC_DIR}/common_audio/signal_processing/complex_bit_reverse_arm.S"
2824+
"${WEBRTC_DIR}/common_audio/signal_processing/filter_ar_fast_q12_armv7.S"
2825+
)
2826+
target_compile_definitions(webrtc PRIVATE
2827+
WEBRTC_ARCH_ARM
2828+
WEBRTC_ARCH_ARM_V7
2829+
WEBRTC_HAS_NEON
2830+
LIBYUV_NEON
2831+
)
2832+
elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
2833+
target_sources(webrtc PRIVATE
2834+
"${WEBRTC_DIR}/common_audio/signal_processing/complex_bit_reverse.c"
2835+
"${WEBRTC_DIR}/common_audio/signal_processing/filter_ar_fast_q12.c"
2836+
)
2837+
target_compile_definitions(webrtc PRIVATE
2838+
WEBRTC_ARCH_ARM64
2839+
WEBRTC_HAS_NEON
2840+
LIBYUV_NEON
2841+
)
2842+
endif()
26672843
elseif(${ANDROID_ABI} STREQUAL "x86_64" OR ${ANDROID_ABI} STREQUAL "x86")
2668-
#"${WEBRTC_DIR}/common_audio/resampler/sinc_resampler_avx2.cc"
2669-
#"${WEBRTC_DIR}/modules/audio_processing/aec3/vector_math_avx2.cc"
2670-
#"${WEBRTC_DIR}/modules/audio_processing/aec3/adaptive_fir_filter_avx2.cc"
2671-
#"${WEBRTC_DIR}/modules/audio_processing/aec3/adaptive_fir_filter_erl_avx2.cc"
2672-
#"${WEBRTC_DIR}/modules/audio_processing/aec3/matched_filter_avx2.cc"
2673-
#"${WEBRTC_DIR}/modules/audio_processing/aec3/fft_data_avx2.cc"
2674-
#"${WEBRTC_DIR}/common_audio/fir_filter_avx2.cc"
2675-
#"${WEBRTC_DIR}/modules/audio_processing/agc2/rnn_vad/vector_math_avx2.cc"
26762844
target_sources(webrtc PRIVATE
26772845
"${WEBRTC_DIR}/common_audio/fir_filter_sse.cc"
26782846
"${WEBRTC_DIR}/common_audio/resampler/sinc_resampler_sse.cc"
26792847
"${WEBRTC_DIR}/common_audio/signal_processing/complex_bit_reverse.c"
26802848
"${WEBRTC_DIR}/common_audio/signal_processing/filter_ar_fast_q12.c"
26812849
"${WEBRTC_DIR}/common_audio/third_party/ooura/fft_size_128/ooura_fft_sse2.cc"
26822850
)
2683-
else()
2684-
message(FATAL_ERROR "Unknown abi: ${ANDROID_ABI}")
2685-
endif()
2686-
2687-
if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
2688-
target_sources(webrtc PRIVATE
2689-
"${WEBRTC_DIR}/common_audio/signal_processing/filter_ar_fast_q12.c"
2690-
"${WEBRTC_DIR}/common_audio/signal_processing/complex_bit_reverse.c"
2691-
"${WEBRTC_DIR}/common_audio/third_party/ooura/fft_size_128/ooura_fft_neon.cc"
2692-
)
2693-
target_compile_definitions(webrtc PRIVATE
2694-
WEBRTC_ARCH_ARM
2695-
WEBRTC_ARCH_ARM_V7
2696-
WEBRTC_HAS_NEON
2697-
LIBYUV_NEON
2698-
)
2699-
elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
2700-
target_sources(webrtc PRIVATE
2701-
"${WEBRTC_DIR}/common_audio/signal_processing/complex_bit_reverse.c"
2702-
"${WEBRTC_DIR}/common_audio/signal_processing/filter_ar_fast_q12.c"
2703-
"${WEBRTC_DIR}/common_audio/third_party/ooura/fft_size_128/ooura_fft_neon.cc"
2704-
)
2705-
target_compile_definitions(webrtc PRIVATE
2706-
WEBRTC_ARCH_ARM64
2707-
WEBRTC_HAS_NEON
2708-
LIBYUV_NEON
2709-
)
2710-
elseif(${ANDROID_ABI} STREQUAL "x86_64" OR ${ANDROID_ABI} STREQUAL "x86")
27112851
target_compile_definitions(webrtc PRIVATE
27122852
HAVE_SSE2
27132853
)

‎app/jni/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@ include("${CMAKE_HOME_DIRECTORY}/BuildAbsl.cmake")
173173
# webrtc
174174
include("${CMAKE_HOME_DIRECTORY}/BuildWebRTC.cmake")
175175

176+
# tgcalls
177+
include("${CMAKE_HOME_DIRECTORY}/BuildTgCalls.cmake")
178+
176179
# yuv
177180
include("${CMAKE_HOME_DIRECTORY}/BuildYuv.cmake")
178181

‎app/jni/stub/crc32c/crc32c_config.h

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright 2017 The CRC32C Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4+
5+
#ifndef CRC32C_CRC32C_CONFIG_H_
6+
#define CRC32C_CRC32C_CONFIG_H_
7+
8+
// Define to 1 if building for a big-endian platform.
9+
//#cmakedefine01 BYTE_ORDER_BIG_ENDIAN
10+
11+
// Define to 1 if the compiler has the __builtin_prefetch intrinsic.
12+
#define HAVE_BUILTIN_PREFETCH 1
13+
14+
// Define to 1 if targeting X86 and the compiler has the _mm_prefetch intrinsic.
15+
16+
#if HAVE_SSE42 && (defined(_M_X64) || defined(__x86_64__))
17+
#define HAVE_MM_PREFETCH 1
18+
#endif
19+
20+
// Define to 1 if targeting X86 and the compiler has the _mm_crc32_u{8,32,64}
21+
// intrinsics.
22+
#if defined(__i386) || defined(__x86_64) || defined(_M_IX86)
23+
//#define HAVE_SSE42 1
24+
#endif
25+
26+
// Define to 1 if targeting ARM and the compiler has the __crc32c{b,h,w,d} and
27+
// the vmull_p64 intrinsics.
28+
#if defined(__aarch64__)
29+
//#define HAVE_ARM64_CRC32C 1
30+
#endif
31+
32+
// Define to 1 if the system libraries have the getauxval function in the
33+
// <sys/auxv.h> header. Should be true on Linux and Android API level 20+.
34+
#define HAVE_STRONG_GETAUXVAL 1
35+
36+
// Define to 1 if the compiler supports defining getauxval as a weak symbol.
37+
// Should be true for any compiler that supports __attribute__((weak)).
38+
#define HAVE_WEAK_GETAUXVAL
39+
40+
// Define to 1 if CRC32C tests have been built with Google Logging.
41+
//#cmakedefine01 CRC32C_TESTS_BUILT_WITH_GLOG
42+
43+
#endif // CRC32C_CRC32C_CONFIG_H_

‎app/jni/third_party/crc32c

Submodule crc32c added at 21fc8ef

‎app/jni/third_party/libevent

Submodule libevent added at 422a87c

‎app/jni/third_party/tgcalls

Submodule tgcalls added at 92640c4

0 commit comments

Comments
 (0)