aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/oggvorbis_plugin.c
diff options
context:
space:
mode:
authorAvuton Olrich <avuton@gmail.com>2006-07-20 16:02:40 +0000
committerAvuton Olrich <avuton@gmail.com>2006-07-20 16:02:40 +0000
commit29a25b9933b32800f58dd73d5d1fc21993071c92 (patch)
tree4f456a6f8e44d42acc289c35534ea3e59c0aa96f /src/inputPlugins/oggvorbis_plugin.c
parent099f0e103f7591eef81183292d704b3a77a99018 (diff)
downloadmpd-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.c344
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, &current_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, &current_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 */