Ejemplo n.º 1
0
void
ags_machine_done_callback(AgsAudio *audio,
			  AgsRecallID *recall_id,
			  AgsMachine *machine)
{
  AgsChannel *channel;

  if((AGS_MACHINE_BLOCK_STOP & (machine->flags)) != 0){
    return;
  }

  machine->flags |= AGS_MACHINE_BLOCK_STOP;

  gtk_toggle_button_set_active(machine->play, FALSE);

  /* cancel playback */
  channel = audio->output;
  
  while(channel != NULL){
    if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == recall_id){
      ags_channel_tillrecycling_cancel(channel,
				       AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]);
    }

    if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] == recall_id){
      ags_channel_tillrecycling_cancel(channel,
				       AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]);
    }

    if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] == recall_id){
      ags_channel_tillrecycling_cancel(channel,
				       AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]);
    }
    
    /* set remove flag */
    AGS_DEVOUT_PLAY(channel->devout_play)->flags |= (AGS_DEVOUT_PLAY_DONE | AGS_DEVOUT_PLAY_REMOVE);
    
    channel = channel->next;
  }

  machine->flags &= (~AGS_MACHINE_BLOCK_STOP);
}
Ejemplo n.º 2
0
void
ags_cancel_channel_launch(AgsTask *task)
{
    AgsCancelChannel *cancel_channel;
    AgsChannel *channel;

    cancel_channel = AGS_CANCEL_CHANNEL(task);

    channel = cancel_channel->channel;

    /* cancel playback */
    if(AGS_PLAYBACK(channel->playback)->recall_id[0] == NULL) {
        return;
    }

    g_object_ref(AGS_PLAYBACK(channel->playback)->recall_id[0]);
    ags_channel_tillrecycling_cancel(channel,
                                     AGS_PLAYBACK(channel->playback)->recall_id[0]);

    /* set remove flag */
    AGS_PLAYBACK(channel->playback)->flags |= (AGS_PLAYBACK_DONE | AGS_PLAYBACK_REMOVE);
    AGS_PLAYBACK(channel->playback)->recall_id[0] = NULL;
}