summary refs log tree commit diff
diff options
context:
space:
mode:
authorpaulhsia <paulhsia@chromium.org>2019-05-24 16:53:55 +0800
committerchrome-bot <chrome-bot@chromium.org>2019-05-31 02:56:41 -0700
commit580d4186562c9c1e5b399885c6c5647cdde15243 (patch)
treec82ba6ba2a0e9fd2e9895310427442a4ce16d703
parentd7738ec486fbc472e76529355f43eb8ee0e7e820 (diff)
downloadcrosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar.gz
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar.bz2
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar.lz
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar.xz
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.tar.zst
crosvm-580d4186562c9c1e5b399885c6c5647cdde15243.zip
linux: Add cras-capture option for cras-audio device
The flag can enable capturing audio from CRAS server to the cras-audio
device.
We'll re-enable capture function on Crostini after finishing capture
permission works.

BUG=chromium:932268
TEST=Boot vm with crosvm --cras-audio --cras-capture to check recording
     functionality.

Cq-Depend: chromium:1628633
Change-Id: I7502cbd668cbc722224164d9f69e50a16b0ab86b
Reviewed-on: https://chromium-review.googlesource.com/1628687
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Chih-Yang Hsia <paulhsia@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Legacy-Commit-Queue: Commit Bot <commit-bot@chromium.org>
Reviewed-by: Chih-Yang Hsia <paulhsia@chromium.org>
-rw-r--r--src/linux.rs5
-rw-r--r--src/main.rs6
2 files changed, 10 insertions, 1 deletions
diff --git a/src/linux.rs b/src/linux.rs
index ecf25fc..c29b5d1 100644
--- a/src/linux.rs
+++ b/src/linux.rs
@@ -823,7 +823,10 @@ fn create_devices(
     }
 
     if cfg.cras_audio {
-        let server = Box::new(CrasClient::new().map_err(Error::CreateCrasClient)?);
+        let mut server = Box::new(CrasClient::new().map_err(Error::CreateCrasClient)?);
+        if cfg.cras_capture {
+            server.enable_cras_capture();
+        }
         let cras_audio = devices::Ac97Dev::new(mem.clone(), server);
 
         pci_devices.push((
diff --git a/src/main.rs b/src/main.rs
index 092664a..4c53760 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -103,6 +103,7 @@ pub struct Config {
     gpu: bool,
     software_tpm: bool,
     cras_audio: bool,
+    cras_capture: bool,
     null_audio: bool,
     serial_parameters: BTreeMap<u8, SerialParameters>,
     syslog_tag: Option<String>,
@@ -144,6 +145,7 @@ impl Default for Config {
             sandbox: !cfg!(feature = "default-no-sandbox"),
             seccomp_policy_dir: PathBuf::from(SECCOMP_POLICY_DIR),
             cras_audio: false,
+            cras_capture: false,
             null_audio: false,
             serial_parameters: BTreeMap::new(),
             syslog_tag: None,
@@ -368,6 +370,9 @@ fn set_argument(cfg: &mut Config, name: &str, value: Option<&str>) -> argument::
         "cras-audio" => {
             cfg.cras_audio = true;
         }
+        "cras-capture" => {
+            cfg.cras_capture = true;
+        }
         "null-audio" => {
             cfg.null_audio = true;
         }
@@ -792,6 +797,7 @@ fn run_vm(args: std::env::Args) -> std::result::Result<(), ()> {
           Argument::value("netmask", "NETMASK", "Netmask for VM subnet."),
           Argument::value("mac", "MAC", "MAC address for VM."),
           Argument::flag("cras-audio", "Add an audio device to the VM that plays samples through CRAS server"),
+          Argument::flag("cras-capture", "Enable capturing audio from CRAS server to the cras-audio device"),
           Argument::flag("null-audio", "Add an audio device to the VM that plays samples to /dev/null"),
           Argument::value("serial",
                           "type=TYPE,[path=PATH,num=NUM,console]",