|
|
|
|
@ -48,7 +48,9 @@ extern "C" int __wrap_radio_talk_end(UTUN_INSTANCE*, uint64_t) { events.push_bac
|
|
|
|
|
extern "C" int __wrap_radio_talk_send(UTUN_INSTANCE*, uint64_t, const uint8_t* data, int len) { |
|
|
|
|
events.push_back('M'); packets.emplace_back(data, data + len); return 0; |
|
|
|
|
} |
|
|
|
|
extern "C" int __wrap_call_send_media(UTUN_INSTANCE*, uint64_t, const uint8_t* data, int len) { |
|
|
|
|
static call_capture_time last_call_timing{}; |
|
|
|
|
extern "C" int __wrap_call_send_media(UTUN_INSTANCE*, uint64_t, const uint8_t* data, int len, const call_capture_time* timing) { |
|
|
|
|
REQUIRE(timing); last_call_timing = *timing; |
|
|
|
|
packets.emplace_back(data, data + len); return 0; |
|
|
|
|
} |
|
|
|
|
extern "C" int __real_chat_setting_get_int(UTUN_INSTANCE*, const char*, int); |
|
|
|
|
@ -570,10 +572,10 @@ int main() {
|
|
|
|
|
// Prepared policy исключает повторный core AEC; mute применяется только к нужной части кадра.
|
|
|
|
|
packets.clear(); REQUIRE(call_audio_start_prepared(42) == 0); |
|
|
|
|
REQUIRE(call_audio_start(42) == -1); |
|
|
|
|
REQUIRE(call_audio_feed_pcm(42, input.data(), 960) == -1); |
|
|
|
|
REQUIRE(call_audio_feed_pcm(42, input.data(), 960, INT64_MIN) == -1); |
|
|
|
|
std::array<uint8_t, 960> mask{}; |
|
|
|
|
std::fill(mask.begin() + 300, mask.end(), 1); |
|
|
|
|
REQUIRE(call_audio_feed_prepared_pcm(42, input.data(), mask.data()) == 0); |
|
|
|
|
REQUIRE(call_audio_feed_prepared_pcm(42, input.data(), mask.data(), 123456789) == 0); |
|
|
|
|
uasync_poll(instance.ua, 0); |
|
|
|
|
encoder = opus_codec_encoder_create(48000, 1); REQUIRE(encoder); |
|
|
|
|
tail.fill(0); memcpy(tail.data(), input.data(), 300 * sizeof(int16_t)); check_packet(encoder, tail.data(), 0); |
|
|
|
|
|