ogg voribs comment parsing on the fly in the decoder

git-svn-id: https://svn.musicpd.org/mpd/trunk@1279 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Warren Dukes
2004-06-01 11:18:25 +00:00
parent 187eba5754
commit fe0b751c82
6 changed files with 111 additions and 35 deletions

View File

@@ -165,6 +165,61 @@ float ogg_getReplayGainScale(char ** comments) {
return 1.0;
}
MpdTag * oggCommentsParse(char ** comments) {
MpdTag * ret = NULL;
char * temp;
while(*comments) {
if((temp = ogg_parseComment(*comments,"artist"))) {
if(!ret) ret = newMpdTag();
if(!ret->artist) {
ret->artist = strdup(temp);
stripReturnChar(ret->artist);
}
}
else if((temp = ogg_parseComment(*comments,"title"))) {
if(!ret) ret = newMpdTag();
if(!ret->title) {
ret->title = strdup(temp);
stripReturnChar(ret->title);
}
}
else if((temp = ogg_parseComment(*comments,"album"))) {
if(!ret) ret = newMpdTag();
if(!ret->album) {
ret->album = strdup(temp);
stripReturnChar(ret->album);
}
}
else if((temp = ogg_parseComment(*comments,"tracknumber"))) {
if(!ret) ret = newMpdTag();
if(!ret->track) {
ret->track = strdup(temp);
stripReturnChar(ret->track);
}
}
comments++;
}
return ret;
}
void putOggCommentsIntoDecoderControlMetadata(DecoderControl * dc,
char ** comments)
{
MpdTag * tag;
if(dc->metadataSet) return;
tag = oggCommentsParse(comments);
if(!tag) return;
copyMpdTagToDecoderControlMetadata(dc, tag);
freeMpdTag(tag);
}
int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
{
OggVorbis_File vf;
@@ -215,6 +270,8 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream)
comments = ov_comment(&vf, -1)->user_comments;
putOggCommentsIntoDecoderControlMetadata(dc, comments);
dc->state = DECODE_STATE_DECODE;
replayGainScale = ogg_getReplayGainScale(comments);
@@ -281,8 +338,6 @@ MpdTag * oggTagDup(char * file) {
MpdTag * ret = NULL;
FILE * fp;
OggVorbis_File vf;
char ** comments;
char * temp;
fp = fopen(file,"r");
if(!fp) return NULL;
@@ -291,40 +346,11 @@ MpdTag * oggTagDup(char * file) {
return NULL;
}
ret = newMpdTag();
ret = oggCommentsParse(ov_comment(&vf,-1)->user_comments);
if(!ret) ret = newMpdTag();
ret->time = (int)(ov_time_total(&vf,-1)+0.5);
comments = ov_comment(&vf,-1)->user_comments;
while(*comments) {
if((temp = ogg_parseComment(*comments,"artist"))) {
if(!ret->artist) {
ret->artist = strdup(temp);
stripReturnChar(ret->artist);
}
}
else if((temp = ogg_parseComment(*comments,"title"))) {
if(!ret->title) {
ret->title = strdup(temp);
stripReturnChar(ret->title);
}
}
else if((temp = ogg_parseComment(*comments,"album"))) {
if(!ret->album) {
ret->album = strdup(temp);
stripReturnChar(ret->album);
}
}
else if((temp = ogg_parseComment(*comments,"tracknumber"))) {
if(!ret->track) {
ret->track = strdup(temp);
stripReturnChar(ret->track);
}
}
comments++;
}
ov_clear(&vf);
return ret;