Commit Graph

362 Commits

Author SHA1 Message Date
Max Kellermann
d29db0111c audiofile: removed duplicate decoder_get_command() calls
decoder_data() returns a decoder_command, no need to call
decoder_get_command() twice after decoder_command().
2009-02-28 19:28:38 +01:00
Max Kellermann
0813092c63 audiofile: refuse to play non-seekable files
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.
2009-02-28 19:24:40 +01:00
Max Kellermann
44b55bff89 audiofile: no CamelCase
Renamed several variables and a function.
2009-02-28 19:09:54 +01:00
Max Kellermann
75c2029b1c tag: no CamelCase
Renamed numOfItems to num_items.
2009-02-27 09:01:55 +01:00
Max Kellermann
6823217697 ls: moved generic URI utilities to uri.c
"ls" is a bad name for a library which parses URIs.  We'll move the
rest of the "ls" library later.
2009-02-25 16:44:06 +01:00
Avuton Olrich
39a33344f2 ffmpeg: add all known ffmpeg extensions and mime-types.
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
2009-02-23 10:48:43 -08:00
Max Kellermann
c228635489 faad: use faacDecFrameInfo instead of NeAACDecFrameInfo
Don't use libfaad's internal type names.
2009-02-19 13:29:15 +01:00
Max Kellermann
fcf65de46b mp4ff: always free the mp4ff_read_sample() buffer
When mp4ff_read_sample() returns a value bigger than zero, it
guarantees that the buffer is set.  Remove the check.
2009-02-18 19:08:52 +01:00
Max Kellermann
5900ea5299 mp4ff: don't allocate seek_table when input is not seekable
Don't waste any precious memory when the seek_table cannot be used.
2009-02-18 18:40:40 +01:00
Max Kellermann
8aa3edb6af mp4ff: include cleanup
Don't include limits.h, use GLib constants instead.
2009-02-18 18:40:33 +01:00
Max Kellermann
51c59f6228 mp4ff: use faacDecInit2() to find the AAC track
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.
2009-02-18 18:39:12 +01:00
Max Kellermann
111c73e701 mp4ff: moved code to mp4_faad_new()
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().
2009-02-18 18:38:09 +01:00
Max Kellermann
2bc0fabe73 mp4ff: call decoder_initialized() after libfaad initialization
Don't wait for the first frame to be decoded.  We already have the
sample rate and the channel count from faacDecInit2().
2009-02-18 18:18:29 +01:00
Max Kellermann
47e3eab872 mp4ff: merged mp4_load_tag() into mp4_tag_dup()
The function mp4_load_tag() is used only once, and mp4_tag_dup() is a
one-liner.  Merge them.
2009-02-18 18:18:25 +01:00
Max Kellermann
4aca1fa493 faad: variable cleanup
Make some variables more local, and eliminate superfluous ones.
2009-02-17 23:44:29 +01:00
Max Kellermann
122e0f3338 faad: added source code comments 2009-02-17 23:42:06 +01:00
Max Kellermann
76b0601f6b faad: faad_decoder_init() returns an audio_format
Instead of returning the sample rate and channel count as separate
values, fill an audio_format struct.
2009-02-17 23:35:49 +01:00
Max Kellermann
161bfc4bc0 faad: call decoder_initialized() after libfaad initialization
Don't wait for the first frame to be decoded.  We already have the
sample rate and the channel count from faacDecInit().
2009-02-17 23:26:51 +01:00
Max Kellermann
a72c7a7b18 faad: removed DECODE_COMMAND_SEEK check
The MPD core will never send a SEEK command to a decoder which has
declared to be not seekable.
2009-02-17 23:20:16 +01:00
Max Kellermann
7b84f1e6b3 faad: use the decoder_buffer library
Replace this plugin's own buffer library with the new decoder_buffer
library.
2009-02-17 22:56:42 +01:00
Max Kellermann
7cea5357e3 faad: check the result of adts_find_frame()
Instead of checking if the buffer is empty after adts_find_frame(),
check adts_find_frame()'s return value.  This is more robust.
2009-02-17 22:56:07 +01:00
Max Kellermann
77db32f8fb faad: added libfaad wrappers
Moved libfaad API quirks to the wrapper functions faad_decoder_init()
and faad_decoder_decode().
2009-02-17 22:54:26 +01:00
Max Kellermann
6a72db22d7 faad: functions return duration, no float pointer
Instead of writing the song duration into a float pointer, return it
from the function.
2009-02-17 22:54:01 +01:00
Max Kellermann
e30ba2e4cf faad: removed length==NULL check in faad_song_duration()
There are no callers which pass NULL here.
2009-02-17 22:53:28 +01:00
Max Kellermann
867ae1cf6f faad: fill buffer in adts_find_frame()
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.
2009-02-17 22:53:25 +01:00
Max Kellermann
66b4a3ab2e faad: converted length check to assertion in adts_check_frame()
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.
2009-02-17 19:28:11 +01:00
Max Kellermann
8edd407918 faad: added length check before comparing "ADIF"
It's not valid to use the buffer's data without ensuring that the
buffer contains enough data.
2009-02-17 19:27:36 +01:00
Max Kellermann
d75ce5c4a0 faad: renamed internal functions
"aac" -> "faad"
2009-02-17 19:27:01 +01:00
Max Kellermann
943b17c99a wavpack: added GLib log domain 2009-02-17 19:26:36 +01:00
Max Kellermann
d8db46edfa decoders: added and fixed GLib log domains
Fixed the log domains of the renamed decoders.  Added G_LOG_DOMAIN
macros in decoders which don't have one already.
2009-02-17 08:51:34 +01:00
Max Kellermann
c4d69f0ae1 renamed decoder plugin "mpc" to "mpcdec"
This plugin is based on "libmpcdec".
2009-02-17 08:48:20 +01:00
Max Kellermann
70523657bf renamed decoder plugin "mp4" to "mp4ff"
This plugin is based on "libmp4ff".
2009-02-17 08:45:26 +01:00
Max Kellermann
68314c33e9 faad: no CamelCase
Renamed functions and variables.
2009-02-16 19:31:11 +01:00
Max Kellermann
8d2e6bf54c faad: removed AacBuffer.fileOffset
The element fileOffset is only written, but never read.  It can be
removed safely.
2009-02-16 19:31:08 +01:00
Max Kellermann
c6205bd461 renamed decoder plugin "oggvorbis" to "vorbis"
This plugin uses libvorbis.
2009-02-16 19:31:06 +01:00
Max Kellermann
cafaf33aa8 renamed decoder plugin "aac" to "faad"
A decoder plugin should be named after the library which is used.
2009-02-16 19:30:54 +01:00
Max Kellermann
c5edb53797 renamed decoder plugin "mp3" to "mad"
A decoder plugin should be named after the library which is used.
2009-02-16 19:30:45 +01:00
Max Kellermann
ed591f19ef wildmidi: check if configurationn file exists
Don't call WildMidi_Init() if the configuration file does not exist.
Don't let libwildmidi clutter stderr with its warning message.
2009-02-15 18:41:05 +01:00
Max Kellermann
5c68f91dae wildmidi: obtain timidity.cfg location from mpd.conf 2009-02-15 18:41:03 +01:00
Max Kellermann
dec5d48f80 decoder_plugin: pass struct config_param to init() method
Preparing for per-plugin configuration sections in mpd.conf.
2009-02-15 18:34:14 +01:00
Max Kellermann
a06e281421 aac: fix stream metadata
Pass the input_stream object to decoder_data().  Without it, the MPD
core does not see stream tags.
2009-02-12 18:39:19 +01:00
Max Kellermann
a2ce6e5b82 wildmidi: added seeking support
Use WildMidi_SampledSeek() for seeking in a MIDI file.
2009-02-12 18:19:13 +01:00
Max Kellermann
321eb1077a wildmidi: provide and current total song time
The _WM_Info struct provides all we need, it is obtained by
WildMidi_GetInfo().
2009-02-12 16:47:48 +01:00
Max Kellermann
1492339463 wildmidi: new decoder plugin for MIDI files 2009-02-12 16:43:18 +01:00
Max Kellermann
e56a90f3b3 fluidsynth: new decoder plugin for MIDI files
There are a few problems left in this plugin:

