Skip to content

Commit 9d9b995

Browse files
afq984Chromeos LUCI
authored and
Chromeos LUCI
committed
Use cras-config-dir instead of ucm-suffix for beamforming
Eventually we should have config files for beamforming, before that let's just not (ab)use ucm as a config side channel. BUG=b:327062210 BUG=b:233174542 BUG=b:339785214 TEST=dbus-send --system --print-reply --dest=org.chromium.cras /org/chromium/cras org.chromium.cras.Control.DumpS2AsJSON Change-Id: I2ba4a90e1256dfa2569cd8c28a1645086a1e6561 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/5528486 Commit-Queue: Li-Yu Yu <[email protected]> Tested-by: [email protected] <[email protected]> Reviewed-by: Chih-Yang Hsia <[email protected]>
1 parent 71206c0 commit 9d9b995

File tree

5 files changed

+21
-23
lines changed

5 files changed

+21
-23
lines changed

cras/server/s2/s2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void cras_s2_set_style_transfer_enabled(bool enabled);
3434

3535
bool cras_s2_get_style_transfer_enabled(void);
3636

37-
void cras_s2_set_ucm_suffix(const char *ucm_suffix);
37+
void cras_s2_load_cras_config_dir(void);
3838

3939
bool cras_s2_get_beamforming_supported(void);
4040

cras/server/s2/src/global.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
// found in the LICENSE file.
44

55
use std::ffi::c_char;
6-
use std::ffi::CStr;
76
use std::ffi::CString;
87
use std::ops::Deref;
98
use std::sync::Mutex;
@@ -62,18 +61,14 @@ pub extern "C" fn cras_s2_get_style_transfer_enabled() -> bool {
6261
}
6362

6463
#[no_mangle]
65-
pub unsafe extern "C" fn cras_s2_set_ucm_suffix(ucm_suffix: *const libc::c_char) {
66-
if ucm_suffix.is_null() {
67-
state().set_ucm_suffix("");
68-
} else {
69-
match CStr::from_ptr(ucm_suffix).to_str() {
70-
Ok(str) => {
71-
state().set_ucm_suffix(str);
72-
}
73-
Err(err) => {
74-
state().set_ucm_suffix("");
75-
log::error!("ucm_suffix is not a valid string: {err}");
76-
}
64+
pub extern "C" fn cras_s2_load_cras_config_dir() {
65+
match std::fs::read_to_string("/run/chromeos-config/v1/audio/main/cras-config-dir") {
66+
Ok(str) => {
67+
state().set_cras_config_dir(&str);
68+
}
69+
Err(err) => {
70+
state().set_cras_config_dir("");
71+
log::info!("Failed to read cras-config-dir: {err}");
7772
}
7873
}
7974
}

cras/server/s2/src/lib.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ struct Input {
1616
dlc_manager_ready: bool,
1717
style_transfer_featured_allowed: bool,
1818
style_transfer_enabled: bool,
19-
// cros_config /audio/main ucm-suffix.
20-
ucm_suffix: String,
19+
// cros_config /audio/main cras-config-dir.
20+
cras_config_dir: String,
2121
}
2222

2323
#[derive(Serialize)]
@@ -29,7 +29,8 @@ struct Output {
2929
}
3030

3131
fn resolve(input: &Input) -> Output {
32-
let beamforming_supported = input.ucm_suffix == "omniknight.3mic";
32+
// TODO(b/339785214): Decide this based on config file content.
33+
let beamforming_supported = input.cras_config_dir == "omniknight.3mic";
3334
Output {
3435
ap_nc_allowed: input.ap_nc_featured_allowed
3536
|| input.ap_nc_segmentation_allowed
@@ -62,7 +63,7 @@ impl S2 {
6263
dlc_manager_ready: false,
6364
style_transfer_featured_allowed: false,
6465
style_transfer_enabled: false,
65-
ucm_suffix: String::new(),
66+
cras_config_dir: String::new(),
6667
};
6768
let output = resolve(&input);
6869
Self { input, output }
@@ -98,8 +99,8 @@ impl S2 {
9899
self.update();
99100
}
100101

101-
fn set_ucm_suffix(&mut self, ucm_suffix: &str) {
102-
self.input.ucm_suffix = ucm_suffix.into();
102+
fn set_cras_config_dir(&mut self, cras_config_dir: &str) {
103+
self.input.cras_config_dir = cras_config_dir.into();
103104
self.update();
104105
}
105106

@@ -169,11 +170,11 @@ mod tests {
169170
assert!(!s.output.beamforming_supported);
170171
assert!(s.output.style_transfer_supported);
171172

172-
s.set_ucm_suffix("omniknight.3mic");
173+
s.set_cras_config_dir("omniknight.3mic");
173174
assert!(s.output.beamforming_supported);
174175
assert!(!s.output.style_transfer_supported);
175176

176-
s.set_ucm_suffix("omniknight");
177+
s.set_cras_config_dir("omniknight");
177178
assert!(!s.output.beamforming_supported);
178179
assert!(s.output.style_transfer_supported);
179180
}

cras/src/server/cras_system_state.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Use of this source code is governed by a BSD-style license that can be
33
* found in the LICENSE file.
44
*/
5+
56
#include "cras/src/server/cras_system_state.h"
67

78
#include <errno.h>
@@ -209,6 +210,7 @@ void cras_system_state_init(const char* device_config_dir,
209210
syslog(LOG_ERR, "Fatal: no memory to create board config");
210211
exit(-ENOMEM);
211212
}
213+
cras_s2_load_cras_config_dir();
212214

213215
// Initial system state.
214216
exp_state->state_version = CRAS_SERVER_STATE_VERSION;
@@ -317,7 +319,6 @@ void cras_system_state_deinit() {
317319
void cras_system_state_set_internal_ucm_suffix(
318320
const char* internal_ucm_suffix) {
319321
state.internal_ucm_suffix = internal_ucm_suffix;
320-
cras_s2_set_ucm_suffix(internal_ucm_suffix);
321322
}
322323

323324
void cras_system_set_volume(size_t volume) {

init/cras.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ exec minijail0 -u cras -g cras -G --uts -v -l \
1818
-k '/run/imageloader,/run/imageloader,none,MS_BIND|MS_REC' \
1919
-b /run/libsegmentation \
2020
-b /run/udev \
21+
-b /run/chromeos-config/v1 \
2122
-b /dev \
2223
-b /dev/shm,,1 \
2324
-k proc,/proc,proc \

0 commit comments

Comments
 (0)