Merge "Add a property to account the host side latency"
diff --git a/audio/device_port_sink.cpp b/audio/device_port_sink.cpp
index 668f2f0..e02c727 100644
--- a/audio/device_port_sink.cpp
+++ b/audio/device_port_sink.cpp
@@ -83,7 +83,7 @@
const size_t denominator = periodSettings.periodCount * cfg.base.sampleRateHz / inMs;
// integer division with rounding
- return (numerator + (denominator >> 1)) / denominator;
+ return (numerator + (denominator >> 1)) / denominator + talsa::pcmGetHostLatencyMs();
}
Result getPresentationPosition(uint64_t &frames, TimeSpec &ts) override {
diff --git a/audio/talsa.cpp b/audio/talsa.cpp
index 27076f0..b0f2e59 100644
--- a/audio/talsa.cpp
+++ b/audio/talsa.cpp
@@ -33,6 +33,7 @@
int gMixerRefcounter0 = 0;
std::mutex gMixerMutex;
PcmPeriodSettings gPcmPeriodSettings;
+unsigned gPcmHostLatencyMs;
void mixerSetValueAll(struct mixer_ctl *ctl, int value) {
const unsigned int n = mixer_ctl_get_num_values(ctl);
@@ -115,12 +116,19 @@
gPcmPeriodSettings.periodSizeMultiplier =
readUnsignedProperty("ro.hardware.audio.tinyalsa.period_size_multiplier", 1);
+
+ gPcmHostLatencyMs =
+ readUnsignedProperty("ro.hardware.audio.tinyalsa.host_latency_ms", 0);
}
PcmPeriodSettings pcmGetPcmPeriodSettings() {
return gPcmPeriodSettings;
}
+unsigned pcmGetHostLatencyMs() {
+ return gPcmHostLatencyMs;
+}
+
void PcmDeleter::operator()(pcm_t *x) const {
LOG_ALWAYS_FATAL_IF(::pcm_close(x) != 0);
};
diff --git a/audio/talsa.h b/audio/talsa.h
index 8cc3c8f..6f2883c 100644
--- a/audio/talsa.h
+++ b/audio/talsa.h
@@ -35,6 +35,7 @@
void init();
PcmPeriodSettings pcmGetPcmPeriodSettings();
+unsigned pcmGetHostLatencyMs();
typedef struct pcm pcm_t;
struct PcmDeleter { void operator()(pcm_t *x) const; };
diff --git a/init.ranchu.rc b/init.ranchu.rc
index a5edf26..284d245 100644
--- a/init.ranchu.rc
+++ b/init.ranchu.rc
@@ -61,6 +61,7 @@
setprop ro.hardware.audio.tinyalsa.period_count 4
setprop ro.hardware.audio.tinyalsa.period_size_multiplier 4
+ setprop ro.hardware.audio.tinyalsa.host_latency_ms 30
start qemu-props