Loading media/java/android/media/audiopolicy/AudioMixingRule.java +34 −4 Original line number Diff line number Diff line Loading @@ -291,7 +291,6 @@ public class AudioMixingRule { final int match_rule = rule & ~RULE_EXCLUSION_MASK; switch (match_rule) { case RULE_MATCH_ATTRIBUTE_USAGE: case RULE_MATCH_UID: case RULE_MATCH_USERID: return true; default: Loading @@ -299,6 +298,16 @@ public class AudioMixingRule { } } private static boolean isRecorderRule(int rule) { final int match_rule = rule & ~RULE_EXCLUSION_MASK; switch (match_rule) { case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET: return true; default: return false; } } private static boolean isAudioAttributeRule(int match_rule) { switch(match_rule) { case RULE_MATCH_ATTRIBUTE_USAGE: Loading Loading @@ -459,6 +468,23 @@ public class AudioMixingRule { return this; } /** * Set target mix type of the mixing rule. * * <p>Note: If the mix type was not specified, it will be decided automatically by mixing * rule. For {@link #RULE_MATCH_UID}, the default type is {@link AudioMix#MIX_TYPE_PLAYERS}. * * @param mixType {@link AudioMix#MIX_TYPE_PLAYERS} or {@link AudioMix#MIX_TYPE_RECORDERS} * @return the same Builder instance. * * @hide */ public @NonNull Builder setTargetMixType(int mixType) { mTargetMixType = mixType; Log.i("AudioMixingRule", "Builder setTargetMixType " + mixType); return this; } /** * Add or exclude a rule for the selection of which streams are mixed together. * Does error checking on the parameters. Loading Loading @@ -515,11 +541,15 @@ public class AudioMixingRule { if (mTargetMixType == AudioMix.MIX_TYPE_INVALID) { if (isPlayerRule(rule)) { mTargetMixType = AudioMix.MIX_TYPE_PLAYERS; } else { } else if (isRecorderRule(rule)) { mTargetMixType = AudioMix.MIX_TYPE_RECORDERS; } else { // For rules which are not player or recorder specific (e.g. RULE_MATCH_UID), // the default mix type is MIX_TYPE_PLAYERS. mTargetMixType = AudioMix.MIX_TYPE_PLAYERS; } } else if (((mTargetMixType == AudioMix.MIX_TYPE_PLAYERS) && !isPlayerRule(rule)) || ((mTargetMixType == AudioMix.MIX_TYPE_RECORDERS) && isPlayerRule(rule))) } else if ((isPlayerRule(rule) && (mTargetMixType != AudioMix.MIX_TYPE_PLAYERS)) || (isRecorderRule(rule)) && (mTargetMixType != AudioMix.MIX_TYPE_RECORDERS)) { throw new IllegalArgumentException("Incompatible rule for mix"); } Loading media/java/android/media/audiopolicy/AudioPolicyConfig.java +6 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,8 @@ public class AudioPolicyConfig implements Parcelable { dest.writeBoolean(mix.getRule().allowPrivilegedMediaPlaybackCapture()); // write voice communication capture allowed flag dest.writeBoolean(mix.getRule().voiceCommunicationCaptureAllowed()); // write specified mix type dest.writeInt(mix.getRule().getTargetMixType()); // write mix rules final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria(); dest.writeInt(criteria.size()); Loading Loading @@ -134,6 +136,8 @@ public class AudioPolicyConfig implements Parcelable { ruleBuilder.allowPrivilegedPlaybackCapture(in.readBoolean()); // read voice capture allowed flag ruleBuilder.voiceCommunicationCaptureAllowed(in.readBoolean()); // read specified mix type ruleBuilder.setTargetMixType(in.readInt()); // read mix rules int nbRules = in.readInt(); for (int j = 0 ; j < nbRules ; j++) { Loading Loading @@ -176,6 +180,8 @@ public class AudioPolicyConfig implements Parcelable { textDump += " allow voice communication capture=" + mix.getRule().voiceCommunicationCaptureAllowed() + "\n"; // write mix rules textDump += " specified mix type=" + mix.getRule().getTargetMixType() + "\n"; final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria(); for (AudioMixMatchCriterion criterion : criteria) { switch(criterion.mRule) { Loading Loading
media/java/android/media/audiopolicy/AudioMixingRule.java +34 −4 Original line number Diff line number Diff line Loading @@ -291,7 +291,6 @@ public class AudioMixingRule { final int match_rule = rule & ~RULE_EXCLUSION_MASK; switch (match_rule) { case RULE_MATCH_ATTRIBUTE_USAGE: case RULE_MATCH_UID: case RULE_MATCH_USERID: return true; default: Loading @@ -299,6 +298,16 @@ public class AudioMixingRule { } } private static boolean isRecorderRule(int rule) { final int match_rule = rule & ~RULE_EXCLUSION_MASK; switch (match_rule) { case RULE_MATCH_ATTRIBUTE_CAPTURE_PRESET: return true; default: return false; } } private static boolean isAudioAttributeRule(int match_rule) { switch(match_rule) { case RULE_MATCH_ATTRIBUTE_USAGE: Loading Loading @@ -459,6 +468,23 @@ public class AudioMixingRule { return this; } /** * Set target mix type of the mixing rule. * * <p>Note: If the mix type was not specified, it will be decided automatically by mixing * rule. For {@link #RULE_MATCH_UID}, the default type is {@link AudioMix#MIX_TYPE_PLAYERS}. * * @param mixType {@link AudioMix#MIX_TYPE_PLAYERS} or {@link AudioMix#MIX_TYPE_RECORDERS} * @return the same Builder instance. * * @hide */ public @NonNull Builder setTargetMixType(int mixType) { mTargetMixType = mixType; Log.i("AudioMixingRule", "Builder setTargetMixType " + mixType); return this; } /** * Add or exclude a rule for the selection of which streams are mixed together. * Does error checking on the parameters. Loading Loading @@ -515,11 +541,15 @@ public class AudioMixingRule { if (mTargetMixType == AudioMix.MIX_TYPE_INVALID) { if (isPlayerRule(rule)) { mTargetMixType = AudioMix.MIX_TYPE_PLAYERS; } else { } else if (isRecorderRule(rule)) { mTargetMixType = AudioMix.MIX_TYPE_RECORDERS; } else { // For rules which are not player or recorder specific (e.g. RULE_MATCH_UID), // the default mix type is MIX_TYPE_PLAYERS. mTargetMixType = AudioMix.MIX_TYPE_PLAYERS; } } else if (((mTargetMixType == AudioMix.MIX_TYPE_PLAYERS) && !isPlayerRule(rule)) || ((mTargetMixType == AudioMix.MIX_TYPE_RECORDERS) && isPlayerRule(rule))) } else if ((isPlayerRule(rule) && (mTargetMixType != AudioMix.MIX_TYPE_PLAYERS)) || (isRecorderRule(rule)) && (mTargetMixType != AudioMix.MIX_TYPE_RECORDERS)) { throw new IllegalArgumentException("Incompatible rule for mix"); } Loading
media/java/android/media/audiopolicy/AudioPolicyConfig.java +6 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,8 @@ public class AudioPolicyConfig implements Parcelable { dest.writeBoolean(mix.getRule().allowPrivilegedMediaPlaybackCapture()); // write voice communication capture allowed flag dest.writeBoolean(mix.getRule().voiceCommunicationCaptureAllowed()); // write specified mix type dest.writeInt(mix.getRule().getTargetMixType()); // write mix rules final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria(); dest.writeInt(criteria.size()); Loading Loading @@ -134,6 +136,8 @@ public class AudioPolicyConfig implements Parcelable { ruleBuilder.allowPrivilegedPlaybackCapture(in.readBoolean()); // read voice capture allowed flag ruleBuilder.voiceCommunicationCaptureAllowed(in.readBoolean()); // read specified mix type ruleBuilder.setTargetMixType(in.readInt()); // read mix rules int nbRules = in.readInt(); for (int j = 0 ; j < nbRules ; j++) { Loading Loading @@ -176,6 +180,8 @@ public class AudioPolicyConfig implements Parcelable { textDump += " allow voice communication capture=" + mix.getRule().voiceCommunicationCaptureAllowed() + "\n"; // write mix rules textDump += " specified mix type=" + mix.getRule().getTargetMixType() + "\n"; final ArrayList<AudioMixMatchCriterion> criteria = mix.getRule().getCriteria(); for (AudioMixMatchCriterion criterion : criteria) { switch(criterion.mRule) { Loading