summaryrefslogtreecommitdiff
path: root/services/voiceinteraction
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2020-09-10 15:04:47 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-09-10 15:04:47 +0000
commit4db6ccaaa3f67d65c340c5d3a4bffa0f5ebcd2b5 (patch)
tree0a6ab5a2d1e91a9bebd6c00e87f82de5c7fbd3fe /services/voiceinteraction
parentf9023743083a22796714bd4f89e606765f478f29 (diff)
parentcbc302a86e702ba15d446dc38793db838fd0b109 (diff)
Merge "VIS : SoundTriggerService: fix fake AudioRecord creation" into rvc-qpr-dev
Diffstat (limited to 'services/voiceinteraction')
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java45
1 files changed, 21 insertions, 24 deletions
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index 534fe036ba87..fe0f7b80997e 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -1284,32 +1284,25 @@ public class SoundTriggerService extends SystemService {
* @return The initialized AudioRecord
*/
private @NonNull AudioRecord createAudioRecordForEvent(
- @NonNull SoundTrigger.GenericRecognitionEvent event) {
+ @NonNull SoundTrigger.GenericRecognitionEvent event)
+ throws IllegalArgumentException, UnsupportedOperationException {
AudioAttributes.Builder attributesBuilder = new AudioAttributes.Builder();
attributesBuilder.setInternalCapturePreset(MediaRecorder.AudioSource.HOTWORD);
AudioAttributes attributes = attributesBuilder.build();
- // Use same AudioFormat processing as in RecognitionEvent.fromParcel
AudioFormat originalFormat = event.getCaptureFormat();
- AudioFormat captureFormat = (new AudioFormat.Builder())
- .setChannelMask(originalFormat.getChannelMask())
- .setEncoding(originalFormat.getEncoding())
- .setSampleRate(originalFormat.getSampleRate())
- .build();
-
- int bufferSize = AudioRecord.getMinBufferSize(
- captureFormat.getSampleRate() == AudioFormat.SAMPLE_RATE_UNSPECIFIED
- ? AudioFormat.SAMPLE_RATE_HZ_MAX
- : captureFormat.getSampleRate(),
- captureFormat.getChannelCount() == 2
- ? AudioFormat.CHANNEL_IN_STEREO
- : AudioFormat.CHANNEL_IN_MONO,
- captureFormat.getEncoding());
sEventLogger.log(new SoundTriggerLogger.StringEvent("createAudioRecordForEvent"));
- return new AudioRecord(attributes, captureFormat, bufferSize,
- event.getCaptureSession());
+ return (new AudioRecord.Builder())
+ .setAudioAttributes(attributes)
+ .setAudioFormat((new AudioFormat.Builder())
+ .setChannelMask(originalFormat.getChannelMask())
+ .setEncoding(originalFormat.getEncoding())
+ .setSampleRate(originalFormat.getSampleRate())
+ .build())
+ .setSessionId(event.getCaptureSession())
+ .build();
}
@Override
@@ -1335,12 +1328,16 @@ public class SoundTriggerService extends SystemService {
// execute if throttled:
() -> {
if (event.isCaptureAvailable()) {
- AudioRecord capturedData = createAudioRecordForEvent(event);
-
- // Currently we need to start and release the audio record to reset
- // the DSP even if we don't want to process the event
- capturedData.startRecording();
- capturedData.release();
+ try {
+ // Currently we need to start and release the audio record to reset
+ // the DSP even if we don't want to process the eve
+ AudioRecord capturedData = createAudioRecordForEvent(event);
+ capturedData.startRecording();
+ capturedData.release();
+ } catch (IllegalArgumentException | UnsupportedOperationException e) {
+ Slog.w(TAG, mPuuid + ": createAudioRecordForEvent(" + event
+ + "), failed to create AudioRecord");
+ }
}
}));
}