| Commit message (Collapse) | Author | Files | Lines |
|
|
|
Don't update a float timestamp, this will make imprecisions add up
after a while. We already have the number of the current frame, let's
just calculate the float timestamp from that for every decoder_data()
command. For this, we need to add the attribute "first_frame", for
CUE sheet songs.
|
|
Removed the "bit_rate" attribute from the flac_data struct. Pass the
number of bytes since the last call to flac_common_write(), and let
it calculate the bit rate.
|
|
We don't want to work with floating point values if possible. Get the
integer number of frames from the FLAC__StreamMetadata_StreamInfo
object, and convert it into a float duration on demand. This patch
adds a check if the STREAMINFO packet has been received yet.
|
|
Wrapper for FLAC__stream_decoder_process_until_end_of_metadata(),
decoder_initialized().
|
|
Convenience wrapper for FLAC__stream_decoder_new() and
FLAC__stream_decoder_set_metadata_respond().
|
|
Free the pointer right after its last use, i.e. after the
FLAC__stream_decoder_init_file() call.
|
|
Remove the wrapper flac_init().
|
|
Use the type and function names of the libFLAC 1.1.3 API. Map the new
API to the old one with macros.
|
|
Don't even try to call it with an old libFLAC API.
|
|
|
|
Allow those plugins to open large files on 32 bit platforms.
|
|
The decoder loop of flac_decode_internal(), flac_container_decode()
and flac_filedecode_internal() is merged into this one function. This
unifies the code, and uses the frame number to identify the end of a
CUE sub song.
|
|
We need this for more exact end-of-subsong detection for CUE files.
|
|
If flac_container_decode() gets a seek destination which is out of
range, it ignores the SEEK command (never finishes it). This leads to
MPD lockup, because the player thread waits for completion.
|
|
After the decoder loop, "flac_dec" is always set.
|
|
The oggflac plugin has been completely broken for quite a while and
nobody has noticed - maybe we should remove it?
|
|
|
|
|
|
Make the function more generic by not passing "struct flac_data" to
it.
|
|
|
|
|
|
Simple (up-rounding) integer division is good enough. We're casting
the result back to an integer anyway.
|
|
|
|
This is a great simplification for flac_common_write(), because we can
convert and submit all of the buffer in one turn. No more partial
buffers with complicated formulas.
|
|
Clean up tag and replay_gain_info there.
|
|
That function diverts into various bit formats; it doesn't need a
typed pointer.
|
|
Don't use audio_format_sample_size() for identifying the sample
format.
|
|
libavformat gives us the song artist in the "author" field. Since we
use av_metadata_conv(), we don't need to check for "artist".
|
|
Convert the metadata with the libavformat function av_metadata_conv().
This ensures that canonical tag names are provided by libavformat, and
we can remove the "artist" vs "author" workaround.
|
|
svn r13289 of libvorbis introduced static callbacks (like OV_CALLBACKS_DEFAULT)
defined in "vorbisfile.h" header. First released version with this change is libvorbis-1.2.2.
In libversion-1.2.3 OV_EXCLUDE_STATIC_CALLBACKS define was added to avoid
warnings about unused static callbacks. Information on the OV_EXCLUDE_STATIC_CALLBACKS
can be found in http://svn.xiph.org/trunk/vorbis/CHANGES.
|
|
Don't initialize "vc" and "cs" with FLAC__metadata_object_new(); that
value is overwritten by FLAC__metadata_get_tags() and
FLAC__metadata_get_cuesheet().
|
|
|
|
The "off_t" type may change when you enable or disable large file
support on 32 bit platforms. This caused severe ABI problems within
MPD when we enabled LFS for the first time: two sources included
config.h and sys/types.h in different order, and had different off_t
sizes - leading to memory corruption because of ABI incompatibility.
This patch attempts to get rid of all public "off_t" uses: it removes
"off_t" from the input_stream ABI/API, and switches to GLib's 64 bit
"goffset" type. This may hurt 32 bit embedded platforms a tiny bit,
but that's not even measurable.
|
|
Usually, we read our "artist" tag from ffmpeg's "author" tag. In some
cases however (e.g. APE), this tag is named "artist". This patch
implements a fallback: if no "author" is found, MPD tries to use
"artist".
|
|
When the ID3 tag in an AAC file is larger than the current buffer, the
function decoder_buffer_consume() aborts. By using the new function
decoder_buffer_skip() instead, we can safely skip the ID3 tag.
|
|
|
|
When parsing the songlength database fails, the code forgot to free
the memory allocated by the raw file data.
|
|
|
|
The caller is responsible fro freeing GError objects. That
g_error_free() call was missing in two places.
|
|
The error handler dereferences GError*, but did not retrieve that
object from g_file_get_contents().
|
|
This patch made ov_time_total() unusable, and MPD did not know the
duration of songs.
|
|
|
|
[mk: added autoconf test; fixed songlen_data_size type]
|
|
|
|
Still missing:
- seeking
- tags
- streaming
- encodings other than MPG123_ENC_SIGNED_16
|
|
fopen change for win32 in tag dup of vorbis
win32 adaption for head changes
|
|
using ov_test_callback with function CALLBACKS_STREAMONLY will cause
scanning to stop after the comment field. ov_open (and ov_test)
default to CALLBACKS_DEFAULT which scans the file structure causing a
huge slowdown. The speed improvement is huge: It scanned my files
around 10x faster This procedure has been recommended by monthy (main
vorbis developer) and was said to be safe for scanning files.
|
|
The function flac_cue_track() first calls FLAC__metadata_object_new(),
then overwrites this pointer with FLAC__metadata_get_cuesheet(). This
allocate two FLAC__StreamMetadata objects, but the first pointer is
lost, and never freed.
|
|
|