diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-07-30 01:00:53 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-07-30 01:00:53 +0000 |
commit | 3c151989f7233ba54431839e972ef8df78f8e821 (patch) | |
tree | e95b279d4f33873487bf0d9aa5b85b71db486159 | |
parent | 05b7dcd60298fc287e1c30244113fbebac5b58b8 (diff) | |
parent | 6e55d92e22b5db66e43a604da1dd545a0454466e (diff) | |
download | goldfish-android13-d1-s2-release.tar.gz |
Snap for 8887313 from 6e55d92e22b5db66e43a604da1dd545a0454466e to tm-d1-releaseandroid-13.0.0_r9android-13.0.0_r15android-13.0.0_r14android-13.0.0_r13android-13.0.0_r11android-13.0.0_r10android13-d1-s3-releaseandroid13-d1-s2-releaseandroid13-d1-s1-releaseandroid13-d1-release
Change-Id: Ib718a63902d83c78646d77e0b5c66d486bc1d485
-rw-r--r-- | audio/device_port_sink.cpp | 2 | ||||
-rw-r--r-- | audio/entry.cpp | 3 | ||||
-rw-r--r-- | audio/talsa.cpp | 46 | ||||
-rw-r--r-- | audio/talsa.h | 2 | ||||
-rw-r--r-- | init.ranchu.rc | 6 |
5 files changed, 32 insertions, 27 deletions
diff --git a/audio/device_port_sink.cpp b/audio/device_port_sink.cpp index 668f2f07..e02c727d 100644 --- a/audio/device_port_sink.cpp +++ b/audio/device_port_sink.cpp @@ -83,7 +83,7 @@ struct TinyalsaSink : public DevicePortSink { 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/entry.cpp b/audio/entry.cpp index d11c620d..1f070448 100644 --- a/audio/entry.cpp +++ b/audio/entry.cpp @@ -15,11 +15,14 @@ */ #include "device_factory.h" +#include "talsa.h" using android::hardware::audio::CPP_VERSION::IDevicesFactory; using android::hardware::audio::CPP_VERSION::implementation::DevicesFactory; +namespace talsa = android::hardware::audio::CPP_VERSION::implementation::talsa; extern "C" IDevicesFactory* HIDL_FETCH_IDevicesFactory(const char* name) { (void)name; + talsa::init(); return new DevicesFactory(); } diff --git a/audio/talsa.cpp b/audio/talsa.cpp index e538c4ed..b0f2e598 100644 --- a/audio/talsa.cpp +++ b/audio/talsa.cpp @@ -32,9 +32,8 @@ namespace { struct mixer *gMixer0 = nullptr; int gMixerRefcounter0 = 0; std::mutex gMixerMutex; -const PcmPeriodSettings kDefaultPcmPeriodSettings = { 4, 1 }; PcmPeriodSettings gPcmPeriodSettings; -std::once_flag gPcmPeriodSettingsFlag; +unsigned gPcmHostLatencyMs; void mixerSetValueAll(struct mixer_ctl *ctl, int value) { const unsigned int n = mixer_ctl_get_num_values(ctl); @@ -99,38 +98,37 @@ bool mixerUnref(struct mixer *mixer) { return mixerUnrefImpl(mixer, gMixer0, gMixerRefcounter0); } -bool initPcmPeriodSettings(PcmPeriodSettings *dst) { - char prop_value[PROPERTY_VALUE_MAX]; +unsigned readUnsignedProperty(const char *propName, const unsigned defaultValue) { + char propValue[PROPERTY_VALUE_MAX]; - if (property_get("ro.hardware.audio.tinyalsa.period_count", prop_value, nullptr) < 0) { - return false; - } - if (sscanf(prop_value, "%u", &dst->periodCount) != 1) { - return false; + if (property_get(propName, propValue, nullptr) < 0) { + return defaultValue; } - if (property_get("ro.hardware.audio.tinyalsa.period_size_multiplier", prop_value, nullptr) < 0) { - return false; - } - if (sscanf(prop_value, "%u", &dst->periodSizeMultiplier) != 1) { - return false; - } - - return true; + unsigned value; + return (sscanf(propValue, "%u", &value) == 1) ? value : defaultValue; } - } // namespace -PcmPeriodSettings pcmGetPcmPeriodSettings() { - std::call_once(gPcmPeriodSettingsFlag, [](){ - if (!initPcmPeriodSettings(&gPcmPeriodSettings)) { - gPcmPeriodSettings = kDefaultPcmPeriodSettings; - } - }); +void init() { + gPcmPeriodSettings.periodCount = + readUnsignedProperty("ro.hardware.audio.tinyalsa.period_count", 4); + + 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 1854f1e0..6f2883c3 100644 --- a/audio/talsa.h +++ b/audio/talsa.h @@ -33,7 +33,9 @@ struct PcmPeriodSettings { unsigned periodSizeMultiplier; }; +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 20b38a92..870947e8 100644 --- a/init.ranchu.rc +++ b/init.ranchu.rc @@ -57,6 +57,10 @@ on init chmod 0664 /dev/cpuctl/top-app/tasks chmod 0664 /dev/cpuctl/rt/tasks + 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 on post-fs-data @@ -92,8 +96,6 @@ on boot chown root system /sys/power/wake_lock chown root system /sys/power/wake_unlock setprop ro.hardware.audio.primary goldfish - setprop ro.hardware.audio.tinyalsa.period_count 4 - setprop ro.hardware.audio.tinyalsa.period_size_multiplier 4 setprop wifi.interface wlan0 setprop wifi.direct.interface p2p-dev-wlan0 |