decoder_api: added decoder_tag()

Provide an API for submitting additional tags from the stream.
This commit is contained in:
Max Kellermann 2008-11-02 17:02:28 +01:00
parent 5b13f067cd
commit 020c04e702
3 changed files with 30 additions and 2 deletions

View File

@ -179,7 +179,9 @@ static struct tag *oggCommentsParse(char **comments)
return tag;
}
static void putOggCommentsIntoOutputBuffer(char *streamName,
static void putOggCommentsIntoOutputBuffer(struct decoder *decoder,
struct input_stream *is,
char *streamName,
char **comments)
{
struct tag *tag;
@ -196,6 +198,7 @@ static void putOggCommentsIntoOutputBuffer(char *streamName,
tag_add_item(tag, TAG_ITEM_NAME, streamName);
}
decoder_tag(decoder, is, tag);
tag_free(tag);
}
@ -284,7 +287,8 @@ oggvorbis_decode(struct decoder *decoder, struct input_stream *inStream)
initialized = true;
}
comments = ov_comment(&vf, -1)->user_comments;
putOggCommentsIntoOutputBuffer(inStream->meta_name,
putOggCommentsIntoOutputBuffer(decoder, inStream,
inStream->meta_name,
comments);
ogg_getReplayGainInfo(comments, &replayGainInfo);
}

View File

@ -190,3 +190,16 @@ decoder_data(struct decoder *decoder,
return DECODE_COMMAND_NONE;
}
enum decoder_command
decoder_tag(mpd_unused struct decoder *decoder, struct input_stream *is,
const struct tag *tag)
{
while (!music_pipe_tag(tag)) {
enum decoder_command cmd = need_chunks(is);
if (cmd != DECODE_COMMAND_NONE)
return cmd;
}
return DECODE_COMMAND_NONE;
}

View File

@ -155,4 +155,15 @@ decoder_data(struct decoder *decoder,
void *data, size_t datalen, float data_time, uint16_t bitRate,
ReplayGainInfo * replayGainInfo);
/**
* This function is called by the decoder plugin when it has
* successfully decoded a tag.
*
* @param is an input stream which is buffering while we are waiting
* for the player
*/
enum decoder_command
decoder_tag(struct decoder *decoder, struct input_stream *is,
const struct tag *tag);
#endif