| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
Added an inline assembly function for the 64 bit multiplication.
Benchmark results on a Pentium II 266 MHz, 512 MB of 24 bit PCM data:
dd if=/dev/zero bs=64k count=8k |
time ./test/software_volume 48000:24:2 >/dev/null
Before this patch 22.94s, after this patch 7.24s.
|
|
|
|
|
| |
When mp4ff_read_sample() returns a value bigger than zero, it
guarantees that the buffer is set. Remove the check.
|
|
|
|
| |
Don't waste any precious memory when the seek_table cannot be used.
|
|
|
|
| |
Don't include limits.h, use GLib constants instead.
|
|
|
|
|
|
|
|
|
| |
Use faacDecInit2() instead of AudioSpecificConfig() to detect the AAC
track in the MP4 file. This has a great advantage: it initializes the
libfaad decoder, which the caller would normally do anyway - but now
we can go without the AudioSpecificConfig() call. When decoder==NULL
(called from mp4_tag_dup()), fall back to a mp4ff_get_track_type()==1
check, like other audio players do.
|
|
|
|
|
|
| |
Moved the libfaad decoder initialization to mp4_faad_new(), and also
fill the audio_format struct there. This eliminates a little bit of
complexity in mp4_decode().
|
|
|
|
|
| |
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit2().
|
|
|
|
|
| |
The function mp4_load_tag() is used only once, and mp4_tag_dup() is a
one-liner. Merge them.
|
|
|
|
|
|
|
| |
When a file is not seekable, MPD dropped the audio buffers before even
attempting to seek. This caused noticable sound corruption. Fix:
first attempt to seek, and only if that succeeds, call
audio_output_all_cancel().
|
|
|
|
| |
Make some variables more local, and eliminate superfluous ones.
|
| |
|
|
|
|
|
| |
Instead of returning the sample rate and channel count as separate
values, fill an audio_format struct.
|
|
|
|
|
| |
Don't wait for the first frame to be decoded. We already have the
sample rate and the channel count from faacDecInit().
|
|
|
|
|
| |
The MPD core will never send a SEEK command to a decoder which has
declared to be not seekable.
|
|
|
|
| |
Define G_LOG_DOMAIN.
|
|
|
|
|
| |
Replace this plugin's own buffer library with the new decoder_buffer
library.
|
|
|
|
|
| |
Instead of checking if the buffer is empty after adts_find_frame(),
check adts_find_frame()'s return value. This is more robust.
|
|
|
|
|
| |
Moved libfaad API quirks to the wrapper functions faad_decoder_init()
and faad_decoder_decode().
|
|
|
|
|
| |
Instead of writing the song duration into a float pointer, return it
from the function.
|
|
|
|
| |
There are no callers which pass NULL here.
|
|
|
|
|
|
| |
All callers of adts_find_frame() use faad_buffer_fill() before that.
Move that faad_buffer_fill() call into adts_find_frame() instead.
adts_find_frame() will get its own logic for on-demand filling.
|
|
|
|
|
| |
The decoder buffer library may be used by decoder libraries such as
"faad".
|
|
|
|
|
|
| |
adts_check_frame() must not be called with a buffer length smaller
than 8. We can eliminate that duplicate check, and convert it into an
assertion.
|
|
|
|
|
| |
It's not valid to use the buffer's data without ensuring that the
buffer contains enough data.
|
|
|
|
| |
"aac" -> "faad"
|
| |
|
|
|
|
| |
The function is unused, since we added the pcm_buffer library.
|
|
|
|
|
|
| |
When I implemented the pcm_buffer library, I forgot to set the new
buffer size. This caused a new allocation in each pcm_buffer_get(),
fortunately no memory was leaked.
|
|
|
|
|
| |
Fixed the log domains of the renamed decoders. Added G_LOG_DOMAIN
macros in decoders which don't have one already.
|
|
|
|
| |
This plugin is based on "libmpcdec".
|
|
|
|
| |
This plugin is based on "libmp4ff".
|
| |
|
|
|
|
| |
Renamed functions and variables.
|
|
|
|
|
| |
The element fileOffset is only written, but never read. It can be
removed safely.
|
|
|
|
| |
This plugin uses libvorbis.
|
|
|
|
| |
A decoder plugin should be named after the library which is used.
|
|
|
|
| |
A decoder plugin should be named after the library which is used.
|
|
|
|
| |
If an output plugin requires config.h, it should include it directly.
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Similar to the decoder plugin API: added wrapper functions to increase
code readability.
|
|
|
|
|
| |
Initialization and deinitialization first, then tag functions, then
play/cancel/pause.
|
|
|
|
|
| |
If we move the plugin struct to a separate header, we don't have to
include the big fat output_api.h everywhere.
|
|
|
|
|
| |
Now that the output_command enum isn't exposed to output plugins
anymore, we can hide its definition within output_internal.h.
|
|
|
|
| |
Renamed variables.
|
|
|
|
|
| |
Don't call WildMidi_Init() if the configuration file does not exist.
Don't let libwildmidi clutter stderr with its warning message.
|
| |
|
| |
|