Commit Graph

215 Commits

Author SHA1 Message Date
Max Kellermann 824d299eb1 ffmpeg: fixed seek integer overflow
The "current" variable is used for calculating the seek destination,
and was declared as "int".  With very long song files, the 32 bit
integer can overflow.  ffmpeg expects an int64_t, which is very
unlikely to overflow.  Switch to int64_t.
2009-02-03 22:51:44 +01:00
Max Kellermann f3b73b824f ffmpeg: check if the time stamp is valid
When ffmpeg cannot estimate the elapsed time, it sets
AVPacket.pts=AV_NOPTS_VALUE.  Our ffmpeg decoder plugin did not check
for that special value.
2009-02-03 22:51:41 +01:00
Max Kellermann 81b6c0d77b ffmpeg: don't warn of empty packet output
If avcodec_decode_audio2() returns no output for an AVPacket,
libavcodec may buffer some data, and return a larger chunk of output
later.  This patch disables a lot of bogus warnings.
2009-02-03 22:51:38 +01:00
Max Kellermann a7632b09e0 ffmpeg: print codec name
Output the name of the codec as a debug message.  During my tests,
ffmpeg never filled this struct member, but it may do so in the past,
and this debug message might become helpful.
2009-02-03 22:51:35 +01:00
Matthias Drochner 5b85288664 mikmod: call MikMod_Exit() only in the finish() method
Hi -
independently of libmikmod's other problems - there seems
to be a problem in mpd's wrapper: MikMod_Exit() is called
after the first file is decoded, which frees some ressources
within the mikmod library. An attempt to play a second file
leads to a crash. The appended patch fixes this for me.
(I don't know what the "dup" entry is good for - someone
who knows should review that too.)
best regards
Matthias

[mk: removed 3 more MikMod_Exit() invocations]
2009-01-30 17:51:16 +01:00
Max Kellermann 02bfb0c4e4 wavpack: pass NULL if the .wvc file fails to open
The wavpack library seems to use the .wvc stream even if the OPEN_WVC
flag is not set.  In this case, pass NULL to be sure libwavpack won't
use it.
2009-01-30 16:05:02 +01:00
David Horn efb04532df ffmeg: added support for the tags comment, genre, year
ffmpeg_tag_internal() does not look for a few tags that mpd
supports. Most noteably:

 comment -> TAG_ITEM_COMMENT -> Description
 genre -> TAG_ITEM_GENRE -> WM/Genre (not WM/GenreID)
 year -> TAG_ITEM_DATE -> WM/Year

I *think* that this is the last of the tags that AVFormatContext() in
ffmpeg supports that mpd also uses.
2009-01-30 09:42:49 +01:00
Max Kellermann a45922cd66 use g_free() instead of free()
On some platforms, g_free() must be used for memory allocated by
GLib.  This patch intends to correct a lot of occurrences, but is
probably not complete.
2009-01-25 18:47:21 +01:00
Max Kellermann 2bfe6f6412 renamed the "mod" decoder plugin to "mikmod"
We have two mod plugins now: modplug and mod.  Rename the latter to a
more useful name.
2009-01-24 20:18:44 +01:00
Max Kellermann 0dc1b4a44e modplug: removed EOF check from the while loop
EOF is checked by input_stream_read() (decoder_read() here).  Don't do
it twice.  The check was wrong anyway, it was reversed.
2009-01-24 20:02:06 +01:00
Max Kellermann 793934cf9c modplug: check for input_stream errors
When input_stream_read() returns 0, and input_stream_eof() returns
false, an I/O error has occured.  Skip this song.
2009-01-24 19:16:33 +01:00
Max Kellermann 14b37656a6 modplug: use size_t instead of int for buffer sizes 2009-01-24 19:16:31 +01:00
Max Kellermann 4a4c6fb6dc modplug: check size limit before appending new buffer
Don't enlarge the GByteArray when the size limit may overflow in this
operation; check the size limit first.
2009-01-24 19:16:20 +01:00
Max Kellermann b53e80d785 modplug: use GByteArray.len, remove total_len
The local variable "total_len" is superfluous because GByteArray
always knows its size.
2009-01-24 19:16:10 +01:00
Max Kellermann 0c71640528 modplug: unknown size is -1; check for empty file
The input_stream API sets size to -1 when the size of the resource is
not known.  The modplug decoder checked for size==0, which would be an
empty file.
2009-01-24 19:16:07 +01:00
Max Kellermann 961d172200 modplug: header cleanup
Don't include utils.h and log.h, they are relics from the past.
2009-01-24 19:16:05 +01:00
Max Kellermann 9229869f04 modplug: define G_LOG_DOMAIN
Make sure that log messages are decorated correctly.
2009-01-24 19:15:53 +01:00
Max Kellermann b381638009 modplug: declare constants as enum
Don't write CPP if you can write C.
2009-01-24 19:15:50 +01:00
Max Kellermann 24d4c2df92 modplug: use only decoder_read(), not input_stream_read()
You are allowed to call decoder_read() with decoder==NULL.  It is a
convenience function provided by the decoder API.  Don't manually fall
back to input_stream_read().
2009-01-24 19:15:48 +01:00
Andrzej Rybczak 82df4cb2b0 modplug: change settings before loading a file
alternative settings must be set before the file
is loaded, otherwise they won't be respected.
2009-01-24 13:10:02 +01:00
Max Kellermann fbed96dcea flac: include config.h
The plugin queries build-time configuration variables, and should
include config.h.
2009-01-19 09:54:47 +01:00
Max Kellermann a1a97cc048 conf: use config_get_bool() instead of getBoolConfigParam() 2009-01-17 20:23:33 +01:00
Max Kellermann 5395f5f6b3 moved fallback APE/ID3 tag loader to song.c
Some plugins used the APE or ID3 tag loader as a fallback when their
own methods of loading tags did not work.  Move this code out of all
decoder plugins, into song_file_update().
2009-01-17 13:23:42 +01:00
Max Kellermann d83eff80a5 oggvorbis: disable seeking on remote songs
When libvorbis knows that a song is seekable, it seeks around like
crazy in the file before starting to decode it.  This is very
expensive on remote HTTP resources, and delays MPD for 10 or 20
seconds.

