Android新增音频流类型

Android新增STREAM_A2DP流类型,适用于蓝牙音乐,等于在android上层独立出一条音频通道,audioFIinger可以根据流类型做策略。

diff --git a/frameworks/av/include/media/AudioPolicyHelper.h b/frameworks/av/include/media/AudioPolicyHelper.h
old mode 100644
new mode 100755
index 79231be..c19d5f2
--- a/frameworks/av/include/media/AudioPolicyHelper.h
+++ b/frameworks/av/include/media/AudioPolicyHelper.h
@@ -55,6 +55,9 @@ static audio_stream_type_t audio_attributes_to_stream_type(const audio_attribute
     case AUDIO_USAGE_NOTIFICATION_EVENT:
         return AUDIO_STREAM_NOTIFICATION;
 
+	case AUDIO_USAGE_A2DP:
+		return AUDIO_STREAM_A2DP;
+		
     case AUDIO_USAGE_UNKNOWN:
     default:
         return AUDIO_STREAM_MUSIC;
@@ -107,6 +110,9 @@ static void stream_type_to_audio_attributes(audio_stream_type_t streamType,
         attr->content_type = AUDIO_CONTENT_TYPE_SPEECH;
         attr->usage = AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY;
         break;
+	case AUDIO_STREAM_A2DP:
+        attr->content_type = AUDIO_CONTENT_TYPE_A2DP;
+        attr->usage = AUDIO_USAGE_A2DP;
     default:
         ALOGE("invalid stream type %d when converting to attributes", streamType);
     }
diff --git a/frameworks/av/media/libmedia/AudioSystem.cpp b/frameworks/av/media/libmedia/AudioSystem.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/av/media/libmedia/AudioTrack.cpp b/frameworks/av/media/libmedia/AudioTrack.cpp
old mode 100644
new mode 100755
index e23091c..ceefb68
--- a/frameworks/av/media/libmedia/AudioTrack.cpp
+++ b/frameworks/av/media/libmedia/AudioTrack.cpp
@@ -375,7 +375,6 @@ status_t AudioTrack::set(
             flags = (audio_output_flags_t) (flags | AUDIO_OUTPUT_FLAG_FAST);
         }
     }
-
     // these below should probably come from the audioFlinger too...
     if (format == AUDIO_FORMAT_DEFAULT) {
         format = AUDIO_FORMAT_PCM_16_BIT;
diff --git a/frameworks/av/media/libmedia/IMediaPlayer.cpp b/frameworks/av/media/libmedia/IMediaPlayer.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp b/frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/av/services/audioflinger/Threads.cpp b/frameworks/av/services/audioflinger/Threads.cpp
index 938fbcf..ca6c6b7 100755
--- a/frameworks/av/services/audioflinger/Threads.cpp
+++ b/frameworks/av/services/audioflinger/Threads.cpp
@@ -4084,6 +4084,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
     mEffectBufferValid = false; // mEffectBuffer has no valid data until tracks found.
 
 	phoneMixer();
+	//ALOGW("mIsPhoneOn = %d", mIsPhoneOn);
 
     for (size_t i=0 ; i<count ; i++) {
         const sp<Track> t = mActiveTracks[i].promote();
@@ -4360,7 +4361,6 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
 						 typeVolume *= 0;
 					 }
 				}
-				ALOGW("mIsPhoneOn = %d, typeVolume = %f", mIsPhoneOn, typeVolume);
 
 				
                 float v = masterVolume * typeVolume;
diff --git a/frameworks/av/services/audioflinger/Tracks.cpp b/frameworks/av/services/audioflinger/Tracks.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h b/frameworks/av/services/audiopolicy/common/managerdefinitions/include/VolumeCurve.h
old mode 100644
new mode 100755
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Gains.cpp b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Gains.cpp
old mode 100644
new mode 100755
index e3fc9a8..cb7d8e9
--- a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Gains.cpp
+++ b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Gains.cpp
@@ -176,6 +176,12 @@ const VolumeCurvePoint *Gains::sVolumeProfiles[AUDIO_STREAM_CNT]
         Gains::sSilentVolumeCurve,    // DEVICE_CATEGORY_EARPIECE
         Gains::sSilentVolumeCurve     // DEVICE_CATEGORY_EXT_MEDIA
     },
