aboutsummaryrefslogtreecommitdiffstats
path: root/src/output/alsa_plugin.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-02-25alsa: fall back to 16 bit audioMax Kellermann1-3/+8
When the sample format is unknown, fall back to 16 bit samples.
2009-02-25alsa: moved code from alsa_open() to alsa_setup()Max Kellermann1-32/+49
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.
2009-02-25output_plugin: don't pass audio_output object to method init()Max Kellermann1-2/+1
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.
2009-02-23output: pass the music chunk pointer as void*, not char*Max Kellermann1-1/+1
The meaning of the chunk depends on the audio format; don't suggest a specific format by declaring the pointer as "char*", pass "void*" instead.
2009-02-23output_api: play() returns a lengthMax Kellermann1-20/+11
The old API required an output plugin to not return until all data passed to the play() method is consumed. Some output plugins have to loop to fulfill that requirement, and may block during that. Simplify these, by letting them consume only part of the buffer: make play() return the length of the consumed data.
2009-02-16output_plugin: replaced method "control()" with "mixer()"Max Kellermann1-8/+9
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.
2009-01-25use g_free() instead of free()Max Kellermann1-1/+1
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.
2009-01-25mixer: removed mixer_configure(), configure mixer in mixer_new()Max Kellermann1-7/+1
Allocate the mixer object when it is configured. Merged mixer_configure() into mixer_new(). mixer_new() was quite useless anyway.
2009-01-25mixer: return a mixer struct pointerMax Kellermann1-7/+7
Don't use statically allocated mixer objects.
2009-01-25conf: allow param==NULLMax Kellermann1-5/+2
Return the default value in the conf_get_block_*() functions when param==NULL was passed. This simplifies a lot of code, because all initialization can be done in one code path, regardless whether configuration is present.
2009-01-25conf: const pointers in block get functionsMax Kellermann1-2/+2
All config_get_block_*() functions should accept constant config_param pointers.
2009-01-25alsa: added commentsMax Kellermann1-3/+21
Document alsa_data members.
2009-01-25alsa: frame_size is size_t, not intMax Kellermann1-1/+1
frame_size is a memory size and should be a size_t, not a signed integer.
2009-01-25alsa: no CamelCaseMax Kellermann1-93/+103
Renamed types, functions, variables.
2009-01-25alsa: fix option parsing and restore default period_timeDan McGee1-3/+6
Two bugs here led to a large number of interrupts being generated on the sound card when ALSA output is being used. Because we specify no default period_time, the sound card gives us 3000 interrupts/sec rather than a more sane 20 or 30. This completes the revert of dd7711 already started by 4ca24f. The larger bug was in the change to config_get_block_unsigned() and using 0 as the default value for both 'buffer_time' and 'period_time'. This means any pre-setting of these options in newAlsaData() gets wiped out. Add a new default for period_time, and ensure default values for buffer_time and period_time are used if none are provided by the user. Signed-off-by: Dan McGee <dan@archlinux.org> [mk: set defaults in newAlsaData() to fix auto-configuration; renamed "_MS" back to "_US" because ALSA expects microseconds, not milliseconds] Signed-off-by: Max Kellermann <max@duempel.org>
2009-01-18conf: added config_get_block_unsigned()Max Kellermann1-6/+2
Eliminate some more getBlockParam() invocations.
2009-01-18conf: added config_get_block_string()Max Kellermann1-2/+1
This replaces lots of getBlockParam() invocations.
2009-01-17conf: replaced getBoolBlockParam() with config_get_block_bool()Max Kellermann1-6/+5
No "force" parameter, pass a default value instead.
2009-01-17conf: no CamelCase, part IMax Kellermann1-5/+6
Renamed functions, types, variables.
2009-01-10Introducing mixer apiViliam Mateicka1-7/+8
This patch tryes to introduce pluggable mixer (struct mixer_plugin) along with some basic infrastructure (mixer_* functions). Instance of mixer (struct mixer) is used in alsa and oss output plugin
2009-01-07pcm_utils: moved conversion code to pcm_convert.cMax Kellermann1-1/+1
All what's left in pcm_utils.h is the pcm_range() utility function, which is only used internally by pcm_volume and pcm_mix.
2009-01-04renaming mixer.h to mixer_api.hViliam Mateicka1-1/+1
2009-01-02alsa: use GLib instead of utils.hMax Kellermann1-3/+2
2009-01-01output plugins: don't include gcc.hMax Kellermann1-2/+2
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
2008-12-31Moving mixers to audio outputsViliam Mateicka1-1/+21
2008-12-29alsa: use GLib loggingMax Kellermann1-29/+30
2008-12-01alsa: reverted the default buffer_time to 500 msMax Kellermann1-1/+5
Commit dd7711d8 removed MPD's default ALSA buffer_time. The result was a buffer size which was way too small for playing streams on some sound hardware, and caused skips and distorted sound. Revert the default to 500 ms.
2008-11-03alsa: initialize "device" with NULLMax Kellermann1-2/+1
When using autodetection, AlsaData.device wasn't properly initialized with NULL. This broke autodetection randomly.
2008-11-01alsa, jack: no const pointers for allocated stringsMax Kellermann1-17/+25
Make the pointers "device" and "name" non-const, so we don't need the xfree() hack. The default value is expressed as NULL.
2008-10-29output: close device on play errorMax Kellermann1-1/+0
When an output plugin fails to play a chunk, close it. This replaces various manual close() calls in nearly all plugins.
2008-10-29output: use bool for return values and flagsMax Kellermann1-9/+10
Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
2008-10-26output: don't compile plugins which are disabledMax Kellermann1-11/+3
Don't compile the sources of disabled output plugins at all.
2008-10-26renamed src/audioOutputs/ to src/output/Max Kellermann1-0/+0
Again, no CamelCase in the directory name.
2008-10-14alsa: added #ifdefs around SND_PCM_NO_AUTO_xxxMax Kellermann1-0/+6
These macros are not available in older libasound versions (1.0.13 fails, 1.0.16 is ok). Ignore the configuration if the constants are not defined.
2008-10-14alsa: optionally disable resampling and othersMax Kellermann1-1/+15
Added mpd.conf options for disabling automatic resamling, sample format and channel conversion. This way, users may choose to override ALSA's automatic resampling, and use libsamplerate instead.
2008-10-12alsa: fall back to 16 bit outputMax Kellermann1-0/+11
If the sample format isn't supported by the device (i.e. 24 bit on low-end sound chips), fall back to 16 bit output. There is code in pcm_utils.c which converts PCM data to 16 bit.
2008-10-12alsa: moved code to alsa_configure()Max Kellermann1-13/+18
Move code which loads configuration to alsa_configure(). This removes one indent level.
2008-10-11alsa: don't override libasound's buffer_time and period_timeMax Kellermann1-20/+19
ALSA does a good job measuring its buffer_time and period_time. Don't override its defaults, unless the user demands it.
2008-10-11alsa: re-enable blocking modeMax Kellermann1-15/+2
Revert e4f5d6bd "re-enable-nonblocking, but sleep if busy". Non-blocking mode with manual sleeping doesn't help at all (by the way, the patch should have used snd_pcm_wait() instead of my_usleep()). ALSA knows much more about the hardware quirks, so we just let it do the job.
2008-10-10audio_format: added audio_format_frame_size()Max Kellermann1-1/+1
A frame contains one sample per channel, thus it is sample_size * channels. This patch includes some cleanup for various locations where the sample size for 24 bit audio was still 3 bytes (instead of 4).
2008-10-10audio_format: renamed sampleRate to sample_rateMax Kellermann1-8/+8
The last bit of CamelCase in audio_format.h. Additionally, rename a bunch of local variables.
2008-10-10audio_format: unsigned integersMax Kellermann1-4/+4
"bits" and "channels" cannot be negative.
2008-09-29use C99 struct initializersMax Kellermann1-9/+8
The old struct initializers are error prone and don't allow moving elements around. Since we are going to overhaul some of the APIs soon, it's easier to have all implementations use C99 initializers.
2008-09-29Switch to C99 types (retaining compat with old compilers)Eric Wong1-1/+1
Seeing the "mpd_" prefix _everywhere_ is mind-numbing as the mind needs to retrain itself to skip over the first 4 tokens of a type to get to its meaning. So avoid having extra characters on my terminal to make it easier to follow code at 2:30 am in the morning. Please report any new issues you may come across on Free toolchains. I realize how difficult it can be to build/maintain cross-compiling toolchains and I have no intention of forcing people to upgrade their toolchains to build mpd. Tested with gcc 2.95.4 and and gcc 4.3.1 on x86-32.
2008-09-24output: make "struct audio_output" opaque for output pluginsMax Kellermann1-18/+15
We have eliminated direct accesses to the audio_output struct from the all output plugins. Make it opaque for them, and move its real declaration to output_internal.h, similar to decoder_internal.h. Pass the opaque structure to plugin.init() only, which will return the plugin's data pointer on success, and NULL on failure. This data pointer will be passed to all other methods instead of the audio_output struct.
2008-09-24output: set audio_output->open=1 in audio_output_task()Max Kellermann1-5/+0
Since the output plugin returns a value indicating success or error, we can have the output core code assign the "open" flag.
2008-09-24output: pass audio_format to plugin.init() and plugin.open()Max Kellermann1-2/+3
Pass the globally configured audio_format as a const pointer to plugin.init(). plugin.open() gets a writable pointer which contains the audio_format requested by the plugin. Its initial value is either the configured audio_format or the input file's audio_format.
2008-09-23audio_format: added audio_format_sample_size()Max Kellermann1-1/+1
The inline function audio_format_sample_size() calculates how many bytes each sample consumes. This function already takes into account that 24 bit samples are 4 bytes long, not 3.
2008-09-23alsa: re-enable-nonblocking, but sleep if busyEric Wong1-7/+10
Instead of letting ALSA block for us (and potentially allowing something stupid on certain hardware or drivers), we do the sleeping ourselves. We calculate the sleep to be a fraction of period_time to avoid oversleeping (and thus audible skipping).
2008-09-09alsa: use blocking instead of non-blocking writeEric Wong1-1/+6
The way we used non-blocking mode was HORRIBLE. It was non-blocking to ALSA, but we end up blocking in a busy loop that does absolutely NOTHING but retry. We don't check for playback cancellation (like we do in decoders) or anything. This is seriously broken and I can imagine it affects people on fast CPUs more because we do asynchronous output buffering and our ALSA device will always have data ready.