From a8a8aacdb360f1bcb4cdebf1a17fa7ea3a089277 Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Sat, 5 Jun 2004 16:01:44 +0000 Subject: implement list_OK/command_list_ok_begin update COMMANDS git-svn-id: https://svn.musicpd.org/mpd/trunk@1344 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/command.c | 3 ++- src/command.h | 2 +- src/inputPlugins/ogg_plugin.c | 39 +++++++++++++++++++-------------------- src/interface.c | 32 +++++++++++++++++--------------- 4 files changed, 39 insertions(+), 37 deletions(-) (limited to 'src') diff --git a/src/command.c b/src/command.c index d87b7786c..72742e993 100644 --- a/src/command.c +++ b/src/command.c @@ -786,7 +786,7 @@ int processCommandInternal(FILE * fp, unsigned int * permission, } int proccessListOfCommands(FILE * fp, int * permission, int * expired, - List * list) + int listOK, List * list) { ListNode * node = list->firstNode; ListNode * tempNode; @@ -804,6 +804,7 @@ int proccessListOfCommands(FILE * fp, int * permission, int * expired, deleteNodeFromList(list,node); node = tempNode; if(ret!=0 || (*expired)!=0) node = NULL; + else if(listOK) myfprintf(fp, "list_OK\n"); command_listNum++; } diff --git a/src/command.h b/src/command.h index 59f6e433f..f08ebb16a 100644 --- a/src/command.h +++ b/src/command.h @@ -35,7 +35,7 @@ extern char * current_command; extern int command_listNum; int proccessListOfCommands(FILE * fp, int * permission, int * expired, - List * list); + int listOK, List * list); int processCommand(FILE * fp, unsigned int * permission, char * commandString); diff --git a/src/inputPlugins/ogg_plugin.c b/src/inputPlugins/ogg_plugin.c index e25798eaf..9a27ad712 100644 --- a/src/inputPlugins/ogg_plugin.c +++ b/src/inputPlugins/ogg_plugin.c @@ -205,13 +205,16 @@ void putOggCommentsIntoDecoderControlMetadata(DecoderControl * dc, { MpdTag * tag; - if(dc->metadataSet) return; - tag = oggCommentsParse(comments); if(!tag) return; copyMpdTagToDecoderControlMetadata(dc, tag); + /*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);*/ + freeMpdTag(tag); } @@ -229,7 +232,7 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) int chunkpos = 0; long bitRate = 0; long test; - float replayGainScale; + float replayGainScale = 1.0; char ** comments; data.inStream = inStream; @@ -253,24 +256,10 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) return 0; } - { - vorbis_info *vi=ov_info(&vf,-1); - dc->audioFormat.bits = 16; - dc->audioFormat.channels = vi->channels; - dc->audioFormat.sampleRate = vi->rate; - getOutputAudioFormat(&(dc->audioFormat),&(cb->audioFormat)); - } - dc->totalTime = ov_time_total(&vf,-1); - if(dc->totalTime < 0) dc->totalTime = 0; + if(dc->totalTime < 0) dc->totalTime = 0; - comments = ov_comment(&vf, -1)->user_comments; - - putOggCommentsIntoDecoderControlMetadata(dc, comments); - - dc->state = DECODE_STATE_DECODE; - - replayGainScale = ogg_getReplayGainScale(comments); + dc->audioFormat.bits = 16; while(!eof) { if(dc->seek) { @@ -286,7 +275,17 @@ int ogg_decode(OutputBuffer * cb, DecoderControl * dc, InputStream * inStream) OGG_DECODE_USE_BIGENDIAN, 2, 1, ¤t_section); - if(current_section!=prev_section) printf("song changed!\n"); + 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; + getOutputAudioFormat(&(dc->audioFormat),&(cb->audioFormat)); + comments = ov_comment(&vf, -1)->user_comments; + putOggCommentsIntoDecoderControlMetadata(dc, comments); + dc->state = DECODE_STATE_DECODE; + replayGainScale = ogg_getReplayGainScale(comments); + } prev_section = current_section; diff --git a/src/interface.c b/src/interface.c index 651a84380..89229050d 100644 --- a/src/interface.c +++ b/src/interface.c @@ -45,6 +45,7 @@ #define INTERFACE_MAX_BUFFER_LENGTH MAXPATHLEN+1024 #define INTERFACE_LIST_MODE_BEGIN "command_list_begin" +#define INTERFACE_LIST_OK_MODE_BEGIN "command_list_ok_begin" #define INTERFACE_LIST_MODE_END "command_list_end" #define INTERFACE_DEFAULT_OUT_BUFFER_SIZE 4096 @@ -62,6 +63,7 @@ typedef struct _Interface { unsigned int permission; time_t lastTime; List * commandList; /* for when in list mode */ + int commandListOK; /* print OK after each command execution */ unsigned long long commandListSize; /* mem commandList consumes */ List * bufferList; /* for output if client is slow */ unsigned long long outputBufferSize; /* mem bufferList consumes */ @@ -230,6 +232,7 @@ int interfaceReadInput(Interface * interface) { interface->fp, &(interface->permission), &(interface->expired), + interface->commandListOK, interface->commandList); DEBUG("interface %i: process command " "list returned %i\n", @@ -281,27 +284,27 @@ int interfaceReadInput(Interface * interface) { interface->commandList = makeList(free); interface->commandListSize = sizeof(List); + interface->commandListOK = 0; + ret = 1; + } + else if(strcmp(interface->buffer, + INTERFACE_LIST_OK_MODE_BEGIN) + ==0) + { + interface->commandList = makeList(free); + interface->commandListSize = + sizeof(List); + interface->commandListOK = 1; ret = 1; } else { - if(strcmp(interface->buffer, - INTERFACE_LIST_MODE_END) - ==0) - { - commandError(interface->fp, - ACK_ERROR_NOT_LIST, - "not in command list mode"); - ret = -1; - } - else { - DEBUG("interface %i: process command \"%s\"\n",interface->num,interface->buffer); - ret = processCommand( + DEBUG("interface %i: process command \"%s\"\n",interface->num,interface->buffer); + ret = processCommand( interface->fp, &(interface-> permission), interface->buffer); - DEBUG("interface %i: command returned %i\n",interface->num,ret); - } + DEBUG("interface %i: command returned %i\n",interface->num,ret); if(ret==0) { commandSuccess(interface->fp); } @@ -648,4 +651,3 @@ void printInterfaceOutBuffer(Interface * interface) { interface->outBuflen = 0; } -/* vim:set shiftwidth=4 tabstop=8 expandtab: */ -- cgit v1.2.3