Commit cb1084f4 by Dean Wheatley

Use isDirectPlaybackSupported in AudioCapabilities

For Q devices and higher, use AudioTrack.isDirectPlaybackSupported
for determining AudioCapabilities.
parent c7290a9c
...@@ -21,12 +21,16 @@ import android.content.Intent; ...@@ -21,12 +21,16 @@ import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.media.AudioFormat; import android.media.AudioFormat;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.AudioTrack;
import android.net.Uri; import android.net.Uri;
import android.provider.Settings.Global; import android.provider.Settings.Global;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
/** Represents the set of audio formats that a device is capable of playing. */ /** Represents the set of audio formats that a device is capable of playing. */
public final class AudioCapabilities { public final class AudioCapabilities {
...@@ -68,6 +72,9 @@ public final class AudioCapabilities { ...@@ -68,6 +72,9 @@ public final class AudioCapabilities {
&& Global.getInt(context.getContentResolver(), EXTERNAL_SURROUND_SOUND_KEY, 0) == 1) { && Global.getInt(context.getContentResolver(), EXTERNAL_SURROUND_SOUND_KEY, 0) == 1) {
return EXTERNAL_SURROUND_SOUND_CAPABILITIES; return EXTERNAL_SURROUND_SOUND_CAPABILITIES;
} }
if (Util.SDK_INT >= 29) {
return new AudioCapabilities(getDirectPlaybackSupportedEncodings(), DEFAULT_MAX_CHANNEL_COUNT);
}
if (intent == null || intent.getIntExtra(AudioManager.EXTRA_AUDIO_PLUG_STATE, 0) == 0) { if (intent == null || intent.getIntExtra(AudioManager.EXTRA_AUDIO_PLUG_STATE, 0) == 0) {
return DEFAULT_AUDIO_CAPABILITIES; return DEFAULT_AUDIO_CAPABILITIES;
} }
...@@ -159,4 +166,37 @@ public final class AudioCapabilities { ...@@ -159,4 +166,37 @@ public final class AudioCapabilities {
return Util.SDK_INT >= 17 return Util.SDK_INT >= 17
&& ("Amazon".equals(Util.MANUFACTURER) || "Xiaomi".equals(Util.MANUFACTURER)); && ("Amazon".equals(Util.MANUFACTURER) || "Xiaomi".equals(Util.MANUFACTURER));
} }
@RequiresApi(29)
private static int[] getDirectPlaybackSupportedEncodings() {
int[] possibleEncodings = new int[]{
AudioFormat.ENCODING_AC3,
AudioFormat.ENCODING_AC4,
AudioFormat.ENCODING_DOLBY_TRUEHD,
AudioFormat.ENCODING_DTS,
AudioFormat.ENCODING_DTS_HD,
AudioFormat.ENCODING_E_AC3,
AudioFormat.ENCODING_E_AC3_JOC,
};
List<Integer> supportedEncodingsList = new ArrayList<>();
for (int e : possibleEncodings) {
if (AudioTrack.isDirectPlaybackSupported(
new AudioFormat.Builder()
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
.setEncoding(e)
.setSampleRate(48000)
.build(),
new android.media.AudioAttributes.Builder()
.setUsage(android.media.AudioAttributes.USAGE_MEDIA)
.setContentType(android.media.AudioAttributes.CONTENT_TYPE_MOVIE)
.setFlags(0)
.build())) {
supportedEncodingsList.add(e);
}
}
supportedEncodingsList.add(AudioFormat.ENCODING_PCM_16BIT);
return supportedEncodingsList.stream()
.mapToInt(Integer::intValue)
.toArray();
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment