Re: [Musicpd-dev-team] [git pull] configure.ac cleanups
On 2009/03/06 08:34, Avuton Olrich avu...@gmail.com wrote: Well, that was not intentional. Not exactly what you asked for, but hopefully this will float the boat. That's better, thanks. configure.ac needs a *lot* of further cleanup: - for every feature, let the default be auto (auto-detect if library present); an explicit --enable-foo must fail when the library is not found! - separate the encoder API a little bit more from the shout output, because it may well be used by other code in the future. --enable-shout-ogg, --enable-shout-mp3 should be deprecated then, replaced with --enable-shout-output, --enable-lame-encoder, --enable-vorbis-encoder. The whole encoder API is disabled when no user (i.e. shout) is enabled. When auto-detecting shout, also auto-detect encoder plugins, and if none is present, disable shout. - remove redundant lines like the one you wanted to add (explicit $enableval assignment) - rename options: --enable-mad-decoder instead of --enable-mp3; leave --enable-mp3 as deprecated option for compatibility (no mention on the --help page); same for the other renamed plugins That's all I currently remember. Max -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] Empty fields
On 09/03/06 10:30 +0100, Max Kellermann wrote: On 2009/03/06 10:24, Jerome Quelin jque...@gmail.com wrote: definitely sure: i had to update the test-suite of the perl modules audio::mpd and poe::component::client::mpd to take this into account. i'm not saying it's right or wrong, but it has definitely changed Ok, so let's talk about whether it's right or wrong. Does it make any sense to have an empty string in a tag value? Should MPD discard the whole tag item in this case? My opinion: kill empty values. that's also my opinion, but then i can understand people wanting to have empty values. indeed, they would not be able to say whether all songs have an album, or if some don't have an album. in the end, i don't really care. just pick a behaviour and stick with it. i would hate to have to update the test suite every mpd version! :-) jérôme -- jque...@gmail.com -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] Empty fields
Hi, This behavior has been introduced in MPD 0.14: When MPD returns an empty value, it doesn't mean that the tag is empty but that the tag is unknown (not set in the music file). As a client developer I find this behavior very useful for example if you want to build a tree like this: The Doors L.A. Woman Strange Days Unknown Album It's also useful if some of your music files are badly tagged. Marc 2009/3/6 Jerome Quelin jque...@gmail.com On 09/03/06 10:30 +0100, Max Kellermann wrote: On 2009/03/06 10:24, Jerome Quelin jque...@gmail.com wrote: definitely sure: i had to update the test-suite of the perl modules audio::mpd and poe::component::client::mpd to take this into account. i'm not saying it's right or wrong, but it has definitely changed Ok, so let's talk about whether it's right or wrong. Does it make any sense to have an empty string in a tag value? Should MPD discard the whole tag item in this case? My opinion: kill empty values. that's also my opinion, but then i can understand people wanting to have empty values. indeed, they would not be able to say whether all songs have an album, or if some don't have an album. in the end, i don't really care. just pick a behaviour and stick with it. i would hate to have to update the test suite every mpd version! :-) jérôme -- jque...@gmail.com -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
Re: [Musicpd-dev-team] Empty fields
Was that change made on purpose, or is it accidental? I guess this is due to the difference between no genre specified and genre specified, it's an empty string. Do you have one or more files which have an empty string defined there? I don't think distinguishing between there's an empty tag and there's no tag is a good idea. As for whether it's a good idea to show such (empty or missing) tags in the output of list, I can see why it'd be useful, but it breaks my MPC.el client (not in a serious way, mind you). Which is why I'm asking here: depending on the answer I'll fix the corresponding problem or not. Stefan -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
[Musicpd-dev-team] [PATCH] pulse mixer
This patch introduces the mixer for the pulse output. Technically speaking, the pulse index is needed to get or set the volume. You must define callback fonctions to get this index since the pulse output in mpd is done using the simpe api. The pulse simple api does not provide the index of the newly defined output. So callback fonctions are associated to the pulse context. The list of all the sink input is then retreived. Then we select the name of the mpd pulse output and control its volume by its associated index number. Signed-off-by: Patrice Linel patnathan...@gmail.com Signed-off-by: David Guibert david.guib...@gmail.com --- Makefile.am |1 + src/main.c|3 +- src/mixer/pulse_mixer.c | 284 + src/mixer_api.h |1 + src/output/pulse_plugin.c | 16 +++ 5 files changed, 303 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index 25478f8..2511680 100644 --- a/Makefile.am +++ b/Makefile.am @@ -489,6 +489,7 @@ endif if HAVE_PULSE OUTPUT_SRC += src/output/pulse_plugin.c +MIXER_SRC += src/mixer/pulse_mixer.c endif if HAVE_SHOUT diff --git a/src/main.c b/src/main.c index a3f613d..2889933 100644 --- a/src/main.c +++ b/src/main.c @@ -259,6 +259,7 @@ int main(int argc, char *argv[]) command_init(); initialize_decoder_and_player(); + daemonize(options.daemon); volume_init(); initAudioConfig(); audio_output_all_init(); @@ -267,8 +268,6 @@ int main(int argc, char *argv[]) initNormalization(); input_stream_global_init(); - daemonize(options.daemon); - setup_log_output(options.stdOutput); initSigHandlers(); diff --git a/src/mixer/pulse_mixer.c b/src/mixer/pulse_mixer.c new file mode 100644 index 000..78b77c0 --- /dev/null +++ b/src/mixer/pulse_mixer.c @@ -0,0 +1,284 @@ +#include ../output_api.h +#include ../mixer_api.h + +#include glib.h +#include pulse/volume.h +#include pulse/pulseaudio.h + +struct pulse_mixer { + struct mixer base; + char *server; + char *sink; + char *output_name; + uint32_t index; + boolonline; + struct pa_context *context; + struct pa_threaded_mainloop *mainloop; + struct pa_cvolume *volume; + +}; + + + +static void sink_input_cb(G_GNUC_UNUSED pa_context *context, const pa_sink_input_info *i, int eol, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + if (eol) { + g_debug(eol error sink_input_cb\n); + return; + } + + if (!i) { + g_debug(Sink input callback failure\n); + return; + } + g_debug(sink input cb %s, index %d \n,i-name,i-index); + if(strcmp(i-name,pm-output_name)==0) + { + pm-index=i-index; + pm-online=true; + *pm-volume=i-volume; + } + else g_debug(bad name\n); +} + +static void sink_input_vol(G_GNUC_UNUSED pa_context *context, const pa_sink_input_info *i, int eol, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + if (eol) { + g_debug(eol error sink_input_vol\n); + return; + } + + if (!i) { + g_debug(Sink input callback failure\n); + return; + } + g_debug(sink input vol %s, index %d \n,i-name,i-index); + *pm-volume=i-volume; +} + +static void +subscribe_cb(G_GNUC_UNUSED pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + g_debug(pulse_mixer: subscribe call back\n); + switch (t PA_SUBSCRIPTION_EVENT_FACILITY_MASK) + { + + case PA_SUBSCRIPTION_EVENT_SINK_INPUT: + if ((t PA_SUBSCRIPTION_EVENT_TYPE_MASK) == + PA_SUBSCRIPTION_EVENT_REMOVE) + pm-online =false; + else + { + pa_operation *o; + + if (!(o = pa_context_get_sink_input_info(pm-context, idx, sink_input_cb, pm))) + { + g_debug(pulse_mixer: pa_context_get_sink_input_info() failed\n); + return; + } + pa_operation_unref(o); + } + break; + } +} + +static void +context_state_cb(pa_context *context, void *userdata) +{ + struct pulse_mixer *pm = userdata; + switch (pa_context_get_state(context)) + { + case PA_CONTEXT_READY: + { + pa_operation *o; + + pa_context_set_subscribe_callback(context, subscribe_cb, pm); + + if (!(o = pa_context_subscribe(context,
[Musicpd-dev-team] [PATCH] pulse mixer
Sorry. I forgot to do the make after minor changes... I resend the patch wich compiles cleanly. -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team
[Musicpd-dev-team] [PATCH] pulse mixer
This patch introduces the mixer for the pulse output. Technically speaking, the pulse index is needed to get or set the volume. You must define callback fonctions to get this index since the pulse output in mpd is done using the simpe api. The pulse simple api does not provide the index of the newly defined output. So callback fonctions are associated to the pulse context. The list of all the sink input is then retreived. Then we select the name of the mpd pulse output and control its volume by its associated index number. Signed-off-by: Patrice Linel patnathan...@gmail.com Signed-off-by: David Guibert david.guib...@gmail.com --- Makefile.am |1 + src/main.c|3 +- src/mixer/pulse_mixer.c | 284 + src/mixer_api.h |1 + src/output/pulse_plugin.c | 16 +++ 5 files changed, 303 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index 25478f8..2511680 100644 --- a/Makefile.am +++ b/Makefile.am @@ -489,6 +489,7 @@ endif if HAVE_PULSE OUTPUT_SRC += src/output/pulse_plugin.c +MIXER_SRC += src/mixer/pulse_mixer.c endif if HAVE_SHOUT diff --git a/src/main.c b/src/main.c index a3f613d..2889933 100644 --- a/src/main.c +++ b/src/main.c @@ -259,6 +259,7 @@ int main(int argc, char *argv[]) command_init(); initialize_decoder_and_player(); + daemonize(options.daemon); volume_init(); initAudioConfig(); audio_output_all_init(); @@ -267,8 +268,6 @@ int main(int argc, char *argv[]) initNormalization(); input_stream_global_init(); - daemonize(options.daemon); - setup_log_output(options.stdOutput); initSigHandlers(); diff --git a/src/mixer/pulse_mixer.c b/src/mixer/pulse_mixer.c new file mode 100644 index 000..e12a844 --- /dev/null +++ b/src/mixer/pulse_mixer.c @@ -0,0 +1,284 @@ +#include ../output_api.h +#include ../mixer_api.h + +#include glib.h +#include pulse/volume.h +#include pulse/pulseaudio.h + +struct pulse_mixer { + struct mixer base; + char *server; + char *sink; + char *output_name; + uint32_t index; + boolonline; + struct pa_context *context; + struct pa_threaded_mainloop *mainloop; + struct pa_cvolume *volume; + +}; + + + +static void sink_input_cb(G_GNUC_UNUSED pa_context *context, const pa_sink_input_info *i, int eol, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + if (eol) { + g_debug(eol error sink_input_cb\n); + return; + } + + if (!i) { + g_debug(Sink input callback failure\n); + return; + } + g_debug(sink input cb %s, index %d \n,i-name,i-index); + if(strcmp(i-name,pm-output_name)==0) + { + pm-index=i-index; + pm-online=true; + *pm-volume=i-volume; + } + else g_debug(bad name\n); +} + +static void sink_input_vol(G_GNUC_UNUSED pa_context *context, const pa_sink_input_info *i, int eol, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + if (eol) { + g_debug(eol error sink_input_vol\n); + return; + } + + if (!i) { + g_debug(Sink input callback failure\n); + return; + } + g_debug(sink input vol %s, index %d \n,i-name,i-index); + *pm-volume=i-volume; +} + +static void +subscribe_cb(G_GNUC_UNUSED pa_context *c, pa_subscription_event_type_t t, uint32_t idx, void *userdata) +{ + + struct pulse_mixer *pm = userdata; + g_debug(pulse_mixer: subscribe call back\n); + switch (t PA_SUBSCRIPTION_EVENT_FACILITY_MASK) + { + + case PA_SUBSCRIPTION_EVENT_SINK_INPUT: + if ((t PA_SUBSCRIPTION_EVENT_TYPE_MASK) == + PA_SUBSCRIPTION_EVENT_REMOVE) + pm-online =false; + else + { + pa_operation *o; + + if (!(o = pa_context_get_sink_input_info(pm-context, idx, sink_input_cb, pm))) + { + g_debug(pulse_mixer: pa_context_get_sink_input_info() failed\n); + return; + } + pa_operation_unref(o); + } + break; + } +} + +static void +context_state_cb(pa_context *context, void *userdata) +{ + struct pulse_mixer *pm = userdata; + switch (pa_context_get_state(context)) + { + case PA_CONTEXT_READY: + { + pa_operation *o; + + pa_context_set_subscribe_callback(context, subscribe_cb, pm); + + if (!(o = pa_context_subscribe(context,
[Musicpd-dev-team] [git pull] configure.ac cleanups (part 2)
Hi max, Please pull from my tree, a few fixes you've asked for, a few that seemed logical to me. configure.ac is still in complete disarray, but these are some steps forward, I believe. The only one that seems iffy to me is 'don't include a help string with the --enable-mp3', if I don't include one it appears ac will make a blank space regardless. If it were my project I'd say screw backwards compatbility of configure arguments :). git://git.musicpd.org/ Not inlining the diff, it's around 1200 lines and who knows the limits of hte mailing list. To see it: http://avuton.googlepages.com/autoconf-cleanups.patch Avuton Olrich (11): configure: remove redundant explicit $enableval assignments. configure: Group libmad stuff together, rename --enable-mp3 --enable-mad configure: trim down the Tremor AC_ARG_WITH() statements configure: trim down the line length for the lame arguments configure: trim down the line length for the zeroconf help string configure: trim down the line length for the faad help strings configure: trim down the line length for the libOggFLAC help strings configure: specify that faad2 prefix is optional in the help string configure: No capitalization on beginning of help strings. configure: Move the faad stuff to m4/faad.m4 configure: global indention and trim line wc to 80 when practical. configure.ac | 525 -- m4/faad.m4 | 190 m4/lame.m4 | 20 ++- m4/libOggFLAC.m4 | 20 ++- -- avuton -- | (\_/) This is Bunny. Copy and paste Bunny | (='.'=) into your signature to help him gain | ()_() world domination. -- Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H ___ Musicpd-dev-team mailing list Musicpd-dev-team@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/musicpd-dev-team