Changeset 1215:5cf113ac883c in roaraudio


Ignore:
Timestamp:
02/19/09 15:32:56 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added support to buffer system for non alleced buffers

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r1214 r1215  
    1010        * set fragment size for OSS driver 
    1111        * fixed some minor bugs 
     12        * changed buffer interface a bit to support non buffer alloced buffers 
    1213 
    1314v. 0.2beta0 - Wed Feb 04 2009 
  • include/libroar/buffer.h

    r904 r1215  
    3838#include <roaraudio.h> 
    3939 
     40#define ROAR_BUFFER_FLAG_NONE      0 
     41#define ROAR_BUFFER_FLAG_NOFREE    1 
     42 
     43#define ROAR_BUFFER_SET            0 
     44#define ROAR_BUFFER_RESET          1 
     45 
    4046struct roar_buffer { 
    4147 size_t               len; 
    4248 size_t               user_len; 
     49 int                  flags; 
    4350 void               * data; 
    4451 void               * user_data; 
     
    5663 
    5764int roar_buffer_new      (struct roar_buffer ** buf, size_t len); 
     65int roar_buffer_new_no_ma(struct roar_buffer ** buf, size_t len, void * data); // no internal malloc 
    5866int roar_buffer_free     (struct roar_buffer *  buf); 
    5967int roar_buffer_delete   (struct roar_buffer *  buf, struct roar_buffer ** next); 
     
    7482int roar_buffer_get_len  (struct roar_buffer *  buf, size_t *  len); 
    7583 
     84int roar_buffer_set_flag (struct roar_buffer *  buf, int flag, int reset); 
     85int roar_buffer_get_flag (struct roar_buffer *  buf, int flag); 
     86 
    7687int roar_buffer_duplicate (struct roar_buffer *  buf, struct roar_buffer ** copy); 
    7788 
  • libroar/buffer.c

    r996 r1215  
    3636 
    3737int roar_buffer_new      (struct roar_buffer ** buf, size_t len) { 
     38 void * data; 
     39 
     40 if ((data = malloc(len)) == NULL) { 
     41  return -1; 
     42 } 
     43 
     44 if ( roar_buffer_new_no_ma(buf, len, data) == -1 ) { 
     45  free(data); 
     46  return -1; 
     47 } 
     48 
     49 if ( roar_buffer_set_flag(*buf, ROAR_BUFFER_FLAG_NOFREE, ROAR_BUFFER_RESET) == -1 ) { 
     50  roar_buffer_free(*buf); 
     51  free(data); 
     52  return -1; 
     53 } 
     54 
     55 return 0; 
     56} 
     57 
     58int roar_buffer_new_no_ma(struct roar_buffer ** buf, size_t len, void * data) { // no internal malloc 
    3859 struct roar_buffer * new; 
    3960 
    4061 ROAR_DBG("buffer_new(buf=%p, len=%i) = ?", buf, len); 
     62 
     63 if ( buf == NULL || data == NULL ) 
     64  return -1; 
    4165 
    4266 if ((new = malloc(sizeof(struct roar_buffer))) == NULL) { 
     
    4569 } 
    4670 
    47  if ((new->data = malloc(len)) == NULL) { 
    48   free(new); 
    49   *buf = NULL; 
    50   return -1; 
    51  } 
     71 new->data      = data; 
     72 
     73 new->flags     = ROAR_BUFFER_FLAG_NONE|ROAR_BUFFER_FLAG_NOFREE; 
    5274 
    5375 new->user_data = new->data; 
     
    7698 } 
    7799 
    78  free(buf->data); 
     100 if ( roar_buffer_get_flag(buf, ROAR_BUFFER_FLAG_NOFREE) != 1 ) 
     101  free(buf->data); 
     102 
    79103 free(buf); 
    80104 
     
    245269} 
    246270 
     271int roar_buffer_set_flag (struct roar_buffer *  buf, int flag, int reset) { 
     272 if ( buf == NULL ) 
     273  return -1; 
     274 
     275 buf->flags |= flag; 
     276 
     277 if ( reset ) 
     278  buf->flags -= flag; 
     279 
     280 return 0; 
     281} 
     282 
     283int roar_buffer_get_flag (struct roar_buffer *  buf, int flag) { 
     284 if ( buf == NULL ) 
     285  return -1; 
     286 
     287 return buf->flags & flag; 
     288} 
     289 
    247290int roar_buffer_duplicate (struct roar_buffer *  buf, struct roar_buffer ** copy) { 
    248291 struct roar_buffer *  cur = buf; 
Note: See TracChangeset for help on using the changeset viewer.