Merge branch 'v0.16.x'
Conflicts: src/decoder/ffmpeg_decoder_plugin.c
This commit is contained in:
commit
e228caaca6
5
NEWS
5
NEWS
@ -21,6 +21,11 @@ ver 0.17 (2011/??/??)
|
|||||||
|
|
||||||
ver 0.16.3 (2011/??/??)
|
ver 0.16.3 (2011/??/??)
|
||||||
* fix assertion failure in audio format mask parser
|
* fix assertion failure in audio format mask parser
|
||||||
|
* fix NULL pointer dereference in playlist parser
|
||||||
|
* fix playlist files in base music directory
|
||||||
|
* database: allow directories with just playlists
|
||||||
|
* decoder:
|
||||||
|
- ffmpeg: support libavcodec 0.7
|
||||||
|
|
||||||
|
|
||||||
ver 0.16.2 (2011/03/18)
|
ver 0.16.2 (2011/03/18)
|
||||||
|
@ -71,6 +71,11 @@ mpd_ffmpeg_log_callback(G_GNUC_UNUSED void *ptr, int level,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef AV_VERSION_INT
|
||||||
|
#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c)
|
||||||
|
#endif
|
||||||
|
|
||||||
struct mpd_ffmpeg_stream {
|
struct mpd_ffmpeg_stream {
|
||||||
struct decoder *decoder;
|
struct decoder *decoder;
|
||||||
struct input_stream *input;
|
struct input_stream *input;
|
||||||
@ -154,7 +159,11 @@ ffmpeg_find_audio_stream(const AVFormatContext *format_context)
|
|||||||
{
|
{
|
||||||
for (unsigned i = 0; i < format_context->nb_streams; ++i)
|
for (unsigned i = 0; i < format_context->nb_streams; ++i)
|
||||||
if (format_context->streams[i]->codec->codec_type ==
|
if (format_context->streams[i]->codec->codec_type ==
|
||||||
|
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0)
|
||||||
|
AVMEDIA_TYPE_AUDIO)
|
||||||
|
#else
|
||||||
CODEC_TYPE_AUDIO)
|
CODEC_TYPE_AUDIO)
|
||||||
|
#endif
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -62,7 +62,8 @@ directory_free(struct directory *directory);
|
|||||||
static inline bool
|
static inline bool
|
||||||
directory_is_empty(const struct directory *directory)
|
directory_is_empty(const struct directory *directory)
|
||||||
{
|
{
|
||||||
return directory->children.nr == 0 && directory->songs.nr == 0;
|
return directory->children.nr == 0 && directory->songs.nr == 0 &&
|
||||||
|
playlist_vector_is_empty(&directory->playlists);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const char *
|
static inline const char *
|
||||||
|
@ -106,6 +106,13 @@ playlist_check_translate_song(struct song *song, const char *base_uri,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (base_uri != NULL && strcmp(base_uri, ".") == 0)
|
||||||
|
/* g_path_get_dirname() returns "." when there is no
|
||||||
|
directory name in the given path; clear that now,
|
||||||
|
because it would break the database lookup
|
||||||
|
functions */
|
||||||
|
base_uri = NULL;
|
||||||
|
|
||||||
if (g_path_is_absolute(uri)) {
|
if (g_path_is_absolute(uri)) {
|
||||||
/* XXX fs_charset vs utf8? */
|
/* XXX fs_charset vs utf8? */
|
||||||
char *prefix = base_uri != NULL
|
char *prefix = base_uri != NULL
|
||||||
@ -131,7 +138,7 @@ playlist_check_translate_song(struct song *song, const char *base_uri,
|
|||||||
else
|
else
|
||||||
uri = g_strdup(uri);
|
uri = g_strdup(uri);
|
||||||
|
|
||||||
if (uri_has_scheme(base_uri)) {
|
if (uri_has_scheme(uri)) {
|
||||||
dest = song_remote_new(uri);
|
dest = song_remote_new(uri);
|
||||||
g_free(uri);
|
g_free(uri);
|
||||||
} else {
|
} else {
|
||||||
|
@ -51,6 +51,12 @@ playlist_vector_init(struct playlist_vector *pv)
|
|||||||
void
|
void
|
||||||
playlist_vector_deinit(struct playlist_vector *pv);
|
playlist_vector_deinit(struct playlist_vector *pv);
|
||||||
|
|
||||||
|
static inline bool
|
||||||
|
playlist_vector_is_empty(const struct playlist_vector *pv)
|
||||||
|
{
|
||||||
|
return pv->head == NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct playlist_metadata *
|
struct playlist_metadata *
|
||||||
playlist_vector_find(struct playlist_vector *pv, const char *name);
|
playlist_vector_find(struct playlist_vector *pv, const char *name);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user