Max Kellermann
43eefe9c41
decoder_api: pass const pointer to decoder_data()
2009-01-17 13:23:12 +01:00
Max Kellermann
356526457c
pcm_convert: return PCM buffer from pcm_convert()
...
Removed yet another superfluous buffer layer: return the PCM buffer
from pcm_convert() instead of copying PCM data into the
caller-supplied buffer.
2009-01-17 13:11:16 +01:00
Max Kellermann
610e79500e
decoder_api: use music_pipe_write() instead of music_pipe_append()
...
Copy PCM data to the music_pipe_write() buffer, and apply replay gain
/ normalization to it, instead of manipulating the source buffer.
2009-01-17 13:11:10 +01:00
Max Kellermann
da6f8c270a
decoder_api: added assertion on partial frames
...
Decoder plugins must not send partial frames.
2009-01-16 18:53:32 +01:00
Max Kellermann
8fe867c71d
decoder_api: added G_GNUC_UNUSED attribute to decoder_initialized()
...
In NDEBUG, the parameter "decoder" is not used.
2009-01-15 08:33:32 +01:00
Max Kellermann
d82061b7ff
decoder_api: don't ignore DECODE_COMMAND_STOP
...
When the decoder thread is waiting for free chunks in the music pipe,
don't ignore the STOP command. Just return dc.command without further
checks.
2009-01-13 18:15:25 +01:00
Max Kellermann
7f34e9410e
pcm: added pcm_convert_deinit(), pcm_resample_deinit()
...
Free memory allocated by libsamplerate when the output or the decoder
is closed.
2009-01-07 22:20:30 +01:00
Max Kellermann
fed719197c
song: allocate the result of song_get_url()
2009-01-04 19:09:34 +01:00
Max Kellermann
700bd44fda
input_stream: added tag() method
...
The tag() method reads a tag from the stream. This replaces the
meta_name and meta_title attributes.
2009-01-03 23:29:45 +01:00
Max Kellermann
149f4e10cf
decoder_api: moved code to do_send_tag(), free temporary tag
...
This patch fixes a minor memory leak: when decoder_tag() attempted to
send a merged tag object (created by tag_add_stream_tags()), and was
interrupted by a decoder command, it did not free the temporary merged
tag object.
2009-01-03 23:28:51 +01:00
Max Kellermann
2d6f469091
decoder_api: use GLib instead of utils.h
2009-01-03 14:51:28 +01:00
Max Kellermann
0d9d82a932
pcm_utils: check pcm_convert()==0
...
It is illegal to pass an empty audio buffer around. pcm_resample()
sometimes seems to result in 0 samples, maybe related to
libsamplerate. To work around that problem, add special checks after
both pcm_convert() invocations. Removed the pcm_resample()==0 checks
from pcm_convert().
2008-12-24 03:08:39 +01:00
Thomas Jansen
7c7b0431fe
decoder_api.c: replaced mpd_unused by G_GNUC_UNUSED
2008-11-24 14:32:53 +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
774417f12f
decoder: ignore decoder_data() calls with length==0
...
Pushing buffers with a zero length into the MPD core causes failures;
don't let them pass beyond the decoder plugi API.
2008-11-21 20:26:57 +01:00
Max Kellermann
362ca300d6
decoder: pass the correct buffer length to pcm_convert()
...
When a global audio format is configured (setting
"audio_output_format"), decoder_data() overwrote the "length"
parameter with the size of the output buffer (result of
pcm_convert_size()). Declare a separate variable for the output
buffer length.
2008-11-18 22:45:51 +01:00
Max Kellermann
acfba02310
decoder: check length==0 in decoder_read()
...
When the caller passes length==0, decoder_read() entered an endless
loop. Check that condition before entering the "while" loop.
2008-11-15 19:27:30 +01:00
Max Kellermann
2dacd16b5b
decoder: additional dc.command checks in decoder_data()
...
When a command is sent while the decoder waits for a free chunk in the
music pipe, it was not returned by decoder_data().
2008-11-13 14:43:19 +01:00
Max Kellermann
2860b1b60f
decoder: wait for the player only if the music pipe is full
...
Prevent superfluous wakeups and a deadlock condition.
2008-11-13 02:54:56 +01:00
Max Kellermann
1a3945b563
decoder: check dc.command at the beginning of decoder_data()
...
Seeking was somewhat broken in some decoder plugins because they sent
empty chunks, and never got a command. Check the decoder command
before doing anything else in decoder_data().
2008-11-13 02:42:40 +01:00
Max Kellermann
998d9a8225
decoder: ignore SEEK commands during initialization
...
When the decoder receives a SEEK during initialization, it should
ignore that for now. The old code made most decoders abort.
2008-11-13 02:06:55 +01:00
Max Kellermann
114b3c1e78
replay_gain: no CamelCase
...
Renamed functions and variables.
2008-11-11 15:55:34 +01:00
Max Kellermann
130659e856
decoder: fixed assertion failure for decoder==NULL in decoder_read()
...
The assertion on dc.state in decoder_read() was too strict: when a
decoder tried to call decoder_read() from tag_dup(), the decoder state
was NONE. Allow this special case.
2008-11-11 15:55:28 +01:00
Max Kellermann
84b540f435
decoder: added more assertions
...
Added a lot of assertions checking the state of the decoder plugin.
2008-11-10 15:02:26 +01:00
Max Kellermann
863badd91e
decoder: no CamelCase
...
Renamed variables and functions.
2008-11-03 21:43:02 +01:00
Max Kellermann
b3dfcfef52
decoder_api: send song tag in decoder_data()
...
Before passing the first chunk to the audio output device, send the
current song's tag.
2008-11-03 20:20:09 +01:00
Max Kellermann
ac96022c1d
decoder_api: automatically send stream tag
...
If an input stream provides tags (e.g. from an icecast server), send
them in the decoder_data() and decoder_tag() methods. Removed the
according code from the mp3 and oggvorbis plugins - decoders shouldn't
have to care about stream tags.
This patch also adds the missing decoder_tag() invocation to the mp3
plugin.
2008-11-03 18:24:01 +01:00
Max Kellermann
b9d456a041
decoder_api: no CamelCase
...
Renamed variables.
2008-11-03 17:56:41 +01:00
Max Kellermann
020c04e702
decoder_api: added decoder_tag()
...
Provide an API for submitting additional tags from the stream.
2008-11-02 17:02:28 +01:00
Max Kellermann
c9e15bc418
decoder_api: pass "seekable" flag to decoder_initialized()
...
Don't pass the "seekable" flag with every decoder_data() invocation.
Since that flag won't change within the file, it is enough to pass it
to decoder_initialized() once per file.
2008-11-02 17:01:51 +01:00
Max Kellermann
8b1f6ff3c8
decoder: replaced music_pipe.audioFormat with dc.out_audio_format
...
.. and rename dc.audioFormat to dc.in_audio_format. The music pipe
does not need to know the audio format, and its former "audioFormat"
property indicated the format of the most recently added chunk, which
might be confusing when you are reading the oldest chunks.
2008-11-02 16:55:43 +01:00
Max Kellermann
fd0f195bb7
music_pipe: renamed ob_* functions to music_pipe_*
...
Rename all functions to the new prefix.
2008-11-02 14:18:34 +01:00
Max Kellermann
767b4c95bd
renamed outputBuffer.[ch] to pipe.[ch]
...
No CamelCase in the file name. The output_buffer struct is going to
be renamed to music_pipe. There are so many buffer levels in MPD, and
calling this one "output buffer" is wrong, because it's not the last
buffer before the music reaches the output devices.
2008-11-02 14:12:52 +01:00
Max Kellermann
1a4a3e1f1f
decoder: manage decoder list in a static array
...
Currently, there is no way to dynamically load decoder plugins, thus
we don't need a dynamic list to manage them.
2008-11-01 14:53:30 +01:00
Max Kellermann
62d4fa9306
decoder: use bool for return values and flags
...
Don't return 0/-1 on success/error, but true/false. Instead of int,
use bool for storing flags.
2008-10-30 08:38:54 +01:00
Max Kellermann
528b7c3f5e
decoder: automatically flush the output buffer after decoder exits
...
A decoder_flush() invocation was missing in the FLAC plugin, resulting
in casual assertion failures due to a wrong assumption about the last
chunk's audio format. It's much easier to remove that decoder_flush()
function and make the decoder thread call ob_flush().
2008-10-29 17:29:06 +01:00
Max Kellermann
74c85811af
decoder_api: make the audio_format parameter mandatory
...
There are no callers which pass audio_format==NULL, and it shouldn't
be allowed.
2008-10-29 17:29:03 +01:00
Max Kellermann
be90199c5a
decoder_api: removed decoder_clear()
...
Call ob_clear() in decoder_command_finished() instead of implementing
that call in every decoder plugin.
2008-10-29 17:28:47 +01:00
Max Kellermann
78b08f03f2
decoder_api: don't cast need_chunks() to int
...
need_chunks() returns a decoder_command enum. Store its return value
as this type.
2008-10-29 16:11:15 +01:00
Max Kellermann
dbc7e9ba2f
input_stream: no CamelCase
...
Renamed all functions and variables.
2008-10-26 20:34:47 +01:00
Max Kellermann
e6d90d4e83
pcm_utils: added pcm_convert_init()
...
Instead of manually calling memset(0) on the pcm_convert_state struct,
client code should use a library function from pcm_utils.c. This way,
we can change the semantics of the struct easily.
2008-10-21 22:53:16 +02:00
Max Kellermann
ca6e613a7f
pcm_utils: no CamelCase
...
Renamed all functions which were still in CamelCase.
2008-10-21 22:53:13 +02:00
Max Kellermann
4984639b72
input_stream: removed nmemb argument
...
The nmemb argument isn't actually useful, and one of nmemb and size
was always passed as 1. Remove it.
2008-10-17 17:53:59 +02:00
Max Kellermann
b73ecbb073
input: declare struct input_stream
...
Provide a struct type which can be forward-declared. The typedef
InputStream is deprecated now.
2008-10-17 17:53:48 +02:00
Max Kellermann
5e7b18f874
song: removed CamelCase
...
CamelCase is ugly... rename all functions.
2008-10-08 11:05:34 +02:00
Max Kellermann
b084bc28ed
use the "bool" data type instead of "int"
...
"bool" should be used in C99 programs for boolean values.
2008-10-08 11:03:39 +02:00
Max Kellermann
71351160b1
don't include os_compat.h
...
When there are standardized headers, use these instead of the bloated
os_compat.h.
2008-10-08 10:49:29 +02:00
Max Kellermann
d562ba5fbb
song: converted typedef Song to struct song
...
Again, a data type which can be forward-declared.
2008-10-08 10:49:11 +02:00
Max Kellermann
226d52b36f
switch to C99 types, part II
...
Do full C99 integer type conversion in all modules which were not
touched by Eric's merged patch.
2008-09-29 15:49:29 +02:00
Max Kellermann
be9212ba84
audio: moved cmpAudioFormat() to audio_format.h
...
Rename it to audio_format_equals() and return "true" if they are
equal.
2008-09-09 10:05:15 +02:00