+    { // AUDIO_STREAM_A2DP
+	    Gains::sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET
+        Gains::sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER
+        Gains::sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_EARPIECE
+        Gains::sDefaultMediaVolumeCurve  // DEVICE_CATEGORY_EXT_MEDIA
+    },
     { // AUDIO_STREAM_ACCESSIBILITY
         Gains::sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET
         Gains::sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/StreamDescriptor.cpp b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/StreamDescriptor.cpp
old mode 100644
new mode 100755
index b3019e1..f635a1e
--- a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/StreamDescriptor.cpp
+++ b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/StreamDescriptor.cpp
@@ -190,6 +190,8 @@ void StreamDescriptorCollection::initializeVolumeCurves(bool isSpeakerDrcEnabled
                             Gains::sSpeakerSonificationVolumeCurveDrc);
         setVolumeCurvePoint(AUDIO_STREAM_MUSIC, DEVICE_CATEGORY_SPEAKER,
                             Gains::sSpeakerMediaVolumeCurveDrc);
+		setVolumeCurvePoint(AUDIO_STREAM_A2DP, DEVICE_CATEGORY_SPEAKER,
+                            Gains::sSpeakerMediaVolumeCurveDrc);
         setVolumeCurvePoint(AUDIO_STREAM_ACCESSIBILITY, DEVICE_CATEGORY_SPEAKER,
                             Gains::sSpeakerMediaVolumeCurveDrc);
     }
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/TypeConverter.cpp b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/TypeConverter.cpp
old mode 100644
new mode 100755
index 48bfd79..727390d
--- a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/TypeConverter.cpp
+++ b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/TypeConverter.cpp
@@ -223,6 +223,7 @@ const StreamTypeConverter::Table StreamTypeConverter::mTable[] = {
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ENFORCED_AUDIBLE),
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_DTMF),
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_TTS),
+    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_A2DP),
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ACCESSIBILITY),
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_REROUTING),
     MAKE_STRING_FROM_ENUM(AUDIO_STREAM_PATCH),
