Exemplo n.º 1
0
void krad_mixer_portgroup_destroy (krad_mixer_t *krad_mixer, krad_mixer_portgroup_t *portgroup) {

  int c;

  if (portgroup == NULL) {
    return;
  }
  
  if (portgroup->crossfade_group != NULL) {
    krad_mixer_crossfade_group_destroy (krad_mixer, portgroup->crossfade_group);
  }
  
  krad_mixer_portgroup_mark_destroy (krad_mixer, portgroup);

  while (portgroup->active != 4) {
    usleep (1000);
  }

  portgroup->delay = 0;
  portgroup->delay_actual = 0;

  printkd("Krad Mixer: Removing %d channel Portgroup %s", portgroup->channels, portgroup->sysname);

  for (c = 0; c < KRAD_MIXER_MAX_CHANNELS; c++) {
    switch ( portgroup->io_type ) {
      case KRAD_TONE:
        free ( portgroup->samples[c] );      
        break;
      case MIXBUS:
        free ( portgroup->samples[c] );
        break;
      case KRAD_AUDIO:
        break;
      case KRAD_LINK:
        free ( portgroup->samples[c] );      
        break;
      case KLOCALSHM:
        break;
    }
  }

  switch ( portgroup->io_type ) {
    case KRAD_TONE:
      krad_tone_destroy (portgroup->io_ptr);
    case MIXBUS:
      break;
    case KRAD_AUDIO:
      krad_audio_portgroup_destroy (portgroup->io_ptr);
      break;
    case KRAD_LINK:
      break;
    case KLOCALSHM:
      krad_mixer_local_portgroup_destroy (portgroup->io_ptr);
      break;
  }
  
  if (portgroup->krad_xmms != NULL) {
    krad_xmms_destroy (portgroup->krad_xmms);
    portgroup->krad_xmms = NULL;
  }
  
  if (portgroup->io_type != KRAD_LINK) {
    krad_tags_destroy (portgroup->krad_tags);  
  }  
  
  if (portgroup->effects != NULL) {
    kr_effects_destroy (portgroup->effects);
    portgroup->effects = NULL;
  }

  portgroup->destroy_mark = 0;
  portgroup->active = 0;
}
Exemplo n.º 2
0
int main (int argc, char *argv[]) {

  int i;
  int ret;
	kr_client_t *client;
	kr_audioport_t *audioport;
	krad_mixer_portgroup_direction_t direction;
	uint32_t sample_rate;

  ret = 0;
	direction = INPUT;

	if (argc != 2) {
		if (argc > 2) {
			fprintf (stderr, "Only takes station argument.\n");
		} else {
			fprintf (stderr, "No station specified.\n");
		}
		return 1;
	}
	
	client = kr_client_create ("krad audioport client");
	
	if (client == NULL) {
		fprintf (stderr, "Could not create KR client.\n");
		return 1;
	}	

  kr_connect (client, argv[1]);
  
  if (!kr_connected (client)) {
		fprintf (stderr, "Could not connect to %s krad radio daemon.\n", argv[1]);
	  kr_client_destroy (&client);
	  return 1;
  }

  if (kr_mixer_get_info_wait (client, &sample_rate, NULL) != 1) {
    fprintf (stderr, "Could not get mixer info!\n");
	  kr_client_destroy (&client);
	  return 1;
  }

	if (direction == INPUT) {
		krad_tone = krad_tone_create (sample_rate);
		krad_tone_add_preset (krad_tone, "3");
		krad_tone2 = krad_tone_create (sample_rate);
		krad_tone_add_preset (krad_tone2, "3");
	}

	audioport = kr_audioport_create (client, direction);

	if (audioport == NULL) {
		fprintf (stderr, "Could not make audioport.\n");
	  kr_client_destroy (&client);
	  return 1;
	} else {
		printf ("Working!\n");
	}
	
	kr_audioport_set_callback (audioport, audioport_process, audioport);
	
  signal (SIGINT, signal_recv);
  signal (SIGTERM, signal_recv);	
	
	kr_audioport_activate (audioport);
	
	for (i = 0; i < 40; i++) {
	  usleep (30000);
	  if (destroy == 1) {
		  printf ("Got signal!\n");
	    break;
	  }
    if (kr_audioport_error (audioport)) {
      printf ("Error: %s\n", "Audioport Error");
      ret = 1;
      break;
    }
	}
		
	kr_audioport_deactivate (audioport);
	
	kr_audioport_destroy (audioport);

	if (direction == INPUT) {
		krad_tone_destroy (krad_tone);
		krad_tone_destroy (krad_tone2);
	}
	
	kr_client_destroy (&client);

	if (ret == 0) {
		printf ("Worked!\n");
	}

	return ret;
}