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

Commit c3681aa1 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

SpatializerHelper: head tracking init / dump

When initializing the sensors, also set the headtracking mode
to the desired mode, which defaults to RELATIVE_WORLD.

When changing the desired tracking mode, compare against
the current tracking mode instead of the previous
desired mode.

Dump state information from AudioService dump.

Bug: 210803914
Test: atest SpatializerTest#testHeadTrackingListener
Change-Id: I5144d3218223f241cf047d00f843c518c1e617b8
parent 9b33de7b
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -214,6 +214,29 @@ public class Spatializer {
    @RequiresPermission(android.Manifest.permission.MODIFY_DEFAULT_AUDIO_EFFECTS)
    public static final int HEAD_TRACKING_MODE_RELATIVE_DEVICE = 2;

    /**
     * @hide
     * Head tracking mode to string conversion
     * @param mode a valid head tracking mode
     * @return a string containing the matching constant name
     */
    public static final String headtrackingModeToString(int mode) {
        switch(mode) {
            case HEAD_TRACKING_MODE_UNSUPPORTED:
                return "HEAD_TRACKING_MODE_UNSUPPORTED";
            case HEAD_TRACKING_MODE_DISABLED:
                return "HEAD_TRACKING_MODE_DISABLED";
            case HEAD_TRACKING_MODE_OTHER:
                return "HEAD_TRACKING_MODE_OTHER";
            case HEAD_TRACKING_MODE_RELATIVE_WORLD:
                return "HEAD_TRACKING_MODE_RELATIVE_WORLD";
            case HEAD_TRACKING_MODE_RELATIVE_DEVICE:
                return "HEAD_TRACKING_MODE_RELATIVE_DEVICE";
            default:
                return "head tracking mode unknown " + mode;
        }
    }

    /**
     * Return the level of support for the spatialization feature on this device.
     * This level of support is independent of whether the {@code Spatializer} is currently
+1 −0
Original line number Diff line number Diff line
@@ -9408,6 +9408,7 @@ public class AudioService extends IAudioService.Stub
        pw.println("mHasSpatializerEffect:" + mHasSpatializerEffect);
        pw.println("isSpatializerEnabled:" + isSpatializerEnabled());
        pw.println("isSpatialAudioEnabled:" + isSpatialAudioEnabled());
        mSpatializerHelper.dump(pw);

        mAudioSystem.dump(pw);
    }
+25 −4
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.util.Log;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -84,7 +85,7 @@ public class SpatializerHelper {
    private int mSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
    private int mCapableSpatLevel = Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
    private int mActualHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
    private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
    private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_RELATIVE_WORLD;
    private int mSpatOutput = 0;
    private @Nullable ISpatializer mSpat;
    private @Nullable SpatializerCallback mSpatCallback;
@@ -681,12 +682,13 @@ public class SpatializerHelper {
            return;
        }
        try {
            if (mode != mDesiredHeadTrackingMode) {
                mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
            if (mDesiredHeadTrackingMode != mode) {
                mDesiredHeadTrackingMode = mode;
                dispatchDesiredHeadTrackingMode(mode);
            }

            if (mode != headTrackingModeTypeToSpatializerInt(mSpat.getActualHeadTrackingMode())) {
                mSpat.setDesiredHeadTrackingMode(spatializerIntToHeadTrackingModeType(mode));
            }
        } catch (RemoteException e) {
            Log.e(TAG, "Error calling setDesiredHeadTrackingMode", e);
        }
@@ -937,6 +939,7 @@ public class SpatializerHelper {
        } catch (Exception e) {
            Log.e(TAG, "Error calling setHeadSensor:" + headHandle, e);
        }
        setDesiredHeadTrackingMode(mDesiredHeadTrackingMode);
    }

    //------------------------------------------------------
@@ -983,4 +986,22 @@ public class SpatializerHelper {
                throw(new IllegalArgumentException("Unexpected spatializer level:" + level));
        }
    }

    void dump(PrintWriter pw) {
        pw.println("SpatializerHelper:");
        pw.println("\tmState:" + mState);
        pw.println("\tmSpatLevel:" + mSpatLevel);
        pw.println("\tmCapableSpatLevel:" + mCapableSpatLevel);
        pw.println("\tmActualHeadTrackingMode:"
                + Spatializer.headtrackingModeToString(mActualHeadTrackingMode));
        pw.println("\tmDesiredHeadTrackingMode:"
                + Spatializer.headtrackingModeToString(mDesiredHeadTrackingMode));
        String modesString = "";
        int[] modes = getSupportedHeadTrackingModes();
        for (int mode : modes) {
            modesString += Spatializer.headtrackingModeToString(mode) + " ";
        }
        pw.println("\tsupported head tracking modes:" + modesString);
        pw.println("\tmSpatOutput:" + mSpatOutput);
    }
}