Support bit-perfect PCM playback.
This is part of USB audio improvement. Bit-perfect PCM playback
indicates that the PCM data will be sent as is down to the audio HAL.
When the track is bit-perfect, there will not be volume control
applied in the audio mixer. Only effects without processing or hw
accelerated effects will be allowed to attach to bit-perfect tracks.
Bug: 239435816
Test: manually
Test: atest audiopolicy_tests
Change-Id: I0bad4d7d78d4eaf741754d01bc5422ba15374782
diff --git a/services/audioflinger/PlaybackTracks.h b/services/audioflinger/PlaybackTracks.h
index 0f1373d..ebbdf56 100644
--- a/services/audioflinger/PlaybackTracks.h
+++ b/services/audioflinger/PlaybackTracks.h
@@ -83,7 +83,8 @@
* ready as possible (aka. Buffer is full). */
size_t frameCountToBeReady = SIZE_MAX,
float speed = 1.0f,
- bool isSpatialized = false);
+ bool isSpatialized = false,
+ bool isBitPerfect = false);
virtual ~Track();
virtual status_t initCheck() const;
@@ -203,6 +204,7 @@
audio_output_flags_t getOutputFlags() const { return mFlags; }
float getSpeed() const { return mSpeed; }
bool isSpatialized() const override { return mIsSpatialized; }
+ bool isBitPerfect() const override { return mIsBitPerfect; }
/**
* Updates the mute state and notifies the audio service. Call this only when holding player
@@ -361,6 +363,7 @@
TeePatches mTeePatches;
const float mSpeed;
const bool mIsSpatialized;
+ const bool mIsBitPerfect;
// TODO: replace PersistableBundle with own struct
// access these two variables only when holding player thread lock.