Improvements for NetEqControllers
When creating a NetEqController it can be useful to have access to a webrtc::Clock*. Also, NetEqControllers should have access to the contents of the sync buffer when making decisions. Bug: webrtc:11005 Change-Id: I7fdba75ce661b2ace52458620a8c1f3c990e5ac2 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/167208 Commit-Queue: Ivo Creusen <ivoc@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Cr-Commit-Position: refs/heads/master@{#30368}
This commit is contained in:
@ -55,6 +55,7 @@ rtc_source_set("neteq_controller_api") {
|
|||||||
":neteq_api",
|
":neteq_api",
|
||||||
":tick_timer",
|
":tick_timer",
|
||||||
"../../rtc_base:rtc_base_approved",
|
"../../rtc_base:rtc_base_approved",
|
||||||
|
"../../system_wrappers:system_wrappers",
|
||||||
"//third_party/abseil-cpp/absl/types:optional",
|
"//third_party/abseil-cpp/absl/types:optional",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
specific_include_rules = {
|
specific_include_rules = {
|
||||||
"neteq_factory\.h": [
|
|
||||||
"+system_wrappers/include/clock.h",
|
|
||||||
],
|
|
||||||
"custom_neteq_factory\.h": [
|
"custom_neteq_factory\.h": [
|
||||||
"+system_wrappers/include/clock.h",
|
"+system_wrappers/include/clock.h",
|
||||||
],
|
],
|
||||||
"default_neteq_factory\.h": [
|
"default_neteq_factory\.h": [
|
||||||
"+system_wrappers/include/clock.h",
|
"+system_wrappers/include/clock.h",
|
||||||
],
|
],
|
||||||
|
"neteq_controller\.h": [
|
||||||
|
"+system_wrappers/include/clock.h",
|
||||||
|
],
|
||||||
|
"neteq_factory\.h": [
|
||||||
|
"+system_wrappers/include/clock.h",
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
2
api/neteq/OWNERS
Normal file
2
api/neteq/OWNERS
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ivoc@webrtc.org
|
||||||
|
hlundin@webrtc.org
|
@ -20,6 +20,7 @@
|
|||||||
#include "absl/types/optional.h"
|
#include "absl/types/optional.h"
|
||||||
#include "api/neteq/neteq.h"
|
#include "api/neteq/neteq.h"
|
||||||
#include "api/neteq/tick_timer.h"
|
#include "api/neteq/tick_timer.h"
|
||||||
|
#include "system_wrappers/include/clock.h"
|
||||||
|
|
||||||
namespace webrtc {
|
namespace webrtc {
|
||||||
|
|
||||||
@ -67,6 +68,7 @@ class NetEqController {
|
|||||||
int max_packets_in_buffer;
|
int max_packets_in_buffer;
|
||||||
int base_min_delay_ms;
|
int base_min_delay_ms;
|
||||||
TickTimer* tick_timer;
|
TickTimer* tick_timer;
|
||||||
|
webrtc::Clock* clock = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PacketInfo {
|
struct PacketInfo {
|
||||||
@ -92,6 +94,7 @@ class NetEqController {
|
|||||||
bool play_dtmf;
|
bool play_dtmf;
|
||||||
size_t generated_noise_samples;
|
size_t generated_noise_samples;
|
||||||
PacketBufferInfo packet_buffer_info;
|
PacketBufferInfo packet_buffer_info;
|
||||||
|
size_t sync_buffer_samples;
|
||||||
};
|
};
|
||||||
|
|
||||||
virtual ~NetEqController() = default;
|
virtual ~NetEqController() = default;
|
||||||
|
@ -61,13 +61,15 @@ std::unique_ptr<NetEqController> CreateNetEqController(
|
|||||||
int max_packets_in_buffer,
|
int max_packets_in_buffer,
|
||||||
bool enable_rtx_handling,
|
bool enable_rtx_handling,
|
||||||
bool allow_time_stretching,
|
bool allow_time_stretching,
|
||||||
TickTimer* tick_timer) {
|
TickTimer* tick_timer,
|
||||||
|
webrtc::Clock* clock) {
|
||||||
NetEqController::Config config;
|
NetEqController::Config config;
|
||||||
config.base_min_delay_ms = base_min_delay;
|
config.base_min_delay_ms = base_min_delay;
|
||||||
config.max_packets_in_buffer = max_packets_in_buffer;
|
config.max_packets_in_buffer = max_packets_in_buffer;
|
||||||
config.enable_rtx_handling = enable_rtx_handling;
|
config.enable_rtx_handling = enable_rtx_handling;
|
||||||
config.allow_time_stretching = allow_time_stretching;
|
config.allow_time_stretching = allow_time_stretching;
|
||||||
config.tick_timer = tick_timer;
|
config.tick_timer = tick_timer;
|
||||||
|
config.clock = clock;
|
||||||
return controller_factory.CreateNetEqController(config);
|
return controller_factory.CreateNetEqController(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,7 +95,8 @@ NetEqImpl::Dependencies::Dependencies(
|
|||||||
config.max_packets_in_buffer,
|
config.max_packets_in_buffer,
|
||||||
config.enable_rtx_handling,
|
config.enable_rtx_handling,
|
||||||
!config.for_test_no_time_stretching,
|
!config.for_test_no_time_stretching,
|
||||||
tick_timer.get())),
|
tick_timer.get(),
|
||||||
|
clock)),
|
||||||
red_payload_splitter(new RedPayloadSplitter),
|
red_payload_splitter(new RedPayloadSplitter),
|
||||||
timestamp_scaler(new TimestampScaler(*decoder_database)),
|
timestamp_scaler(new TimestampScaler(*decoder_database)),
|
||||||
accelerate_factory(new AccelerateFactory),
|
accelerate_factory(new AccelerateFactory),
|
||||||
@ -1084,6 +1087,7 @@ int NetEqImpl::GetDecision(Operation* operation,
|
|||||||
status.last_mode = last_mode_;
|
status.last_mode = last_mode_;
|
||||||
status.play_dtmf = *play_dtmf;
|
status.play_dtmf = *play_dtmf;
|
||||||
status.generated_noise_samples = generated_noise_samples;
|
status.generated_noise_samples = generated_noise_samples;
|
||||||
|
status.sync_buffer_samples = sync_buffer_->FutureLength();
|
||||||
if (packet) {
|
if (packet) {
|
||||||
status.next_packet = {
|
status.next_packet = {
|
||||||
packet->timestamp, packet->frame && packet->frame->IsDtxPacket(),
|
packet->timestamp, packet->frame && packet->frame->IsDtxPacket(),
|
||||||
|
@ -125,6 +125,7 @@ class NetEqImplTest : public ::testing::Test {
|
|||||||
controller_config.enable_rtx_handling = config_.enable_rtx_handling;
|
controller_config.enable_rtx_handling = config_.enable_rtx_handling;
|
||||||
controller_config.allow_time_stretching = true;
|
controller_config.allow_time_stretching = true;
|
||||||
controller_config.max_packets_in_buffer = config_.max_packets_in_buffer;
|
controller_config.max_packets_in_buffer = config_.max_packets_in_buffer;
|
||||||
|
controller_config.clock = &clock_;
|
||||||
deps.neteq_controller =
|
deps.neteq_controller =
|
||||||
std::make_unique<DecisionLogic>(std::move(controller_config));
|
std::make_unique<DecisionLogic>(std::move(controller_config));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user