some fixes to metadata stuff
git-svn-id: https://svn.musicpd.org/mpd/trunk@1370 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
11
src/decode.c
11
src/decode.c
@@ -388,17 +388,6 @@ int decoderInit(PlayerControl * pc, OutputBuffer * cb, DecoderControl * dc) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define copyMetadata() { \
|
|
||||||
memcpy(pc->metadata, metadata, DECODE_METADATA_LENGTH); \
|
|
||||||
pc->name = name; \
|
|
||||||
pc->title = title; \
|
|
||||||
pc->artist = artist; \
|
|
||||||
pc->album = album; \
|
|
||||||
gotMetadata = 0; \
|
|
||||||
pc->metadataState = PLAYER_METADATA_STATE_READ; \
|
|
||||||
kill(getppid(), SIGUSR1); \
|
|
||||||
}
|
|
||||||
|
|
||||||
void handleMetadata(OutputBuffer * cb, PlayerControl * pc, int * previous,
|
void handleMetadata(OutputBuffer * cb, PlayerControl * pc, int * previous,
|
||||||
int * currentChunkSent, MetadataChunk * currentChunk)
|
int * currentChunkSent, MetadataChunk * currentChunk)
|
||||||
{
|
{
|
||||||
|
@@ -147,11 +147,19 @@ int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream,
|
|||||||
|
|
||||||
int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
|
int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
|
||||||
int nextChunk;
|
int nextChunk;
|
||||||
|
static MpdTag * last = NULL;
|
||||||
|
|
||||||
printf("copyMpdTagToOB called\n");
|
printf("copyMpdTagToOB called\n");
|
||||||
|
|
||||||
if(!cb->acceptMetadata || !tag) {
|
if(!cb->acceptMetadata || !tag) {
|
||||||
sendMetaChunk = 0;
|
sendMetaChunk = 0;
|
||||||
|
if(last) free(last);
|
||||||
|
last = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(last && mpdTagsAreEqual(last, tag)) {
|
||||||
|
printf("same as last\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,6 +173,9 @@ int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
|
|||||||
|
|
||||||
printMpdTag(stdout, tag);
|
printMpdTag(stdout, tag);
|
||||||
|
|
||||||
|
if(last) freeMpdTag(last);
|
||||||
|
last = mpdTagDup(tag);
|
||||||
|
|
||||||
copyMpdTagToMetadataChunk(tag, &(cb->metadataChunks[currentMetaChunk]));
|
copyMpdTagToMetadataChunk(tag, &(cb->metadataChunks[currentMetaChunk]));
|
||||||
|
|
||||||
cb->metaChunkSet[nextChunk] = 1;
|
cb->metaChunkSet[nextChunk] = 1;
|
||||||
|
@@ -470,6 +470,7 @@ void playerCycleLogFiles() {
|
|||||||
Song * playerCurrentDecodeSong() {
|
Song * playerCurrentDecodeSong() {
|
||||||
static Song * song = NULL;
|
static Song * song = NULL;
|
||||||
static MetadataChunk * prev = NULL;
|
static MetadataChunk * prev = NULL;
|
||||||
|
Song * ret = NULL;
|
||||||
PlayerControl * pc = &(getPlayerData()->playerControl);
|
PlayerControl * pc = &(getPlayerData()->playerControl);
|
||||||
|
|
||||||
if(pc->metadataState == PLAYER_METADATA_STATE_READ &&
|
if(pc->metadataState == PLAYER_METADATA_STATE_READ &&
|
||||||
@@ -477,19 +478,19 @@ Song * playerCurrentDecodeSong() {
|
|||||||
|| (!prev || memcmp(prev, &(pc->metadataChunk),
|
|| (!prev || memcmp(prev, &(pc->metadataChunk),
|
||||||
sizeof(MetadataChunk)))))
|
sizeof(MetadataChunk)))))
|
||||||
{
|
{
|
||||||
printf("metadata in the PLAYER!\n");
|
|
||||||
if(prev) free(prev);
|
if(prev) free(prev);
|
||||||
prev = malloc(sizeof(MetadataChunk));
|
prev = malloc(sizeof(MetadataChunk));
|
||||||
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
|
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
|
||||||
resetPlayerMetadata();
|
|
||||||
if(song) freeJustSong(song);
|
if(song) freeJustSong(song);
|
||||||
song = newNullSong();
|
song = newNullSong();
|
||||||
if(song->utf8url) free(song->utf8url);
|
if(song->utf8url) free(song->utf8url);
|
||||||
song->utf8url = strdup(pc->currentUrl);
|
song->utf8url = strdup(pc->currentUrl);
|
||||||
song->tag = metadataChunkToMpdTagDup(prev);
|
song->tag = metadataChunkToMpdTagDup(prev);
|
||||||
validateUtf8Tag(song->tag);
|
validateUtf8Tag(song->tag);
|
||||||
return song;
|
ret = song;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
resetPlayerMetadata();
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user