Changeset 3178:0882f7dc9b71 in roaraudio for libroaross
- Timestamp:
- 01/15/10 22:38:58 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroaross/libroaross.c
r3177 r3178 109 109 int stream_dir; 110 110 int stream_opened; 111 size_t stream_buffersize; 112 size_t readc, writec; 111 113 }; 112 114 … … 688 690 689 691 // ------------------------------------- 692 // buffer size calculation: 693 // ------------------------------------- 694 695 static size_t _get_stream_buffersize (struct handle * handle) { 696 if ( handle->stream_buffersize ) 697 return handle->stream_buffersize; 698 699 return handle->stream_buffersize = handle->stream.info.rate * 700 handle->stream.info.channels * 701 handle->stream.info.bits / 800; 702 } 703 704 // ------------------------------------- 690 705 // emulated functions follow: 691 706 // ------------------------------------- … … 734 749 ssize_t write(int fd, const void *buf, size_t count) { 735 750 struct pointer * pointer; 751 ssize_t ret; 736 752 737 753 _init(); … … 745 761 } 746 762 } 747 return roar_vio_write(&(pointer->handle->stream_vio), (char*)buf, count); 763 ret = roar_vio_write(&(pointer->handle->stream_vio), (char*)buf, count); 764 if ( ret > 0 ) 765 pointer->handle->writec += ret; 766 return ret; 748 767 } else { 749 768 errno = EINVAL; … … 757 776 ssize_t read(int fd, void *buf, size_t count) { 758 777 struct pointer * pointer; 778 ssize_t ret; 759 779 760 780 _init(); … … 768 788 } 769 789 } 770 return roar_vio_read(&(pointer->handle->stream_vio), buf, count); 790 ret = roar_vio_read(&(pointer->handle->stream_vio), buf, count); 791 if ( ret > 0 ) 792 pointer->handle->writec += ret; 793 return ret; 771 794 } else { 772 795 errno = EINVAL; … … 784 807 int * ip = NULL; 785 808 audio_buf_info * bi; 809 count_info * ci; 786 810 #ifdef va_argp 787 811 va_list args; … … 824 848 break; 825 849 case SNDCTL_DSP_GETBLKSIZE: 826 *ip = handle->stream.info.rate * handle->stream.info.channels * handle->stream.info.bits / 800;850 *ip = _get_stream_buffersize(handle); 827 851 return 0; 828 852 break; … … 839 863 bi = argp; 840 864 memset(bi, 0, sizeof(*bi)); 841 bi->bytes = handle->stream.info.rate * handle->stream.info.channels * handle->stream.info.bits / 800;865 bi->bytes = _get_stream_buffersize(handle); 842 866 bi->fragments = 1; 843 867 bi->fragsize = bi->bytes; 844 868 bi->fragstotal = 1; 869 return 0; 870 break; 871 case SNDCTL_DSP_GETOPTR: 872 ci = argp; 873 memset(ci, 0, sizeof(*ci)); 874 ci->bytes = handle->writec; 875 ci->blocks = ci->bytes / _get_stream_buffersize(handle); 876 ci->ptr = 0; 877 return 0; 878 break; 879 case SNDCTL_DSP_GETIPTR: 880 ci = argp; 881 memset(ci, 0, sizeof(*ci)); 882 ci->bytes = handle->readc; 883 ci->blocks = ci->bytes / _get_stream_buffersize(handle); 884 ci->ptr = 0; 845 885 return 0; 846 886 break;
Note: See TracChangeset
for help on using the changeset viewer.