This patch disables seeking on remote songs, because the advantages of
quickly playing a song seem to weigh more than the theoretical ability
of seeking for most MPD users.  If users feel this feature is needed,
we will make a configuration option for that.
2009-01-17 11:46:31 +01:00
Qball Cow b533307d6f Enable wav file streaming for ffmpeg input plugin 2009-01-16 17:11:16 +01:00
Rasmus Steinke 3e87e4f3ab flac: map "Album Artist" to "AlbumArtist"
This patch allows mpd to recognise the albumartist tag in the way
foobar2000 and others write it to files.
2009-01-15 22:45:29 +01:00
Max Kellermann 9cc373d62d flac: splitted flac_copy_vorbis_comment()
Splitted flac_copy_vorbis_comment() into flac_copy_comment() and
flac_copy_comment().
2009-01-15 22:45:28 +01:00
Max Kellermann 0dec3f787f flac: moved code to flac_comment_value()
Simplify flac_copy_vorbis_comment() by moving the comment
identification code out.
2009-01-15 22:44:21 +01:00
Max Kellermann f30adc3526 flac: always allocate tag object
Free the tag object when it turns out to be empty.  This simplifies
several functions and APIs.
2009-01-15 22:43:39 +01:00
Max Kellermann 15435b09af flac: use bool instead of int 2009-01-15 19:57:57 +01:00
Max Kellermann 8307dd3e87 flac: removed "vorbis_comment_found" flag
Use tag_is_empty() instead.
2009-01-15 19:53:07 +01:00
Max Kellermann 86dc79293f flac: no CamelCase
Renamed types, functions, variables.
2009-01-15 19:50:28 +01:00
Rasmus Steinke 9b0ce18144 oggvorbis: map "Album Artist" to "AlbumArtist"
This patch allows mpd to recognise the albumartist tag in the way foobar2000
and others write it to files.
2009-01-15 06:51:58 +01:00
Max Kellermann 283c2621f3 oggvorbis: use g_ascii_strncasecmp() instead of strncasecmp()
Don't depend on the daemon's locale settings.  Comment names are
ASCII.
2009-01-14 23:23:05 +01:00
Max Kellermann f353bf77ba oggvorbis: moved tag look into vorbis_parse_comment()
vorbis_parse_comment() should be a function which converts one comment
to a tag item.  It should do everything required to do the conversion,
including looping over all possible tag types.
2009-01-14 23:21:45 +01:00
Max Kellermann 69b033757f oggvorbis: moved code to vorbis_copy_comment() 2009-01-14 23:15:14 +01:00
Max Kellermann 25cf333355 oggvorbis: use vorbis_comment_value() in vorbis_parse_comment()
Eliminate some duplicate code.
2009-01-14 23:09:36 +01:00
Max Kellermann 5a26c949bb oggvorbis: always allocate a tag object
Always allocate a new tag object before parsing the vorbis comments;
free it when it turns out to be empty.  This simplifies the code a
bit.
2009-01-14 23:09:31 +01:00
Max Kellermann b5cadc9c04 oggvorbis: no CamelCase
Renamed functions and variables.
2009-01-14 23:09:02 +01:00
Max Kellermann b8e06d414a oggvorbis: use bool
Make ogg_parseCommentAddToTag() return bool instead of unsigned int.
2009-01-14 22:51:11 +01:00
Max Kellermann 5e93d3682f added missing explicit config.h includes 2009-01-08 21:37:02 +01:00
Max Kellermann d9c2960a55 fix G_BYTE_ORDER check
"#ifdef G_BYTE_ORDER == G_BIG_ENDIAN" cannot work, of course.
2009-01-05 12:40:57 +01:00
Max Kellermann ac0fe98ffb use GLib byte order macros 2009-01-05 08:17:22 +01:00
Max Kellermann fed719197c song: allocate the result of song_get_url() 2009-01-04 19:09:34 +01:00
Max Kellermann 38bf81285f utils: removed unused functions
Removed all allocation functions, xwrite(), xread(), ARRAY_SIZE().
Those have been superseded by GLib.
2009-01-03 14:53:42 +01:00
Max Kellermann 38e3220fd4 oggflac: don't use gcc.h
Use G_GNUC_UNUSED instead of mpd_unused (which has already been
removed).
2009-01-02 09:50:12 +01:00
Max Kellermann 17bdcc8bae decoder plugins: don't include gcc.h
Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
2009-01-01 18:09:24 +01:00
Max Kellermann 95b3430f52 removed os_compat.h
Only include headers which are really needed.  os_compat.h aimed to
make MPD easily portable, but was never actually made portable.
2008-12-29 17:28:32 +01:00
Frank Mulder a51fada124 mp4: support the writer/composer tag
I tried to search for a certain composer in my collection, but only
non-mp4 files showed up. The source code reveals that this tag is not
read. This can be fixed by reading the 'Writer' tag field, in
mp4_plugin.c, in function mp4_load_tag.

I actually tried this, and after compiling with those lines added,
also mp4 (.m4a) files showed up when searching for a composer.
2008-12-29 11:29:01 +01:00
Max Kellermann 4b3a055ffe mikmod: use Glib instead of utils.h/log.h 2008-12-28 19:48:53 +01:00