Changeset 1215:5cf113ac883c in roaraudio
- Timestamp:
- 02/19/09 15:32:56 (15 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r1214 r1215 10 10 * set fragment size for OSS driver 11 11 * fixed some minor bugs 12 * changed buffer interface a bit to support non buffer alloced buffers 12 13 13 14 v. 0.2beta0 - Wed Feb 04 2009 -
include/libroar/buffer.h
r904 r1215 38 38 #include <roaraudio.h> 39 39 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 40 46 struct roar_buffer { 41 47 size_t len; 42 48 size_t user_len; 49 int flags; 43 50 void * data; 44 51 void * user_data; … … 56 63 57 64 int roar_buffer_new (struct roar_buffer ** buf, size_t len); 65 int roar_buffer_new_no_ma(struct roar_buffer ** buf, size_t len, void * data); // no internal malloc 58 66 int roar_buffer_free (struct roar_buffer * buf); 59 67 int roar_buffer_delete (struct roar_buffer * buf, struct roar_buffer ** next); … … 74 82 int roar_buffer_get_len (struct roar_buffer * buf, size_t * len); 75 83 84 int roar_buffer_set_flag (struct roar_buffer * buf, int flag, int reset); 85 int roar_buffer_get_flag (struct roar_buffer * buf, int flag); 86 76 87 int roar_buffer_duplicate (struct roar_buffer * buf, struct roar_buffer ** copy); 77 88 -
libroar/buffer.c
r996 r1215 36 36 37 37 int 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 58 int roar_buffer_new_no_ma(struct roar_buffer ** buf, size_t len, void * data) { // no internal malloc 38 59 struct roar_buffer * new; 39 60 40 61 ROAR_DBG("buffer_new(buf=%p, len=%i) = ?", buf, len); 62 63 if ( buf == NULL || data == NULL ) 64 return -1; 41 65 42 66 if ((new = malloc(sizeof(struct roar_buffer))) == NULL) { … … 45 69 } 46 70 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; 52 74 53 75 new->user_data = new->data; … … 76 98 } 77 99 78 free(buf->data); 100 if ( roar_buffer_get_flag(buf, ROAR_BUFFER_FLAG_NOFREE) != 1 ) 101 free(buf->data); 102 79 103 free(buf); 80 104 … … 245 269 } 246 270 271 int 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 283 int 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 247 290 int roar_buffer_duplicate (struct roar_buffer * buf, struct roar_buffer ** copy) { 248 291 struct roar_buffer * cur = buf;
Note: See TracChangeset
for help on using the changeset viewer.