Changeset 881:fdf97832f81f in roaraudio


Ignore:
Timestamp:
11/16/08 00:31:12 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

redesigned the VIO abstarction layer a lot

Files:
4 edited

Legend:

Unmodified
Added
Removed
  • include/libroar/vio.h

    r690 r881  
    4040struct roar_vio_calls { 
    4141 void * inst; 
     42/* 
    4243 ssize_t (*read) (int fd, void *buf, size_t count, void * inst); 
    4344 ssize_t (*write)(int fd, void *buf, size_t count, void * inst); 
    4445 off_t   (*lseek)(int fildes, off_t offset, int whence, void * inst); 
     46*/ 
     47ssize_t (*read )(struct roar_vio_calls * vio, void *buf, size_t count); 
     48ssize_t (*write)(struct roar_vio_calls * vio, void *buf, size_t count); 
     49off_t   (*lseek)(struct roar_vio_calls * vio, off_t offset, int whence); 
    4550}; 
    4651 
    4752int roar_vio_init_calls (struct roar_vio_calls * calls); 
    4853 
     54int roar_vio_set_inst (struct roar_vio_calls * vio, void * inst); 
     55int roar_vio_set_fh   (struct roar_vio_calls * vio, int fh); 
     56 
     57int roar_vio_get_fh   (struct roar_vio_calls * vio); 
     58 
     59ssize_t roar_vio_read (struct roar_vio_calls * vio, void *buf, size_t count); 
     60ssize_t roar_vio_write(struct roar_vio_calls * vio, void *buf, size_t count); 
     61off_t   roar_vio_lseek(struct roar_vio_calls * vio, off_t offset, int whence); 
     62 
     63 
     64// possible VIOs: 
     65 
     66// basic 
     67ssize_t roar_vio_basic_read (struct roar_vio_calls * vio, void *buf, size_t count); 
     68ssize_t roar_vio_basic_write(struct roar_vio_calls * vio, void *buf, size_t count); 
     69off_t   roar_vio_basic_lseek(struct roar_vio_calls * vio, off_t offset, int whence); 
     70 
    4971#endif 
    5072 
  • libroar/stream.c

    r773 r881  
    384384 {ROAR_CODEC_ROAR_SPEEX,  "roar_speex" }, 
    385385 
     386 // RAUM: 
     387 {ROAR_CODEC_RAUM,        "raum"       }, 
     388 {ROAR_CODEC_RAUM_VORBIS, "raum_vorbis"}, 
     389 
    386390 // RIFF/WAVE like: 
    387391 {ROAR_CODEC_RIFF_WAVE,   "riff_wave"  }, 
  • libroar/vio.c

    r690 r881  
    4141 memset((void*)calls, 0, sizeof(struct roar_vio_calls)); 
    4242 
     43/* 
    4344 calls->read  = (ssize_t (*)(int fd, void *buf, size_t count,      void * inst))read; 
    4445 calls->write = (ssize_t (*)(int fd, void *buf, size_t count,      void * inst))write; 
    4546 calls->lseek = (off_t   (*)(int fildes, off_t offset, int whence, void * inst))lseek; 
     47*/ 
     48 
     49 calls->read  = roar_vio_basic_read; 
     50 calls->write = roar_vio_basic_write; 
     51 calls->lseek = roar_vio_basic_lseek; 
    4652 
    4753 return 0; 
    4854} 
    4955 
     56int roar_vio_set_inst (struct roar_vio_calls * vio, void * inst) { 
     57 if ( vio == NULL ) 
     58  return -1; 
     59 
     60 vio->inst = inst; 
     61 
     62 return 0; 
     63} 
     64 
     65int roar_vio_set_fh   (struct roar_vio_calls * vio, int fh) { 
     66 return roar_vio_set_inst(vio, (void*)(fh + 1)); 
     67} 
     68 
     69int roar_vio_get_fh   (struct roar_vio_calls * vio) { 
     70 if ( vio == NULL ) 
     71  return -1; 
     72 
     73 return ((int)vio->inst) - 1; 
     74} 
     75 
     76 
     77ssize_t roar_vio_read (struct roar_vio_calls * vio, void *buf, size_t count) { 
     78 if ( vio == NULL ) 
     79  return -1; 
     80 
     81 if ( vio->read == NULL ) 
     82  return -1; 
     83 
     84 return vio->read(vio, buf, count); 
     85} 
     86 
     87ssize_t roar_vio_write(struct roar_vio_calls * vio, void *buf, size_t count) { 
     88 if ( vio == NULL ) 
     89  return -1; 
     90 
     91 if ( vio->write == NULL ) 
     92  return -1; 
     93 
     94 return vio->write(vio, buf, count); 
     95} 
     96 
     97off_t   roar_vio_lseek(struct roar_vio_calls * vio, off_t offset, int whence) { 
     98 if ( vio == NULL ) 
     99  return -1; 
     100 
     101 if ( vio->lseek == NULL ) 
     102  return -1; 
     103 
     104 return vio->lseek(vio, offset, whence); 
     105} 
     106 
     107 
     108ssize_t roar_vio_basic_read (struct roar_vio_calls * vio, void *buf, size_t count) { 
     109 return read(roar_vio_get_fh(vio), buf, count); 
     110} 
     111 
     112ssize_t roar_vio_basic_write(struct roar_vio_calls * vio, void *buf, size_t count) { 
     113 return write(roar_vio_get_fh(vio), buf, count); 
     114} 
     115 
     116off_t   roar_vio_basic_lseek(struct roar_vio_calls * vio, off_t offset, int whence) { 
     117 return lseek(roar_vio_get_fh(vio), offset, whence); 
     118} 
     119 
    50120//ll 
  • roard/streams.c

    r826 r881  
    629629  done = 0; 
    630630  while (req > 0 && done != realreq) { 
    631    if ( (req = read(fh, buf+done, realreq-done)) > 0 ) 
     631   if ( (req = stream_vio_s_read(ss, buf+done, realreq-done)) > 0 ) 
    632632    done += req; 
    633633  } 
     
    714714 
    715715 if ( ss->codecfilter == -1 ) { 
    716   if ( write(fh, obuf, olen) == olen ) { 
     716  if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 
    717717   if ( need_to_free ) free(obuf); 
    718718   return 0; 
     
    736736  usleep(100); // 0.1ms 
    737737 
    738   if ( write(fh, obuf, olen) == olen ) { 
     738  if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 
    739739   if ( need_to_free ) free(obuf); 
    740740   return 0; 
     
    772772 ROAR_DBG("streams_send_filter(id=%i): fh = %i", id, fh); 
    773773 
    774  if ( write(fh, g_output_buffer, g_output_buffer_len) == g_output_buffer_len ) { 
     774 if ( stream_vio_s_write(ss, g_output_buffer, g_output_buffer_len) == g_output_buffer_len ) { 
    775775  while ( have < g_output_buffer_len ) { 
    776    if ( (len = read(fh, g_output_buffer+have, g_output_buffer_len-have)) < 1 ) { 
     776   if ( (len = stream_vio_s_read(ss, g_output_buffer+have, g_output_buffer_len-have)) < 1 ) { 
    777777    streams_delete(id); 
    778778    return -1; 
     
    821821  return -1; 
    822822 
     823 roar_vio_set_fh(&(stream->vio), ROAR_STREAM(stream)->fh); 
     824 
    823825 if ( ! stream->vio.read ) 
    824826  return -1; 
    825827 
    826  while ( (r = stream->vio.read(ROAR_STREAM(stream)->fh, buf, count, stream->vio.inst)) > 0 ) { 
     828 while ( (r = roar_vio_read(&(stream->vio), buf, count)) > 0 ) { 
    827829  len   += r; 
    828830  buf   += r; 
     
    844846  return -1; 
    845847 
    846  if ( ! stream->vio.write ) 
    847   return -1; 
    848  
    849  return stream->vio.write(ROAR_STREAM(stream)->fh, buf, count, stream->vio.inst); 
     848 roar_vio_set_fh(&(stream->vio), ROAR_STREAM(stream)->fh); 
     849 
     850 return roar_vio_write(&(stream->vio), buf, count); 
    850851} 
    851852 
Note: See TracChangeset for help on using the changeset viewer.