Changeset 2146:da70b6692089 in roaraudio
- Timestamp:
- 07/24/09 15:17:19 (15 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
roard/streams.c
r2102 r2146 1151 1151 1152 1152 1153 #define _return(x) if ( need_to_free ) roar_buffer_free(bufbuf); return (x) 1153 1154 int streams_send_mon (int id) { 1154 1155 // int fh; 1155 1156 struct roar_stream * s; 1156 1157 struct roar_stream_server * ss; 1158 struct roar_buffer * bufbuf = NULL; 1157 1159 void * obuf; 1158 1160 int olen; … … 1204 1206 olen = ROAR_OUTPUT_CALC_OUTBUFSIZE(&(s->info)); // we hope g_output_buffer_len 1205 1207 // is ROAR_OUTPUT_CALC_OUTBUFSIZE(g_sa) here 1206 if ( (obuf = malloc(olen)) == NULL)1208 if ( roar_buffer_new(&bufbuf, olen) == -1 ) 1207 1209 return -1; 1208 1210 1211 if ( roar_buffer_get_data(bufbuf, &obuf) == -1 ) { 1212 _return(-1); 1213 } 1214 1209 1215 need_to_free = 1; 1210 1216 … … 1212 1218 1213 1219 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); 1216 1221 } 1217 1222 } else { … … 1224 1229 if ( ss->codecfilter == -1 ) { 1225 1230 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 } 1228 1234 1229 1235 if ( (ret = stream_vio_s_write(ss, obuf, olen)) == olen ) { 1230 if ( need_to_free ) free(obuf);1231 1236 s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 1232 return 0;1237 _return(0); 1233 1238 } 1234 1239 1235 1240 if ( ret > 0 && errno == 0 ) { 1236 1241 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);1238 1242 s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), ret)*s->info.channels); 1239 return 0;1243 _return(0); 1240 1244 } 1241 1245 } else { … … 1243 1247 if ( codecfilter_write(ss->codecfilter_inst, ss->codecfilter, obuf, olen) 1244 1248 == olen ) { 1245 if ( need_to_free ) free(obuf);1246 1249 s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 1247 return 0;1250 _return(0); 1248 1251 } else { // we cann't retry on codec filetered streams 1249 1252 if ( errno != EAGAIN ) { 1250 if ( need_to_free ) free(obuf);1251 1253 streams_delete(id); 1252 return -1;1254 _return(-1); 1253 1255 } 1254 1256 } … … 1264 1266 1265 1267 if ( stream_vio_s_write(ss, obuf, olen) == olen ) { 1266 if ( need_to_free ) free(obuf);1267 1268 s->pos = ROAR_MATH_OVERFLOW_ADD(s->pos, ROAR_OUTPUT_CALC_OUTBUFSAMP(&(s->info), olen)*s->info.channels); 1268 return 0;1269 _return(0); 1269 1270 } else if ( errno == EAGAIN ) { 1270 1271 ROAR_WARN("streams_send_mon(id=%i): Can not send data to client: %s", id, strerror(errno)); 1271 return 0;1272 _return(0); 1272 1273 } 1273 1274 } … … 1275 1276 // ug... error... delete stream! 1276 1277 1277 if ( need_to_free ) free(obuf);1278 1278 streams_delete(id); 1279 1279 1280 return -1; 1281 } 1280 _return(-1); 1281 } 1282 #undef _return 1282 1283 1283 1284 int streams_send_filter(int id) {
Note: See TracChangeset
for help on using the changeset viewer.