diff options
author | Max Kellermann <max@duempel.org> | 2013-08-03 21:00:50 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2013-08-03 21:37:56 +0200 |
commit | d1e7b4e38136f9342aad76c685a13adf0e69f869 (patch) | |
tree | 49643b937ddfe735511b566a71398da5a945d7aa /src/filter/AutoConvertFilterPlugin.cxx | |
parent | 67f591a9ce60651da41afc499bd9a22e25314e35 (diff) | |
download | mpd-d1e7b4e38136f9342aad76c685a13adf0e69f869.tar.gz mpd-d1e7b4e38136f9342aad76c685a13adf0e69f869.tar.xz mpd-d1e7b4e38136f9342aad76c685a13adf0e69f869.zip |
audio_format: convert to C++
Diffstat (limited to 'src/filter/AutoConvertFilterPlugin.cxx')
-rw-r--r-- | src/filter/AutoConvertFilterPlugin.cxx | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/src/filter/AutoConvertFilterPlugin.cxx b/src/filter/AutoConvertFilterPlugin.cxx index 55ee46948..1ad42c2ab 100644 --- a/src/filter/AutoConvertFilterPlugin.cxx +++ b/src/filter/AutoConvertFilterPlugin.cxx @@ -23,19 +23,12 @@ #include "FilterPlugin.hxx" #include "FilterInternal.hxx" #include "FilterRegistry.hxx" -#include "audio_format.h" +#include "AudioFormat.hxx" #include <assert.h> class AutoConvertFilter final : public Filter { /** - * The audio format being fed to the underlying filter. This - * plugin actually doesn't need this variable, we have it here - * just so our open() method doesn't return a stack pointer. - */ - audio_format child_audio_format; - - /** * The underlying filter. */ Filter *filter; @@ -52,46 +45,45 @@ public: delete filter; } - virtual const audio_format *Open(audio_format &af, GError **error_r); + virtual AudioFormat Open(AudioFormat &af, GError **error_r); virtual void Close(); virtual const void *FilterPCM(const void *src, size_t src_size, size_t *dest_size_r, GError **error_r); }; -const struct audio_format * -AutoConvertFilter::Open(audio_format &in_audio_format, GError **error_r) +AudioFormat +AutoConvertFilter::Open(AudioFormat &in_audio_format, GError **error_r) { - assert(audio_format_valid(&in_audio_format)); + assert(in_audio_format.IsValid()); /* open the "real" filter */ - child_audio_format = in_audio_format; - const audio_format *out_audio_format = - filter->Open(child_audio_format, error_r); - if (out_audio_format == nullptr) - return nullptr; + const AudioFormat child_audio_format = in_audio_format; + AudioFormat out_audio_format = filter->Open(in_audio_format, error_r); + if (!out_audio_format.IsDefined()) + return out_audio_format; /* need to convert? */ - if (!audio_format_equals(&child_audio_format, &in_audio_format)) { + if (in_audio_format != child_audio_format) { /* yes - create a convert_filter */ convert = filter_new(&convert_filter_plugin, nullptr, error_r); if (convert == nullptr) { filter->Close(); - return nullptr; + return AudioFormat::Undefined(); } - audio_format audio_format2 = in_audio_format; - const audio_format *audio_format3 = + AudioFormat audio_format2 = in_audio_format; + AudioFormat audio_format3 = convert->Open(audio_format2, error_r); - if (audio_format3 == nullptr) { + if (!audio_format3.IsDefined()) { delete convert; filter->Close(); - return nullptr; + return AudioFormat::Undefined(); } - assert(audio_format_equals(&audio_format2, &in_audio_format)); + assert(audio_format2 == in_audio_format); convert_filter_set(convert, child_audio_format); } else |