Report data from aaudio mmap path to audio flinger.
Report data from aaudio mmap path to audio flinger for sound dose
computation. A shared memory is allocated for read and write counter.
The client will shared the write counter with the aaudio service. The
command thread will wake up every 5 burst time to report the data to
audio flinger.
Test: atest AAudioTests
Test: test_marshalling
Test: dump wav file in audio flinger and play
Bug: 264254430
Change-Id: Ib732442c5afc9169fe891212cf77b458c41a87f1
diff --git a/media/libaaudio/src/binding/RingBufferParcelable.cpp b/media/libaaudio/src/binding/RingBufferParcelable.cpp
index 3bc51d0..f8d748e 100644
--- a/media/libaaudio/src/binding/RingBufferParcelable.cpp
+++ b/media/libaaudio/src/binding/RingBufferParcelable.cpp
@@ -33,7 +33,6 @@
: mReadCounterParcelable(parcelable.readCounterParcelable),
mWriteCounterParcelable(parcelable.writeCounterParcelable),
mDataParcelable(parcelable.dataParcelable),
- mSharedMemoryIndex(parcelable.sharedMemoryIndex),
mBytesPerFrame(parcelable.bytesPerFrame),
mFramesPerBurst(parcelable.framesPerBurst),
mCapacityInFrames(parcelable.capacityInFrames),
@@ -46,7 +45,6 @@
result.readCounterParcelable = mReadCounterParcelable.parcelable();
result.writeCounterParcelable = mWriteCounterParcelable.parcelable();
result.dataParcelable = mDataParcelable.parcelable();
- result.sharedMemoryIndex = mSharedMemoryIndex;
result.bytesPerFrame = mBytesPerFrame;
result.framesPerBurst = mFramesPerBurst;
result.capacityInFrames = mCapacityInFrames;
@@ -62,19 +60,26 @@
int32_t readCounterOffset,
int32_t writeCounterOffset,
int32_t counterSizeBytes) {
- mSharedMemoryIndex = sharedMemoryIndex;
- mReadCounterParcelable.setup(sharedMemoryIndex, readCounterOffset, counterSizeBytes);
- mWriteCounterParcelable.setup(sharedMemoryIndex, writeCounterOffset, counterSizeBytes);
- mDataParcelable.setup(sharedMemoryIndex, dataMemoryOffset, dataSizeInBytes);
+ mReadCounterParcelable.setup({sharedMemoryIndex, readCounterOffset, counterSizeBytes});
+ mWriteCounterParcelable.setup({sharedMemoryIndex, writeCounterOffset, counterSizeBytes});
+ mDataParcelable.setup({sharedMemoryIndex, dataMemoryOffset, dataSizeInBytes});
}
void RingBufferParcelable::setupMemory(int32_t sharedMemoryIndex,
int32_t dataMemoryOffset,
int32_t dataSizeInBytes) {
- mSharedMemoryIndex = sharedMemoryIndex;
- mReadCounterParcelable.setup(sharedMemoryIndex, 0, 0);
- mWriteCounterParcelable.setup(sharedMemoryIndex, 0, 0);
- mDataParcelable.setup(sharedMemoryIndex, dataMemoryOffset, dataSizeInBytes);
+ mReadCounterParcelable.setup({sharedMemoryIndex, 0, 0});
+ mWriteCounterParcelable.setup({sharedMemoryIndex, 0, 0});
+ mDataParcelable.setup({sharedMemoryIndex, dataMemoryOffset, dataSizeInBytes});
+}
+
+void RingBufferParcelable::setupMemory(
+ const SharedRegionParcelable::MemoryInfoTuple& dataMemoryInfo,
+ const SharedRegionParcelable::MemoryInfoTuple& readCounterInfo,
+ const SharedRegionParcelable::MemoryInfoTuple& writeCounterInfo) {
+ mReadCounterParcelable.setup(readCounterInfo);
+ mWriteCounterParcelable.setup(writeCounterInfo);
+ mDataParcelable.setup(dataMemoryInfo);
}
int32_t RingBufferParcelable::getBytesPerFrame() const {
@@ -128,9 +133,11 @@
return AAUDIO_OK;
}
-void RingBufferParcelable::updateMemory(const RingBufferParcelable& parcelable) {
- setupMemory(mSharedMemoryIndex, 0,
- parcelable.getCapacityInFrames() * parcelable.getBytesPerFrame());
+void RingBufferParcelable::updateMemory(const RingBufferParcelable& parcelable,
+ const std::map<int32_t, int32_t>& memoryIndexMap) {
+ setupMemory(parcelable.mDataParcelable.getMemoryInfo(&memoryIndexMap),
+ parcelable.mReadCounterParcelable.getMemoryInfo(&memoryIndexMap),
+ parcelable.mWriteCounterParcelable.getMemoryInfo(&memoryIndexMap));
setBytesPerFrame(parcelable.getBytesPerFrame());
setFramesPerBurst(parcelable.getFramesPerBurst());
setCapacityInFrames(parcelable.getCapacityInFrames());
@@ -152,7 +159,6 @@
return AAUDIO_OK;
}
-
void RingBufferParcelable::dump() {
ALOGD("mCapacityInFrames = %d ---------", mCapacityInFrames);
if (mCapacityInFrames > 0) {