audio policy: refactor audio record APIs
Refactor audio policy service APIs controlling audio record (startInput, stopInput, releaseInput)
To allow finer grain control per AudioRecord client and prepare for new concurrent capture
policy
Test: AudioRecord CTS test. manual test of capture use cases:
camcorder, OK Google VoIP
Change-Id: I4992fd5a115853c47be5dac5465989eb53f1287c
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index e362530..baab926 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -321,6 +321,7 @@
actualSessionId,
client.clientPid,
client.clientUid,
+ client.packageName,
config,
AUDIO_INPUT_FLAG_MMAP_NOIRQ, deviceId, &portId);
}
@@ -340,7 +341,7 @@
if (direction == MmapStreamInterface::DIRECTION_OUTPUT) {
AudioSystem::releaseOutput(io, streamType, actualSessionId);
} else {
- AudioSystem::releaseInput(io, actualSessionId);
+ AudioSystem::releaseInput(portId);
}
ret = NO_INIT;
}
@@ -1663,7 +1664,7 @@
// release previously opened input if retrying.
if (output.inputId != AUDIO_IO_HANDLE_NONE) {
recordTrack.clear();
- AudioSystem::releaseInput(output.inputId, sessionId);
+ AudioSystem::releaseInput(portId);
output.inputId = AUDIO_IO_HANDLE_NONE;
}
lStatus = AudioSystem::getInputForAttr(&input.attr, &output.inputId,
@@ -1671,6 +1672,7 @@
// FIXME compare to AudioTrack
clientPid,
clientUid,
+ input.opPackageName,
&input.config,
output.flags, &output.selectedDeviceId, &portId);
@@ -1739,7 +1741,7 @@
}
recordTrack.clear();
if (output.inputId != AUDIO_IO_HANDLE_NONE) {
- AudioSystem::releaseInput(output.inputId, sessionId);
+ AudioSystem::releaseInput(portId);
}
}