I will need to use the function from outside libpulse. I added the channel map argument, because the function will be called from another function that is expected to initialize the channel map. I don't know if it's in practice necessary, but it shouldn't do any harm either. --- src/Makefile.am | 1 + src/pulse/format.c | 25 ++-------------------- src/pulsecore/core-format.c | 52 +++++++++++++++++++++++++++++++++++++++++++++ src/pulsecore/core-format.h | 31 +++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 23 deletions(-) create mode 100644 src/pulsecore/core-format.c create mode 100644 src/pulsecore/core-format.h diff --git a/src/Makefile.am b/src/Makefile.am index 0296b3c..7b544a9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -614,6 +614,7 @@ libpulsecommon_ at PA_MAJORMINOR@_la_SOURCES = \ pulsecore/authkey.c pulsecore/authkey.h \ pulsecore/conf-parser.c pulsecore/conf-parser.h \ pulsecore/core-error.c pulsecore/core-error.h \ + pulsecore/core-format.c pulsecore/core-format.h \ pulsecore/core-rtclock.c pulsecore/core-rtclock.h \ pulsecore/core-util.c pulsecore/core-util.h \ pulsecore/creds.h \ diff --git a/src/pulse/format.c b/src/pulse/format.c index c0c53bf..9c7e13e 100644 --- a/src/pulse/format.c +++ b/src/pulse/format.c @@ -30,6 +30,7 @@ #include <pulse/internal.h> #include <pulse/xmalloc.h> +#include <pulsecore/core-format.h> #include <pulsecore/core-util.h> #include <pulsecore/i18n.h> #include <pulsecore/macro.h> @@ -215,28 +216,6 @@ pa_format_info* pa_format_info_from_sample_spec(pa_sample_spec *ss, pa_channel_m return f; } -/* For compressed streams */ -static int pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss) { - int rate; - - pa_assert(f); - pa_assert(ss); - - /* Note: When we add support for non-IEC61937 encapsulated compressed - * formats, this function should return a non-zero values for these. */ - - ss->format = PA_SAMPLE_S16LE; - ss->channels = 2; - - pa_return_val_if_fail(pa_format_info_get_prop_int(f, PA_PROP_FORMAT_RATE, &rate) == 0, -PA_ERR_INVALID); - ss->rate = (uint32_t) rate; - - if (f->encoding == PA_ENCODING_EAC3_IEC61937) - ss->rate *= 4; - - return 0; -} - /* For PCM streams */ int pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map) { char *sf = NULL, *m = NULL; @@ -247,7 +226,7 @@ int pa_format_info_to_sample_spec(pa_format_info *f, pa_sample_spec *ss, pa_chan pa_assert(ss); if (!pa_format_info_is_pcm(f)) - return pa_format_info_to_sample_spec_fake(f, ss); + return pa_format_info_to_sample_spec_fake(f, ss, map); if (pa_format_info_get_prop_string(f, PA_PROP_FORMAT_SAMPLE_FORMAT, &sf)) goto out; diff --git a/src/pulsecore/core-format.c b/src/pulsecore/core-format.c new file mode 100644 index 0000000..6e7c1fb --- /dev/null +++ b/src/pulsecore/core-format.c @@ -0,0 +1,52 @@ +/*** + This file is part of PulseAudio. + + 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 "core-format.h" + +#include <pulse/def.h> + +#include <pulsecore/macro.h> + +int pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map) { + int rate; + + pa_assert(f); + pa_assert(ss); + + /* Note: When we add support for non-IEC61937 encapsulated compressed + * formats, this function should return a non-zero values for these. */ + + ss->format = PA_SAMPLE_S16LE; + ss->channels = 2; + + if (map) + pa_channel_map_init_stereo(map); + + pa_return_val_if_fail(pa_format_info_get_prop_int(f, PA_PROP_FORMAT_RATE, &rate) == 0, -PA_ERR_INVALID); + ss->rate = (uint32_t) rate; + + if (f->encoding == PA_ENCODING_EAC3_IEC61937) + ss->rate *= 4; + + return 0; +} diff --git a/src/pulsecore/core-format.h b/src/pulsecore/core-format.h new file mode 100644 index 0000000..ef2c8dc --- /dev/null +++ b/src/pulsecore/core-format.h @@ -0,0 +1,31 @@ +#ifndef foocoreformathfoo +#define foocoreformathfoo + +/*** + This file is part of PulseAudio. + + 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. +***/ + +#include <pulse/format.h> + +/* For compressed formats. Converts the format info into a sample spec and a + * channel map that an ALSA device can use as its configuration parameters when + * playing back the compressed data. That is, the returned sample spec doesn't + * describe the audio content, but the device parameters. */ +int pa_format_info_to_sample_spec_fake(pa_format_info *f, pa_sample_spec *ss, pa_channel_map *map); + +#endif -- 1.8.3.1