| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
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).
|
|
|
|
|
|
|
|
| |
This updates the copyright header to all be the same, which is
pretty much an update of where to mail request for a copy of the GPL
and the years of the MPD project. This also puts all committers under
'The Music Player Project' umbrella. These entries should go
individually in the AUTHORS file, for consistancy.
|
|
|
|
|
| |
snd_pcm_writei() returns the type snd_pcm_sframes_t, not int. Use the
correct variable type.
|
|
|
|
|
|
| |
If the PCM handle gets disconnected, don't close and clear it in
alsa_recover(). The MPD core will call alsa_close() anyway. This
way, we can always assume that alsa_data.pcm is always valid.
|
|
|
|
|
|
| |
This patch fixes a theoretical (but practically impossible) flaw: the
variable "buffer_time" may be uninitialized when it is used.
Initialize the variable with snd_pcm_hw_params_get_buffer_time().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The default values for buffer_time and period_time were both capped by
the hardware limits on practically all chips. The result was a
period_time which was half as big as the buffer_time. On some chips,
this led to lots of underruns when using a high sample rate (192 kHz),
because MPD had very little time to send new samples to ALSA.
A period time which is one fourth of the buffer time turned out to be
much better. If no period_time is configured, see how much
buffer_time the hardware accepts, and try to configure one fourth of
it as period_time, instead of hard-coding the default period_time
value.
This is yet another attempt to provide a solution which is valid for
all sound chips. Using the SND_PCM_NONBLOCK flag also seemed to solve
the underruns, but put a lot more CPU load to MPD.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 <patnathanael@gmail.com>
Signed-off-by: David Guibert <david.guibert@gmail.com>
[mk: fixed whitespace errors and broke long lines; removed
daemonization changes from main.c]
|
|
|
|
|
|
| |
Log the real period and buffer size. This might be useful when
debugging xruns. Note that the same information is available in
/proc/asound/card*/pcm*p/sub*/hw_params
|
|
|
|
|
|
| |
There are a few high-end devices (e.g. ICE1724) which cannot even play
16 bit audio. Try the 32 bit fallback, which we already implemented
for 24 bit.
|
|
|
|
|
|
| |
Some sound chips/drivers (e.g. Intel HDA) don't support 24 bit
samples, they want to get 32 bit instead. Now that MPD's PCM library
supports 32 bit, add a 32 bit fallback when 24 bit is not supported.
|
|
|
|
|
| |
The MPD core logs the audio format of all audio outputs. Remove the
duplicate message from the plugins.
|
|
|
|
| |
[mk: adapted to new output plugin API]
|
|
|
|
| |
Renamed numOfItems to num_items.
|
|
|
|
|
| |
The check "open()!=0" is wrong, you have to write "open()>=0", because
-1 means error, and 0 is a valid file handle.
|
|
|
|
|
|
|
| |
Use GLib's GError library for reporting output device failures.
Note that some init() methods don't clean up properly after a failure,
but that's ok for now, because the MPD core will abort anyway.
|
|
|
|
|
| |
The return type of most OS X functions is OSStatus, not int. We can
get a nice error message from GetMacOSStatusCommentString(), log it.
|
|
|
|
|
|
| |
Don't call AudioOutputUnitStart() in the play() method, do it after
the device has been opened. We can eliminate the "started" property
now, because the device is always started when it's open.
|
|
|
|
|
|
| |
We don't need to keep commented code forever. If we want that
test_default_device() implementation back one day, we'll pick it from
the git history.
|
|
|
|
| |
Renamed types, functions, variables.
|
|
|
|
| |
Eliminated manual integer parsing.
|
|
|
|
|
|
|
| |
The MPD core guarantees that the audio_output object is always
consistent, and our pa_simple!=NULL checks are superfluous. Also
don't manually close the device on error in pulse_play(), since the
MPD core does this automatically when the play() method returns 0.
|
|
|
|
| |
Eliminate one label and a bunch of gotos.
|
|
|
|
| |
Use C instead of CPP.
|
|
|
|
|
| |
Return type of oss_find_supported_param(), oss_can_convert() and
oss_find_unsupported_param() should be bool instead of int.
|
|
|
|
|
| |
Convert the num_supported and num_unsupported variables from signed to
unsigned.
|
|
|
|
| |
Renamed types, functions and variables.
|
|
|
|
| |
When the sample format is unknown, fall back to 16 bit samples.
|
|
|
|
|
|
| |
Simplify error handling a bit by moving some code into a separate
function. This eliminates a good bunch of gotos, but that's not
finished yet.
|
|
|
|
|
| |
When the MVP device has been closed in the cancel() method, and the
play() method attempts to reopen it, check for errors.
|
|
|
|
| |
Moved the table lookup code to a separate function.
|
|
|
|
| |
The array must never be modified, it's a constant lookup table.
|
|
|
|
|
|
| |
Looks like the MVP audio output only supports 16 and 24 bit audio
samples. If MPD generates any other sample formats, force it to use
16 bit.
|
|
|
|
| |
When the channel count is greater than 2, fall back to stereo sound.
|
|
|
|
|
| |
Return true/false instead of 0/-1. Also check its return value in
mvp_output_open().
|
|
|
|
|
| |
Pass a pointer to the audio_format struct instead of 3 separate
integers.
|
|
|
|
|
| |
Don't pass the big_endian flag to mvp_set_pcm_params(), do a simple
"G_BYTE_ORDER==G_LITTLE_ENDIAN" instead.
|
|
|
|
|
| |
Instead of manually calculating the number of elements in the
mvp_sample_rates array, use GLib's convenience macro G_N_ELEMENTS().
|
|
|
|
| |
Renamed types, functions and variables.
|
|
|
|
| |
Return true/false for success/failure instead of returning 0/-1.
|
|
|
|
| |
Renamed types, functions and variables.
|
|
|
|
|
| |
The MPD core guarantees that the audio_output object is always
consistent, and our timer!=NULL checks are superfluous.
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
|
|
|
| |
The MPD core guarantees that the audio_output object is always in a
consistent state: either open or closed. When open, it will not call
the open() method again, and when closed, it will not call play().
Removed several checks and the NULL initialization.
|
|
|
|
|
| |
The method is empty, and we can simply set the method pointer to NULL
instead.
|
|
|
|
|
|
| |
audio_output_get_name() has been removed, which was the only function
left in output_api.h. The output plugin doesn't need the audio_output
object at all, remove the parameter from the init() method.
|
|
|
|
| |
Use config_get_block_string("name") instead of audio_output_get_name().
|