- Timestamp:
- 01/08/09 22:02:58 (3 years ago)
- Location:
- trunk/fm_server/src
- Files:
-
- 4 modified
-
fm_djmixer.c (modified) (1 diff)
-
fm_input_gst/fm_input_gst.c (modified) (1 diff)
-
fm_mixer.c (modified) (3 diffs)
-
fm_output_alsa.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fm_server/src/fm_djmixer.c
r246 r274 268 268 gdouble value) 269 269 { 270 FmEffectGain *gain ;270 FmEffectGain *gain = NULL; 271 271 272 272 if (port_n > -1) { -
trunk/fm_server/src/fm_input_gst/fm_input_gst.c
r269 r274 514 514 chk = track->read_chunk; 515 515 516 fm_buffer_reset_flags (buffer); 516 /* fm_buffer_reset_flags (buffer);*/ 517 517 518 518 /* Check if we have a new track ready */ -
trunk/fm_server/src/fm_mixer.c
r246 r274 213 213 peer_port->peers_n++; 214 214 215 mixer->buffers[mixer->buffers_n] = fm_buffer_new(MAX_BUFFER_SIZE, FM_CHANNELS_STEREO); 216 // g_print ("APPENDING PORT at %p, buffer base at %p, %d\n", our_port, mixer->buffers[mixer->buffers_n], mixer->buffers_n); 217 mixer->buffers_n++; 218 219 /* add this only at the end */ 215 220 element->sink_ports = g_list_append(element->sink_ports, our_port); 216 217 mixer->buffers[mixer->buffers_n] = fm_buffer_new(MAX_BUFFER_SIZE, FM_CHANNELS_STEREO);218 mixer->buffers_n++;219 221 } 220 222 … … 229 231 /* Careful - we might not have created a sink port yet */ 230 232 if (!element->sink_ports || (mixer->buffers_n == 0)) { 231 fm_buffer_fill_with_silence (buffer);232 FM_BUFFER_USED_SAMPLES (buffer) = FM_BUFFER_REQUESTED (buffer);233 fm_buffer_fill_with_silence (buffer); 234 buffer->used_samples = buffer->requested_samples; 233 235 return; 234 236 } … … 237 239 GList *port = element->sink_ports; 238 240 gint i = 0; 239 240 //g_print("%p\n", element->sync_ref); 241 242 if (element->peer_sync_master) { 243 FM_BUFFER_REQUESTED (mixer->buffers[i]) = FM_BUFFER_REQUESTED (buffer); 244 245 g_print ("Getting data from master port\n"); 246 fm_element_get_buffer (element->peer_sync_master, mixer->buffers[i++], sync); 247 } 241 guint l, m; 242 243 gboolean first_to_mix = TRUE; 248 244 249 245 while (port) { 246 // g_print ("PORT %p, buffer base %p %d\n", port->data, mixer->buffers[i], i); 247 FmBuffer *sink_buffer = mixer->buffers[i]; 248 250 249 FmElementSinkPort *our_port = (FmElementSinkPort *) port->data; 251 250 FmElementSrcPort *peer_port = our_port->peer; 252 251 253 if (element->peer_sync_master == peer_port->owner) 254 continue; 255 256 FM_BUFFER_REQUESTED (mixer->buffers[i]) = FM_BUFFER_REQUESTED (buffer); 257 // g_print("i %d\n", i); 258 fm_element_get_buffer (FM_ELEMENT (peer_port->owner), mixer->buffers[i++], sync); 252 gint samples_needed = buffer->requested_samples; 253 gint mixed_offset = 0; 254 255 while (samples_needed > 0) { 256 sink_buffer->requested_samples = samples_needed; 257 fm_element_get_buffer (FM_ELEMENT (peer_port->owner), sink_buffer, sync); 258 259 /* if (sink_buffer->timestamp_ns >= 0) 260 g_print ("%s: got buffer with timestamp %" G_GINT64_FORMAT "\n", 261 fm_element_get_name (element), sink_buffer->timestamp_ns);*/ 262 263 if (sink_buffer->used_samples != sink_buffer->requested_samples) 264 g_warning ("difference! %d %d", sink_buffer->used_samples, sink_buffer->requested_samples); 265 266 for (l = 0; l < buffer->n_channels; l++) { 267 gfloat *sink_buffer_data = sink_buffer->channel_data[l]; 268 gfloat *mixed_buffer_data = buffer->channel_data[l]/* + mixed_offset*/; 269 270 if (first_to_mix) 271 memcpy (mixed_buffer_data, sink_buffer_data, sink_buffer->used_samples * sizeof (gfloat)); 272 else 273 for (m = 0; m < sink_buffer->used_samples; m++) 274 mixed_buffer_data[m] += sink_buffer_data[m]; 275 } 276 277 samples_needed -= sink_buffer->used_samples; 278 mixed_offset += sink_buffer->used_samples; 279 g_assert (samples_needed >= 0); 280 } 281 282 if (first_to_mix) 283 first_to_mix = FALSE; 259 284 260 285 port = g_list_next (port); 261 } 262 263 /* Copy the first buffer's content */ 264 for (i = 0; i < buffer->n_channels; i++) 265 memcpy(buffer->channel_data[i], mixer->buffers[0]->channel_data[i], FM_BUFFER_REQUESTED(buffer) * sizeof (gfloat)); 266 267 if (mixer->buffers_n == 1) 268 return; 269 270 /* Then add the rest */ 271 gint l, m; 272 for (l = 1; l < mixer->buffers_n; l++) { 273 for (i = 0; i < mixer->buffers[0]->n_channels; i++) { 274 gfloat *this_buffer_data = mixer->buffers[l]->channel_data[i]; 275 gfloat *our_buffer_data = buffer->channel_data[i]; 276 for (m = 0; m < FM_BUFFER_REQUESTED(buffer); m++) 277 our_buffer_data[m] += this_buffer_data[m]; 278 } 279 } 280 281 FM_BUFFER_USED_SAMPLES (buffer) = FM_BUFFER_REQUESTED (buffer); 282 } 286 i++; 287 } 288 289 buffer->used_samples = buffer->requested_samples; 290 } -
trunk/fm_server/src/fm_output_alsa.c
r269 r274 481 481 482 482 while (!output_alsa->stop_processing) { 483 484 fm_buffer_reset (output_alsa->main_buffer); 483 485 484 486 //g_print("asking for %d samples\n", output_alsa->buffer_size_samples); 485 FM_BUFFER_REQUESTED (output_alsa->main_buffer) = output_alsa->buffer_size_samples;486 fm_element_get_buffer_from_src (element, output_alsa->main_buffer, NULL);487 FM_BUFFER_REQUESTED (output_alsa->main_buffer) = output_alsa->buffer_size_samples; 488 fm_element_get_buffer_from_src (element, output_alsa->main_buffer, NULL); 487 489 488 490 /* FmSync *sync = fm_element_pipeline_get_sync_info (element);
