These node types take care of things that are common to all sink input and source output nodes. --- src/Makefile.am | 2 ++ src/pulsecore/sink-input-node.c | 70 ++++++++++++++++++++++++++++++++++++++ src/pulsecore/sink-input-node.h | 40 ++++++++++++++++++++++ src/pulsecore/source-output-node.c | 70 ++++++++++++++++++++++++++++++++++++++ src/pulsecore/source-output-node.h | 40 ++++++++++++++++++++++ 5 files changed, 222 insertions(+) create mode 100644 src/pulsecore/sink-input-node.c create mode 100644 src/pulsecore/sink-input-node.h create mode 100644 src/pulsecore/source-output-node.c create mode 100644 src/pulsecore/source-output-node.h diff --git a/src/Makefile.am b/src/Makefile.am index 5a7b817..5e6d41e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -892,8 +892,10 @@ libpulsecore_ at PA_MAJORMINOR@_la_SOURCES = \ pulsecore/remap_mmx.c pulsecore/remap_sse.c \ pulsecore/resampler.c pulsecore/resampler.h \ pulsecore/rtpoll.c pulsecore/rtpoll.h \ + pulsecore/sink-input-node.c pulsecore/sink-input-node.h \ pulsecore/sink-node.c pulsecore/sink-node.h \ pulsecore/source-node.c pulsecore/source-node.h \ + pulsecore/source-output-node.c pulsecore/source-output-node.h \ pulsecore/mix.c pulsecore/mix.h \ pulsecore/cpu.h \ pulsecore/cpu-arm.c pulsecore/cpu-arm.h \ diff --git a/src/pulsecore/sink-input-node.c b/src/pulsecore/sink-input-node.c new file mode 100644 index 0000000..2a7ba45 --- /dev/null +++ b/src/pulsecore/sink-input-node.c @@ -0,0 +1,70 @@ +/*** + This file is part of PulseAudio. + + Copyright (c) 2013 Intel Corporation + Author: Tanu Kaskinen <tanu.kaskinen at intel.com> + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "sink-input-node.h" + +pa_sink_input_node *pa_sink_input_node_new(pa_sink_input *input, const char *name) { + pa_node_new_data data; + pa_node *node; + pa_sink_input_node *input_node; + + pa_assert(input); + pa_assert(name); + + pa_node_new_data_init(&data); + pa_node_new_data_set_name(&data, name); + pa_node_new_data_set_description(&data, pa_sink_input_get_description(input)); + pa_node_new_data_set_direction(&data, PA_DIRECTION_INPUT); + + node = pa_node_new(input->core, &data); + pa_node_new_data_done(&data); + + if (!node) { + pa_log("Failed to create a node for sink input %" PRIu32 ".", input->index); + return NULL; + } + + input_node = pa_xnew0(pa_sink_input_node, 1); + input_node->core = input->core; + input_node->node = node; + input_node->sink_input = input; + + node->userdata = input_node; + + /* We may need to move this to pa_sink_input_node_put() at some point. */ + pa_node_put(node); + + return input_node; +} + +void pa_sink_input_node_free(pa_sink_input_node *input_node) { + pa_assert(input_node); + + if (input_node->node) + pa_node_free(input_node->node); + + pa_xfree(input_node); +} diff --git a/src/pulsecore/sink-input-node.h b/src/pulsecore/sink-input-node.h new file mode 100644 index 0000000..da154ae --- /dev/null +++ b/src/pulsecore/sink-input-node.h @@ -0,0 +1,40 @@ +#ifndef foosinkinputnodehfoo +#define foosinkinputnodehfoo + +/*** + This file is part of PulseAudio. + + Copyright (c) 2013 Intel Corporation + Author: Tanu Kaskinen <tanu.kaskinen at intel.com> + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +typedef struct pa_sink_input_node pa_sink_input_node; + +#include <pulsecore/core.h> +#include <pulsecore/node.h> + +struct pa_sink_input_node { + pa_core *core; + pa_node *node; + pa_sink_input *sink_input; +}; + +pa_sink_input_node *pa_sink_input_node_new(pa_sink_input *input, const char *name); +void pa_sink_input_node_free(pa_sink_input_node *input_node); + +#endif diff --git a/src/pulsecore/source-output-node.c b/src/pulsecore/source-output-node.c new file mode 100644 index 0000000..9db35e8 --- /dev/null +++ b/src/pulsecore/source-output-node.c @@ -0,0 +1,70 @@ +/*** + This file is part of PulseAudio. + + Copyright (c) 2013 Intel Corporation + Author: Tanu Kaskinen <tanu.kaskinen at intel.com> + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "source-output-node.h" + +pa_source_output_node *pa_source_output_node_new(pa_source_output *output, const char *name) { + pa_node_new_data data; + pa_node *node; + pa_source_output_node *output_node; + + pa_assert(output); + pa_assert(name); + + pa_node_new_data_init(&data); + pa_node_new_data_set_name(&data, name); + pa_node_new_data_set_description(&data, pa_source_output_get_description(output)); + pa_node_new_data_set_direction(&data, PA_DIRECTION_OUTPUT); + + node = pa_node_new(output->core, &data); + pa_node_new_data_done(&data); + + if (!node) { + pa_log("Failed to create a node for source output %" PRIu32 ".", output->index); + return NULL; + } + + output_node = pa_xnew0(pa_source_output_node, 1); + output_node->core = output->core; + output_node->node = node; + output_node->source_output = output; + + node->userdata = output_node; + + /* We may need to move this to pa_source_output_node_put() at some point. */ + pa_node_put(node); + + return output_node; +} + +void pa_source_output_node_free(pa_source_output_node *output_node) { + pa_assert(output_node); + + if (output_node->node) + pa_node_free(output_node->node); + + pa_xfree(output_node); +} diff --git a/src/pulsecore/source-output-node.h b/src/pulsecore/source-output-node.h new file mode 100644 index 0000000..ed906f4 --- /dev/null +++ b/src/pulsecore/source-output-node.h @@ -0,0 +1,40 @@ +#ifndef foosourceoutputnodehfoo +#define foosourceoutputnodehfoo + +/*** + This file is part of PulseAudio. + + Copyright (c) 2013 Intel Corporation + Author: Tanu Kaskinen <tanu.kaskinen at intel.com> + + PulseAudio is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation; either version 2.1 of the License, + or (at your option) any later version. + + PulseAudio is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with PulseAudio; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 + USA. +***/ + +typedef struct pa_source_output_node pa_source_output_node; + +#include <pulsecore/core.h> +#include <pulsecore/node.h> + +struct pa_source_output_node { + pa_core *core; + pa_node *node; + pa_source_output *source_output; +}; + +pa_source_output_node *pa_source_output_node_new(pa_source_output *output, const char *name); +void pa_source_output_node_free(pa_source_output_node *output_node); + +#endif -- 1.8.1.2