diff options
author | Avuton Olrich <avuton@gmail.com> | 2006-07-20 16:02:40 +0000 |
---|---|---|
committer | Avuton Olrich <avuton@gmail.com> | 2006-07-20 16:02:40 +0000 |
commit | 29a25b9933b32800f58dd73d5d1fc21993071c92 (patch) | |
tree | 4f456a6f8e44d42acc289c35534ea3e59c0aa96f /src/inputPlugins/oggvorbis_plugin.c | |
parent | 099f0e103f7591eef81183292d704b3a77a99018 (diff) | |
download | mpd-29a25b9933b32800f58dd73d5d1fc21993071c92.tar.gz mpd-29a25b9933b32800f58dd73d5d1fc21993071c92.tar.xz mpd-29a25b9933b32800f58dd73d5d1fc21993071c92.zip |
Add mpd-indent.sh
Indent the entire tree, hopefully we can keep
it indented.
git-svn-id: https://svn.musicpd.org/mpd/trunk@4410 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/inputPlugins/oggvorbis_plugin.c')
-rw-r--r-- | src/inputPlugins/oggvorbis_plugin.c | 344 |
1 files changed, 176 insertions, 168 deletions
diff --git a/src/inputPlugins/oggvorbis_plugin.c b/src/inputPlugins/oggvorbis_plugin.c index 463ccc977..2e186edd5 100644 --- a/src/inputPlugins/oggvorbis_plugin.c +++ b/src/inputPlugins/oggvorbis_plugin.c @@ -50,7 +50,7 @@ #define ov_time_total(VF, I) ((double)ov_time_total(VF, I)/1000) #define ov_time_tell(VF) ((double)ov_time_tell(VF)/1000) #define ov_time_seek_page(VF, S) (ov_time_seek_page(VF, (S)*1000)) -#endif /* HAVE_TREMOR */ +#endif /* HAVE_TREMOR */ #include <errno.h> @@ -61,158 +61,165 @@ #endif typedef struct _OggCallbackData { - InputStream * inStream; - DecoderControl * dc; + InputStream *inStream; + DecoderControl *dc; } OggCallbackData; -static size_t ogg_read_cb(void * ptr, size_t size, size_t nmemb, void * vdata) +static size_t ogg_read_cb(void *ptr, size_t size, size_t nmemb, void *vdata) { size_t ret = 0; - OggCallbackData * data = (OggCallbackData *)vdata; - - while(1) { - ret = readFromInputStream(data->inStream,ptr,size,nmemb); - if(ret == 0 && !inputStreamAtEOF(data->inStream) && - !data->dc->stop) - { - my_usleep(10000); - } - else break; - } - errno = 0; - /*if(ret<0) errno = ((InputStream *)inStream)->error;*/ + OggCallbackData *data = (OggCallbackData *) vdata; + + while (1) { + ret = readFromInputStream(data->inStream, ptr, size, nmemb); + if (ret == 0 && !inputStreamAtEOF(data->inStream) && + !data->dc->stop) { + my_usleep(10000); + } else + break; + } + errno = 0; + /*if(ret<0) errno = ((InputStream *)inStream)->error; */ return ret; } -static int ogg_seek_cb(void * vdata, ogg_int64_t offset, int whence) { - OggCallbackData * data = (OggCallbackData *)vdata; +static int ogg_seek_cb(void *vdata, ogg_int64_t offset, int whence) +{ + OggCallbackData *data = (OggCallbackData *) vdata; - return seekInputStream(data->inStream,offset,whence); + return seekInputStream(data->inStream, offset, whence); } -static int ogg_close_cb(void * vdata) { - OggCallbackData * data = (OggCallbackData *)vdata; +static int ogg_close_cb(void *vdata) +{ + OggCallbackData *data = (OggCallbackData *) vdata; return closeInputStream(data->inStream); } -static long ogg_tell_cb(void * vdata) { - OggCallbackData * data = (OggCallbackData *)vdata; +static long ogg_tell_cb(void *vdata) +{ + OggCallbackData *data = (OggCallbackData *) vdata; return (long)(data->inStream->offset); } -static char * ogg_parseComment(char * comment, char * needle) { - int len = strlen(needle); +static char *ogg_parseComment(char *comment, char *needle) +{ + int len = strlen(needle); - if(strncasecmp(comment, needle, len) == 0 && *(comment+len) == '=') { - return comment+len+1; + if (strncasecmp(comment, needle, len) == 0 && *(comment + len) == '=') { + return comment + len + 1; } - return NULL; + return NULL; } -static void ogg_getReplayGainInfo(char ** comments, ReplayGainInfo ** infoPtr) { - char * temp; +static void ogg_getReplayGainInfo(char **comments, ReplayGainInfo ** infoPtr) +{ + char *temp; int found = 0; - if(*infoPtr) freeReplayGainInfo(*infoPtr); + if (*infoPtr) + freeReplayGainInfo(*infoPtr); *infoPtr = newReplayGainInfo(); - while(*comments) { - if((temp = ogg_parseComment(*comments,"replaygain_track_gain"))) - { - (*infoPtr)->trackGain = atof(temp); + while (*comments) { + if ((temp = + ogg_parseComment(*comments, "replaygain_track_gain"))) { + (*infoPtr)->trackGain = atof(temp); found = 1; - } - else if((temp = ogg_parseComment(*comments, - "replaygain_album_gain"))) - { - (*infoPtr)->albumGain = atof(temp); + } else if ((temp = ogg_parseComment(*comments, + "replaygain_album_gain"))) { + (*infoPtr)->albumGain = atof(temp); found = 1; - } - else if((temp = ogg_parseComment(*comments, - "replaygain_track_peak"))) - { - (*infoPtr)->trackPeak = atof(temp); + } else if ((temp = ogg_parseComment(*comments, + "replaygain_track_peak"))) { + (*infoPtr)->trackPeak = atof(temp); found = 1; - } - else if((temp = ogg_parseComment(*comments, - "replaygain_album_peak"))) - { - (*infoPtr)->albumPeak = atof(temp); + } else if ((temp = ogg_parseComment(*comments, + "replaygain_album_peak"))) { + (*infoPtr)->albumPeak = atof(temp); found = 1; - } + } - comments++; - } + comments++; + } - if(!found) { + if (!found) { freeReplayGainInfo(*infoPtr); *infoPtr = NULL; } } -static const char * VORBIS_COMMENT_TRACK_KEY = "tracknumber"; -static const char * VORBIS_COMMENT_DISC_KEY = "discnumber"; +static const char *VORBIS_COMMENT_TRACK_KEY = "tracknumber"; +static const char *VORBIS_COMMENT_DISC_KEY = "discnumber"; -static unsigned int ogg_parseCommentAddToTag(char * comment, - unsigned int itemType, MpdTag ** tag) +static unsigned int ogg_parseCommentAddToTag(char *comment, + unsigned int itemType, + MpdTag ** tag) { - const char * needle; + const char *needle; unsigned int len; switch (itemType) { - case TAG_ITEM_TRACK: needle = VORBIS_COMMENT_TRACK_KEY; break; - case TAG_ITEM_DISC: needle = VORBIS_COMMENT_DISC_KEY; break; - default: needle = mpdTagItemKeys[itemType]; + case TAG_ITEM_TRACK: + needle = VORBIS_COMMENT_TRACK_KEY; + break; + case TAG_ITEM_DISC: + needle = VORBIS_COMMENT_DISC_KEY; + break; + default: + needle = mpdTagItemKeys[itemType]; } len = strlen(needle); - if(strncasecmp(comment, needle, len) == 0 && *(comment+len) == '=') { + if (strncasecmp(comment, needle, len) == 0 && *(comment + len) == '=') { if (!*tag) *tag = newMpdTag(); - - addItemToMpdTag(*tag, itemType, comment+len+1); - + + addItemToMpdTag(*tag, itemType, comment + len + 1); + return 1; } - + return 0; } -static MpdTag * oggCommentsParse(char ** comments) { - MpdTag * tag = NULL; - - while(*comments) { +static MpdTag *oggCommentsParse(char **comments) +{ + MpdTag *tag = NULL; + + while (*comments) { int j; - for (j = TAG_NUM_OF_ITEM_TYPES; --j >= 0; ) { + for (j = TAG_NUM_OF_ITEM_TYPES; --j >= 0;) { if (ogg_parseCommentAddToTag(*comments, j, &tag)) break; } comments++; } - + return tag; } -static void putOggCommentsIntoOutputBuffer(OutputBuffer * cb, char * streamName, - char ** comments) +static void putOggCommentsIntoOutputBuffer(OutputBuffer * cb, char *streamName, + char **comments) { - MpdTag * tag; + MpdTag *tag; tag = oggCommentsParse(comments); - if(!tag && streamName) { + if (!tag && streamName) { tag = newMpdTag(); } - if(!tag) return; + if (!tag) + return; /*if(tag->artist) printf("Artist: %s\n", tag->artist); - if(tag->album) printf("Album: %s\n", tag->album); - if(tag->track) printf("Track: %s\n", tag->track); - if(tag->title) printf("Title: %s\n", tag->title);*/ + if(tag->album) printf("Album: %s\n", tag->album); + if(tag->track) printf("Track: %s\n", tag->track); + if(tag->title) printf("Title: %s\n", tag->title); */ - if(streamName) { + if (streamName) { clearItemsFromMpdTag(tag, TAG_ITEM_NAME); addItemToMpdTag(tag, TAG_ITEM_NAME, streamName); } @@ -224,11 +231,11 @@ static void putOggCommentsIntoOutputBuffer(OutputBuffer * cb, char * streamName, /* public */ static int oggvorbis_decode(OutputBuffer * cb, DecoderControl * dc, - InputStream * inStream) + InputStream * inStream) { OggVorbis_File vf; ov_callbacks callbacks; - OggCallbackData data; + OggCallbackData data; int current_section; int prev_section = -1; int eof = 0; @@ -238,22 +245,22 @@ static int oggvorbis_decode(OutputBuffer * cb, DecoderControl * dc, int chunkpos = 0; long bitRate = 0; long test; - ReplayGainInfo * replayGainInfo = NULL; - char ** comments; - char * errorStr; + ReplayGainInfo *replayGainInfo = NULL; + char **comments; + char *errorStr; - data.inStream = inStream; - data.dc = dc; + data.inStream = inStream; + data.dc = dc; callbacks.read_func = ogg_read_cb; callbacks.seek_func = ogg_seek_cb; callbacks.close_func = ogg_close_cb; callbacks.tell_func = ogg_tell_cb; - - if((ret = ov_open_callbacks(&data, &vf, NULL, 0, callbacks)) < 0) { + + if ((ret = ov_open_callbacks(&data, &vf, NULL, 0, callbacks)) < 0) { closeInputStream(inStream); - if(!dc->stop) { - switch(ret) { + if (!dc->stop) { + switch (ret) { case OV_EREAD: errorStr = "read error"; break; @@ -273,123 +280,127 @@ static int oggvorbis_decode(OutputBuffer * cb, DecoderControl * dc, errorStr = "unknown error"; break; } - ERROR("Error decoding Ogg Vorbis stream: %s\n", + ERROR("Error decoding Ogg Vorbis stream: %s\n", errorStr); - return -1; - } - else { - dc->state = DECODE_STATE_STOP; - dc->stop = 0; - } - return 0; + return -1; + } else { + dc->state = DECODE_STATE_STOP; + dc->stop = 0; + } + return 0; } - - dc->totalTime = ov_time_total(&vf,-1); - if(dc->totalTime < 0) dc->totalTime = 0; + + dc->totalTime = ov_time_total(&vf, -1); + if (dc->totalTime < 0) + dc->totalTime = 0; dc->audioFormat.bits = 16; - while(!eof) { - if(dc->seek) { - if(0 == ov_time_seek_page(&vf,dc->seekWhere)) { - clearOutputBuffer(cb); - chunkpos = 0; - } - else dc->seekError = 1; + while (!eof) { + if (dc->seek) { + if (0 == ov_time_seek_page(&vf, dc->seekWhere)) { + clearOutputBuffer(cb); + chunkpos = 0; + } else + dc->seekError = 1; dc->seek = 0; } - ret = ov_read(&vf, chunk+chunkpos, - OGG_CHUNK_SIZE-chunkpos, - OGG_DECODE_USE_BIGENDIAN, - 2, 1, ¤t_section); - - if(current_section!=prev_section) { - /*printf("new song!\n");*/ - vorbis_info *vi=ov_info(&vf,-1); + ret = ov_read(&vf, chunk + chunkpos, + OGG_CHUNK_SIZE - chunkpos, + OGG_DECODE_USE_BIGENDIAN, 2, 1, ¤t_section); + + if (current_section != prev_section) { + /*printf("new song!\n"); */ + vorbis_info *vi = ov_info(&vf, -1); dc->audioFormat.channels = vi->channels; dc->audioFormat.sampleRate = vi->rate; - if(dc->state == DECODE_STATE_START) { - getOutputAudioFormat(&(dc->audioFormat), - &(cb->audioFormat)); + if (dc->state == DECODE_STATE_START) { + getOutputAudioFormat(&(dc->audioFormat), + &(cb->audioFormat)); dc->state = DECODE_STATE_DECODE; } comments = ov_comment(&vf, -1)->user_comments; putOggCommentsIntoOutputBuffer(cb, inStream->metaName, - comments); - ogg_getReplayGainInfo(comments, &replayGainInfo); + comments); + ogg_getReplayGainInfo(comments, &replayGainInfo); } prev_section = current_section; - if(ret <= 0 && ret != OV_HOLE) { + if (ret <= 0 && ret != OV_HOLE) { eof = 1; break; } - if(ret == OV_HOLE) ret = 0; + if (ret == OV_HOLE) + ret = 0; - chunkpos+=ret; + chunkpos += ret; - if(chunkpos >= OGG_CHUNK_SIZE) { - if((test = ov_bitrate_instant(&vf))>0) { - bitRate = test/1000; + if (chunkpos >= OGG_CHUNK_SIZE) { + if ((test = ov_bitrate_instant(&vf)) > 0) { + bitRate = test / 1000; } - sendDataToOutputBuffer(cb, inStream, dc, - inStream->seekable, - chunk, chunkpos, - ov_pcm_tell(&vf)/ - dc->audioFormat.sampleRate, - bitRate, - replayGainInfo); + sendDataToOutputBuffer(cb, inStream, dc, + inStream->seekable, + chunk, chunkpos, + ov_pcm_tell(&vf) / + dc->audioFormat.sampleRate, + bitRate, replayGainInfo); chunkpos = 0; - if(dc->stop) break; + if (dc->stop) + break; } } - if(!dc->stop && chunkpos > 0) { + if (!dc->stop && chunkpos > 0) { sendDataToOutputBuffer(cb, NULL, dc, inStream->seekable, - chunk, chunkpos, - ov_time_tell(&vf), bitRate, replayGainInfo); + chunk, chunkpos, + ov_time_tell(&vf), bitRate, + replayGainInfo); } - if(replayGainInfo) freeReplayGainInfo(replayGainInfo); + if (replayGainInfo) + freeReplayGainInfo(replayGainInfo); ov_clear(&vf); flushOutputBuffer(cb); - if(dc->stop) { + if (dc->stop) { dc->state = DECODE_STATE_STOP; dc->stop = 0; - } - else dc->state = DECODE_STATE_STOP; + } else + dc->state = DECODE_STATE_STOP; return 0; } -static MpdTag * oggvorbis_TagDup(char * file) { - MpdTag * ret = NULL; - FILE * fp; +static MpdTag *oggvorbis_TagDup(char *file) +{ + MpdTag *ret = NULL; + FILE *fp; OggVorbis_File vf; - fp = fopen(file,"r"); - if(!fp) - { - DEBUG("oggTagDup: Failed to open file: '%s', %s\n", file, strerror(errno)); - return NULL; + fp = fopen(file, "r"); + if (!fp) { + DEBUG("oggTagDup: Failed to open file: '%s', %s\n", file, + strerror(errno)); + return NULL; } - if(ov_open(fp,&vf,NULL,0)<0) { + if (ov_open(fp, &vf, NULL, 0) < 0) { fclose(fp); return NULL; } - ret = oggCommentsParse(ov_comment(&vf,-1)->user_comments); + ret = oggCommentsParse(ov_comment(&vf, -1)->user_comments); - if(!ret) ret = newMpdTag(); - ret->time = (int)(ov_time_total(&vf,-1)+0.5); + if (!ret) + ret = newMpdTag(); + ret->time = (int)(ov_time_total(&vf, -1) + 0.5); ov_clear(&vf); - return ret; + return ret; } static unsigned int oggvorbis_try_decode(InputStream * inStream) @@ -397,12 +408,10 @@ static unsigned int oggvorbis_try_decode(InputStream * inStream) return (ogg_stream_type_detect(inStream) == VORBIS) ? 1 : 0; } +static char *oggvorbis_Suffixes[] = { "ogg", NULL }; +static char *oggvorbis_MimeTypes[] = { "application/ogg", NULL }; -static char * oggvorbis_Suffixes[] = {"ogg", NULL}; -static char * oggvorbis_MimeTypes[] = {"application/ogg", NULL}; - -InputPlugin oggvorbisPlugin = -{ +InputPlugin oggvorbisPlugin = { "oggvorbis", NULL, NULL, @@ -415,10 +424,9 @@ InputPlugin oggvorbisPlugin = oggvorbis_MimeTypes }; -#else /* !HAVE_OGGVORBIS */ +#else /* !HAVE_OGGVORBIS */ -InputPlugin oggvorbisPlugin = -{ +InputPlugin oggvorbisPlugin = { NULL, NULL, NULL, @@ -431,4 +439,4 @@ InputPlugin oggvorbisPlugin = NULL, }; -#endif /* HAVE_OGGVORBIS */ +#endif /* HAVE_OGGVORBIS */ |