Mercurial > ~darius > hgwebdir.cgi > mikmod
diff playercode/stream.c @ 4:5d614bcc4287
Initial entry of mikmod into the CVS tree.
author | darius |
---|---|
date | Fri, 23 Jan 1998 16:05:08 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/playercode/stream.c Fri Jan 23 16:05:08 1998 +0000 @@ -0,0 +1,134 @@ +/* + File: STREAM.C + + Description: + Streaming Audio module for MikMod. + + Portability: + All compilers - All systems + +*/ + + +#include "mikmod.h" + + +int stream_bufsize = 100; // in 1/100th seconds + +static BOOL is_streaming = 0; +static MSTREAM *firststream = NULL; + +static BOOL active; + +FILE *stream_fp; +SLONG stream_seekpos; +SLONG stream_reppos; + +void MikMod_RegisterStream(MSTREAM *stream) +{ + MSTREAM *cruise = firststream; + + if(cruise!=NULL) + { while(cruise->next!=NULL) cruise = cruise->next; + cruise->next = stream; + } else + firststream = stream; +} + + +BOOL Stream_PlayFN(CHAR *filename) +{ + return 0; +} + + +BOOL Stream_PlayFP(FILE *fp) +{ + BOOL ok; + MSTREAM *l; + + stream_fp = fp; + _mm_errno = 0; + _mm_critical = 0; + + _mm_iobase_setcur(stream_fp); + + // Try to find a loader that recognizes the stream + + for(l=firststream; l!=NULL; l=l->next) + { _mm_rewind(stream_fp); + if(l->Test()) break; + } + + if(l==NULL) + { _mm_errno = MMERR_NOT_A_STREAM; + if(_mm_errorhandler!=NULL) _mm_errorhandler(); + _mm_iobase_revert(); + return 1; + } + + // init stream loader and load the header + if(l->Init()) + { _mm_rewind(stream_fp); + ok = l->Load(); + } + + // free loader allocations + l->Cleanup(); + + if(!ok) + { _mm_iobase_revert(); + return 1; + } + + //loadbuf = _mm_malloc(8192); + + _mm_iobase_revert(); + active = 1; + return 0; +} + + +BOOL Stream_Init(ULONG speed, UWORD flags) + +// size = size of buffer in 1/100th seconds + +{ + if(is_streaming) md_driver->StreamExit(); + if(md_driver->StreamInit(speed,flags)) return 1; + is_streaming = 1; + + return 0; +} + + +void Stream_Exit(void) +{ + if(is_streaming) md_driver->StreamExit(); + is_streaming = 0; +} + + +static ULONG last = 0; + +void Stream_Update(void) +{ + ULONG curr; + ULONG todo; + + curr = md_driver->StreamGetPosition(); + if(curr==last) return; + + if(curr>last) + { todo = curr-last; + //SL_LoadStream(,vstream.infmt,vstream.flags,todo,stream_fp); + last += todo; + //if(last>=vstream.size) last = 0; + } else + { //todo = vstream.size-last; + //SL_LoadStream(&vstream.buffer[last],vstream.infmt,vstream.flags,todo,stream_fp); + //SL_LoadStream(vstream.buffer,vstream.infmt,vstream.flags,curr,stream_fp); + last = curr; + } +} +