| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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.
|
|
|
|
| |
Do error handling with GError instead of aborting with g_error().
|
| |
|
|
|
|
|
| |
Don't hard code the "bits" parameter to 16. Try to use the input's
sample format, if possible.
|
|
|
|
|
| |
The MPD core logs the audio format of all audio outputs. Remove the
duplicate message from the plugins.
|
|
|
|
|
| |
To aid debugging, print the audio format of the output plugin in a
debug message, and print information about PCM conversion.
|
|
|
|
|
| |
To aid debugging, print the audio format of the decoder plugin in a
debug message, and print information about PCM conversion.
|
|
|
|
|
| |
During the listen_add_host() API transition, the windows code wasn't
tested, and several removed arguments are still in use there.
|
|
|
|
| |
Windows doesn't have the standard headers sys/socket.h and netdb.h.
|
| |
|
| |
|
| |
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
|
| |
Use GLIB_CHECK_VERSION() instead of manually checking
GLIB_MAJOR_VERSION, ...
|
|
|
|
|
|
| |
On some hardware, reading the mixer value from hardware is an
expensive operation, and MPD has to do it for every client. Throttle
access to the hardware, cache the result for one second.
|
|
|
|
|
|
|
| |
time() is not a monotonic timer, and MPD might get confused by clock
skews. clock_gettime() provides a monotonic clock, but is not
portable to non-POSIX systems (i.e. Windows). This patch uses GLib's
GTimer API, which aims to be portable.
|
|
|
|
|
| |
The option "enabled" is on by default. If you specify "enabled no" in
an audio_output section, then this device is disabled by default.
|
|
|
|
|
| |
decoder_data() returns a decoder_command, no need to call
decoder_get_command() twice after decoder_command().
|
|
|
|
|
|
|
|
|
| |
If an input_stream is not seekable, libaudiofile fails to play at all:
Audio File Library: unrecognized audio file format [error 0]
Since we know in advance whether the input_stream is seekable, just
refuse to play on a non-seekable stream.
|
|
|
|
| |
Renamed several variables and a function.
|
| |
|
|
|
|
| |
[mk: adapted to new output plugin API]
|
|
|
|
|
| |
Print the list of suffixes supported by each decoder, instead of
prining a list of all suffixes of all decoders with duplicates.
|
|
|
|
|
|
| |
The generic sockaddr struct is too small for some addresses. For
accept(), we have to allocate a sockaddr_storage struct on the stack,
which is large enough for all addresses.
|
|
|
|
|
| |
Removed the sockaddr_to_tmp_string() hack, use
the new function sockaddr_to_string() instead.
|
|
|
|
|
| |
Unpack IPv4 addresses which are packed inside an IPv6 address,
i.e. return "127.0.0.1" rather than "::ffff:127.0.0.1".
|
|
|
|
|
|
| |
Create the socket_util.c library, the first function is
sockaddr_to_string(): it converts a sockaddr struct to a string
containing the IP address in a human-readable form.
|
|
|
|
|
|
|
|
|
| |
When checking whether database entries have been deleted, don't check
if an archive file is a directory (G_FILE_TEST_IS_DIR), use
G_FILE_TEST_IS_REGULAR for this case instead. To determine if a
"struct directory" is an archive, check for device==DEVICE_INARCHIVE.
This is always false after loading the database, so this patch is not
complete yet.
|
|
|
|
|
| |
When the mtime of an archive time hasn't changed, don't update it
again.
|
|
|
|
|
|
| |
Remember the modification time of each directory. This is important
for archives (which are virtual directories right now), but may also
be useful for an automatic update mechanism.
|