| Commit message (Collapse) | Author | Files | Lines |
|
Mixers with the "global" flag set aren't closed automatically when the
output device is closed. Thus, they might still be open when MPD
shuts down.
|
|
Added an assertion in mixer_set_volume(). Removed the range checks
from the ALSA and OSS plugins.
|
|
The function mixer_failed() expects the mixer mutex to be already
locked, yet it calls mixer_close(), which attempts to lock the mutex
again, deadlocking itself.
|
|
If a (global) mixer has been closed due to failure, don't reopen it
with every volume get/set. Leave it closed until it is explicitly
opened.
|
|
When getting or setting the volume fails, the MPD core close the
mixer. Moved the duplicated code from the mixer plugins.
|
|
Remember if a mixer object is open or closed. Don't call open() again
if it is already open. This guarantees that the mixer plugin is
always called in a consistent state, and we will be able to remove
lots of checks from the implementations.
To support mixers which are automatically opened even if the audio
output is still closed (to set the volume before playback starts),
this patch also adds the "global" flag to the mixer_plugin struct.
Both ALSA and OSS set this flag, while PULSE does not.
|
|
As a side effect, the previous patch added the mixer==NULL checks. It
is now illegal to call mixer functions with a NULL argument. Convert
the runtime checks to assertions.
|
|
In some rare cases, there was a race condition between the output
thread and the main thread: when you disable/enable an output device
in the main thread, this caused a crash in the output thread. Protect
the whole mixer struct with a GMutex to prevent that.
|
|
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.
|
|
When an audio output device is disabled, also disable its mixer.
|
|
No caller must ever pass an invalid device number to
mixer_control_setvol() or mixer_control_getvol().
|
|
|
|
Don't include conf.h in mixer_api.h. Use a forward struct declaration
instead.
|
|
Don't include output_api.h in output_internal.h. This change requires
adding missing includes in several sources.
|
|
The method control() is too complicated, and overengineered. Replace
it with two trivial functions: get_volume() and set_volume().
|
|
The output plugin shouldn't know any specifics of the mixer API. Make
it return the mixer object, and let the caller deal with it.
|
|
The output_command library provides a command interface to the audio
outputs. It assumes the input comes from an untrusted source
(i.e. the client) and verifies all parameters.
|
|
Added audio_format_parse() in a separate library, with a modern
interface: return a GError instead of logging errors. This allows the
caller to deal with the error.
|
|
Moved code which deals with all audio outputs at once into a separate
library.
|
|
|
|
|
|
This function isn't used anymore.
|
|
Added audio_output_get(), audio_output_find().
|
|
audio_output_config_count() returns the number of audio outputs in the
configuration file. It is only used by initAudioDriver(). The public
function audio_output_count() now returns audioOutputArraySize.
|
|
On some platforms, g_free() must be used for memory allocated by
GLib. This patch intends to correct a lot of occurrences, but is
probably not complete.
|
|
Those have been superseded by the new legacy configuration code.
|
|
All config_get_block_*() functions should accept constant config_param
pointers.
|
|
Renamed functions, types, variables.
|
|
|
|
|
|
|
|
|
|
Only include headers which are really needed. os_compat.h aimed to
make MPD easily portable, but was never actually made portable.
|
|
Replaced myFgets() with fgets() + g_strchomp().
|
|
Don't use NOTIFY_INITIALIZER to initialize audio_output_client_notify.
|
|
|
|
Nobody should call playAudio() with an empty chunk. Add some
assertions on that.
|
|
Since open() and play() close the device on error, we can simply check
audio_output.open instead of audio_output.result after a call.
|
|
When one of several output devices failed, MPD tried to reopen it
quite often, wasting a lot of resources. This patch adds a delay:
wait 10 seconds before retrying. This might be changed to exponential
delays later, but for now, it makes the problem go away.
|
|
Moved code from syncAudioDeviceStates() to audio_output_update().
|
|
Stopping an audio output device without cancelling its buffer doesn't
make sense. Combine the two operations, which saves several cancel
calls.
|
|
|
|
Don't return 0/-1 on success/error, but true/false. Instead of int,
use bool for storing flags.
|
|
Instead of implementing another loop which calls audio_output_close()
on all configured devices, simply call closeAudioDevice().
|
|
This variable is never read, and can be removed.
|
|
Remove duplicated code from MPD.
|
|
I added 24 bit support a while ago, but it wasn't possible to force 24
bit output. Add 24 and 8 bit to the list of allowed sample sizes.
Although 8 bit audio isn't as widely used as 24 bit, there is no
reason to exclude it.
|
|
Splitting a frame between two buffer chunks causes distortion in the
output. MPD used to assume that the chunk size 1020 would never cause
splitted frames, but that isn't the case for 24 bit stereo (127.5
frames), and even less for files with even more channels.
|