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:
parent
ae44b7dae5
commit
333c0a6fdd
11
src/decode.c
11
src/decode.c
|
@ -388,17 +388,6 @@ int decoderInit(PlayerControl * pc, OutputBuffer * cb, DecoderControl * dc) {
|
|||
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,
|
||||
int * currentChunkSent, MetadataChunk * currentChunk)
|
||||
{
|
||||
|
|
|
@ -147,11 +147,19 @@ int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream,
|
|||
|
||||
int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
|
||||
int nextChunk;
|
||||
static MpdTag * last = NULL;
|
||||
|
||||
printf("copyMpdTagToOB called\n");
|
||||
|
||||
if(!cb->acceptMetadata || !tag) {
|
||||
sendMetaChunk = 0;
|
||||
if(last) free(last);
|
||||
last = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(last && mpdTagsAreEqual(last, tag)) {
|
||||
printf("same as last\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -165,6 +173,9 @@ int copyMpdTagToOutputBuffer(OutputBuffer * cb, MpdTag * tag) {
|
|||
|
||||
printMpdTag(stdout, tag);
|
||||
|
||||
if(last) freeMpdTag(last);
|
||||
last = mpdTagDup(tag);
|
||||
|
||||
copyMpdTagToMetadataChunk(tag, &(cb->metadataChunks[currentMetaChunk]));
|
||||
|
||||
cb->metaChunkSet[nextChunk] = 1;
|
||||
|
|
|
@ -470,6 +470,7 @@ void playerCycleLogFiles() {
|
|||
Song * playerCurrentDecodeSong() {
|
||||
static Song * song = NULL;
|
||||
static MetadataChunk * prev = NULL;
|
||||
Song * ret = NULL;
|
||||
PlayerControl * pc = &(getPlayerData()->playerControl);
|
||||
|
||||
if(pc->metadataState == PLAYER_METADATA_STATE_READ &&
|
||||
|
@ -477,19 +478,19 @@ Song * playerCurrentDecodeSong() {
|
|||
|| (!prev || memcmp(prev, &(pc->metadataChunk),
|
||||
sizeof(MetadataChunk)))))
|
||||
{
|
||||
printf("metadata in the PLAYER!\n");
|
||||
if(prev) free(prev);
|
||||
prev = malloc(sizeof(MetadataChunk));
|
||||
memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
|
||||
resetPlayerMetadata();
|
||||
if(song) freeJustSong(song);
|
||||
song = newNullSong();
|
||||
if(song->utf8url) free(song->utf8url);
|
||||
song->utf8url = strdup(pc->currentUrl);
|
||||
song->tag = metadataChunkToMpdTagDup(prev);
|
||||
validateUtf8Tag(song->tag);
|
||||
return song;
|
||||
ret = song;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
resetPlayerMetadata();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue