aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-08-12 16:36:07 +0200
committerMax Kellermann <max@duempel.org>2014-08-12 16:36:07 +0200
commit56f61a6d59cfc6a97005d85599963cafdfdeaba8 (patch)
treec5d4c15e407b5ef6213cc82808af562e2bf85c6d
parent4d5f610029f27f0947bd590b32dbd2179ab379e9 (diff)
downloadmpd-56f61a6d59cfc6a97005d85599963cafdfdeaba8.tar.gz
mpd-56f61a6d59cfc6a97005d85599963cafdfdeaba8.tar.xz
mpd-56f61a6d59cfc6a97005d85599963cafdfdeaba8.zip
PcmConvert: Convert() returns ConstBuffer
-rw-r--r--src/decoder/DecoderAPI.cxx9
-rw-r--r--src/filter/plugins/ConvertFilterPlugin.cxx6
-rw-r--r--src/pcm/PcmConvert.cxx10
-rw-r--r--src/pcm/PcmConvert.hxx6
-rw-r--r--test/run_convert.cxx11
5 files changed, 19 insertions, 23 deletions
diff --git a/src/decoder/DecoderAPI.cxx b/src/decoder/DecoderAPI.cxx
index b214b91a8..ae600260f 100644
--- a/src/decoder/DecoderAPI.cxx
+++ b/src/decoder/DecoderAPI.cxx
@@ -31,6 +31,7 @@
#include "DetachedSong.hxx"
#include "input/InputStream.hxx"
#include "util/Error.hxx"
+#include "util/ConstBuffer.hxx"
#include "Log.hxx"
#include <assert.h>
@@ -472,9 +473,8 @@ decoder_data(Decoder &decoder,
assert(dc.in_audio_format != dc.out_audio_format);
Error error;
- data = decoder.convert->Convert(data, length,
- &length,
- error);
+ auto result = decoder.convert->Convert({data, length},
+ error);
if (data == nullptr) {
/* the PCM conversion has failed - stop
playback, since we have no better way to
@@ -482,6 +482,9 @@ decoder_data(Decoder &decoder,
LogError(error);
return DecoderCommand::STOP;
}
+
+ data = result.data;
+ length = result.size;
} else {
assert(dc.in_audio_format == dc.out_audio_format);
}
diff --git a/src/filter/plugins/ConvertFilterPlugin.cxx b/src/filter/plugins/ConvertFilterPlugin.cxx
index 27e6774f8..535330cfe 100644
--- a/src/filter/plugins/ConvertFilterPlugin.cxx
+++ b/src/filter/plugins/ConvertFilterPlugin.cxx
@@ -24,6 +24,7 @@
#include "filter/FilterRegistry.hxx"
#include "pcm/PcmConvert.hxx"
#include "util/Manual.hxx"
+#include "util/ConstBuffer.hxx"
#include "AudioFormat.hxx"
#include "poison.h"
@@ -130,8 +131,9 @@ ConvertFilter::FilterPCM(const void *src, size_t src_size,
return src;
}
- return state->Convert(src, src_size, dest_size_r,
- error);
+ auto result = state->Convert({src, src_size}, error);
+ *dest_size_r = result.size;
+ return result.data;
}
const struct filter_plugin convert_filter_plugin = {
diff --git a/src/pcm/PcmConvert.cxx b/src/pcm/PcmConvert.cxx
index ad79e60fc..ba9a691fc 100644
--- a/src/pcm/PcmConvert.cxx
+++ b/src/pcm/PcmConvert.cxx
@@ -117,12 +117,9 @@ PcmConvert::Close()
#endif
}
-const void *
-PcmConvert::Convert(const void *src, size_t src_size,
- size_t *dest_size_r,
- Error &error)
+ConstBuffer<void>
+PcmConvert::Convert(ConstBuffer<void> buffer, Error &error)
{
- ConstBuffer<void> buffer(src, src_size);
AudioFormat format = src_format;
if (format.format == SampleFormat::DSD) {
@@ -164,6 +161,5 @@ PcmConvert::Convert(const void *src, size_t src_size,
format.channels = dest_format.channels;
}
- *dest_size_r = buffer.size;
- return buffer.data;
+ return buffer;
}
diff --git a/src/pcm/PcmConvert.hxx b/src/pcm/PcmConvert.hxx
index c65835421..9d63e07c9 100644
--- a/src/pcm/PcmConvert.hxx
+++ b/src/pcm/PcmConvert.hxx
@@ -70,16 +70,12 @@ public:
*
* @param src_format the source audio format
* @param src the source PCM buffer
- * @param src_size the size of #src in bytes
* @param dest_format the requested destination audio format
- * @param dest_size_r returns the number of bytes of the destination buffer
* @param error_r location to store the error occurring, or nullptr to
* ignore errors
* @return the destination buffer, or nullptr on error
*/
- const void *Convert(const void *src, size_t src_size,
- size_t *dest_size_r,
- Error &error);
+ ConstBuffer<void> Convert(ConstBuffer<void> src, Error &error);
};
bool
diff --git a/test/run_convert.cxx b/test/run_convert.cxx
index 47d9eae86..8b9b15cf0 100644
--- a/test/run_convert.cxx
+++ b/test/run_convert.cxx
@@ -28,6 +28,7 @@
#include "AudioFormat.hxx"
#include "pcm/PcmConvert.hxx"
#include "config/ConfigGlobal.hxx"
+#include "util/ConstBuffer.hxx"
#include "util/StaticFifoBuffer.hxx"
#include "util/Error.hxx"
#include "Log.hxx"
@@ -48,7 +49,6 @@ config_get_string(gcc_unused enum ConfigOption option,
int main(int argc, char **argv)
{
AudioFormat in_audio_format, out_audio_format;
- const void *output;
if (argc != 3) {
fprintf(stderr,
@@ -104,16 +104,15 @@ int main(int argc, char **argv)
buffer.Consume(src.size);
- size_t length;
- output = state.Convert(src.data, src.size,
- &length, error);
- if (output == NULL) {
+ auto output = state.Convert({src.data, src.size}, error);
+ if (output.IsNull()) {
state.Close();
LogError(error, "Failed to convert");
return EXIT_FAILURE;
}
- gcc_unused ssize_t ignored = write(1, output, length);
+ gcc_unused ssize_t ignored = write(1, output.data,
+ output.size);
}
state.Close();