From 44a0e21795dcbd94d45ff143123f8b085754ea81 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 7 Aug 2013 18:46:58 +0200 Subject: PcmBuffer: move code to new class ReusableBuffer ReusableBuffer is more generic. --- src/pcm/PcmBuffer.cxx | 25 +------------------------ src/pcm/PcmBuffer.hxx | 23 ++++++----------------- src/pcm/PcmChannels.hxx | 2 +- src/pcm/PcmDsdUsb.hxx | 2 +- src/pcm/PcmFormat.hxx | 2 +- 5 files changed, 10 insertions(+), 44 deletions(-) (limited to 'src/pcm') 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 - -#include +#include /** * 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 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 #include -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 #include -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 #include -struct PcmBuffer; +class PcmBuffer; class PcmDither; /** -- cgit v1.2.3