From d1e7b4e38136f9342aad76c685a13adf0e69f869 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 3 Aug 2013 21:00:50 +0200 Subject: audio_format: convert to C++ --- src/filter/AutoConvertFilterPlugin.cxx | 40 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 24 deletions(-) (limited to 'src/filter/AutoConvertFilterPlugin.cxx') 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,18 +23,11 @@ #include "FilterPlugin.hxx" #include "FilterInternal.hxx" #include "FilterRegistry.hxx" -#include "audio_format.h" +#include "AudioFormat.hxx" #include 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. */ @@ -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 -- cgit v1.2.3