- fluidsynth decodes in real time, while MPD prefers to buffer as
  quickly as possible; as a workaround, this plugin uses a timer
  object to synchronize with real-time playback

- I don't know yet how fluidsynth tells me when the song has ended

- the "soundfont" configuration setting is not yet documented, and it
  will likely change soon (in favor of a per-decoder configuration
  block)
2009-02-12 08:43:26 +01:00
Max Kellermann
1136f6fb7a sidplay: new decoder plugin for playing C64 SID files 2009-02-11 20:31:17 +01:00
Max Kellermann
550b9c3f23 ffmpeg: added TTA support
The ffmpeg library supports the "True Audio Codec".  The entry in
ffmpeg_suffixes was missing.
2009-02-11 18:27:11 +01:00
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
Max Kellermann
4ca02bfcfc mikmod: convert mod_Data.audio_buffer to a static array
Don't do two allocations for the mod_Data structure.
2008-12-28 19:48:53 +01:00
Viliam Mateicka
d838a1ad24 decoder: new plugin using modplug library 2008-12-28 17:11:18 +01:00
Pauli Virtanen
65b18644e1 Add RVA2 tag support to MPD
This patch adds RVA2 (relative volume adjustment) tag
support to mpd, as a fallback if no replaygain tags are
found. The code is almost directly from madplay (GPL).

