Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0cc8dbca authored by Ytai Ben-tsvi's avatar Ytai Ben-tsvi Committed by Automerger Merge Worker
Browse files

Merge changes Ibf4ecdb4,I1e4adf9f into rvc-dev am: 3917b729

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11815381

Change-Id: I0273ba4eca004e7381915e3818566ba9c818f0ec
parents 891fba38 3917b729
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -195,11 +195,14 @@ class ConversionUtil {

    public static SoundTrigger.RecognitionEvent aidl2apiRecognitionEvent(
            int modelHandle, RecognitionEvent aidlEvent) {
        // The API recognition event doesn't allow for a null audio format, even though it doesn't
        // always make sense. We thus replace it with a default.
        AudioFormat audioFormat = aidl2apiAudioFormatWithDefault(aidlEvent.audioConfig);
        return new SoundTrigger.GenericRecognitionEvent(
                aidlEvent.status,
                modelHandle, aidlEvent.captureAvailable, aidlEvent.captureSession,
                aidlEvent.captureDelayMs, aidlEvent.capturePreambleMs, aidlEvent.triggerInData,
                aidl2apiAudioFormat(aidlEvent.audioConfig), aidlEvent.data);
                audioFormat, aidlEvent.data);
    }

    public static SoundTrigger.RecognitionEvent aidl2apiPhraseRecognitionEvent(
@@ -210,11 +213,14 @@ class ConversionUtil {
        for (int i = 0; i < aidlEvent.phraseExtras.length; ++i) {
            apiExtras[i] = aidl2apiPhraseRecognitionExtra(aidlEvent.phraseExtras[i]);
        }
        // The API recognition event doesn't allow for a null audio format, even though it doesn't
        // always make sense. We thus replace it with a default.
        AudioFormat audioFormat = aidl2apiAudioFormatWithDefault(aidlEvent.common.audioConfig);
        return new SoundTrigger.KeyphraseRecognitionEvent(aidlEvent.common.status, modelHandle,
                aidlEvent.common.captureAvailable,
                aidlEvent.common.captureSession, aidlEvent.common.captureDelayMs,
                aidlEvent.common.capturePreambleMs, aidlEvent.common.triggerInData,
                aidl2apiAudioFormat(aidlEvent.common.audioConfig), aidlEvent.common.data,
                audioFormat, aidlEvent.common.data,
                apiExtras);
    }

@@ -226,6 +232,14 @@ class ConversionUtil {
        return apiBuilder.build();
    }

    // Same as above, but in case of a null input returns a non-null valid output.
    public static AudioFormat aidl2apiAudioFormatWithDefault(@Nullable AudioConfig audioConfig) {
        if (audioConfig != null) {
            return aidl2apiAudioFormat(audioConfig);
        }
        return new AudioFormat.Builder().build();
    }

    public static int aidl2apiEncoding(int aidlFormat) {
        switch (aidlFormat) {
            case android.media.audio.common.AudioFormat.PCM
+1 −1
Original line number Diff line number Diff line
@@ -303,7 +303,7 @@ public class SoundTriggerModule {
                                    (SoundTrigger.RecognitionEvent) msg.obj);
                            break;
                        case EVENT_SERVICE_STATE_CHANGE:
                            listener.onServiceStateChange(msg.arg1);
                            listener.onServiceStateChange((int) msg.obj);
                            break;
                        case EVENT_SERVICE_DIED:
                            listener.onServiceDied();
+2 −2
Original line number Diff line number Diff line
@@ -43,9 +43,9 @@ parcelable RecognitionEvent {
    boolean triggerInData;
    /**
     * Audio format of either the trigger in event data or to use for capture of the rest of the
     * utterance.
     * utterance. May be null when no audio is available for this event type.
     */
    AudioConfig audioConfig;
    @nullable AudioConfig audioConfig;
    /** Additional data. */
    byte[] data;
}
+9 −14
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.hardware.soundtrigger.V2_1.ISoundTriggerHwCallback;
import android.hardware.soundtrigger.V2_2.ISoundTriggerHw;
import android.media.audio.common.AudioConfig;
import android.media.audio.common.AudioOffloadInfo;
import android.media.soundtrigger_middleware.ISoundTriggerCallback;
import android.media.soundtrigger_middleware.ISoundTriggerModule;
import android.media.soundtrigger_middleware.ModelParameterRange;
@@ -30,6 +28,7 @@ import android.media.soundtrigger_middleware.PhraseRecognitionExtra;
import android.media.soundtrigger_middleware.PhraseSoundModel;
import android.media.soundtrigger_middleware.RecognitionConfig;
import android.media.soundtrigger_middleware.RecognitionEvent;
import android.media.soundtrigger_middleware.RecognitionStatus;
import android.media.soundtrigger_middleware.SoundModel;
import android.media.soundtrigger_middleware.SoundModelType;
import android.media.soundtrigger_middleware.SoundTriggerModuleProperties;
@@ -579,7 +578,7 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
                    @NonNull ISoundTriggerHwCallback.RecognitionEvent recognitionEvent,
                    int cookie) {
                synchronized (SoundTriggerModule.this) {
                    android.media.soundtrigger_middleware.RecognitionEvent aidlEvent =
                    RecognitionEvent aidlEvent =
                            ConversionUtil.hidl2aidlRecognitionEvent(recognitionEvent);
                    aidlEvent.captureSession = mSession.mSessionHandle;
                    try {
@@ -589,8 +588,7 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
                        // In any case, client callbacks are considered best effort.
                        Log.e(TAG, "Client callback execption.", e);
                    }
                    if (aidlEvent.status
                            != android.media.soundtrigger_middleware.RecognitionStatus.FORCED) {
                    if (aidlEvent.status != RecognitionStatus.FORCED) {
                        setState(ModelState.LOADED);
                    }
                }
@@ -601,7 +599,7 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
                    @NonNull ISoundTriggerHwCallback.PhraseRecognitionEvent phraseRecognitionEvent,
                    int cookie) {
                synchronized (SoundTriggerModule.this) {
                    android.media.soundtrigger_middleware.PhraseRecognitionEvent aidlEvent =
                    PhraseRecognitionEvent aidlEvent =
                            ConversionUtil.hidl2aidlPhraseRecognitionEvent(phraseRecognitionEvent);
                    aidlEvent.common.captureSession = mSession.mSessionHandle;
                    try {
@@ -611,8 +609,7 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
                        // In any case, client callbacks are considered best effort.
                        Log.e(TAG, "Client callback execption.", e);
                    }
                    if (aidlEvent.common.status
                            != android.media.soundtrigger_middleware.RecognitionStatus.FORCED) {
                    if (aidlEvent.common.status != RecognitionStatus.FORCED) {
                        setState(ModelState.LOADED);
                    }
                }
@@ -623,15 +620,13 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
    /**
     * Creates a default-initialized recognition event.
     *
     * Object fields are default constructed.
     * Array fields are initialized to 0 length.
     * Non-nullable object fields are default constructed.
     * Non-nullable array fields are initialized to 0 length.
     *
     * @return The event.
     */
    private static RecognitionEvent newEmptyRecognitionEvent() {
        RecognitionEvent result = new RecognitionEvent();
        result.audioConfig = new AudioConfig();
        result.audioConfig.offloadInfo = new AudioOffloadInfo();
        result.data = new byte[0];
        return result;
    }
@@ -639,8 +634,8 @@ class SoundTriggerModule implements IHwBinder.DeathRecipient {
    /**
     * Creates a default-initialized phrase recognition event.
     *
     * Object fields are default constructed.
     * Array fields are initialized to 0 length.
     * Non-nullable object fields are default constructed.
     * Non-nullable array fields are initialized to 0 length.
     *
     * @return The event.
     */