| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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]
|
|
|
|
|
| |
When the init() method of a mixer plugin fails, mixer_new()
dereferences the NULL pointer.
|
|
|
|
|
| |
The GLIB_CHECK_VERSION() macro was used improperly, which broke build
on GLib < 2.14. Add a "!" for negation.
|
|
|
|
|
| |
On some systems, the macro IN6_IS_ADDR_V4MAPPED() is not available.
Don't try to convert IPv6 to their IPV4 equivalents in this case.
|
|
|
|
|
|
|
|
| |
Turn the music_pipe into a simple music_chunk queue. The music_chunk
allocation code is moved to music_buffer, and is now managed with a
linked list instead of a ring buffer. Two separate music_pipe objects
are used by the decoder for the "current" and the "next" song, which
greatly simplifies the cross-fading code.
|
|
|
|
|
|
|
| |
Added music_pipe_allocate(), music_pipe_push() and
music_pipe_cancel(). Those functions allow the caller (decoder thread
in this case) to do its own chunk management. The functions
music_pipe_flush() and music_pipe_tag() can now be removed.
|
|
|
|
|
|
| |
The queue update after a seek was wrong: the queued song is cleared by
a successful seek. This caused queue/cross-fading problems after a
seek.
|
|
|
|
|
|
| |
After the decoder command was obtained, don't wait until libflac
detects EOF (as a side effect), quit the decoder immediately. This
check was missing completely.
|
|
|
|
|
|
| |
When the MPD core sends the decoder a command while
flac_process_single() is executed, this function fails. Abort the
decoder only if not seeking. This fixes a seeking bug.
|
|
|
|
|
| |
Moved some code from music_pipe_write() and music_pipe_expand(). Only
music_chunk.c should access the music_chunk internals.
|
| |
|
|
|
|
|
|
| |
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
|
|
|
|
|
| |
Since there are no other callers than stdout, this wouldn't be a
problem, but since there maybe in the future go ahead and fix it.
|
|
|
|
|
|
| |
implemetation
function was implemented in the version we are comparing to so there must be higher or equal
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
[mk: merged memory leak patch; fixed indentation (tabs); fixed
documentation typo]
|
|
|
|
|
|
|
| |
The lastfm input plugin enables MPD to play lastfm:// URLs. This
plugin is not complete yet: it plays only the first song in the
last.fm playlist, and the playlist parser isn't even implemented
properly.
|
|
|
|
|
| |
Allow input plugins to configure with an "input" block in mpd.conf.
Also allow the user to disable a plugin completely.
|
|
|
|
|
|
| |
Instead of hard-coding the plugin global initialization in
input_stream_global_init(), make it walk the plugin list and
initialize all plugins.
|
|
|
|
| |
Create a sub directory for input plugins.
|
|
|
|
| |
Start to separate private from public input_stream API.
|
| |
|
| |
|
|
|
|
| |
[mk: cast off_t to uint32_t; same fix for aiff.c]
|
| |
|
|
|
|
|
|
| |
Added a small AIFF parser library, code copied from the RIFF parser
(big-endian integers). Look for an "ID3" chunk, and let libid3tag
parse it.
|
|
|
|
|
| |
Added a small RIFF parser library. Look for an "id3" chunk, and let
libid3tag parse it.
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
All PCM sub libraries have 32 bit support now. Add support to the
glue function pcm_convert().
|
|
|
|
|
| |
Support converting 32 bit samples to any other supported sample
format.
|
|
|
|
| |
Added code to convert all other sample formats to 32 bit.
|
|
|
|
|
| |
For 32 bit dithering, reuse the 24 bit dithering code, but apply a 8
bit right shift first.
|
|
|
|
|
|
| |
There is nothing 24 bit specific in the pcm_dither_24 struct. Since
we want to reuse the struct for 32 bit dithering, let's drop the "_24"
suffix from the struct name.
|
|
|
|
|
| |
Resampling 32 bit samples is the same as resampling 24 bit samples -
both are stored in the int32_t type.
|
|
|
|
|
|
| |
Some 24 bit code can be reused. The 32 bit variant has to use 64 bit
integers, because 32 bit integers could overflow. This may be a
performance hit on 32 bit CPUs.
|
|
|
|
|
|
| |
This is the first patch in a series to enable 32 bit audio samples in
MPD. 32 bit samples are more tricky than 24 bit samples, because the
integer may overflow when you operate on a sample.
|
|
|
|
|
|
|
| |
audio_valid_sample_format() verifies the number of channels. Let's
just say up to 8 channels is allowed (which is possible with some
consumer sound chips). I don't know if there are bigger cards, and
since I cannot test it, I'll limit it to 8 for now.
|
|
|
|
| |
Do error reporting with GLib's GError library in this library, too.
|
|
|
|
| |
Do error reporting with GLib's GError library.
|
|
|
|
| |
Renamed a bunch of variables.
|
|
|
|
| |
Don't abort MPD when a sample format is not supported by pcm_volume().
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Parse the vorbis comments in libflac's metadata_callback and pass them
as tag struct to the decoder API.
|
|
|
|
|
| |
When the unix domain socket path is too long, don't abort with
g_error().
|
| |
|
|
|
|
| |
Use config_get_block_string() and manual GError handling instead.
|