mixer/Software: convert to a class

This commit is contained in:
Max Kellermann 2013-04-16 21:25:27 +02:00
parent 9f625b0a0d
commit 506c716cf2

View File

@ -22,19 +22,30 @@
#include "MixerInternal.hxx" #include "MixerInternal.hxx"
#include "FilterPlugin.hxx" #include "FilterPlugin.hxx"
#include "FilterRegistry.hxx" #include "FilterRegistry.hxx"
#include "FilterInternal.hxx"
#include "filter/VolumeFilterPlugin.hxx" #include "filter/VolumeFilterPlugin.hxx"
#include "pcm/PcmVolume.hxx" #include "pcm/PcmVolume.hxx"
#include <assert.h> #include <assert.h>
#include <math.h> #include <math.h>
struct software_mixer { struct SoftwareMixer final : public mixer {
/** the base mixer class */
struct mixer base;
Filter *filter; Filter *filter;
unsigned volume; unsigned volume;
SoftwareMixer()
:filter(filter_new(&volume_filter_plugin, nullptr, nullptr)),
volume(100)
{
assert(filter != nullptr);
mixer_init(this, &software_mixer_plugin);
}
~SoftwareMixer() {
delete filter;
}
}; };
static struct mixer * static struct mixer *
@ -42,30 +53,21 @@ software_mixer_init(G_GNUC_UNUSED void *ao,
G_GNUC_UNUSED const struct config_param *param, G_GNUC_UNUSED const struct config_param *param,
G_GNUC_UNUSED GError **error_r) G_GNUC_UNUSED GError **error_r)
{ {
struct software_mixer *sm = g_new(struct software_mixer, 1); return new SoftwareMixer();
mixer_init(&sm->base, &software_mixer_plugin);
sm->filter = filter_new(&volume_filter_plugin, NULL, NULL);
assert(sm->filter != NULL);
sm->volume = 100;
return &sm->base;
} }
static void static void
software_mixer_finish(struct mixer *data) software_mixer_finish(struct mixer *data)
{ {
struct software_mixer *sm = (struct software_mixer *)data; SoftwareMixer *sm = (SoftwareMixer *)data;
g_free(sm); delete sm;
} }
static int static int
software_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r) software_mixer_get_volume(struct mixer *mixer, G_GNUC_UNUSED GError **error_r)
{ {
struct software_mixer *sm = (struct software_mixer *)mixer; SoftwareMixer *sm = (SoftwareMixer *)mixer;
return sm->volume; return sm->volume;
} }
@ -74,7 +76,7 @@ static bool
software_mixer_set_volume(struct mixer *mixer, unsigned volume, software_mixer_set_volume(struct mixer *mixer, unsigned volume,
G_GNUC_UNUSED GError **error_r) G_GNUC_UNUSED GError **error_r)
{ {
struct software_mixer *sm = (struct software_mixer *)mixer; SoftwareMixer *sm = (SoftwareMixer *)mixer;
assert(volume <= 100); assert(volume <= 100);
@ -103,9 +105,9 @@ const struct mixer_plugin software_mixer_plugin = {
Filter * Filter *
software_mixer_get_filter(struct mixer *mixer) software_mixer_get_filter(struct mixer *mixer)
{ {
struct software_mixer *sm = (struct software_mixer *)mixer; SoftwareMixer *sm = (SoftwareMixer *)mixer;
assert(sm->base.plugin == &software_mixer_plugin); assert(sm->plugin == &software_mixer_plugin);
return sm->filter; return sm->filter;
} }