- Timestamp:
- 02/15/08 00:52:50 (4 years ago)
- Location:
- trunk/fm_server/src
- Files:
-
- 10 modified
-
fm_buffer.c (modified) (1 diff)
-
fm_element.c (modified) (5 diffs)
-
fm_element.h (modified) (1 diff)
-
fm_input.c (modified) (3 diffs)
-
fm_input_test.c (modified) (2 diffs)
-
fm_output.c (modified) (2 diffs)
-
fm_output.h (modified) (1 diff)
-
fm_output_alsa.c (modified) (16 diffs)
-
fm_pipeline.c (modified) (4 diffs)
-
fm_pipeline.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/fm_server/src/fm_buffer.c
r190 r229 41 41 42 42 size_bytes = samples_to_bytes(n_samples, n_channels); 43 g_print ("Allocated a new buffer of %d bytes\n", size_bytes);43 g_print ("Allocated a new buffer of %d samples, %d bytes\n", n_samples, size_bytes); 44 44 45 45 -
trunk/fm_server/src/fm_element.c
r195 r229 207 207 g_return_if_fail (FM_IS_ELEMENT (element)); 208 208 g_return_if_fail (name); 209 209 210 210 element->name = g_strdup (name); 211 211 } … … 217 217 g_return_val_if_fail (FM_IS_ELEMENT (element), NULL); 218 218 219 return (element->name); 219 return (gchar *) g_object_get_data (G_OBJECT (element), "name"); 220 //return (element->name); 220 221 } 221 222 … … 282 283 FmElementClass *klass = FM_ELEMENT_GET_CLASS (element); 283 284 284 // g_print("fm_element_activate, %p\n", element); 285 286 g_return_val_if_fail (!element->active, FALSE); 285 g_print("fm_element_activate, %p - %s\n", element, fm_element_get_name (element)); 286 287 if (element->active) { 288 g_warning ("Element \"%s\" was active!", fm_element_get_name (element)); 289 return FALSE; 290 } 287 291 288 292 if (!element->pipeline) { … … 312 316 g_return_val_if_fail (FM_IS_ELEMENT (element), FALSE); 313 317 FmElementClass *class = FM_ELEMENT_GET_CLASS (element); 314 315 g_return_val_if_fail (element->active, FALSE); 318 319 g_print("fm_element_deactivate, %p - %s\n", element, fm_element_get_name (element)); 320 321 if (!element->active) { 322 g_warning ("Element \"%s\" was not active!", fm_element_get_name (element)); 323 return FALSE; 324 } 316 325 317 326 gboolean ret; … … 390 399 391 400 401 gboolean 402 fm_element_deactivate_connected (FmElement *element) 403 { 404 g_return_val_if_fail (element->sink_ports, FALSE); 405 406 // g_print("fm_element_activate_connected, %p\n", element); 407 408 GList *tmp = element->sink_ports; 409 while (tmp) { 410 FmElementSinkPort *our_port = (FmElementSinkPort *) tmp->data; 411 FmElementSrcPort *peer_port = our_port->peer; 412 413 if (peer_port == NULL) 414 return TRUE; 415 416 if (!fm_element_deactivate (FM_ELEMENT (peer_port->owner))) 417 return FALSE; 418 tmp = tmp->next; 419 } 420 421 return TRUE; 422 } 423 424 392 425 void 393 426 fm_element_get_buffer_from_src (FmElement *element, -
trunk/fm_server/src/fm_element.h
r195 r229 167 167 fm_element_activate_connected (FmElement *element); 168 168 169 gboolean 170 fm_element_deactivate_connected (FmElement *element); 171 169 172 void 170 173 fm_element_get_buffer_from_src (FmElement *element, -
trunk/fm_server/src/fm_input.c
r58 r229 95 95 fm_input_class_init (FmInputClass *class) 96 96 { 97 GObjectClass *gobject_class = G_OBJECT_CLASS (class);97 //GObjectClass *gobject_class = G_OBJECT_CLASS (class); 98 98 //FmElementClass *element_class = FM_ELEMENT_CLASS (class); 99 99 FmInputClass *input_class = FM_INPUT_CLASS (class); … … 106 106 input_class->set_position = NULL; 107 107 108 g_object_class_install_property (gobject_class,108 /* g_object_class_install_property (gobject_class, 109 109 PROP_STATE, 110 110 g_param_spec_int ("state", … … 112 112 "Input state", 113 113 FM_INPUT_STOP, FM_INPUT_PLAY, FM_INPUT_PLAY, 114 G_PARAM_READWRITE)); 114 G_PARAM_READWRITE));*/ 115 115 } 116 116 -
trunk/fm_server/src/fm_input_test.c
r192 r229 207 207 FmInputTest *input_test = FM_INPUT_TEST (object); 208 208 g_return_if_fail (FM_IS_INPUT_TEST (input_test)); 209 /* Nothing to do here */ 209 210 G_OBJECT_CLASS (parent_class)->dispose (object); 210 211 } 211 212 … … 216 217 FmInputTest *input_test = FM_INPUT_TEST (object); 217 218 g_return_if_fail (FM_IS_INPUT_TEST (input_test)); 218 g_free (input_test); 219 220 g_print ("aaaaaaaaalllllllllrrrrrrriiiiggggghhhhhhhhtttttttt!!!!!!!\n"); 219 220 G_OBJECT_CLASS (parent_class)->finalize (object); 221 221 } 222 222 -
trunk/fm_server/src/fm_output.c
r58 r229 105 105 106 106 107 /*guint108 fm_output_get_max_buffer_size (FmOutput *output)109 {110 return 0;111 }*/112 113 114 107 gboolean 115 108 fm_output_start (FmOutput *output) … … 125 118 } 126 119 } 120 127 121 128 122 gboolean -
trunk/fm_server/src/fm_output.h
r123 r229 53 53 FmElementClass parent; 54 54 55 /*guint (*get_max_buffer_size) (FmOutput *output);*/ 55 /* Let the output element start and allow it to call get_buffer() on its connected elements. 56 It will be called after activate() */ 56 57 gboolean (*start) (FmOutput *output); 58 59 /* Signal the output element to stop (it isn't allowed to call get_buffer() again. */ 57 60 gboolean (*stop) (FmOutput *output); 58 61 }; -
trunk/fm_server/src/fm_output_alsa.c
r191 r229 75 75 static gboolean fm_output_alsa_activate (FmElement *element); 76 76 static gboolean fm_output_alsa_deactivate (FmElement *element); 77 static void fm_output_alsa_dispose (GObject *object); 77 78 static void fm_output_alsa_finalize (GObject *object); 78 79 static gint xrun_recovery (snd_pcm_t *handle, … … 80 81 static gpointer fm_output_alsa_play (gpointer data); 81 82 static gboolean fm_output_alsa_start (FmOutput *output); 83 static gboolean fm_output_alsa_stop (FmOutput *output); 82 84 83 85 … … 129 131 gobject_class->set_property = fm_output_alsa_set_property; 130 132 gobject_class->get_property = fm_output_alsa_get_property; 131 133 134 gobject_class->dispose = fm_output_alsa_dispose; 132 135 gobject_class->finalize = fm_output_alsa_finalize; 133 136 … … 136 139 137 140 output_class->start = fm_output_alsa_start; 138 141 output_class->stop = fm_output_alsa_stop; 139 142 140 143 g_object_class_install_property (gobject_class, … … 248 251 gint err; 249 252 250 g_print ("Activating FmOutputAlsa\n");253 // g_print ("Activating FmOutputAlsa\n"); 251 254 252 255 // Open the device … … 304 307 } 305 308 306 g_print ("ALSA sample rate: %d\n", output->sample_rate);309 // g_print ("ALSA sample rate: %d\n", output->sample_rate); 307 310 308 311 guint n_channels = FM_CHANNELS_STEREO; … … 334 337 } 335 338 336 g_print ("ALSA: buffer size is %lu\n", output_alsa->buffer_size);337 338 339 err = snd_pcm_hw_params_set_period_time_near (output_alsa->sound_handle, 339 340 output_alsa->hwparams, … … 360 361 return FALSE; 361 362 } 363 364 /* g_print ("ALSA: buffer size is %lu frames\n", output_alsa->buffer_size); 365 g_print ("ALSA: period size is %lu frames\n", output_alsa->period_size);*/ 362 366 363 367 output_alsa->buffer_size_samples = output_alsa->period_size; … … 378 382 fm_output_alsa_deactivate (FmElement *element) 379 383 { 380 /*FmOutputAlsa *output_alsa = FM_OUTPUT_ALSA (element); 384 // g_print ("ALSA: deactivate\n"); 385 FmOutputAlsa *output_alsa = FM_OUTPUT_ALSA (element); 381 386 gint err; 382 387 383 388 g_free (output_alsa->device_name); 384 389 390 snd_pcm_hw_free (output_alsa->sound_handle); 385 391 err = snd_pcm_close (output_alsa->sound_handle); 386 392 if (err < 0) { … … 397 403 output_alsa->buffer_size = 0; 398 404 output_alsa->period_size = 0; 399 output_alsa->engine_buffer = NULL;*/ 405 output_alsa->thread = NULL; 406 output_alsa->stop_processing = FALSE; 407 408 g_free (output_alsa->buffer_int); 409 fm_buffer_destroy (output_alsa->main_buffer); 410 411 if (!fm_element_deactivate_connected (element)) 412 return FALSE; 400 413 401 414 return TRUE; 415 } 416 417 418 static void 419 fm_output_alsa_dispose (GObject *object) 420 { 421 FmOutputAlsa *output_alsa = FM_OUTPUT_ALSA (object); 422 g_assert (!output_alsa->sound_handle); 423 424 G_OBJECT_CLASS (parent_class)->dispose (object); 402 425 } 403 426 … … 410 433 411 434 g_free (output_alsa->device_name); 412 g_free (output_alsa); 435 436 G_OBJECT_CLASS (parent_class)->finalize (object); 413 437 } 414 438 … … 421 445 422 446 output_alsa->thread = g_thread_create (fm_output_alsa_play, output_alsa, 423 FALSE, &error);447 TRUE, &error); 424 448 if (output_alsa->thread) { 425 g_print("ALSA output started!\n");449 // g_print("ALSA output started!\n"); 426 450 return TRUE; 427 451 } else { … … 432 456 433 457 458 static gboolean 459 fm_output_alsa_stop (FmOutput *output) 460 { 461 FmOutputAlsa *output_alsa = FM_OUTPUT_ALSA(output); 462 463 output_alsa->stop_processing = TRUE; 464 465 // g_print ("joining\n"); 466 g_thread_join (output_alsa->thread); 467 468 return TRUE; 469 } 470 471 434 472 #define FLOAT_TO_INT(x) ((gint16) ((x) * 32768.0)) 435 473 … … 452 490 output_alsa->main_buffer->channel_data[1], 453 491 output_alsa->buffer_int, output_alsa->buffer_size_samples); 454 455 492 gint err = 0; 456 493 … … 458 495 output_alsa->buffer_int, 459 496 output_alsa->buffer_size_samples); 497 498 // g_print ("ALSA: written %u frames\n", output_alsa->buffer_size_samples); 460 499 461 500 if (err < 0) { … … 478 517 } 479 518 480 g_print ("output_alsa->stop_processing == TRUE!\n");519 // g_print ("output_alsa->stop_processing == TRUE!\n"); 481 520 482 521 return NULL; -
trunk/fm_server/src/fm_pipeline.c
r195 r229 108 108 0); 109 109 110 rgc_method_register ("deactivate", 111 FM_TYPE_PIPELINE, 112 G_CALLBACK (fm_pipeline_deactivate), 113 rgc_marshal_VOID__VOID, 114 0); 115 110 116 rgc_method_register ("run", 111 117 FM_TYPE_PIPELINE, … … 155 161 fm_pipeline_activate (FmPipeline *pipeline) 156 162 { 163 FmElement *element = FM_ELEMENT (pipeline); 157 164 g_assert (FM_IS_PIPELINE (pipeline)); 158 165 g_return_if_fail (FM_IS_ELEMENT (pipeline->sink)); 166 g_return_if_fail (!element->active); 159 167 160 168 g_print ("Activating pipeline...\n"); … … 162 170 pipeline->sample_rate = fm_output_get_sample_rate(pipeline->sink); 163 171 fm_element_activate(FM_ELEMENT(pipeline->sink)); 172 } 173 174 175 void 176 fm_pipeline_deactivate (FmPipeline *pipeline) 177 { 178 g_assert (FM_IS_PIPELINE (pipeline)); 179 g_return_if_fail (FM_IS_ELEMENT (pipeline->sink)); 180 181 g_print ("Deactivating pipeline...\n"); 182 183 fm_element_deactivate(FM_ELEMENT(pipeline->sink)); 164 184 } 165 185 … … 225 245 g_return_if_fail (FM_IS_PIPELINE (pipeline)); 226 246 g_return_if_fail (FM_IS_OUTPUT(pipeline->sink)); 227 247 228 248 g_debug("Stopping pipeline..."); 229 249 fm_output_stop(pipeline->sink); -
trunk/fm_server/src/fm_pipeline.h
r195 r229 69 69 70 70 void 71 fm_pipeline_deactivate (FmPipeline *pipeline); 72 73 void 71 74 fm_pipeline_set_sink (FmPipeline *pipeline, 72 75 FmElement *sink);
