aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/ffmpeg_plugin.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* ffmpeg: fixed seek integer overflowMax Kellermann2009-02-031-3/+4
| | | | | | | 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.
* ffmpeg: check if the time stamp is validMax Kellermann2009-02-031-4/+5
| | | | | | 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.
* ffmpeg: don't warn of empty packet outputMax Kellermann2009-02-031-3/+2
| | | | | | 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.
* ffmpeg: print codec nameMax Kellermann2009-02-031-0/+3
| | | | | | 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.
* ffmeg: added support for the tags comment, genre, yearDavid Horn2009-01-301-0/+10
| | | | | | | | | | | | 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.
* Enable wav file streaming for ffmpeg input pluginQball Cow2009-01-161-0/+1
|
* added missing explicit config.h includesMax Kellermann2009-01-081-0/+1
|
* decoder plugins: don't include gcc.hMax Kellermann2009-01-011-2/+3
| | | | Use GLib's G_GNUC_UNUSED instead of gcc.h's mpd_unused.
* ffmpeg: case AV_NOPTS_VALUE to int64_tMax Kellermann2008-12-241-2/+2
| | | | | The old code casted it to a 32 bit integer, which cut off bits. AVFormatContext.duration is a int64_t, so use this type.
* ffmpeg: don't assign "0" to pointerMax Kellermann2008-12-241-1/+1
| | | | Use NULL instead. Found by sparse.
* ffmpeg: fixing ffmpeg_send_packet to allow multipacketsViliam Mateicka2008-12-151-16/+32
|
* ffmpeg: adding APE supportViliam Mateicka2008-12-151-2/+3
|
* decoder: check audio_format_valid() in all decodersMax Kellermann2008-11-211-0/+7
| | | | Refuse to play audio formats which are not supported by MPD.
* ffmpeg: use GLib instead of log.hMax Kellermann2008-11-211-8/+11
|
* ffmpeg: read tags from AVFormatContextViliam Mateicka2008-11-181-5/+16
| | | | | The ffmpeg library provides some of the song metadata in the AVFormatContext struct. Pass it from there to MPD.
* ffmpeg: fixed AVSEEK_SIZEMax Kellermann2008-11-161-3/+9
| | | | | | With whence==AVSEEK_SIZE, the seek function should return the file size, not the current offset. Check the return value of input_stream_seek().
* decoder: return void from decode() methodsMax Kellermann2008-11-111-2/+2
| | | | | | | | The stream_decode() and file_decode() methods returned a boolean, indicating whether they were able to decode the song. This is redundant, since we already know that: if decoder_initialized() has been called (and dc.state==DECODE), the plugin succeeded. Change both methods to return void.
* decoder: removed plugin method try_decode()Max Kellermann2008-11-101-7/+0
| | | | | | Instead of having a seprate try_decode() method, let the stream_decode() and file_decode() methods decide whether they are able to decode the song.
* decoder: removed stream_typesMax Kellermann2008-11-041-1/+0
| | | | | Instead of checking the stream_types bit set, we can simply check whether the methods stream_decode() and file_decode() are implemented.
* ffmpeg: removed loop from mpd_ffmpeg_read()Max Kellermann2008-11-041-15/+2
| | | | | | The function decoder_read() already cares about the decoder command, and loops until data is available. Reduced mpd_ffmpeg_read() to no more than the decoder_read() call.
* ffmpeg: removed ffmpeg_context.codecMax Kellermann2008-11-041-2/+0
| | | | | That variable is never used except during initialization in ffmpeg_helper().
* ffmpeg: moved code to ffmpeg_find_audio_stream()Max Kellermann2008-11-041-9/+12
|
* ffmpeg: no CamelCaseMax Kellermann2008-11-041-100/+101
| | | | Renamed variables.
* ffmpeg: fix boolean inversion in ffmpeg_tag()Max Kellermann2008-11-021-1/+1
| | | | | | ffmpeg_tag() deleted the tag when ffmpeg_helper() returned success. The return value was interpreted incorrectly, it should return the tag on success.
* ffmpeg: don't rewind stream in url_close()Max Kellermann2008-11-021-4/+0
| | | | | Rewinding the stream here is not useful, but may consume valuable resources (and time).
* ffmpeg: use decoder_read() wrapper instead of direct input_stream_read()Max Kellermann2008-11-021-1/+2
| | | | | decoder_read() checks the decoder command. Without this patch, the ffmpeg plugin could become unresponsive.
* ogg, ffmpeg: try to decode, even when the stream is not seekableMax Kellermann2008-11-021-1/+1
| | | | | | | Ogg and ffmpeg detection was disabled when the stream was not seekable, because the detection was too expensive. Since the curl input stream can now rewind the stream cheaply, we can re-enable detection on streams.
* decoder_api: pass "seekable" flag to decoder_initialized()Max Kellermann2008-11-021-2/+3
| | | | | | 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.
* decoder: make the suffixes and mime_types arrays really constMax Kellermann2008-11-011-2/+2
| | | | | The strings were constant, but the pointers weren't. C syntax is somewhat tricky..
* decoder: make all decoder_plugin structs constMax Kellermann2008-11-011-1/+1
| | | | | All decoder_plugin structs are initialized at compile time, and must never change.
* decoder_api: pass constant path pointersMax Kellermann2008-10-311-1/+1
|
* ffmpeg: pass input_stream pointer to decoder_data()Max Kellermann2008-10-301-3/+5
| | | | | decoder_data() uses wait times to let the input stream continue its transfer.
* ffmpeg: use return value of decoder_data()Max Kellermann2008-10-301-18/+20
| | | | | decoder_data() always returns the current command. If we use this, we can save a lot of decoder_get_command() calls.
* ffmpeg: output buffer size cannot be negativeMax Kellermann2008-10-301-5/+7
| | | | Converted the runtime check to an assertion.
* ffmpeg: break immediately after av_read_frame()Max Kellermann2008-10-301-9/+8
| | | | Remove one indent level.
* ffmpeg: moved code to ffmpeg_send_frame()Max Kellermann2008-10-301-27/+34
| | | | | Move code from ffmpeg_decode_internal() to make it smaller and more readable.
* ffmpeg: report seek errors to MPDMax Kellermann2008-10-301-5/+4
| | | | | The decoder API provides the function decoder_seek_error() to report seek errors. Use this function instead of logging the error.
* ffmpeg: simplified mpdurl_read()Max Kellermann2008-10-301-13/+11
| | | | | The function mpdurl_read() is too complicated, and uses the wrong data types.
* ffmpeg: call tag_free() instead of free()Max Kellermann2008-10-301-1/+1
| | | | | tag objects must be freed with tag_free() to ensure that all resources are freed.
* ffmpeg: eliminated local variable "tag"Max Kellermann2008-10-301-7/+4
| | | | | The function ffmpeg_tag() already has the variable base.tag, which can be used for this.
* ffmpeg: make ffmpeg_helper() return boolMax Kellermann2008-10-301-24/+21
| | | | | ffmpeg_try_decode() did not interpret ffmpeg_helper()'s return value properly; migrate everything to bool to make it consistent.
* ffmpeg: removed debug messagesMax Kellermann2008-10-301-35/+5
| | | | We don't need those anymore, they just fill the log.
* ffmpeg: initialize base.decoderMax Kellermann2008-10-301-0/+1
| | | | | ffmpeg_tag() did not initialize base.decoder, which made valgrind unhappy, and can lead to a egmentation fault.
* decoder: use bool for return values and flagsMax Kellermann2008-10-301-6/+6
| | | | | Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
* decoder: automatically flush the output buffer after decoder exitsMax Kellermann2008-10-291-3/+0
| | | | | | | 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().
* decoder_api: removed decoder_clear()Max Kellermann2008-10-291-1/+0
| | | | | Call ob_clear() in decoder_command_finished() instead of implementing that call in every decoder plugin.
* input_stream: use "bool" instead of "int"Max Kellermann2008-10-261-1/+1
| | | | | For boolean values and success flags, use bool instead of integer (1/0 for true/false, 0/-1 for success/failure).
* input_stream: no CamelCaseMax Kellermann2008-10-261-6/+6
| | | | Renamed all functions and variables.
* input_stream: removed the InputStream typedefMax Kellermann2008-10-261-7/+10
| | | | Everybody should use struct input_stream.
* renamed src/inputPlugins/ to src/decoder/Max Kellermann2008-10-261-0/+419
These plugins are not input plugins, they are decoder plugins. No CamelCase in the directory name.