RVA2 tags are generated for example by the "normalize" utility.

Updated by: Avuton Olrich <avuton@gmail.com>
2008-12-28 13:02:34 +01:00
Max Kellermann
cc3b6c2f5b audiofile: don't close onput stream in libaudiofile destroy()
The input_stream object should only be closed by the MPD core
(i.e. decoder_thread.c / decoder_run()).  A decoder plugin which
attempts to close it will result in a segmentation fault.
2008-12-27 14:34:51 +01:00
Max Kellermann
9220e0edff Merge branch 'experimental' of git://git.musicpd.org/metyl/mpd
Conflicts:

	configure.ac
	src/ls.h
	src/output/shout_plugin.c
2008-12-27 13:34:51 +01:00
Max Kellermann
7f98ba24c7 ffmpeg: case AV_NOPTS_VALUE to int64_t
The old code casted it to a 32 bit integer, which cut off bits.
AVFormatContext.duration is a int64_t, so use this type.
2008-12-24 11:56:53 +01:00
Max Kellermann
82ef85a309 ffmpeg: don't assign "0" to pointer
Use NULL instead.  Found by sparse.
2008-12-24 11:49:37 +01:00
Max Kellermann
fc723803a4 mp3: "tag" argument is unused when libid3tag is disabled
Add G_GNUC_UNUSED attributes.
2008-12-24 11:07:58 +01:00
Viliam Mateicka
88ab54d3d4 ffmpeg: fixing ffmpeg_send_packet to allow multipackets 2008-12-15 19:37:10 +01:00
Viliam Mateicka
8a412aaa27 ffmpeg: adding APE support 2008-12-15 19:34:58 +01:00
Max Kellermann
87f6f57bf6 mp3: declare variables as "enum mp3_action"
Variables which hold one of the DECODE_* values should be declared as
"enum mp3_action" instead of "int".
2008-12-08 16:49:19 +01:00
Viliam Mateicka
e61ba50ebd decoder: audiofile plugin using input stream instead of file 2008-12-03 20:26:08 +01:00
Max Kellermann
910c000954 mp3: use GLib logging
Use GLib's g_warning(), ... instead of MPD's deprecated log.h.
2008-11-27 19:19:05 +01:00
Max Kellermann
14e121af90 flac, mpc, ogg, wavpack: include unistd.h for SEEK_SET
SEEK_SET is defined by unistd.h.  Explicitly include it.
2008-11-24 10:33:08 +01:00
Laszlo Ashin
a493aafe02 wavpack: use assert_static() 2008-11-22 14:28:11 +01:00
Max Kellermann
976d5045c6 decoder: check audio_format_valid() in all decoders
Refuse to play audio formats which are not supported by MPD.
2008-11-21 20:27:30 +01:00
Max Kellermann
63c3ebee46 flac, oggflac: use GLib instead of utils.h/log.h 2008-11-21 20:15:50 +01:00
Max Kellermann
f15fc4e99a ffmpeg: use GLib instead of log.h 2008-11-21 20:13:41 +01:00
Max Kellermann
4a3a621caf audiofile: use GLib instead of log.h 2008-11-21 20:13:36 +01:00
Max Kellermann
7a2fe930b8 aac: use GLib instead of utils.h/log.h
Removed the superfluous my_usleep() call.
2008-11-21 20:13:26 +01:00
Max Kellermann
927bf45f84 ogg: moved the "errorStr" variable into the error handler 2008-11-20 20:11:00 +01:00
Laszlo Ashin
65a8822a0b aac: get rid of gcc warnings 2008-11-20 19:20:25 +01:00
Max Kellermann
1f50146e29 ogg: check the ov_read() return value before the vorbis_info evaluation
The ov_info() return value may be corrupt when ov_read() did not
return a positive value.  First check for success, then check
ov_info().
2008-11-20 12:45:17 +01:00
Laszlo Ashin
05f4629fa3 wavpack: redo using audio_format_frame_size()
Somehow we lost 600e1322 after renaming some variables in ed6f6046.
2008-11-19 00:02:06 +01:00
Viliam Mateicka
33b5015469 ffmpeg: read tags from AVFormatContext
The ffmpeg library provides some of the song metadata in the
AVFormatContext struct.  Pass it from there to MPD.
2008-11-18 20:03:00 +01:00
Viliam Mateicka
eac4ed2241 audiofile: fixed misplaced if
[mk: by definition, tag_new() cannot fail - removed check]
2008-11-18 19:54:42 +01:00
Max Kellermann
7591403566 input_stream: size==-1 means unknown size
Define the special value "-1" as "unknown size".  Previously, there
was no indicator for streams with unknown size, which might confuse
some decoders.
2008-11-16 20:42:08 +01:00
Max Kellermann
8882f06200 ffmpeg: fixed AVSEEK_SIZE
With whence==AVSEEK_SIZE, the seek function should return the file
size, not the current offset.  Check the return value of
input_stream_seek().
2008-11-16 20:25:31 +01:00
Max Kellermann
9c4e97a61b aac: detect whether to pass "uint32_t*" to NeAACDecInit2()
neaacdec.h declares all arguments as "unsigned long", but internally
expects uint32_t pointers.  This triggers gcc warnings on 64 bit
architectures.  To avoid that, make configure.ac detect whether we're
using Debian's corrected headers or the original libfaad headers.  In
any case, pass a pointer to an uint32_t, conditionally casted to
"unsigned long*".
2008-11-16 20:04:49 +01:00
Laszlo Ashin
c368a2f91c aac: fix compiler warnings on amd64 2008-11-15 11:54:22 +01:00
Laszlo Ashin
00da7db1e3 aac: don't try to free static buffer
In 432da18e a dynamic buffer was replaced by a static one but some
frees were accidently left there which caused some segfaults.
2008-11-15 11:50:25 +01:00
László Áshin
440b1ea3ea wavpack: be more robust if the underlying stream is not seekable
The wavpack open function gives us an option called OPEN_STREAMING. This
provides more robust and error tolerant playback, but it automatically
disables seeking. (More exactly the wavpack lib will not return the
length information.) So, if the stream is already not seekable we can
use this option safely.
2008-11-14 15:23:18 +01:00
László Áshin
c495c6f5af wavpack: tolerate less decoded data than requested
Wavpack plugin doesn't stop decoding if a block couldn't be fully
decoded, rather it tries to go on.
2008-11-14 15:23:13 +01:00
László Áshin
ed6f60460d wavpack: renamed variables and modified coding style slightly 2008-11-14 15:21:44 +01:00
Max Kellermann
7b7340f703 mp3: fix SEEK command check after mp3_synth_and_send()
mp3 seeking was broken, because the command==SEEK check was never
reached.  Swap the command check order (==SEEK before !=NONE) to fix
that.
2008-11-13 14:43:19 +01:00
Max Kellermann
93f488f034 wavpack: remove commented debug messages 2008-11-12 21:25:08 +01:00
Max Kellermann
600e132280 wavpack: calculate outsamplesize with audio_format_frame_size() 2008-11-12 21:25:02 +01:00
Max Kellermann
ef80464c0c ogg: revert "use ogg_fopen() instead of ogg_open()"
Unfortunately, ov_fopen() is not supported by libvorbis versions older
than 1.2.
2008-11-12 08:38:04 +01:00
Max Kellermann
b67a8e4d6e aac: shift the input buffer before the full check
When the buffer was full, but everything was already consumed,
fillAacBuffer() would not attempt to flush and refill it.
2008-11-12 08:32:21 +01:00
Max Kellermann
432da18e44 aac: make the input buffer static
Allocate the input buffer within the AacBuffer struct.
2008-11-12 08:29:40 +01:00
Max Kellermann
487e05c67d aac: reject SEEK commands
The aac plugin does not support seeking.  Reject SEEK requests by
calling decoder_seek_error().  Quit the plugin's main loop only when
STOP is received.
2008-11-12 08:25:09 +01:00
Max Kellermann
a9723e661a aac: get decoder command from decoder_data()
Removed a superfluous decoder_get_command() call.
2008-11-12 08:25:06 +01:00
Max Kellermann
35a4ca2421 aac: convert audio_format to temporary variable
The audio_format variable is only used and initialized for
decoder_initialized().  Move it into that block to save some bytes on
the stack.
2008-11-12 08:21:00 +01:00
Max Kellermann
39fa60769c aac: removed method file_decode()
aac_stream_decode() was basically copy+pasted from aac_decode().
Since stream_decode() can also decode files, eliminate aac_decode().
2008-11-12 08:17:50 +01:00
Max Kellermann
e19b53f814 aac: check the buffer length in the ADIF parser
Check whether enough data has been read yet.
2008-11-12 08:16:54 +01:00
Max Kellermann
b30ec73099 aac: use unsigned integers and size_t where appropriate 2008-11-12 08:16:38 +01:00
Max Kellermann
9806355d4c aac: check if the stream is seekable before length check
If the stream is not seekable, don't try to decode all frames to find
out the total song time.
2008-11-12 07:46:01 +01:00
Max Kellermann
f6765c4d8b aac: removed attribute "atEof"
Use input_stream_eof() instead.
2008-11-12 07:41:54 +01:00
Max Kellermann
eff21067f0 mpc: assume the result fo of mpc_decoder_decode() is unsigned
According to the documentation, mpc_decoder_decode() returns an
mpc_uint32_t.  Since the special return value (mpc_uint32_t)-1
translates to a very large long integer, this may cause segmentation
faults if not interpreted properly.
2008-11-12 07:14:18 +01:00
Max Kellermann
0a6f4048d0 mpc: don't assume the stream is stereo
Don't hard-code the factor "2".
2008-11-12 07:07:40 +01:00
Max Kellermann
8d1ffb1684 mpc: get decoder command from decoder_data()
Removed 3 superfluous decoder_get_command() invocations.
2008-11-12 07:07:12 +01:00
Max Kellermann
731e99c26e mpc: moved code to mpc_to_mpd_buffer()
mpc_to_mpd_buffer() converts a whole chunk at a time.  This eliminates
3 local variables in mpc_decode().
2008-11-12 07:06:47 +01:00
Max Kellermann
975d5cd77e mpc: make the buffer large enough for one mpc frame
Don't split the buffer conversion loop.  When libmpcdec returns a
chunk, convert and send the whole chunk at a time.  This moves several
checks out of the loop, and greatly improves performance.
2008-11-12 07:03:44 +01:00