Changeset 2146:da70b6692089 in roaraudio


Ignore:
Timestamp:
07/24/09 15:17:19 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

updated streams_send_mon() to use a roar_buffer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roard/streams.c

    r2102 r2146  
    11511151 
    11521152 
     1153#define _return(x) if ( need_to_free ) roar_buffer_free(bufbuf); return (x) 
    11531154int streams_send_mon   (int id) { 
    11541155// int fh; 
    11551156 struct roar_stream        *   s; 
    11561157 struct roar_stream_server *  ss; 
     1158 struct roar_buffer        *  bufbuf = NULL; 
    11571159 void  * obuf; 
    11581160 int     olen; 
     
    12041206  olen = ROAR_OUTPUT_CALC_OUTBUFSIZE(&(s->info)); // we hope g_output_buffer_len 
    12051207                                                  // is ROAR_OUTPUT_CALC_OUTBUFSIZE(g_sa) here 
    1206   if ( (obuf = malloc(olen)) == NULL ) 
     1208  if ( roar_buffer_new(&bufbuf, olen) == -1 ) 
    12071209   return -1; 
    12081210 
     1211  if ( roar_buffer_get_data(bufbuf, &obuf) == -1 ) { 
     1212   _return(-1); 
     1213  } 
     1214 
    12091215  need_to_free = 1; 
    12101216 
     
    12121218 
    12131219  if ( roar_conv(obuf, g_output_buffer, ROAR_OUTPUT_BUFFER_SAMPLES*g_sa->channels, g_sa, &(s->info)) == -1 ) { 
    1214    free(obuf); 
    1215    return -1; 
     1220   _return(-1); 
    12161221  } 
    12171222 } else { 
     
    12241229 if ( ss->codecfilter == -1 ) { 
    12251230  ROAR_DBG("streams_send_mon(id=%i): not a CF stream", id); 
    1226   if ( s->fh == -1 && roar_vio_get_fh(&(ss->vio)) == -1 ) 
    1227    return 0; 
     1231  if ( s->fh == -1 && roar_vio_get_fh(&(ss->vio)) == -1 ) { 
     1232   _return(0); 
     1233  } 
    12281234 
    12291235  if ( (ret = stream_vio_s_write(ss, obuf, olen)) == olen ) { 
    1230    if ( need_to_free ) free(obuf); 
    12311236   s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 
    1232    return 0; 
     1237   _return(0); 
    12331238  } 
    12341239 
    12351240  if ( ret > 0 && errno == 0 ) { 
    12361241   ROAR_WARN("streams_send_mon(id=%i): Overrun in stream: wrote %i of %i bytes, %i bytes missing", id, (int)ret, olen, olen-(int)ret); 
    1237    if ( need_to_free ) free(obuf); 
    12381242   s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), ret)*s->info.channels); 
    1239    return 0; 
     1243   _return(0); 
    12401244  } 
    12411245 } else { 
     
    12431247  if ( codecfilter_write(ss->codecfilter_inst, ss->codecfilter, obuf, olen) 
    12441248            == olen ) { 
    1245    if ( need_to_free ) free(obuf); 
    12461249   s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 
    1247    return 0; 
     1250   _return(0); 
    12481251  } else { // we cann't retry on codec filetered streams 
    12491252   if ( errno != EAGAIN ) { 
    1250     if ( need_to_free ) free(obuf); 
    12511253    streams_delete(id); 
    1252     return -1; 
     1254    _return(-1); 
    12531255   } 
    12541256  } 
     
    12641266 
    12651267  if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 
    1266    if ( need_to_free ) free(obuf); 
    12671268   s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 
    1268    return 0; 
     1269   _return(0); 
    12691270  } else if ( errno == EAGAIN ) { 
    12701271   ROAR_WARN("streams_send_mon(id=%i): Can not send data to client: %s", id, strerror(errno)); 
    1271    return 0; 
     1272   _return(0); 
    12721273  } 
    12731274 } 
     
    12751276 // ug... error... delete stream! 
    12761277 
    1277  if ( need_to_free ) free(obuf); 
    12781278 streams_delete(id); 
    12791279 
    1280  return -1; 
    1281 } 
     1280 _return(-1); 
     1281} 
     1282#undef _return 
    12821283 
    12831284int streams_send_filter(int id) { 
Note: See TracChangeset for help on using the changeset viewer.