Changeset 4625:b38e2e191e5b in roaraudio
- Timestamp:
- 11/27/10 03:42:03 (13 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r4620 r4625 11 11 * Corrected error codes in VS API (Closes: #90) 12 12 * Updated reassigned commands (GET_ACL->AUTHCTL, SET_ACL->ACLCTL) 13 * Updated ring buffer code (Closes: #91) 13 14 14 15 v. 0.4beta1 - Mon Nov 01 2010 16:14 CET -
include/libroar/buffer.h
r4522 r4625 99 99 int roar_buffer_ring_write (struct roar_buffer * buf, void * data, size_t * len); 100 100 101 int roar_buffer_ring_avail(struct roar_buffer * buf, size_t * readlen, size_t * writelen); 102 101 103 #endif 102 104 -
libroar/buffer.c
r4624 r4625 577 577 size_t tmp; 578 578 579 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = ?", buf, data, len); 580 579 581 if ( buf == NULL || len == NULL ) 580 582 return -1; … … 618 620 619 621 if ( ring->write_pos >= ring->read_pos ) { 622 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = ?", buf, data, len); 623 620 624 havelen = buf->user_len - ring->write_pos; 621 625 … … 642 646 643 647 *len = done; 648 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = 0", buf, data, len); 644 649 return 0; 645 650 } else { 651 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = ?", buf, data, len); 652 646 653 // test for buffer-is-full: 647 654 if ( (ring->write_pos + 1) == ring->read_pos ) { 648 655 *len = 0; 656 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = 0", buf, data, len); 649 657 return 0; 650 658 } 651 659 660 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = ?", buf, data, len); 661 652 662 havelen = ring->read_pos - ring->write_pos - 1; 653 663 … … 657 667 memcpy(buf->user_data+ring->write_pos, data, havelen); 658 668 669 ring->write_pos += havelen; 659 670 *len = havelen; 671 672 ROAR_DBG("roar_buffer_ring_write(buf=%p, data=%p, len=%p) = 0", buf, data, len); 660 673 return 0; 661 674 } … … 667 680 } 668 681 682 int roar_buffer_ring_avail(struct roar_buffer * buf, size_t * readlen, size_t * writelen) { 683 struct roar_buffer_ring * ring; 684 size_t have; 685 686 if ( buf == NULL ) 687 return -1; 688 689 if ( !(buf->flags & ROAR_BUFFER_FLAG_RING) ) 690 return -1; 691 692 ring = &(buf->meta.ring); 693 694 ROAR_DBG("roar_buffer_ring_avail(buf=%p, readlen=%p, writelen=%p) = ?", buf, readlen, writelen); 695 696 if ( readlen != NULL ) { 697 have = 0; 698 699 if ( ring->write_pos >= ring->read_pos ) { 700 have = ring->write_pos - ring->read_pos; 701 } else { 702 have = buf->user_len - ring->read_pos; 703 have += ring->write_pos; 704 have -= 1; 705 } 706 707 *readlen = have; 708 ROAR_DBG("roar_buffer_ring_avail(buf=%p, readlen=%p, writelen=%p): readlen=%llu", buf, readlen, writelen, (unsigned long long int)have); 709 } 710 711 if ( writelen != NULL ) { 712 have = 0; 713 714 if ( ring->read_pos > ring->write_pos ) { 715 have = ring->read_pos - ring->write_pos - 1; 716 } else { 717 have = buf->user_len - ring->write_pos; 718 have += ring->read_pos; 719 have -= 1; 720 } 721 722 *writelen = have; 723 ROAR_DBG("roar_buffer_ring_avail(buf=%p, readlen=%p, writelen=%p): readlen=%llu", buf, readlen, writelen, (unsigned long long int)have); 724 } 725 726 ROAR_DBG("roar_buffer_ring_avail(buf=%p, readlen=%p, writelen=%p) = 0", buf, readlen, writelen); 727 728 return 0; 729 } 730 669 731 //ll
Note: See TracChangeset
for help on using the changeset viewer.