From a82281f6e7643ba08276de8181d44df11ecf8ae7 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Thu, 16 Jul 2020 10:08:25 -0700 Subject: [PATCH] VIS : SoundTriggerService: fix fake AudioRecord creation Make sure exceptions that can occur when creating the fake AudioRecord instance in SoundTriggerService.createAudioRecordForEvent() are caught. Bug: 161375011 Test: Manual sound trigger regression with OK Google and Now Playing Change-Id: Ie367b9dda6f9e4f3079f5afe2ac92fc98cf8bced --- .../soundtrigger/SoundTriggerService.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index 6c13cd799bc26..397a0909279e4 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -1289,27 +1289,25 @@ public class SoundTriggerService extends SystemService { 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()); + try { + return (new AudioRecord.Builder()) + .setAudioAttributes(attributes) + .setAudioFormat((new AudioFormat.Builder()) + .setChannelMask(originalFormat.getChannelMask()) + .setEncoding(originalFormat.getEncoding()) + .setSampleRate(originalFormat.getSampleRate()) + .build()) + .setSessionId(event.getCaptureSession()) + .build(); + } catch (IllegalArgumentException | UnsupportedOperationException e) { + Slog.w(TAG, mPuuid + ": createAudioRecordForEvent(" + event + + "), failed to create AudioRecord"); + return null; + } } @Override @@ -1339,8 +1337,10 @@ public class SoundTriggerService extends SystemService { // 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(); + if (capturedData != null) { + capturedData.startRecording(); + capturedData.release(); + } } })); }