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/media/libaudioprocessing/BufferProviders.cpp b/media/libaudioprocessing/BufferProviders.cpp
index 4658db8..a9944fb 100644
--- a/media/libaudioprocessing/BufferProviders.cpp
+++ b/media/libaudioprocessing/BufferProviders.cpp
@@ -739,5 +739,21 @@
mContractedWrittenFrames = 0;
CopyBufferProvider::reset();
}
+
+void TeeBufferProvider::copyFrames(void *dst, const void *src, size_t frames) {
+ memcpy(dst, src, frames * mInputFrameSize);
+ if (int teeBufferFrameLeft = mTeeBufferFrameCount - mFrameCopied; teeBufferFrameLeft < frames) {
+ ALOGW("Unable to copy all frames to tee buffer, %d frames dropped",
+ (int)frames - teeBufferFrameLeft);
+ frames = teeBufferFrameLeft;
+ }
+ memcpy(mTeeBuffer + mFrameCopied * mInputFrameSize, src, frames * mInputFrameSize);
+ mFrameCopied += frames;
+}
+
+void TeeBufferProvider::clearFramesCopied() {
+ mFrameCopied = 0;
+}
+
// ----------------------------------------------------------------------------
} // namespace android