diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 247c4aea91061..f597440ccbb3e 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -638,7 +638,7 @@ public class AudioSystem public static final int PHONE_STATE_RINGING = 1; public static final int PHONE_STATE_INCALL = 2; - // device categories config for setForceUse, must match AudioSystem::forced_config + // device categories config for setForceUse, must match audio_policy_forced_cfg_t public static final int FORCE_NONE = 0; public static final int FORCE_SPEAKER = 1; public static final int FORCE_HEADPHONES = 2; @@ -652,17 +652,20 @@ public class AudioSystem public static final int FORCE_NO_BT_A2DP = 10; public static final int FORCE_SYSTEM_ENFORCED = 11; public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12; - private static final int NUM_FORCE_CONFIG = 13; + public static final int FORCE_ENCODED_SURROUND_NEVER = 13; + public static final int FORCE_ENCODED_SURROUND_ALWAYS = 14; + public static final int NUM_FORCE_CONFIG = 15; public static final int FORCE_DEFAULT = FORCE_NONE; - // usage for setForceUse, must match AudioSystem::force_use + // usage for setForceUse, must match audio_policy_force_use_t public static final int FOR_COMMUNICATION = 0; public static final int FOR_MEDIA = 1; public static final int FOR_RECORD = 2; public static final int FOR_DOCK = 3; public static final int FOR_SYSTEM = 4; public static final int FOR_HDMI_SYSTEM_AUDIO = 5; - private static final int NUM_FORCE_USE = 6; + public static final int FOR_ENCODED_SURROUND = 6; + private static final int NUM_FORCE_USE = 7; // usage for AudioRecord.startRecordingSync(), must match AudioSystem::sync_event_t public static final int SYNC_EVENT_NONE = 0; diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java index a3100c820d997..5a3639a972fce 100644 --- a/services/core/java/com/android/server/audio/AudioService.java +++ b/services/core/java/com/android/server/audio/AudioService.java @@ -849,6 +849,7 @@ public class AudioService extends IAudioService.Stub { AudioSystem.setForceUse(AudioSystem.FOR_DOCK, mDockAudioMediaEnabled ? AudioSystem.FORCE_ANALOG_DOCK : AudioSystem.FORCE_NONE); + readEncodedSurroundMode(mContentResolver); } if (mHdmiManager != null) { synchronized (mHdmiManager) { @@ -1011,6 +1012,7 @@ public class AudioService extends IAudioService.Stub { 0); } + private void updateMasterMono(ContentResolver cr) { final boolean masterMono = System.getIntForUser( @@ -1021,6 +1023,44 @@ public class AudioService extends IAudioService.Stub { AudioSystem.setMasterMono(masterMono); } + private void readEncodedSurroundMode(ContentResolver cr) + { + int encodedSurroundMode = Settings.Global.getInt( + cr, Settings.Global.ENCODED_SURROUND_OUTPUT, + Settings.Global.ENCODED_SURROUND_OUTPUT_AUTO); + sendEncodedSurroundMode(encodedSurroundMode); + } + + private void sendEncodedSurroundMode(int encodedSurroundMode) + { + // initialize to guaranteed bad value + int forceSetting = AudioSystem.NUM_FORCE_CONFIG; + switch (encodedSurroundMode) { + case Settings.Global.ENCODED_SURROUND_OUTPUT_AUTO: + forceSetting = AudioSystem.FORCE_NONE; + break; + case Settings.Global.ENCODED_SURROUND_OUTPUT_NEVER: + forceSetting = AudioSystem.FORCE_ENCODED_SURROUND_NEVER; + break; + case Settings.Global.ENCODED_SURROUND_OUTPUT_ALWAYS: + forceSetting = AudioSystem.FORCE_ENCODED_SURROUND_ALWAYS; + break; + default: + Log.e(TAG, "updateSurroundSoundSettings: illegal value " + + encodedSurroundMode); + break; + } + if (forceSetting != AudioSystem.NUM_FORCE_CONFIG) { + sendMsg(mAudioHandler, + MSG_SET_FORCE_USE, + SENDMSG_QUEUE, + AudioSystem.FOR_ENCODED_SURROUND, + forceSetting, + null, + 0); + } + } + private void readPersistedSettings() { final ContentResolver cr = mContentResolver; @@ -1062,6 +1102,7 @@ public class AudioService extends IAudioService.Stub { updateRingerModeAffectedStreams(); readDockAudioSettings(cr); + readEncodedSurroundMode(cr); } mMuteAffectedStreams = System.getIntForUser(cr, @@ -4628,6 +4669,7 @@ public class AudioService extends IAudioService.Stub { } readDockAudioSettings(mContentResolver); updateMasterMono(mContentResolver); + readEncodedSurroundMode(mContentResolver); } } } @@ -6315,4 +6357,4 @@ public class AudioService extends IAudioService.Stub { if (DEBUG_VOL) Log.d(TAG, "Reloaded controller service: " + this); } } -} \ No newline at end of file +}