Mercurial > mplayer.hg
view TOOLS/buffer.c @ 3161:950496933384
configure cleanups:
a few typos
a few reordering (C src / _blah=no / cc_check && _blah=yes)
preliminary support to display a summary of enabled modules at the end
of the run of ./configure (only AO & VO right now/check for _{a,v}omodules)
cleanups of config.mak : X_LIBS gathered everything and whatever -
no longer the case
Makefile cleanups to match the ones done in config.mak
NB: it still compiles here (but I'm pretty sure this will break on some systems :)
author | pl |
---|---|
date | Tue, 27 Nov 2001 17:58:29 +0000 |
parents | 064a6422fd42 |
children |
line wrap: on
line source
// General purpose Ring-buffering routines #define BUFFSIZE (1024) #define NUM_BUFS (64) static unsigned char *buffer[NUM_BUFS]; static unsigned int buf_read=0; static unsigned int buf_write=0; static unsigned int buf_read_pos=0; static unsigned int buf_write_pos=0; static int full_buffers=0; static int buffered_bytes=0; static int write_buffer(unsigned char* data,int len){ int len2=0; int x; while(len>0){ if(full_buffers==NUM_BUFS) break; x=BUFFSIZE-buf_write_pos; if(x>len) x=len; memcpy(buffer[buf_write]+buf_write_pos,data+len2,x); len2+=x; len-=x; buffered_bytes+=x; buf_write_pos+=x; if(buf_write_pos>=BUFFSIZE){ // block is full, find next! buf_write=(buf_write+1)%NUM_BUFS; ++full_buffers; buf_write_pos=0; } } return len2; } static int read_buffer(unsigned char* data,int len){ int len2=0; int x; while(len>0){ if(full_buffers==0) break; // no more data buffered! x=BUFFSIZE-buf_read_pos; if(x>len) x=len; memcpy(data+len2,buffer[buf_read]+buf_read_pos,x); len2+=x; len-=x; buffered_bytes-=x; buf_read_pos+=x; if(buf_read_pos>=BUFFSIZE){ // block is empty, find next! buf_read=(buf_read+1)%NUM_BUFS; --full_buffers; buf_read_pos=0; } } return len2; } static int get_space(){ return (NUM_BUFS-full_buffers)*BUFFSIZE - buf_write_pos; } static int get_delay(){ return buffered_bytes; } int main(int argc,char* argv[]){ int i; for(i=0;i<NUM_BUFS;i++) buffer[i]=malloc(BUFFSIZE); return 0; }