From 169f3a203c9cb698098d29d5353dd6cb71f03992 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Fri, 17 Jun 2016 10:43:34 -0700 Subject: [PATCH] iovec is offset and length now Change-Id: I0e6c2186382d600e9e2a60e0347b78de972f0149 --- audio_utils/fifo.cpp | 36 +++++++++++++++++++--------------- audio_utils/include/audio_utils/fifo.h | 4 ++-- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/audio_utils/fifo.cpp b/audio_utils/fifo.cpp index 92e0a9f0..ec71d5f3 100644 --- a/audio_utils/fifo.cpp +++ b/audio_utils/fifo.cpp @@ -133,10 +133,12 @@ ssize_t audio_utils_fifo_writer::write(const void *buffer, size_t count) audio_utils_iovec iovec[2]; ssize_t availToWrite = obtain(iovec, count); if (availToWrite > 0) { - memcpy(iovec[0].mBase, buffer, iovec[0].mLen * mFifo.mFrameSize); - if (iovec[1].mLen > 0) { - memcpy(iovec[1].mBase, (char *) buffer + (iovec[0].mLen * mFifo.mFrameSize), - iovec[1].mLen * mFifo.mFrameSize); + memcpy((char *) mFifo.mBuffer + iovec[0].mOffset * mFifo.mFrameSize, buffer, + iovec[0].mLength * mFifo.mFrameSize); + if (iovec[1].mLength > 0) { + memcpy((char *) mFifo.mBuffer + iovec[1].mOffset * mFifo.mFrameSize, + (char *) buffer + (iovec[0].mLength * mFifo.mFrameSize), + iovec[1].mLength * mFifo.mFrameSize); } release(availToWrite); } @@ -168,10 +170,10 @@ ssize_t audio_utils_fifo_writer::obtain(audio_utils_iovec iovec[2], size_t count part1 = availToWrite; } size_t part2 = part1 > 0 ? availToWrite - part1 : 0; - iovec[0].mLen = part1; - iovec[0].mBase = part1 > 0 ? (char *) mFifo.mBuffer + (rearMasked * mFifo.mFrameSize) : NULL; - iovec[1].mLen = part2; - iovec[1].mBase = part2 > 0 ? mFifo.mBuffer : NULL; + iovec[0].mOffset = rearMasked; + iovec[0].mLength = part1; + iovec[1].mOffset = 0; + iovec[1].mLength = part2; mObtained = availToWrite; return availToWrite; } @@ -208,10 +210,12 @@ ssize_t audio_utils_fifo_reader::read(void *buffer, size_t count, size_t *lost) audio_utils_iovec iovec[2]; ssize_t availToRead = obtain(iovec, count, lost); if (availToRead > 0) { - memcpy(buffer, iovec[0].mBase, iovec[0].mLen * mFifo.mFrameSize); - if (iovec[1].mLen > 0) { - memcpy((char *) buffer + (iovec[0].mLen * mFifo.mFrameSize), iovec[1].mBase, - iovec[1].mLen * mFifo.mFrameSize); + memcpy(buffer, (char *) mFifo.mBuffer + iovec[0].mOffset * mFifo.mFrameSize, + iovec[0].mLength * mFifo.mFrameSize); + if (iovec[1].mLength > 0) { + memcpy((char *) buffer + (iovec[0].mLength * mFifo.mFrameSize), + (char *) mFifo.mBuffer + iovec[1].mOffset * mFifo.mFrameSize, + iovec[1].mLength * mFifo.mFrameSize); } release(availToRead); } @@ -261,10 +265,10 @@ ssize_t audio_utils_fifo_reader::obtain(audio_utils_iovec iovec[2], size_t count part1 = availToRead; } size_t part2 = part1 > 0 ? availToRead - part1 : 0; - iovec[0].mLen = part1; - iovec[0].mBase = part1 > 0 ? (char *) mFifo.mBuffer + (frontMasked * mFifo.mFrameSize) : NULL; - iovec[1].mLen = part2; - iovec[1].mBase = part2 > 0 ? mFifo.mBuffer : NULL; + iovec[0].mOffset = frontMasked; + iovec[0].mLength = part1; + iovec[1].mOffset = 0; + iovec[1].mLength = part2; mObtained = availToRead; return availToRead; } diff --git a/audio_utils/include/audio_utils/fifo.h b/audio_utils/include/audio_utils/fifo.h index 08dc3f9e..f12e3f25 100644 --- a/audio_utils/include/audio_utils/fifo.h +++ b/audio_utils/include/audio_utils/fifo.h @@ -101,8 +101,8 @@ private: // Describes one virtually contiguous fragment of a logically contiguous slice. // Compare to struct iovec for readv(2) and writev(2). struct audio_utils_iovec { - void *mBase; // const void * for audio_utils_fifo_reader::obtain() - size_t mLen; // in frames + uint32_t mOffset; // in frames, relative to mBuffer, undefined if mLength == 0 + uint32_t mLength; // in frames }; //////////////////////////////////////////////////////////////////////////////// -- 2.11.0