aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcm
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-08-07 18:46:58 +0200
committerMax Kellermann <max@duempel.org>2013-08-07 18:51:21 +0200
commit44a0e21795dcbd94d45ff143123f8b085754ea81 (patch)
treede7572fad77f000357c6970360cfb5319aa8a64a /src/pcm
parentfafaf567f94ed08c04bd9aca73714aa3293854bc (diff)
downloadmpd-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.cxx25
-rw-r--r--src/pcm/PcmBuffer.hxx23
-rw-r--r--src/pcm/PcmChannels.hxx2
-rw-r--r--src/pcm/PcmDsdUsb.hxx2
-rw-r--r--src/pcm/PcmFormat.hxx2
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;
/**