Re: [Musicpd-dev-team] [git pull] configure.ac cleanups

2009-03-06 Thread Max Kellermann
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

2009-03-06 Thread Jerome Quelin
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

2009-03-06 Thread Marc Pavot
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

2009-03-06 Thread Stefan Monnier
 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

2009-03-06 Thread David Guibert
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

2009-03-06 Thread David Guibert
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

2009-03-06 Thread David Guibert
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)

2009-03-06 Thread Avuton Olrich
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