Changeset 3465:23962b935804 in roaraudio for libroarpulse
- Timestamp:
- 02/13/10 23:23:36 (14 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroarpulse/stream.c
r3464 r3465 58 58 pa_timing_info timinginfo; 59 59 pa_buffer_attr bufattr; 60 pa_stream_direction_t dir; 60 61 struct roar_buffer * iobuffer; 61 62 struct { … … 118 119 ROAR_DBG("pa_stream_new_with_proplist(c=%p, name='%s', ss=%p, map=%p, p=%p) = ?", c, name, ss, map, p); 119 120 120 s->fragments.num = 4;121 s->fragments.num = 8; 121 122 s->fragments.size = 2048; 122 123 … … 183 184 pa_io_event_flags_t events, 184 185 void * userdata) { 186 pa_stream * s = userdata; 187 void * data; 188 size_t len; 189 size_t ret; 190 191 ROAR_DBG("_roar_pa_stream_ioecb(*) = ?"); 192 193 switch (s->dir) { 194 case PA_STREAM_PLAYBACK: 195 if ( s->iobuffer != NULL ) { 196 if ( roar_buffer_get_data(s->iobuffer, &data) == -1 ) 197 return; 198 199 if ( roar_buffer_get_len(s->iobuffer, &len) == -1 ) 200 return; 201 202 if ( (ret = roar_vio_write(&(s->vio), data, len)) == -1 ) 203 return; 204 205 // TODO: handle errors 206 if ( ret == len ) { 207 roar_buffer_next(&(s->iobuffer)); 208 } else { 209 roar_buffer_set_offset(s->iobuffer, ret); 210 } 211 } 212 213 if ( s->iobuffer == NULL ) { 214 ea->io_enable(e, PA_IO_EVENT_HANGUP|PA_IO_EVENT_ERROR); 215 } 216 break; 217 case PA_STREAM_RECORD: 218 break; 219 default: 220 return; 221 } 222 185 223 ROAR_DBG("_roar_pa_stream_ioecb(*) = (void)"); 186 224 } … … 195 233 struct roar_connection * con; 196 234 pa_mainloop_api * api; 197 pa_io_event_flags_t event_flags = PA_IO_EVENT_HANGUP ;235 pa_io_event_flags_t event_flags = PA_IO_EVENT_HANGUP|PA_IO_EVENT_ERROR; 198 236 int fh; 199 237 int ctl = -1; … … 215 253 return -1; 216 254 } 255 256 s->dir = dir; 217 257 218 258 switch (dir) { … … 327 367 int64_t offset, /**< Offset for seeking, must be 0 for upload streams */ 328 368 pa_seek_mode_t seek /**< Seek mode, must be PA_SEEK_RELATIVE for upload streams */) { 369 pa_mainloop_api * api; 329 370 struct roar_buffer * buf; 330 371 void * bufdata; 372 373 ROAR_DBG("pa_stream_write(p=%p, data=%p, length=%llu, free_cb=%p, offset=%lli, seek=%i) = ?", p, data, (long long unsigned int) length, free_cb, offset, seek); 331 374 332 375 // TODO: implement seeking in output buffer … … 374 417 if ( roar_buffer_add(p->iobuffer, buf) == -1 ) 375 418 return -1; 419 } 420 421 if ( p->io_event != NULL ) { 422 api = roar_pa_context_get_api(p->c); 423 if ( api != NULL ) { 424 api->io_enable(p->io_event, PA_IO_EVENT_OUTPUT|PA_IO_EVENT_HANGUP|PA_IO_EVENT_ERROR); 425 } 376 426 } 377 427 … … 430 480 struct roar_buffer_stats stats; 431 481 432 if ( p == NULL ) 482 ROAR_DBG("pa_stream_writable_size(p=%p) = ?", p); 483 484 if ( p == NULL ) { 485 ROAR_DBG("pa_stream_writable_size(p=%p) = 0", p); 433 486 return 0; 434 435 if ( p->iobuffer == NULL ) 487 } 488 489 if ( p->iobuffer == NULL ) { 490 ROAR_DBG("pa_stream_writable_size(p=%p) = %llu", p, (long long unsigned)(p->fragments.num*p->fragments.size)); 491 return p->fragments.num * p->fragments.size / 2; 492 } 493 494 if ( roar_buffer_ring_stats(p->iobuffer, &stats) == -1 ) { 495 ROAR_DBG("pa_stream_writable_size(p=%p) = 0", p); 436 496 return 0; 437 438 if ( roar_buffer_ring_stats(p->iobuffer, &stats) == -1 ) 497 } 498 499 ROAR_DBG("pa_stream_writable_size(p=%p): stats={.parts=%i, .bytes=%i, ...}", p, stats.parts, stats.bytes); 500 501 if ( stats.parts > p->fragments.num ) { 502 ROAR_DBG("pa_stream_writable_size(p=%p) = 0", p); 439 503 return 0; 440 441 if ( stats.parts > p->fragments.num ) 442 return 0; 443 504 } 505 506 if ( stats.parts > (p->fragments.num/2) ) 507 stats.parts = p->fragments.num / 2; 508 509 ROAR_DBG("pa_stream_writable_size(p=%p) = %llu", p, (long long unsigned)((p->fragments.num - stats.parts)*p->fragments.size)); 444 510 return (p->fragments.num - stats.parts)*p->fragments.size; 445 511 }
Note: See TracChangeset
for help on using the changeset viewer.