diff options
author | Max Kellermann <max@duempel.org> | 2013-08-07 18:46:58 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-08-07 18:51:21 +0200 |
commit | 44a0e21795dcbd94d45ff143123f8b085754ea81 (patch) | |
tree | de7572fad77f000357c6970360cfb5319aa8a64a /src/pcm | |
parent | fafaf567f94ed08c04bd9aca73714aa3293854bc (diff) | |
download | mpd-44a0e21795dcbd94d45ff143123f8b085754ea81.tar.gz mpd-44a0e21795dcbd94d45ff143123f8b085754ea81.tar.xz mpd-44a0e21795dcbd94d45ff143123f8b085754ea81.zip |
PcmBuffer: move code to new class ReusableBuffer
ReusableBuffer is more generic.
Diffstat (limited to 'src/pcm')
-rw-r--r-- | src/pcm/PcmBuffer.cxx | 25 | ||||
-rw-r--r-- | src/pcm/PcmBuffer.hxx | 23 | ||||
-rw-r--r-- | src/pcm/PcmChannels.hxx | 2 | ||||
-rw-r--r-- | src/pcm/PcmDsdUsb.hxx | 2 | ||||
-rw-r--r-- | src/pcm/PcmFormat.hxx | 2 |
5 files changed, 10 insertions, 44 deletions
diff --git a/src/pcm/PcmBuffer.cxx b/src/pcm/PcmBuffer.cxx index adfd0e518..6ace399f3 100644 --- a/src/pcm/PcmBuffer.cxx +++ b/src/pcm/PcmBuffer.cxx @@ -21,16 +21,6 @@ #include "PcmBuffer.hxx" #include "poison.h" -/** - * Align the specified size to the next 8k boundary. - */ -constexpr -static size_t -align_8k(size_t size) -{ - return ((size - 1) | 0x1fff) + 1; -} - void * PcmBuffer::Get(size_t new_size) { @@ -39,18 +29,5 @@ PcmBuffer::Get(size_t new_size) be an error condition */ new_size = 1; - if (size < new_size) { - /* free the old buffer */ - g_free(buffer); - - size = align_8k(new_size); - buffer = g_malloc(size); - } else { - /* discard old buffer contents */ - poison_undefined(buffer, size); - } - - assert(size >= new_size); - - return buffer; + return buffer.Get(new_size); } diff --git a/src/pcm/PcmBuffer.hxx b/src/pcm/PcmBuffer.hxx index ae7030f76..2eddfb7f9 100644 --- a/src/pcm/PcmBuffer.hxx +++ b/src/pcm/PcmBuffer.hxx @@ -20,33 +20,22 @@ #ifndef PCM_BUFFER_HXX #define PCM_BUFFER_HXX -#include "check.h" +#include "util/ReusableArray.hxx" #include "gcc.h" -#include <glib.h> - -#include <assert.h> +#include <stdint.h> /** * Manager for a temporary buffer which grows as needed. We could * allocate a new buffer every time pcm_convert() is called, but that * would put too much stress on the allocator. */ -struct PcmBuffer { - void *buffer; - - size_t size; - - PcmBuffer():buffer(nullptr), size(0) {} - - ~PcmBuffer() { - g_free(buffer); - } +class PcmBuffer { + ReusableArray<uint8_t, 8192> buffer; +public: void Clear() { - g_free(buffer); - buffer = nullptr; - size = 0; + buffer.Clear(); } /** diff --git a/src/pcm/PcmChannels.hxx b/src/pcm/PcmChannels.hxx index 889a14a60..c67822825 100644 --- a/src/pcm/PcmChannels.hxx +++ b/src/pcm/PcmChannels.hxx @@ -23,7 +23,7 @@ #include <stdint.h> #include <stddef.h> -struct PcmBuffer; +class PcmBuffer; /** * Changes the number of channels in 16 bit PCM data. diff --git a/src/pcm/PcmDsdUsb.hxx b/src/pcm/PcmDsdUsb.hxx index 2cf8bfbba..3b7121465 100644 --- a/src/pcm/PcmDsdUsb.hxx +++ b/src/pcm/PcmDsdUsb.hxx @@ -25,7 +25,7 @@ #include <stdint.h> #include <stddef.h> -struct PcmBuffer; +class PcmBuffer; /** * Pack DSD 1 bit samples into (padded) 24 bit PCM samples for diff --git a/src/pcm/PcmFormat.hxx b/src/pcm/PcmFormat.hxx index b18b4f932..cc44d6dd5 100644 --- a/src/pcm/PcmFormat.hxx +++ b/src/pcm/PcmFormat.hxx @@ -25,7 +25,7 @@ #include <stdint.h> #include <stddef.h> -struct PcmBuffer; +class PcmBuffer; class PcmDither; /** |