AudioTrack: fix default low power mode selection

Fix AudioAttributes flags checking logic in
shouldEnablePowerSaving() to take into account
flags that are compatible with deep buffer.

Bug: 140899988
Test: check that playback with Spotify goes to deep buffer
Change-Id: I492410b7837b15e248d61ec50dbb468e78e04524
This commit is contained in:
Eric Laurent
2019-09-11 19:13:08 -07:00
parent 67ab36fbee
commit 40f7e04f74

View File

@@ -1184,8 +1184,15 @@ public class AudioTrack extends PlayerBase
int bufferSizeInBytes, int mode) {
// If no attributes, OK
// otherwise check attributes for USAGE_MEDIA and CONTENT_UNKNOWN, MUSIC, or MOVIE.
// Only consider flags that are not compatible with FLAG_DEEP_BUFFER. We include
// FLAG_DEEP_BUFFER because if set the request is explicit and
// shouldEnablePowerSaving() should return false.
final int flags = attributes.getAllFlags()
& (AudioAttributes.FLAG_DEEP_BUFFER | AudioAttributes.FLAG_LOW_LATENCY
| AudioAttributes.FLAG_HW_AV_SYNC | AudioAttributes.FLAG_BEACON);
if (attributes != null &&
(attributes.getAllFlags() != 0 // cannot have any special flags
(flags != 0 // cannot have any special flags
|| attributes.getUsage() != AudioAttributes.USAGE_MEDIA
|| (attributes.getContentType() != AudioAttributes.CONTENT_TYPE_UNKNOWN
&& attributes.getContentType() != AudioAttributes.CONTENT_TYPE_MUSIC