Changeset 625:49e04c35dc9e in roaraudio
- Timestamp:
- 08/20/08 13:00:46 (16 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/streams.c
r609 r625 615 615 struct roar_stream * s; 616 616 struct roar_stream_server * ss; 617 void * obuf; 618 int olen; 619 int need_to_free = 0; 617 620 618 621 if ( g_streams[id] == NULL ) … … 631 634 ROAR_DBG("streams_send_mon(id=%i): fh = %i", id, fh); 632 635 636 if ( s->info.channels != g_sa->channels || s->info.bits != g_sa->bits || 637 s->info.rate != g_sa->rate || s->info.codec != g_sa->codec ) { 638 olen = ROAR_OUTPUT_CALC_OUTBUFSIZE(&(s->info)); // we hope g_output_buffer_len 639 // is ROAR_OUTPUT_CALC_OUTBUFSIZE(g_sa) here 640 if ( (obuf = malloc(olen)) == NULL ) 641 return -1; 642 643 need_to_free = 1; 644 645 ROAR_DBG("streams_send_mon(id=%i): obuf=%p, olen=%i", id, obuf, olen); 646 647 if ( roar_conv(obuf, g_output_buffer, ROAR_OUTPUT_BUFFER_SAMPLES*g_sa->channels, g_sa, &(s->info)) == -1 ) { 648 free(obuf); 649 return -1; 650 } 651 } else { 652 obuf = g_output_buffer; 653 olen = g_output_buffer_len; 654 } 655 633 656 errno = 0; 634 657 635 658 if ( ss->codecfilter == -1 ) { 636 if ( write(fh, g_output_buffer, g_output_buffer_len) == g_output_buffer_len ) 659 if ( write(fh, obuf, olen) == olen ) { 660 if ( need_to_free ) free(obuf); 637 661 return 0; 662 } 638 663 } else { 639 if ( codecfilter_write(ss->codecfilter_inst, ss->codecfilter, g_output_buffer, g_output_buffer_len) 640 == g_output_buffer_len ) { 664 if ( codecfilter_write(ss->codecfilter_inst, ss->codecfilter, obuf, olen) 665 == olen ) { 666 if ( need_to_free ) free(obuf); 641 667 return 0; 642 668 } else { // we cann't retry on codec filetered streams 669 if ( need_to_free ) free(obuf); 643 670 streams_delete(id); 644 671 return -1; … … 652 679 usleep(100); // 0.1ms 653 680 654 if ( write(fh, g_output_buffer, g_output_buffer_len) == g_output_buffer_len ) 681 if ( write(fh, obuf, olen) == olen ) { 682 if ( need_to_free ) free(obuf); 655 683 return 0; 684 } 656 685 } 657 686 658 687 // ug... error... delete stream! 659 688 689 if ( need_to_free ) free(obuf); 660 690 streams_delete(id); 661 691
Note: See TracChangeset
for help on using the changeset viewer.