Merge "AudioService: SpatializerHelper: native head tracking callback" into sc-v2-dev
This commit is contained in:
@@ -26,6 +26,7 @@ import android.media.INativeSpatializerCallback;
|
|||||||
import android.media.ISpatializer;
|
import android.media.ISpatializer;
|
||||||
import android.media.ISpatializerCallback;
|
import android.media.ISpatializerCallback;
|
||||||
import android.media.ISpatializerHeadToSoundStagePoseCallback;
|
import android.media.ISpatializerHeadToSoundStagePoseCallback;
|
||||||
|
import android.media.ISpatializerHeadTrackingCallback;
|
||||||
import android.media.ISpatializerHeadTrackingModeCallback;
|
import android.media.ISpatializerHeadTrackingModeCallback;
|
||||||
import android.media.Spatializer;
|
import android.media.Spatializer;
|
||||||
import android.media.SpatializerHeadTrackingMode;
|
import android.media.SpatializerHeadTrackingMode;
|
||||||
@@ -71,6 +72,8 @@ public class SpatializerHelper {
|
|||||||
private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
|
private int mDesiredHeadTrackingMode = Spatializer.HEAD_TRACKING_MODE_UNSUPPORTED;
|
||||||
private @Nullable ISpatializer mSpat;
|
private @Nullable ISpatializer mSpat;
|
||||||
private @Nullable SpatializerCallback mSpatCallback;
|
private @Nullable SpatializerCallback mSpatCallback;
|
||||||
|
private @Nullable SpatializerHeadTrackingCallback mSpatHeadTrackingCallback;
|
||||||
|
|
||||||
|
|
||||||
// default attributes and format that determine basic availability of spatialization
|
// default attributes and format that determine basic availability of spatialization
|
||||||
private static final AudioAttributes DEFAULT_ATTRIBUTES = new AudioAttributes.Builder()
|
private static final AudioAttributes DEFAULT_ATTRIBUTES = new AudioAttributes.Builder()
|
||||||
@@ -192,9 +195,13 @@ public class SpatializerHelper {
|
|||||||
}
|
}
|
||||||
// TODO use reported spat level to change state
|
// TODO use reported spat level to change state
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// spatializer head tracking callback from native
|
||||||
|
private final class SpatializerHeadTrackingCallback
|
||||||
|
extends ISpatializerHeadTrackingCallback.Stub {
|
||||||
public void onHeadTrackingModeChanged(byte mode) {
|
public void onHeadTrackingModeChanged(byte mode) {
|
||||||
logd("SpatializerCallback.onHeadTrackingModeChanged mode:" + mode);
|
logd("SpatializerHeadTrackingCallback.onHeadTrackingModeChanged mode:" + mode);
|
||||||
int oldMode, newMode;
|
int oldMode, newMode;
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
oldMode = mActualHeadTrackingMode;
|
oldMode = mActualHeadTrackingMode;
|
||||||
@@ -208,12 +215,13 @@ public class SpatializerHelper {
|
|||||||
|
|
||||||
public void onHeadToSoundStagePoseUpdated(float[] headToStage) {
|
public void onHeadToSoundStagePoseUpdated(float[] headToStage) {
|
||||||
if (headToStage == null) {
|
if (headToStage == null) {
|
||||||
Log.e(TAG, "SpatializerCallback.onHeadToStagePoseUpdated null transform");
|
Log.e(TAG, "SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated"
|
||||||
|
+ "null transform");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (headToStage.length != 6) {
|
if (headToStage.length != 6) {
|
||||||
Log.e(TAG, "SpatializerCallback.onHeadToStagePoseUpdated invalid transform length"
|
Log.e(TAG, "SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated"
|
||||||
+ headToStage.length);
|
+ " invalid transform length" + headToStage.length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
@@ -222,7 +230,7 @@ public class SpatializerHelper {
|
|||||||
for (float val : headToStage) {
|
for (float val : headToStage) {
|
||||||
t.append("[").append(String.format(Locale.ENGLISH, "%.3f", val)).append("]");
|
t.append("[").append(String.format(Locale.ENGLISH, "%.3f", val)).append("]");
|
||||||
}
|
}
|
||||||
logd("SpatializerCallback.onHeadToStagePoseUpdated headToStage:" + t);
|
logd("SpatializerHeadTrackingCallback.onHeadToStagePoseUpdated headToStage:" + t);
|
||||||
}
|
}
|
||||||
dispatchPoseUpdate(headToStage);
|
dispatchPoseUpdate(headToStage);
|
||||||
}
|
}
|
||||||
@@ -433,9 +441,14 @@ public class SpatializerHelper {
|
|||||||
private void createSpat() {
|
private void createSpat() {
|
||||||
if (mSpat == null) {
|
if (mSpat == null) {
|
||||||
mSpatCallback = new SpatializerCallback();
|
mSpatCallback = new SpatializerCallback();
|
||||||
|
mSpatHeadTrackingCallback = new SpatializerHeadTrackingCallback();
|
||||||
mSpat = AudioSystem.getSpatializer(mSpatCallback);
|
mSpat = AudioSystem.getSpatializer(mSpatCallback);
|
||||||
try {
|
try {
|
||||||
mSpat.setLevel((byte) Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
|
mSpat.setLevel((byte) Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
|
||||||
|
//TODO: register heatracking callback only when sensors are registered
|
||||||
|
if (mSpat.isHeadTrackingSupported()) {
|
||||||
|
mSpat.registerHeadTrackingCallback(mSpatHeadTrackingCallback);
|
||||||
|
}
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
Log.e(TAG, "Can't set spatializer level", e);
|
Log.e(TAG, "Can't set spatializer level", e);
|
||||||
mState = STATE_NOT_SUPPORTED;
|
mState = STATE_NOT_SUPPORTED;
|
||||||
@@ -451,6 +464,7 @@ public class SpatializerHelper {
|
|||||||
if (mSpat != null) {
|
if (mSpat != null) {
|
||||||
mSpatCallback = null;
|
mSpatCallback = null;
|
||||||
try {
|
try {
|
||||||
|
mSpat.registerHeadTrackingCallback(null);
|
||||||
mSpat.release();
|
mSpat.release();
|
||||||
mSpat = null;
|
mSpat = null;
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
|
|||||||
Reference in New Issue
Block a user