Changeset 881:fdf97832f81f in roaraudio
- Timestamp:
- 11/16/08 00:31:12 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
include/libroar/vio.h
r690 r881 40 40 struct roar_vio_calls { 41 41 void * inst; 42 /* 42 43 ssize_t (*read) (int fd, void *buf, size_t count, void * inst); 43 44 ssize_t (*write)(int fd, void *buf, size_t count, void * inst); 44 45 off_t (*lseek)(int fildes, off_t offset, int whence, void * inst); 46 */ 47 ssize_t (*read )(struct roar_vio_calls * vio, void *buf, size_t count); 48 ssize_t (*write)(struct roar_vio_calls * vio, void *buf, size_t count); 49 off_t (*lseek)(struct roar_vio_calls * vio, off_t offset, int whence); 45 50 }; 46 51 47 52 int roar_vio_init_calls (struct roar_vio_calls * calls); 48 53 54 int roar_vio_set_inst (struct roar_vio_calls * vio, void * inst); 55 int roar_vio_set_fh (struct roar_vio_calls * vio, int fh); 56 57 int roar_vio_get_fh (struct roar_vio_calls * vio); 58 59 ssize_t roar_vio_read (struct roar_vio_calls * vio, void *buf, size_t count); 60 ssize_t roar_vio_write(struct roar_vio_calls * vio, void *buf, size_t count); 61 off_t roar_vio_lseek(struct roar_vio_calls * vio, off_t offset, int whence); 62 63 64 // possible VIOs: 65 66 // basic 67 ssize_t roar_vio_basic_read (struct roar_vio_calls * vio, void *buf, size_t count); 68 ssize_t roar_vio_basic_write(struct roar_vio_calls * vio, void *buf, size_t count); 69 off_t roar_vio_basic_lseek(struct roar_vio_calls * vio, off_t offset, int whence); 70 49 71 #endif 50 72 -
libroar/stream.c
r773 r881 384 384 {ROAR_CODEC_ROAR_SPEEX, "roar_speex" }, 385 385 386 // RAUM: 387 {ROAR_CODEC_RAUM, "raum" }, 388 {ROAR_CODEC_RAUM_VORBIS, "raum_vorbis"}, 389 386 390 // RIFF/WAVE like: 387 391 {ROAR_CODEC_RIFF_WAVE, "riff_wave" }, -
libroar/vio.c
r690 r881 41 41 memset((void*)calls, 0, sizeof(struct roar_vio_calls)); 42 42 43 /* 43 44 calls->read = (ssize_t (*)(int fd, void *buf, size_t count, void * inst))read; 44 45 calls->write = (ssize_t (*)(int fd, void *buf, size_t count, void * inst))write; 45 46 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; 46 52 47 53 return 0; 48 54 } 49 55 56 int 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 65 int roar_vio_set_fh (struct roar_vio_calls * vio, int fh) { 66 return roar_vio_set_inst(vio, (void*)(fh + 1)); 67 } 68 69 int 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 77 ssize_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 87 ssize_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 97 off_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 108 ssize_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 112 ssize_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 116 off_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 50 120 //ll -
roard/streams.c
r826 r881 629 629 done = 0; 630 630 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 ) 632 632 done += req; 633 633 } … … 714 714 715 715 if ( ss->codecfilter == -1 ) { 716 if ( write(fh, obuf, olen) == olen ) {716 if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 717 717 if ( need_to_free ) free(obuf); 718 718 return 0; … … 736 736 usleep(100); // 0.1ms 737 737 738 if ( write(fh, obuf, olen) == olen ) {738 if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 739 739 if ( need_to_free ) free(obuf); 740 740 return 0; … … 772 772 ROAR_DBG("streams_send_filter(id=%i): fh = %i", id, fh); 773 773 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 ) { 775 775 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 ) { 777 777 streams_delete(id); 778 778 return -1; … … 821 821 return -1; 822 822 823 roar_vio_set_fh(&(stream->vio), ROAR_STREAM(stream)->fh); 824 823 825 if ( ! stream->vio.read ) 824 826 return -1; 825 827 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 ) { 827 829 len += r; 828 830 buf += r; … … 844 846 return -1; 845 847 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); 850 851 } 851 852
Note: See TracChangeset
for help on using the changeset viewer.