| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Cuesheets are often saved as vorbis comment
flac files (CUESHEET=.. case doesn't matter).
We can parse this now and use the information to
tag the subtracks (from the embedded cuesheets).
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Previous cast to float didn't have any effect because one value is uint
and the other is a floating type but the number itself is even..
This caused some tracks to end before they were really at an end.
|
|
|
|
| |
The "mpcdec" plugin is based on the libmpcdec library.
|
| |
|
|
|
|
| |
Renamed variables and functions.
|
|
|
|
|
|
|
|
|
|
|
|
| |
On 2009/03/17 Max Kellermann<max@duempel.org> wrote:
> There doesn't seem to be an "official" standard. I'd say: search for
> TITLE[1] first (the most explicit form), then TITLE1, and finally fall
> back to TITLE. This makes sure MPD supports every possible standard,
> without breaking.
I've also added some additional checks to make sure entry is long
enough.
|
|
|
|
|
|
|
|
| |
The cue sheet embedded in a flac file doen't contain any information
about track titles and similar. There are three possibilities: Use an
external cue sheet that includes these information, use a tag CUESHEET
with a cue sheet including these information or use tags. I think the
latter is the best option and is already used by other projects.
|
|
|
|
| |
On failure, the function should return NULL, not a boolean.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
So far only seekpoints are supported, so no proper tagging yet
except for track number and track length.
Tagging should be done by parsing the cue sheet which
is often embedded as vorbis comment in flac files.
Furthermore the pathname should be configurable like "%A - %t - %T",
where %A means Artist, %t track number and %T Title or so.
|
|
|
|
|
| |
[mk: fixed whitespace errors; use delete_song() instead of
songvec_delete()]
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
implemetation
function was implemented in the version we are comparing to so there must be higher or equal
|
| |
|
| |
|
|
|
|
|
| |
Parse the vorbis comments in libflac's metadata_callback and pass them
as tag struct to the decoder API.
|
|
|
|
|
| |
Don't hard code the "bits" parameter to 16. Try to use the input's
sample format, if possible.
|
|
|
|
|
| |
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.
|
|
|
|
| |
Renamed numOfItems to num_items.
|
|
|
|
|
| |
"ls" is a bad name for a library which parses URIs. We'll move the
rest of the "ls" library later.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
After much research[1][2][3] this should be the majority of currently
supported file extensions and mime-types for the currently supported
ffmpeg formats. This list maybe incomplete, but it's more complete
than anything else out there that I've been able to find. This list
needs to be updated every now and again as the ffmpeg sources support
more formats.
1. Sources
2. wiki.multimedia.cx
3. filext.com
|
|
|
|
| |
Don't use libfaad's internal type names.
|
|
|
|
|
| |
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.
|
|
|
|
| |
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.
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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"
|
| |
|