| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Don't connect to JACK before MPD has daemonized.
|
|
|
|
| |
Don't connect to PulseAudio before MPD has daemonized.
|
|
|
|
|
|
|
| |
With these methods, an output plugin can allocate some global
resources only if it is actually enabled. The method enable() is
called after daemonization, which allows for more sophisticated
resource allocation during that method.
|
|
|
|
|
|
| |
Don't let the mixer plugin "override" the libpulse callbacks.
Instead, add a "mixer" attribute to the pulse_output struct, and call
the mixer on all interesting events.
|
| |
|
|
|
|
|
|
| |
An asterisk means that this attribute should not be enforced, and
stays whatever it used to be. This way, some configuration values
work like masks.
|
| |
|
|
|
|
|
| |
.. and keep up the JACK connection while MPD runs. Allocate the ring
buffers on the first open, and free them at MPD exit.
|
|
|
|
|
| |
JACK doesn't need cancel() because it won't do much anyway. Buffers
are small.
|
|
|
|
| |
It's a double pointer.
|
|
|
|
| |
Don't disconnect from JACK during pause.
|
| |
|
|
|
|
|
|
|
|
| |
This is a complete rewrite of the PulseAudio output plugin. It uses
the asynchronous API, which gives us more control over everything.
Additionally, it connects to the PulseAudio server on startup, and
keeps this connection up while MPD runs. During pause, instead of
closing the stream, it enables "cork".
|
| |
|
|
|
|
| |
This looks nicer in the PulseAudio manager than just "mpd".
|
| |
|
|
|
|
| |
This allows PulseAudio to do some advanced tweaks.
|
| |
|
|
|
|
|
|
|
| |
Accidently, MPD has been using several GLib 2.16 functions for a
while, and nobody noticed yet. To simplify the code base, let's bump
the minimum GLib version for MPD to 2.16. That version is old enough,
and it's reasonable to expect users to have it.
|
|
|
|
| |
Include CoreServices/CoreServices.h.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
The recorder plugin writes audio played by MPD to a file. This may be
useful for recording radio streams.
This implementation is incomplete, because support for tags is
missing, and MPD should be able to record each track to a different
file.
|
|\
| |
| |
| |
| |
| |
| | |
Conflicts:
NEWS
configure.ac
|
| |
| |
| |
| |
| | |
During the pause loop, manually sleep for 500ms if shout_delay()
returns a value greater than that. Don't exhaust libshout's buffer.
|
|/ |
|
|
|
|
|
| |
The first patch by Patrick didn't work, because his "#ifdef HAVE_OSX"
line would have required config.h.
|
|
|
|
|
|
| |
On Mac OS X, the httpd plugin cannot be compiled, because OS X's
system headers do nto include sys/types.h, although they use
u_int32_t.
|
|
|
|
| |
Renamed all remaining CamelCase functions.
|
|
|
|
|
|
|
|
|
|
| |
Hello,
While compiling latest git I've received a compile error in the
httpd_output_plugin.
Small patch attached.
Patrik
|
|
|
|
|
|
|
|
| |
Flush the encoder before calling encoder_tag(). The first page
generated by the encoder after sending the tag will be the new
"header" page, which is sent to all HTTP clients when they connect.
This is a little bit specific to the vorbis encoder, but there are no
other encoders which support tags (yet).
|
|
|
|
|
|
| |
Moved some code from httpd_output_encode_and_play() into separate
functions httpd_output_broadcast_page() and
httpd_output_encoder_to_clients().
|
|
|
|
|
|
| |
There's no reason to send both encoder tags and Icy-Metadata to the
client. Let's disable Icy-Metadata when the encoder supports embedded
tags.
|
|
|
|
|
| |
In the tag() method, MPD guarantees that it does not pass tag==NULL.
Converted the runtime check to an assertion.
|
|
|
|
|
| |
Call snd_config_update_free_global() manually in our finish() method,
don't use atexit().
|
|
|
|
| |
Plain "bool" consumes only one byte instead of four.
|
|
|
|
| |
In HTTP, header names are case insensitive.
|
|
|
|
|
|
| |
[mk: folded with patch "Put icy related functions in extra source
files"; moved icy_server.c from HAVE_CURL to ENABLE_HTTPD_OUTPUT;
removed an unused variable]
|
|
|
|
|
| |
The httpd_client_check_queue() callback function does not use its
"user_data" argument. Don't pass any, and fix the gcc warning.
|
|
|
|
|
|
| |
Nobody needs to modify these strings. We can make them const, and
convert config_dup_block_string() to config_get_block_string(). This
also fixes memory leaks in the pulse mixer.
|
|
|
|
|
| |
The conf.h functions deal well with config_param==NULL and will return
the specified default value then.
|
|
|
|
|
|
| |
The mixer core library is now responsible for creating and managing
the mixer object. This removes duplicated code from the output
plugins.
|
|
|
|
|
| |
Check if encoder_plugin!=NULL, not encoder_plugin_get (which is a
function).
|
| |
|
|
|
|
|
| |
Due to a race condition, httpd_client_out_event() could be called even
when its GLib event source was already removed. Check that case.
|
|
|
|
|
|
| |
When the httpd output is cancelled, it freed all pages, but didn't
remove them from the queue. Call g_queue_clear() and remove the
write source id.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Let's get rid of the "shout" plugin, and the awfully complicated
icecast daemon setup! MPD can do better if it's doing the HTTP server
stuff on its own. This new plugin has several advantages:
- easier to set up - only one daemon, no password settings, no mount
settings
- MPD controls the encoder and thus already knows the packet
boundaries - icecast has to parse them
- MPD doesn't bother to encode data while nobody is listening
This implementation is very experimental (no header parsing, ignores
request URI, no icy-metadata, ...). It should be able to suport
several encoders in parallel in the future (with different bit rates,
different codec, ...), to make MPD the perfect streaming server. Once
MPD gets multi-player support, we can even mount several different
radio stations on one server.
|
|
|
|
|
|
| |
This patch allows the output plugins to import only mixer_list.h,
instead of the full mixer_api.h (which would expose internal
structures).
|
|
|
|
|
|
| |
mixer_control.h should provide the functions needed to manipulate a
mixer, without exposing the internal mixer API (which is provided by
mixer_api.h).
|