diff --git a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
old mode 100644
new mode 100755
index 14caf7c..0bc1252
--- a/frameworks/av/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
+++ b/frameworks/av/services/audiopolicy/common/managerdefinitions/src/VolumeCurve.cpp
@@ -25,7 +25,7 @@ namespace android {
 float VolumeCurve::volIndexToDb(int indexInUi, int volIndexMin, int volIndexMax) const
 {
     ALOG_ASSERT(!mCurvePoints.isEmpty(), "Invalid volume curve");
-
+	
     size_t nbCurvePoints = mCurvePoints.size();
     // the volume index in the UI is relative to the min and max volume indices for this stream
     int nbSteps = 1 + mCurvePoints[nbCurvePoints - 1].mIndex - mCurvePoints[0].mIndex;
diff --git a/frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml b/frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml
old mode 100644
new mode 100755
index 43a47b0..5c43ea4
--- a/frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml
+++ b/frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml
@@ -151,6 +151,14 @@ volume index from 0 to 100.
                                       ref="SILENT_VOLUME_CURVE"/>
     <volume stream="AUDIO_STREAM_TTS" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA"
                                       ref="SILENT_VOLUME_CURVE"/>
+    <volume stream="AUDIO_STREAM_A2DP" deviceCategory="DEVICE_CATEGORY_HEADSET"
+                                        ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
+    <volume stream="AUDIO_STREAM_A2DP" deviceCategory="DEVICE_CATEGORY_SPEAKER"
+                                        ref="DEFAULT_DEVICE_CATEGORY_SPEAKER_VOLUME_CURVE"/>
+    <volume stream="AUDIO_STREAM_A2DP" deviceCategory="DEVICE_CATEGORY_EARPIECE"
+                                        ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
+    <volume stream="AUDIO_STREAM_A2DP" deviceCategory="DEVICE_CATEGORY_EXT_MEDIA"
+                                        ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
     <volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_HEADSET"
                                                 ref="DEFAULT_MEDIA_VOLUME_CURVE"/>
     <volume stream="AUDIO_STREAM_ACCESSIBILITY" deviceCategory="DEVICE_CATEGORY_SPEAKER"
diff --git a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
index c880182..065acd1 100755
--- a/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/frameworks/av/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -187,6 +187,8 @@ routing_strategy Engine::getStrategyForStream(audio_stream_type_t stream)
         return STRATEGY_ENFORCED_AUDIBLE;
     case AUDIO_STREAM_TTS:
         return STRATEGY_TRANSMITTED_THROUGH_SPEAKER;
+	case AUDIO_STREAM_A2DP:
+        return STRATEGY_MEDIA;
     case AUDIO_STREAM_ACCESSIBILITY:
         return STRATEGY_ACCESSIBILITY;
     case AUDIO_STREAM_REROUTING:
@@ -205,6 +207,7 @@ routing_strategy Engine::getStrategyForUsage(audio_usage_t usage)
     case AUDIO_USAGE_GAME:
     case AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
     case AUDIO_USAGE_ASSISTANCE_SONIFICATION:
+	case AUDIO_USAGE_A2DP:
         return STRATEGY_MEDIA;
 
     case AUDIO_USAGE_VOICE_COMMUNICATION:
diff --git a/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
old mode 100644
new mode 100755
index 26cd3c2..e6de83d
--- a/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -5247,6 +5247,9 @@ audio_stream_type_t AudioPolicyManager::streamTypefromAttributesInt(const audio_
     case AUDIO_USAGE_NOTIFICATION_EVENT:
         return AUDIO_STREAM_NOTIFICATION;
 
+	case AUDIO_USAGE_A2DP:
+		return AUDIO_STREAM_A2DP;
+
     case AUDIO_USAGE_UNKNOWN:
     default:
         return AUDIO_STREAM_MUSIC;
@@ -5278,6 +5281,7 @@ bool AudioPolicyManager::isValidAttributes(const audio_attributes_t *paa)
     case AUDIO_USAGE_ASSISTANCE_SONIFICATION:
     case AUDIO_USAGE_GAME:
     case AUDIO_USAGE_VIRTUAL_SOURCE:
+	case AUDIO_USAGE_A2DP:
         break;
     default:
         return false;
diff --git a/frameworks/av/services/audiopolicy/service/AudioPolicyEffects.cpp b/frameworks/av/services/audiopolicy/service/AudioPolicyEffects.cpp
old mode 100644
new mode 100755
index b732b20..5dba1ce
--- a/frameworks/av/services/audiopolicy/service/AudioPolicyEffects.cpp
+++ b/frameworks/av/services/audiopolicy/service/AudioPolicyEffects.cpp
@@ -352,7 +352,8 @@ const char *AudioPolicyEffects::kStreamNames[AUDIO_STREAM_PUBLIC_CNT+1] = {
     AUDIO_STREAM_BLUETOOTH_SCO_TAG,
     AUDIO_STREAM_ENFORCED_AUDIBLE_TAG,
     AUDIO_STREAM_DTMF_TAG,
-    AUDIO_STREAM_TTS_TAG
+    AUDIO_STREAM_TTS_TAG,
+    AUDIO_STREAM_A2DP_TAG
 };
 
 // returns the audio_stream_t enum corresponding to the output stream name or
diff --git a/frameworks/base/core/jni/android_media_AudioTrack.cpp b/frameworks/base/core/jni/android_media_AudioTrack.cpp
old mode 100644
new mode 100755
index 982a1f8..d3e6e8c
--- a/frameworks/base/core/jni/android_media_AudioTrack.cpp
+++ b/frameworks/base/core/jni/android_media_AudioTrack.cpp
@@ -1034,6 +1034,7 @@ static jint android_media_AudioTrack_get_output_sample_rate(JNIEnv *env,  jobjec
     case AUDIO_STREAM_NOTIFICATION:
     case AUDIO_STREAM_BLUETOOTH_SCO:
     case AUDIO_STREAM_DTMF:
+	case AUDIO_STREAM_A2DP:
         nativeStreamType = (audio_stream_type_t) javaStreamType;
         break;
     default:
diff --git a/frameworks/base/media/java/android/media/AudioAttributes.java b/frameworks/base/media/java/android/media/AudioAttributes.java
old mode 100644
new mode 100755
index 89709ee..6060bc4
--- a/frameworks/base/media/java/android/media/AudioAttributes.java
+++ b/frameworks/base/media/java/android/media/AudioAttributes.java
@@ -92,6 +92,10 @@ public final class AudioAttributes implements Parcelable {
      * or short Foley sounds.
      */
     public final static int CONTENT_TYPE_SONIFICATION = 4;
+	/**
+     * Content type value to use when the content type is a A2DP input stream.
+     */
+    public final static int CONTENT_TYPE_A2DP = 5;
 
     /**
      * Usage value to use when the usage is unknown.
@@ -170,6 +174,11 @@ public final class AudioAttributes implements Parcelable {
      */
     public final static int USAGE_VIRTUAL_SOURCE = 15;
 
+	/**
+     * Usage value to use when the usage is A2DP input.
+     */
+    public final static int USAGE_A2DP = 16;
+
     /**
      * IMPORTANT: when adding new usage types, add them to SDK_USAGES and update SUPPRESSIBLE_USAGES
      *            if applicable.
@@ -227,7 +236,8 @@ public final class AudioAttributes implements Parcelable {
             USAGE_ASSISTANCE_ACCESSIBILITY,
             USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,
             USAGE_ASSISTANCE_SONIFICATION,
-            USAGE_GAME
+            USAGE_GAME,
+            USAGE_A2DP
     };
 
     /**
@@ -476,7 +486,8 @@ public final class AudioAttributes implements Parcelable {
          *     {@link AudioAttributes#USAGE_ASSISTANCE_ACCESSIBILITY},
          *     {@link AudioAttributes#USAGE_ASSISTANCE_NAVIGATION_GUIDANCE},
          *     {@link AudioAttributes#USAGE_ASSISTANCE_SONIFICATION},
-         *     {@link AudioAttributes#USAGE_GAME}.
+         *     {@link AudioAttributes#USAGE_GAME},
+         *     {@link AudioAttributes#USAGE_A2DP}.
          * @return the same Builder instance.
          */
         public Builder setUsage(@AttributeUsage int usage) {
@@ -496,6 +507,7 @@ public final class AudioAttributes implements Parcelable {
                 case USAGE_ASSISTANCE_NAVIGATION_GUIDANCE:
                 case USAGE_ASSISTANCE_SONIFICATION:
                 case USAGE_GAME:
+				case USAGE_A2DP:
                 case USAGE_VIRTUAL_SOURCE:
                      mUsage = usage;
                      break;
@@ -513,6 +525,7 @@ public final class AudioAttributes implements Parcelable {
          *     {@link AudioAttributes#CONTENT_TYPE_MUSIC},
          *     {@link AudioAttributes#CONTENT_TYPE_SONIFICATION},
          *     {@link AudioAttributes#CONTENT_TYPE_SPEECH},
+         *     {@link AudioAttributes#CONTENT_TYPE_A2DP},
          *     {@link AudioAttributes#CONTENT_TYPE_UNKNOWN}.
          * @return the same Builder instance.
          */
@@ -523,6 +536,7 @@ public final class AudioAttributes implements Parcelable {
                 case CONTENT_TYPE_MUSIC:
                 case CONTENT_TYPE_SONIFICATION:
                 case CONTENT_TYPE_SPEECH:
+				case CONTENT_TYPE_A2DP:
                      mContentType = contentType;
                      break;
                 default:
@@ -626,6 +640,9 @@ public final class AudioAttributes implements Parcelable {
                 case AudioSystem.STREAM_TTS:
                     mContentType = CONTENT_TYPE_SPEECH;
                     break;
+				case AudioSystem.STREAM_A2DP:
+                    mContentType = CONTENT_TYPE_A2DP;
+                    break;
                 default:
                     Log.e(TAG, "Invalid stream type " + streamType + " for AudioAttributes");
             }
@@ -837,6 +854,8 @@ public final class AudioAttributes implements Parcelable {
                 return new String("USAGE_ASSISTANCE_SONIFICATION");
             case USAGE_GAME:
                 return new String("USAGE_GAME");
+			case USAGE_A2DP:
+				return new String("USAGE_A2DP");
             default:
                 return new String("unknown usage " + usage);
         }
@@ -864,6 +883,8 @@ public final class AudioAttributes implements Parcelable {
                 return USAGE_VOICE_COMMUNICATION_SIGNALLING;
             case AudioSystem.STREAM_TTS:
                 return USAGE_ASSISTANCE_ACCESSIBILITY;
+            case AudioSystem.STREAM_A2DP:
+                return USAGE_A2DP;
             default:
                 return USAGE_UNKNOWN;
         }
@@ -935,6 +956,8 @@ public final class AudioAttributes implements Parcelable {
             case USAGE_NOTIFICATION_COMMUNICATION_DELAYED:
             case USAGE_NOTIFICATION_EVENT:
                 return AudioSystem.STREAM_NOTIFICATION;
+			case USAGE_A2DP:
+				return AudioSystem.STREAM_A2DP;
             case USAGE_UNKNOWN:
                 return fromGetVolumeControlStream ?
                         AudioManager.USE_DEFAULT_STREAM_TYPE : AudioSystem.STREAM_MUSIC;
@@ -964,7 +987,8 @@ public final class AudioAttributes implements Parcelable {
         USAGE_ASSISTANCE_ACCESSIBILITY,
         USAGE_ASSISTANCE_NAVIGATION_GUIDANCE,
         USAGE_ASSISTANCE_SONIFICATION,
-        USAGE_GAME
+        USAGE_GAME,
+        USAGE_A2DP
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface AttributeUsage {}
@@ -975,7 +999,8 @@ public final class AudioAttributes implements Parcelable {
         CONTENT_TYPE_SPEECH,
         CONTENT_TYPE_MUSIC,
         CONTENT_TYPE_MOVIE,
-        CONTENT_TYPE_SONIFICATION
+        CONTENT_TYPE_SONIFICATION,
+        CONTENT_TYPE_A2DP
     })
     @Retention(RetentionPolicy.SOURCE)
     public @interface AttributeContentType {}
diff --git a/frameworks/base/media/java/android/media/AudioManager.java b/frameworks/base/media/java/android/media/AudioManager.java
old mode 100644
new mode 100755
index bc8a1c2..5c0e2ce
--- a/frameworks/base/media/java/android/media/AudioManager.java
+++ b/frameworks/base/media/java/android/media/AudioManager.java
@@ -332,6 +332,8 @@ public class AudioManager {
     public static final int STREAM_DTMF = AudioSystem.STREAM_DTMF;
     /** @hide The audio stream for text to speech (TTS) */
     public static final int STREAM_TTS = AudioSystem.STREAM_TTS;
+	/** The audio stream for A2DP sound */
+	public static final int STREAM_A2DP = AudioSystem.STREAM_A2DP;
     /** Number of audio streams */
     /**
      * @deprecated Use AudioSystem.getNumStreamTypes() instead
@@ -3232,6 +3234,7 @@ public class AudioManager {
         case STREAM_ALARM:
         case STREAM_NOTIFICATION:
         case STREAM_DTMF:
+		case STREAM_A2DP:
             return AudioSystem.getDevicesForStream(streamType);
         default:
             return 0;
diff --git a/frameworks/base/media/java/android/media/AudioSystem.java b/frameworks/base/media/java/android/media/AudioSystem.java
index f597440..1d36ac0 100755
--- a/frameworks/base/media/java/android/media/AudioSystem.java
+++ b/frameworks/base/media/java/android/media/AudioSystem.java
@@ -61,13 +61,15 @@ public class AudioSystem
     public static final int STREAM_DTMF = 8;
     /* @hide The audio stream for text to speech (TTS) */
     public static final int STREAM_TTS = 9;
+	/* The audio stream for A2DP sound */
+	public static final int STREAM_A2DP = 10;
     /**
      * @deprecated Use {@link #numStreamTypes() instead}
      */
     public static final int NUM_STREAMS = 5;
 
     // Expose only the getter method publicly so we can change it in the future
-    private static final int NUM_STREAM_TYPES = 10;
+    private static final int NUM_STREAM_TYPES = 11;
     public static final int getNumStreamTypes() { return NUM_STREAM_TYPES; }
 
     public static final String[] STREAM_NAMES = new String[] {
@@ -80,7 +82,8 @@ public class AudioSystem
         "STREAM_BLUETOOTH_SCO",
         "STREAM_SYSTEM_ENFORCED",
         "STREAM_DTMF",
-        "STREAM_TTS"
+        "STREAM_TTS",
+        "STREAM_A2DP"
     };
 
     /*
@@ -771,7 +774,8 @@ public class AudioSystem
         7,  // STREAM_BLUETOOTH_SCO
         7,  // STREAM_SYSTEM_ENFORCED
         11, // STREAM_DTMF
-        11  // STREAM_TTS
+        11, // STREAM_TTS
+        11, // STREAM_A2DP
     };
 
     public static String streamToString(int stream) {
@@ -809,7 +813,8 @@ public class AudioSystem
             (1 << STREAM_MUSIC) |
             (1 << STREAM_RING) |
             (1 << STREAM_NOTIFICATION) |
-            (1 << STREAM_SYSTEM);
+            (1 << STREAM_SYSTEM)|
+            (1 << STREAM_A2DP);
 
     /**
      * Event posted by AudioTrack and AudioRecord JNI (JNIDeviceCallback) when routing changes.
diff --git a/frameworks/base/media/java/android/media/AudioTrack.java b/frameworks/base/media/java/android/media/AudioTrack.java
old mode 100644
new mode 100755
diff --git a/frameworks/base/media/java/android/media/MediaPlayer.java b/frameworks/base/media/java/android/media/MediaPlayer.java
old mode 100644
new mode 100755
diff --git a/frameworks/base/media/jni/android_media_MediaPlayer.cpp b/frameworks/base/media/jni/android_media_MediaPlayer.cpp
old mode 100644
new mode 100755
diff --git a/frameworks/base/services/core/java/com/android/server/audio/AudioService.java b/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
index b94089d..12dd6dd 100755
--- a/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
+++ b/frameworks/base/services/core/java/com/android/server/audio/AudioService.java
@@ -271,7 +271,8 @@ public class AudioService extends IAudioService.Stub {
         15, // STREAM_BLUETOOTH_SCO
         7,  // STREAM_SYSTEM_ENFORCED
         15, // STREAM_DTMF
-        15  // STREAM_TTS
+        15, // STREAM_TTS
+        15  // STREAM_A2DP
     };
 
     /** Minimum volume index values for audio streams */
@@ -285,7 +286,8 @@ public class AudioService extends IAudioService.Stub {
         0,  // STREAM_BLUETOOTH_SCO
         0,  // STREAM_SYSTEM_ENFORCED
         0,  // STREAM_DTMF
-        0   // STREAM_TTS
+        0,  // STREAM_TTS
+        0   // STREAM_A2DP
     };
 
     /* mStreamVolumeAlias[] indicates for each stream if it uses the volume settings
@@ -307,7 +309,8 @@ public class AudioService extends IAudioService.Stub {
         AudioSystem.STREAM_BLUETOOTH_SCO,   // STREAM_BLUETOOTH_SCO
         AudioSystem.STREAM_RING,            // STREAM_SYSTEM_ENFORCED
         AudioSystem.STREAM_RING,            // STREAM_DTMF
-        AudioSystem.STREAM_MUSIC            // STREAM_TTS
+        AudioSystem.STREAM_MUSIC,           // STREAM_TTS
+        AudioSystem.STREAM_A2DP             // STREAM_A2DP
     };
     private final int[] STREAM_VOLUME_ALIAS_TELEVISION = new int[] {
         AudioSystem.STREAM_MUSIC,       // STREAM_VOICE_CALL
@@ -319,7 +322,8 @@ public class AudioService extends IAudioService.Stub {
         AudioSystem.STREAM_MUSIC,       // STREAM_BLUETOOTH_SCO
         AudioSystem.STREAM_MUSIC,       // STREAM_SYSTEM_ENFORCED
         AudioSystem.STREAM_MUSIC,       // STREAM_DTMF
-        AudioSystem.STREAM_MUSIC        // STREAM_TTS
+        AudioSystem.STREAM_MUSIC,       // STREAM_TTS
+        AudioSystem.STREAM_MUSIC        // STREAM_A2DP
     };
     private final int[] STREAM_VOLUME_ALIAS_DEFAULT = new int[] {
         AudioSystem.STREAM_VOICE_CALL,      // STREAM_VOICE_CALL
@@ -331,7 +335,8 @@ public class AudioService extends IAudioService.Stub {
         AudioSystem.STREAM_BLUETOOTH_SCO,   // STREAM_BLUETOOTH_SCO
         AudioSystem.STREAM_RING,            // STREAM_SYSTEM_ENFORCED
         AudioSystem.STREAM_RING,            // STREAM_DTMF
-        AudioSystem.STREAM_MUSIC            // STREAM_TTS
+        AudioSystem.STREAM_MUSIC,           // STREAM_TTS
+        AudioSystem.STREAM_MUSIC            // STREAM_A2DP
     };
     private int[] mStreamVolumeAlias;
 
@@ -350,6 +355,7 @@ public class AudioService extends IAudioService.Stub {
         AppOpsManager.OP_AUDIO_MEDIA_VOLUME,            // STREAM_SYSTEM_ENFORCED
         AppOpsManager.OP_AUDIO_MEDIA_VOLUME,            // STREAM_DTMF
         AppOpsManager.OP_AUDIO_MEDIA_VOLUME,            // STREAM_TTS
+        AppOpsManager.OP_AUDIO_MEDIA_VOLUME             // STREAM_A2DP
     };
 
     private final boolean mUseFixedVolume;
diff --git a/hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp b/hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp
old mode 100644
new mode 100755
index 74ee22a..5a9fc50
--- a/hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp
+++ b/hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp
@@ -2514,6 +2514,7 @@ AudioPolicyManagerBase::routing_strategy AudioPolicyManagerBase::getStrategy(
         // while key clicks are played produces a poor result
     case AudioSystem::TTS:
     case AudioSystem::MUSIC:
+	case AudioSystem::A2DP:
         return STRATEGY_MEDIA;
     case AudioSystem::ENFORCED_AUDIBLE:
         return STRATEGY_ENFORCED_AUDIBLE;
@@ -3206,6 +3207,11 @@ const AudioPolicyManagerBase::VolumeCurvePoint
         sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER
         sDefaultMediaVolumeCurve  // DEVICE_CATEGORY_EARPIECE
     },
+    { // AUDIO_STREAM_A2DP
+        sDefaultMediaVolumeCurve, // DEVICE_CATEGORY_HEADSET
+        sSpeakerMediaVolumeCurve, // DEVICE_CATEGORY_SPEAKER
+        sDefaultMediaVolumeCurve  // DEVICE_CATEGORY_EARPIECE
+    },
 };
 
 void AudioPolicyManagerBase::initializeVolumeCurves()
diff --git a/hardware/libhardware_legacy/include/hardware_legacy/AudioSystemLegacy.h b/hardware/libhardware_legacy/include/hardware_legacy/AudioSystemLegacy.h
old mode 100644
new mode 100755
index 524e798..99180a0
--- a/hardware/libhardware_legacy/include/hardware_legacy/AudioSystemLegacy.h
+++ b/hardware/libhardware_legacy/include/hardware_legacy/AudioSystemLegacy.h
@@ -80,6 +80,7 @@ public:
         ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
         DTMF             = 8,
         TTS              = 9,
+        A2DP             = 10,
         NUM_STREAM_TYPES
     };
 
diff --git a/system/media/audio/include/system/audio.h b/system/media/audio/include/system/audio.h
old mode 100644
new mode 100755
index 3bda199..d39c425
--- a/system/media/audio/include/system/audio.h
+++ b/system/media/audio/include/system/audio.h
@@ -73,10 +73,11 @@ typedef enum {
     AUDIO_STREAM_TTS              = 9,  /* Transmitted Through Speaker.
                                          * Plays over speaker only, silent on other devices.
                                          */
-    AUDIO_STREAM_ACCESSIBILITY    = 10, /* For accessibility talk back prompts */
-    AUDIO_STREAM_REROUTING        = 11, /* For dynamic policy output mixes */
-    AUDIO_STREAM_PATCH            = 12, /* For internal audio flinger tracks. Fixed volume */
-    AUDIO_STREAM_PUBLIC_CNT       = AUDIO_STREAM_TTS + 1,
+    AUDIO_STREAM_A2DP             = 10, /* For A2DP sound */
+    AUDIO_STREAM_ACCESSIBILITY    = 11, /* For accessibility talk back prompts */
+    AUDIO_STREAM_REROUTING        = 12, /* For dynamic policy output mixes */
+    AUDIO_STREAM_PATCH            = 13, /* For internal audio flinger tracks. Fixed volume */
+    AUDIO_STREAM_PUBLIC_CNT       = AUDIO_STREAM_A2DP + 1,
     AUDIO_STREAM_FOR_POLICY_CNT   = AUDIO_STREAM_PATCH, /* number of streams considered by
                                            audio policy for volume and routing */
     AUDIO_STREAM_CNT              = AUDIO_STREAM_PATCH + 1,
@@ -91,6 +92,7 @@ typedef enum {
     AUDIO_CONTENT_TYPE_MUSIC        = 2,
     AUDIO_CONTENT_TYPE_MOVIE        = 3,
     AUDIO_CONTENT_TYPE_SONIFICATION = 4,
+    AUDIO_CONTENT_TYPE_A2DP         = 5,
 
     AUDIO_CONTENT_TYPE_CNT,
     AUDIO_CONTENT_TYPE_MAX          = AUDIO_CONTENT_TYPE_CNT - 1,
@@ -116,6 +118,7 @@ typedef enum {
     AUDIO_USAGE_ASSISTANCE_SONIFICATION            = 13,
     AUDIO_USAGE_GAME                               = 14,
     AUDIO_USAGE_VIRTUAL_SOURCE                     = 15,
+    AUDIO_USAGE_A2DP                               = 16,
 
     AUDIO_USAGE_CNT,
     AUDIO_USAGE_MAX                                = AUDIO_USAGE_CNT - 1,
diff --git a/system/media/audio_effects/include/audio_effects/audio_effects_conf.h b/system/media/audio_effects/include/audio_effects/audio_effects_conf.h
index 79f08a6..a67424c 100755
--- a/system/media/audio_effects/include/audio_effects/audio_effects_conf.h
+++ b/system/media/audio_effects/include/audio_effects/audio_effects_conf.h
@@ -65,5 +65,6 @@
 #define AUDIO_STREAM_ENFORCED_AUDIBLE_TAG "enforced_audible"
 #define AUDIO_STREAM_DTMF_TAG "dtmf"
 #define AUDIO_STREAM_TTS_TAG "tts"
+#define AUDIO_STREAM_A2DP_TAG "a2dp"
 
 #endif  // ANDROID_AUDIO_EFFECTS_CONF_H

 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值