aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-06-09 16:58:33 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-06-09 16:58:33 +0000
commitbfaf6cbd9d3c39d466179be9fad0654cc75a4765 (patch)
tree915d4f130377ce8c2c02772862e1ef3ab2a65705
parentd5f7a7745a188375c5accbbd2eb82c2776cc2a6e (diff)
downloadmpd-bfaf6cbd9d3c39d466179be9fad0654cc75a4765.tar.gz
mpd-bfaf6cbd9d3c39d466179be9fad0654cc75a4765.tar.xz
mpd-bfaf6cbd9d3c39d466179be9fad0654cc75a4765.zip
fix some streaming metadata issues
git-svn-id: https://svn.musicpd.org/mpd/trunk@1416 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r--src/decode.c4
-rw-r--r--src/inputPlugins/ogg_plugin.c3
-rw-r--r--src/outputBuffer.c11
-rw-r--r--src/player.c10
4 files changed, 19 insertions, 9 deletions
diff --git a/src/decode.c b/src/decode.c
index 88208670d..17dad4659 100644
--- a/src/decode.c
+++ b/src/decode.c
@@ -393,7 +393,9 @@ void handleMetadata(OutputBuffer * cb, PlayerControl * pc, int * previous,
if(cb->begin!=cb->end) {
int meta = cb->metaChunk[cb->begin];
if( meta != *previous ) {
+ DEBUG("player: metadata change\n");
if( meta >= 0 && cb->metaChunkSet[meta]) {
+ DEBUG("player: new metadata from decoder!\n");
memcpy(currentChunk,
cb->metadataChunks+meta,
sizeof(MetadataChunk));
@@ -625,6 +627,7 @@ void decode() {
cb = &(getPlayerData()->buffer);
+ clearAllMetaChunkSets(cb);
cb->begin = 0;
cb->end = 0;
pc = &(getPlayerData()->playerControl);
@@ -634,7 +637,6 @@ void decode() {
dc->seek = 0;
dc->stop = 0;
dc->start = 1;
- clearAllMetaChunkSets(cb);
if(decode_pid==NULL || *decode_pid<=0) {
if(decoderInit(pc,cb,dc)<0) return;
diff --git a/src/inputPlugins/ogg_plugin.c b/src/inputPlugins/ogg_plugin.c
index e47471177..c5197f132 100644
--- a/src/inputPlugins/ogg_plugin.c
+++ b/src/inputPlugins/ogg_plugin.c
@@ -206,6 +206,9 @@ void putOggCommentsIntoOutputBuffer(OutputBuffer * cb, char * streamName,
MpdTag * tag;
tag = oggCommentsParse(comments);
+ if(!tag && streamName) {
+ tag = newMpdTag();
+ }
if(!tag) return;
/*if(tag->artist) printf("Artist: %s\n", tag->artist);
diff --git a/src/outputBuffer.c b/src/outputBuffer.c
index 39d9b66af..bde118ff8 100644
--- a/src/outputBuffer.c
+++ b/src/outputBuffer.c
@@ -21,6 +21,7 @@
#include "pcm_utils.h"
#include "playerData.h"
#include "utils.h"
+#include "log.h"
#include <string.h>
@@ -154,10 +155,12 @@ int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
sendMetaChunk = 0;
if(last) free(last);
last = NULL;
+ DEBUG("copyMpdTagToOB: !acceptMetadata || !tag\n");
return 0;
}
if(last && mpdTagsAreEqual(last, tag)) {
+ DEBUG("copyMpdTagToOB: same as last\n");
return 0;
}
@@ -167,7 +170,11 @@ int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
nextChunk = currentMetaChunk+1;
if(nextChunk >= BUFFERED_METACHUNKS) nextChunk = 0;
- if(cb->metaChunkSet[nextChunk]) return -1;
+ if(cb->metaChunkSet[nextChunk]) {
+ sendMetaChunk = 0;
+ DEBUG("copyMpdTagToOB: metachunk in use!\n");
+ return -1;
+ }
sendMetaChunk = 1;
currentMetaChunk = nextChunk;
@@ -178,5 +185,7 @@ int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
cb->metaChunkSet[nextChunk] = 1;
+ DEBUG("copyMpdTagToOB: copiedTag\n");
+
return 0;
}
diff --git a/src/player.c b/src/player.c
index 0682a537a..4188243e6 100644
--- a/src/player.c
+++ b/src/player.c
@@ -473,11 +473,8 @@ Song * playerCurrentDecodeSong() {
Song * ret = NULL;
PlayerControl * pc = &(getPlayerData()->playerControl);
- if(pc->metadataState == PLAYER_METADATA_STATE_READ &&
- ((!song || strcmp(song->utf8url, pc->currentUrl))
- || (!prev || memcmp(prev, &(pc->metadataChunk),
- sizeof(MetadataChunk)))))
- {
+ if(pc->metadataState == PLAYER_METADATA_STATE_READ) {
+ DEBUG("playerCurrentDecodeSong: caught new metadata!\n");
if(prev) free(prev);
prev = malloc(sizeof(MetadataChunk));
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
@@ -488,9 +485,8 @@ Song * playerCurrentDecodeSong() {
song->tag = metadataChunkToMpdTagDup(prev);
validateUtf8Tag(song->tag);
ret = song;
+ resetPlayerMetadata();
}
- resetPlayerMetadata();
-
return ret;
}