Hello community, here is the log from the commit of package gsequencer for openSUSE:Factory checked in at 2018-02-05 10:53:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gsequencer (Old) and /work/SRC/openSUSE:Factory/.gsequencer.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gsequencer" Mon Feb 5 10:53:07 2018 rev:8 rq:572414 version:1.4.18 Changes: -------- --- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes 2018-01-30 15:44:52.485285410 +0100 +++ /work/SRC/openSUSE:Factory/.gsequencer.new/gsequencer.changes 2018-02-05 10:53:54.137806004 +0100 @@ -1,0 +2,12 @@ +Sat Feb 3 01:06:58 UTC 2018 - [email protected] + +- New upstream v1.4.18 fixed step sequencer's clipboard. + +------------------------------------------------------------------- +Fri Feb 2 13:01:23 UTC 2018 - [email protected] + +- New upstream v1.4.17 various fixes to initialization code of + recalls in ags_channel.c. +- Fixed playback scope and related code in ags_play_channel_run.c. + +------------------------------------------------------------------- Old: ---- gsequencer-1.4.15.tar.gz New: ---- gsequencer-1.4.18.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gsequencer.spec ++++++ --- /var/tmp/diff_new_pack.dUcGzC/_old 2018-02-05 10:53:54.797775139 +0100 +++ /var/tmp/diff_new_pack.dUcGzC/_new 2018-02-05 10:53:54.801774952 +0100 @@ -18,7 +18,7 @@ %define libagssonumber 1 %define libgsequencersonumber 0 Name: gsequencer -Version: 1.4.15 +Version: 1.4.18 Release: 0 Summary: Audio processing engine License: GPL-3.0+ AND AGPL-3.0+ AND GFDL-1.3 ++++++ gsequencer-1.4.15.tar.gz -> gsequencer-1.4.18.tar.gz ++++++ ++++ 1758 lines of diff (skipped) ++++ retrying with extended exclude list diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ChangeLog new/gsequencer-1.4.18/ChangeLog --- old/gsequencer-1.4.15/ChangeLog 2018-01-26 03:22:44.000000000 +0100 +++ new/gsequencer-1.4.18/ChangeLog 2018-02-02 22:37:51.000000000 +0100 @@ -1,3 +1,22 @@ +ags (1.4.18) + + [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] + * fixed copy to clipboard in AgsMatrix and AgsDrum + +ags (1.4.17) + + [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] + * fixed playback scope + * fixed wrong count of runs and init code in ags_channel.c + * minor-fixes + +ags (1.4.16) + + [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] + * fixed potential SIGSEGV during ags_recall_dssi_run_finalize() + * fixed potential SIGSEGV during ags_recall_lv2_run_finalize() + * removed redundant code in ags_simple_file.c + ags (1.4.15) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/ags_machine.c new/gsequencer-1.4.18/ags/X/ags_machine.c --- old/gsequencer-1.4.15/ags/X/ags_machine.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/ags_machine.c 2018-02-02 22:38:03.000000000 +0100 @@ -2115,7 +2115,7 @@ AgsMutexManager *mutex_manager; xmlDoc *clipboard; - xmlNode *audio_node, *notation_node; + xmlNode *audio_node, *notation_list_node, *notation_node; xmlChar *buffer; int size; @@ -2198,9 +2198,15 @@ clipboard = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); /* create root node */ - audio_node = xmlNewNode(NULL, BAD_CAST "audio"); + audio_node = xmlNewNode(NULL, + BAD_CAST "audio"); xmlDocSetRootElement(clipboard, audio_node); + notation_list_node = xmlNewNode(NULL, + BAD_CAST "notation-list"); + xmlAddChild(audio_node, + notation_list_node); + audio = machine->audio; mutex_manager = ags_mutex_manager_get_instance(); @@ -2234,7 +2240,8 @@ pthread_mutex_lock(current_mutex); notation_node = ags_machine_copy_pattern_to_notation(channel); - xmlAddChild(audio_node, notation_node); + xmlAddChild(notation_list_node, + notation_node); channel = channel->next; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/ags_navigation_callbacks.c new/gsequencer-1.4.18/ags/X/ags_navigation_callbacks.c --- old/gsequencer-1.4.15/ags/X/ags_navigation_callbacks.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/ags_navigation_callbacks.c 2018-01-31 18:13:52.000000000 +0100 @@ -167,7 +167,7 @@ if(((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0) || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ #ifdef AGS_DEBUG - printf("found machine to play!\n"); + g_message("found machine to play!\n"); #endif if(!initialized_time){ @@ -204,8 +204,10 @@ if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ - printf("found machine to stop!\n"); - +#ifdef AGS_DEBUG + g_message("found machine to stop!"); +#endif + ags_machine_set_run_extended(machine, FALSE, !gtk_toggle_button_get_active((GtkToggleButton *) navigation->exclude_sequencer), TRUE); @@ -310,8 +312,10 @@ if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) !=0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ +#ifdef AGS_DEBUG g_message("found machine to loop!\n"); - +#endif + audio = machine->audio; /* get mutex manager and application mutex */ @@ -409,8 +413,10 @@ if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ +#ifdef AGS_DEBUG g_message("found machine to loop!\n"); - +#endif + audio = machine->audio; /* get mutex manager and application mutex */ @@ -490,8 +496,10 @@ if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ +#ifdef AGS_DEBUG g_message("found machine to loop!\n"); - +#endif + audio = machine->audio; /* get mutex manager and application mutex */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/ags_notation_editor.c new/gsequencer-1.4.18/ags/X/ags_notation_editor.c --- old/gsequencer-1.4.15/ags/X/ags_notation_editor.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/ags_notation_editor.c 2018-02-02 22:36:41.000000000 +0100 @@ -1453,7 +1453,7 @@ if(audio_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp("audio", audio_node->name, 6)){ notation_node = audio_node->children; - + first_x = ags_notation_editor_paste_notation(audio_node); break; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/ags_pad_callbacks.c new/gsequencer-1.4.18/ags/X/ags_pad_callbacks.c --- old/gsequencer-1.4.15/ags/X/ags_pad_callbacks.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/ags_pad_callbacks.c 2018-02-02 14:05:47.000000000 +0100 @@ -426,6 +426,7 @@ NULL); } + note->rt_attack = 0; note->rt_offset = 0; pthread_mutex_unlock(recycling_mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/file/ags_simple_file.c new/gsequencer-1.4.18/ags/X/file/ags_simple_file.c --- old/gsequencer-1.4.15/ags/X/file/ags_simple_file.c 2018-01-26 03:21:40.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/file/ags_simple_file.c 2018-02-02 22:24:33.000000000 +0100 @@ -1673,8 +1673,6 @@ AgsWindow *window; AgsMachine *gobject; - AgsResizeAudio *resize_audio; - AgsConfig *config; GObject *soundcard; @@ -1954,16 +1952,7 @@ wait_output = TRUE; } - /* create task */ - resize_audio = ags_resize_audio_new(gobject->audio, - (guint) output_pads, - (guint) input_pads, - (guint) audio_channels); - - /* append AgsResizeAudio */ - ags_gui_thread_schedule_task(ags_ui_provider_get_gui_thread(AGS_UI_PROVIDER(simple_file->application_context)), - resize_audio); - + /* dispatch */ while((wait_output && !wait_data[0]) || (wait_input && !wait_data[1])){ usleep(1000000 / 30); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/X/machine/ags_drum_input_line.c new/gsequencer-1.4.18/ags/X/machine/ags_drum_input_line.c --- old/gsequencer-1.4.15/ags/X/machine/ags_drum_input_line.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/X/machine/ags_drum_input_line.c 2018-02-02 14:05:47.000000000 +0100 @@ -446,6 +446,19 @@ source = line->channel; + rt_safe = TRUE; + + str = ags_config_get_value(config, + AGS_CONFIG_GENERIC, + "rt-safe"); + + if(str != NULL && + !g_ascii_strncasecmp(str, + "FALSE", + 6)){ + rt_safe = FALSE; + } + /* lookup source mutex */ pthread_mutex_lock(application_mutex); @@ -506,16 +519,29 @@ pthread_mutex_unlock(source_mutex); + if(rt_safe){ + ags_recall_factory_create(audio, + NULL, NULL, + "ags-rt-stream", + audio_channel, audio_channel + 1, + pad, pad + 1, + (AGS_RECALL_FACTORY_INPUT | + AGS_RECALL_FACTORY_PLAY | + AGS_RECALL_FACTORY_RECALL | + AGS_RECALL_FACTORY_ADD), + 0); + } + /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, - "ags-play", - audio_channel, audio_channel + 1, - pad, pad + 1, - (AGS_RECALL_FACTORY_INPUT | + "ags-play", + audio_channel, audio_channel + 1, + pad, pad + 1, + (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | - AGS_RECALL_FACTORY_ADD), - 0); + AGS_RECALL_FACTORY_ADD), + 0); pthread_mutex_lock(source_mutex); @@ -536,7 +562,7 @@ } pthread_mutex_unlock(source_mutex); - + /* ags-volume */ ags_recall_factory_create(audio, NULL, NULL, @@ -562,19 +588,6 @@ 0); /* ags-stream */ - rt_safe = TRUE; - - str = ags_config_get_value(config, - AGS_CONFIG_GENERIC, - "rt-safe"); - - if(str != NULL && - !g_ascii_strncasecmp(str, - "FALSE", - 6)){ - rt_safe = FALSE; - } - if(!rt_safe){ ags_recall_factory_create(audio, NULL, NULL, @@ -603,17 +616,6 @@ NULL); pthread_mutex_unlock(source_mutex); - }else{ - ags_recall_factory_create(audio, - NULL, NULL, - "ags-rt-stream", - audio_channel, audio_channel + 1, - pad, pad + 1, - (AGS_RECALL_FACTORY_INPUT | - AGS_RECALL_FACTORY_PLAY | - AGS_RECALL_FACTORY_RECALL | - AGS_RECALL_FACTORY_ADD), - 0); } /* call parent */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_audio.c new/gsequencer-1.4.18/ags/audio/ags_audio.c --- old/gsequencer-1.4.15/ags/audio/ags_audio.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_audio.c 2018-02-02 22:24:33.000000000 +0100 @@ -1812,6 +1812,24 @@ /* playback domain */ if(audio->playback_domain != NULL){ + AgsPlaybackDomain *playback_domain; + + playback_domain = audio->playback_domain; + + if(playback_domain->audio_thread != NULL){ + if(playback_domain->audio_thread[0] != NULL){ + ags_thread_stop(playback_domain->audio_thread[0]); + } + + if(playback_domain->audio_thread[1] != NULL){ + ags_thread_stop(playback_domain->audio_thread[1]); + } + + if(playback_domain->audio_thread[2] != NULL){ + ags_thread_stop(playback_domain->audio_thread[2]); + } + } + g_object_run_dispose(audio->playback_domain); audio->playback_domain = NULL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_channel.c new/gsequencer-1.4.18/ags/audio/ags_channel.c --- old/gsequencer-1.4.15/ags/audio/ags_channel.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_channel.c 2018-02-02 22:24:33.000000000 +0100 @@ -1434,10 +1434,20 @@ AgsPlayback *playback; playback = channel->playback; - - ags_thread_stop(playback->channel_thread[0]); - ags_thread_stop(playback->channel_thread[1]); - ags_thread_stop(playback->channel_thread[2]); + + if(playback->channel_thread != NULL){ + if(playback->channel_thread[0] != NULL){ + ags_thread_stop(playback->channel_thread[0]); + } + + if(playback->channel_thread[1] != NULL){ + ags_thread_stop(playback->channel_thread[1]); + } + + if(playback->channel_thread[2] != NULL){ + ags_thread_stop(playback->channel_thread[2]); + } + } g_object_set(playback, "source", NULL, @@ -4812,7 +4822,7 @@ if((AGS_RECALL_TEMPLATE & (recall_flags)) == 0 && (AGS_RECALL_RUN_FIRST & (recall_flags)) != 0){ #ifdef AGS_DEBUG - g_message("%s play channel %x:%d @%x -> %x", G_OBJECT_TYPE_NAME(recall), channel, channel->line, recall, recall->recall_id); + g_message("%s play first channel %x:%d @%x -> %x", G_OBJECT_TYPE_NAME(recall), channel, channel->line, recall, recall->recall_id); #endif if((AGS_RECALL_HIDE & (recall_flags)) == 0){ @@ -4925,7 +4935,7 @@ if((AGS_RECALL_TEMPLATE & (recall_flags)) == 0 && (AGS_RECALL_RUN_LAST & (recall_flags)) != 0){ #ifdef AGS_DEBUG - g_message("%s play channel %x:%d @%x -> %x", G_OBJECT_TYPE_NAME(recall), channel, channel->line, recall, recall->recall_id); + g_message("%s play last channel %x:%d @%x -> %x", G_OBJECT_TYPE_NAME(recall), channel, channel->line, recall, recall->recall_id); #endif if((AGS_RECALL_HIDE & (recall_flags)) == 0){ @@ -8220,40 +8230,25 @@ NULL, FALSE, FALSE); } - if(duplicate_templates && - resolve_dependencies){ - if(stage == -1){ - ags_channel_recursive_init(channel, - recall_id, - -1, -1, - TRUE, TRUE); - }else if(stage >= 0 && stage < 4){ - ags_channel_recursive_init(channel, - recall_id, - ((stage == 0) ? -1: 4), stage, - TRUE, TRUE); - } - }else{ - if(duplicate_templates){ - ags_channel_recursive_init(channel, - recall_id, - 0, 4, - TRUE, TRUE); - } - - if(resolve_dependencies){ - ags_channel_recursive_init(channel, - recall_id, - 1, 4, - TRUE, TRUE); - } - - if(stage == -1 || (stage >= 0 && stage < 4)){ - ags_channel_recursive_init(channel, - recall_id, - 2, stage, - TRUE, TRUE); - } + if(duplicate_templates){ + ags_channel_recursive_init(channel, + recall_id, + 0, 4, + TRUE, TRUE); + } + + if(resolve_dependencies){ + ags_channel_recursive_init(channel, + recall_id, + 1, 4, + TRUE, TRUE); + } + + if(stage == -1 || (stage >= 0 && stage < 4)){ + ags_channel_recursive_init(channel, + recall_id, + 2, stage, + TRUE, TRUE); } if(stage == -1 || @@ -10560,27 +10555,30 @@ pthread_mutex_unlock(current_mutex); - switch(stage){ - case 0: - { - ags_channel_duplicate_recall(current, + if(current != channel || + !init_down){ + switch(stage){ + case 0: + { + ags_channel_duplicate_recall(current, + recall_id); + } + break; + case 1: + { + ags_channel_resolve_recall(current, recall_id); + } + break; + case 2: + { + ags_channel_init_recall(current, init_stage, + recall_id); + } + break; } - break; - case 1: - { - ags_channel_resolve_recall(current, - recall_id); - } - break; - case 2: - { - ags_channel_init_recall(current, init_stage, - recall_id); - } - break; } - + /* get audio mutex */ pthread_mutex_lock(application_mutex); @@ -10597,27 +10595,30 @@ pthread_mutex_unlock(audio_mutex); - switch(stage){ - case 0: - { - ags_audio_duplicate_recall(audio, + if(current != channel || + !init_down){ + switch(stage){ + case 0: + { + ags_audio_duplicate_recall(audio, + recall_id); + } + break; + case 1: + { + ags_audio_resolve_recall(audio, recall_id); + } + break; + case 2: + { + ags_audio_init_recall(audio, init_stage, + recall_id); + } + break; } - break; - case 1: - { - ags_audio_resolve_recall(audio, - recall_id); - } - break; - case 2: - { - ags_audio_init_recall(audio, init_stage, - recall_id); - } - break; } - + /* get some fields */ pthread_mutex_lock(audio_mutex); @@ -11245,10 +11246,13 @@ pthread_mutex_unlock(current_mutex); - ags_channel_play(current, - recall_id, - run_stage); - + if(current != channel || + !run_down){ + ags_channel_play(current, + recall_id, + run_stage); + } + /* get audio mutex */ pthread_mutex_lock(application_mutex); @@ -11265,10 +11269,13 @@ pthread_mutex_unlock(audio_mutex); - ags_audio_play(audio, - recall_id, - run_stage); - + if(current != channel || + !run_down){ + ags_audio_play(audio, + recall_id, + run_stage); + } + /* get some fields */ pthread_mutex_lock(audio_mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_notation.c new/gsequencer-1.4.18/ags/audio/ags_notation.c --- old/gsequencer-1.4.15/ags/audio/ags_notation.c 2018-01-26 03:21:40.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_notation.c 2018-02-02 22:39:30.000000000 +0100 @@ -1913,13 +1913,13 @@ if(!xmlStrncmp("0.3.12", version, 7)){ ags_notation_insert_native_piano_from_clipboard_version_0_3_12(); - }else if(!xmlStrncmp("0.4.2", version, 7)){ + }else if(!xmlStrncmp("0.4.2", version, 6)){ /* changes contain only for UI relevant new informations */ ags_notation_insert_native_piano_from_clipboard_version_0_3_12(); - }else if(!xmlStrncmp("1.2.0", version, 7)){ + }else if(!xmlStrncmp("1.2.0", version, 6)){ /* changes contain only optional informations */ match_timestamp = TRUE; - + if(match_channel && notation->audio_channel != g_ascii_strtoull(xmlGetProp(root_node, "audio-channel"), @@ -1927,7 +1927,7 @@ 10)){ return; } - + ags_notation_insert_native_piano_from_clipboard_version_0_3_12(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_recall.c new/gsequencer-1.4.18/ags/audio/ags_recall.c --- old/gsequencer-1.4.15/ags/audio/ags_recall.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_recall.c 2018-02-02 22:24:33.000000000 +0100 @@ -2017,9 +2017,9 @@ if((AGS_RECALL_DONE & (recall->flags)) != 0){ return; } - - recall->flags |= AGS_RECALL_DONE; + recall->flags |= AGS_RECALL_DONE; + ags_recall_remove(recall); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_recall_dssi_run.c new/gsequencer-1.4.18/ags/audio/ags_recall_dssi_run.c --- old/gsequencer-1.4.15/ags/audio/ags_recall_dssi_run.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_recall_dssi_run.c 2018-01-31 18:13:52.000000000 +0100 @@ -220,21 +220,6 @@ free(recall_dssi_run->ladspa_handle); - if(recall_dssi_run->route_dssi_audio_run != NULL){ - GList *note; - - note = recall_dssi_run->note; - - while(note != NULL){ - //FIXME:JK: ref counting - AGS_ROUTE_DSSI_AUDIO_RUN(recall_dssi_run->route_dssi_audio_run)->feed_midi = g_list_remove(AGS_ROUTE_DSSI_AUDIO_RUN(recall_dssi_run->route_dssi_audio_run)->feed_midi, - note->data); - g_object_unref(note->data); - - note = note->next; - } - } - g_list_free_full(recall_dssi_run->note, g_object_unref); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/ags_recall_lv2_run.c new/gsequencer-1.4.18/ags/audio/ags_recall_lv2_run.c --- old/gsequencer-1.4.15/ags/audio/ags_recall_lv2_run.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/ags_recall_lv2_run.c 2018-01-31 18:13:52.000000000 +0100 @@ -203,21 +203,6 @@ free(recall_lv2_run->input); } - if(recall_lv2_run->route_lv2_audio_run != NULL){ - GList *note; - - note = recall_lv2_run->note; - - while(note != NULL){ - //FIXME:JK: ref counting - AGS_ROUTE_LV2_AUDIO_RUN(recall_lv2_run->route_lv2_audio_run)->feed_midi = g_list_remove(AGS_ROUTE_LV2_AUDIO_RUN(recall_lv2_run->route_lv2_audio_run)->feed_midi, - note->data); - g_object_unref(note->data); - - note = note->next; - } - } - g_list_free_full(recall_lv2_run->note, g_object_unref); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_copy_audio_signal.c new/gsequencer-1.4.18/ags/audio/recall/ags_copy_audio_signal.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_copy_audio_signal.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_copy_audio_signal.c 2018-02-02 14:05:47.000000000 +0100 @@ -384,7 +384,8 @@ stream_destination = destination->stream_current; // attack = AGS_RECALL_AUDIO_SIGNAL(copy_audio_signal)->attack; - if(stream_destination->next == NULL){ + if(!recall->rt_safe && + stream_destination->next == NULL){ ags_audio_signal_add_stream(destination); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_play_audio_signal.c new/gsequencer-1.4.18/ags/audio/recall/ags_play_audio_signal.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_play_audio_signal.c 2017-11-06 00:08:57.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_play_audio_signal.c 2018-02-02 14:05:47.000000000 +0100 @@ -19,11 +19,7 @@ #include <ags/audio/recall/ags_play_audio_signal.h> -#include <ags/object/ags_connectable.h> -#include <ags/object/ags_dynamic_connectable.h> -#include <ags/object/ags_soundcard.h> - -#include <ags/thread/ags_mutex_manager.h> +#include <ags/libags.h> #include <ags/audio/ags_audio_signal.h> #include <ags/audio/ags_recycling.h> @@ -215,15 +211,19 @@ void ags_play_audio_signal_run_inter(AgsRecall *recall) { - GObject *soundcard; - AgsRecycling *recycling; - AgsAudioSignal *source; AgsRecallChannelRun *play_channel_run; AgsPlayChannel *play_channel; AgsPlayAudioSignal *play_audio_signal; + + AgsRecycling *recycling; + AgsAudioSignal *source; + AgsAudioSignal *template; AgsMutexManager *mutex_manager; + GObject *soundcard; + + GList *note; GList *stream; void *buffer_source; @@ -247,17 +247,28 @@ play_audio_signal = AGS_PLAY_AUDIO_SIGNAL(recall); soundcard = recall->soundcard; - source = AGS_AUDIO_SIGNAL(AGS_RECALL_AUDIO_SIGNAL(play_audio_signal)->source); - stream = source->stream_current; if(soundcard == NULL){ g_warning("no soundcard"); return; } - + + source = AGS_AUDIO_SIGNAL(AGS_RECALL_AUDIO_SIGNAL(play_audio_signal)->source); + mutex_manager = ags_mutex_manager_get_instance(); application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager); + /* lookup recycling mutex */ + recycling = source->recycling; + + pthread_mutex_lock(application_mutex); + + recycling_mutex = ags_mutex_manager_lookup(mutex_manager, + (GObject *) recycling); + + pthread_mutex_unlock(application_mutex); + + /* lookup soundcard mutex */ pthread_mutex_lock(application_mutex); soundcard_mutex = ags_mutex_manager_lookup(mutex_manager, @@ -267,24 +278,13 @@ pthread_mutex_lock(soundcard_mutex); + /* get presets */ ags_soundcard_get_presets(AGS_SOUNDCARD(soundcard), &pcm_channels, &samplerate, &soundcard_buffer_size, &soundcard_format); - if(stream == NULL){ - pthread_mutex_unlock(soundcard_mutex); - - ags_recall_done(recall); - - ags_recycling_remove_audio_signal(source->recycling, - source); - g_object_unref(source); - - return; - } - buffer0 = ags_soundcard_get_buffer(AGS_SOUNDCARD(soundcard)); // ags_soundcard_get_next_buffer(AGS_SOUNDCARD(soundcard)); buffer1 = NULL; @@ -329,54 +329,105 @@ buffer_size = source->buffer_size; copy_mode = ags_audio_buffer_util_get_copy_mode(ags_audio_buffer_util_format_from_soundcard(soundcard_format), ags_audio_buffer_util_format_from_soundcard(source->format)); + + if(source->rt_template != NULL){ + /* get template */ + template = source->rt_template; + + note = source->note; + + while(note != NULL){ + AgsNote *current; + + guint rt_attack; + guint64 offset; + + current = note->data; + offset = current->rt_offset; - /* check if resample */ - buffer_source = stream->data; - resample = FALSE; - - if(source->samplerate != samplerate){ - buffer_source = ags_audio_buffer_util_resample(buffer_source, 1, - ags_audio_buffer_util_format_from_soundcard(source->format), source->samplerate, - buffer_size, - samplerate); + pthread_mutex_lock(recycling_mutex); - resample = TRUE; - } - - if((AGS_RECALL_INITIAL_RUN & (AGS_RECALL_AUDIO_SIGNAL(recall)->flags)) != 0){ - ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel + source->attack * pcm_channels, - buffer_source, 1, 0, - soundcard_buffer_size - source->attack, copy_mode); - }else{ - if(source->attack != 0 && stream->prev != NULL){ - void *buffer_source_prev; - - buffer_source_prev = stream->prev->data; + rt_attack = current->rt_attack; + + pthread_mutex_unlock(recycling_mutex); - if(resample){ - buffer_source_prev = ags_audio_buffer_util_resample(buffer_source_prev, 1, - ags_audio_buffer_util_format_from_soundcard(source->format), source->samplerate, - source->length, - samplerate); + stream = source->stream_beginning; + + if(stream == NULL){ + note = note->next; + continue; } ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel, - buffer_source_prev, 1, soundcard_buffer_size - source->attack, - source->attack, copy_mode); + stream->data, 1, 0, + buffer_size, copy_mode); + + note = note->next; + } + }else{ + stream = source->stream_current; - if(resample){ - free(buffer_source_prev); - } + if(stream == NULL){ + pthread_mutex_unlock(soundcard_mutex); + + ags_recall_done(recall); + + ags_recycling_remove_audio_signal(source->recycling, + source); + g_object_unref(source); + + return; } + + /* check if resample */ + buffer_source = stream->data; + resample = FALSE; + + if(source->samplerate != samplerate){ + buffer_source = ags_audio_buffer_util_resample(buffer_source, 1, + ags_audio_buffer_util_format_from_soundcard(source->format), source->samplerate, + buffer_size, + samplerate); + + resample = TRUE; + } + + if((AGS_RECALL_INITIAL_RUN & (AGS_RECALL_AUDIO_SIGNAL(recall)->flags)) != 0){ + ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel + source->attack * pcm_channels, + buffer_source, 1, 0, + soundcard_buffer_size - source->attack, copy_mode); + }else{ + if(source->attack != 0 && stream->prev != NULL){ + void *buffer_source_prev; + + buffer_source_prev = stream->prev->data; - ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel + source->attack * pcm_channels, - buffer_source, 1, 0, - soundcard_buffer_size - source->attack, copy_mode); - } + if(resample){ + buffer_source_prev = ags_audio_buffer_util_resample(buffer_source_prev, 1, + ags_audio_buffer_util_format_from_soundcard(source->format), source->samplerate, + source->length, + samplerate); + + } + + ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel, + buffer_source_prev, 1, soundcard_buffer_size - source->attack, + source->attack, copy_mode); + + if(resample){ + free(buffer_source_prev); + } + } - if(resample){ - free(buffer_source); + ags_audio_buffer_util_copy_buffer_to_buffer(buffer0, pcm_channels, audio_channel + source->attack * pcm_channels, + buffer_source, 1, 0, + soundcard_buffer_size - source->attack, copy_mode); + } + + if(resample){ + free(buffer_source); + } } pthread_mutex_unlock(soundcard_mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_play_channel_run.c new/gsequencer-1.4.18/ags/audio/recall/ags_play_channel_run.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_play_channel_run.c 2017-11-06 00:08:57.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_play_channel_run.c 2018-02-02 14:05:47.000000000 +0100 @@ -19,14 +19,7 @@ #include <ags/audio/recall/ags_play_channel_run.h> -#include <ags/object/ags_application_context.h> -#include <ags/object/ags_connectable.h> -#include <ags/object/ags_dynamic_connectable.h> -#include <ags/object/ags_plugin.h> -#include <ags/object/ags_soundcard.h> - -#include <ags/thread/ags_mutex_manager.h> -#include <ags/thread/ags_task_thread.h> +#include <ags/libags.h> #include <ags/audio/ags_audio.h> #include <ags/audio/ags_recycling.h> @@ -40,8 +33,13 @@ #include <ags/audio/recall/ags_play_recycling.h> #include <ags/audio/recall/ags_play_audio_signal.h> #include <ags/audio/recall/ags_stream_channel.h> +#include <ags/audio/recall/ags_stream_channel_run.h> #include <ags/audio/recall/ags_stream_recycling.h> #include <ags/audio/recall/ags_stream_audio_signal.h> +#include <ags/audio/recall/ags_rt_stream_channel.h> +#include <ags/audio/recall/ags_rt_stream_channel_run.h> +#include <ags/audio/recall/ags_rt_stream_recycling.h> +#include <ags/audio/recall/ags_rt_stream_audio_signal.h> #include <ags/audio/task/ags_cancel_channel.h> @@ -422,48 +420,88 @@ ags_play_channel_run_run_post(AgsRecall *recall) { AgsStreamChannelRun *stream_channel_run; + AgsRtStreamChannelRun *rt_stream_channel_run; + AgsChannel *source; + GList *list; GList *recall_recycling_list, *recall_audio_signal_list; + gboolean found; AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->run_post(recall); - /* connect done */ source = AGS_RECALL_CHANNEL_RUN(recall)->source; found = FALSE; - list = source->play; + if(recall->rt_safe){ + /* connect done */ + list = source->play; + + while((list = ags_recall_find_type_with_recycling_context(list, + AGS_TYPE_RT_STREAM_CHANNEL_RUN, + (GObject *) recall->recall_id->recycling_context)) != NULL){ + rt_stream_channel_run = AGS_RT_STREAM_CHANNEL_RUN(list->data); - while((list = ags_recall_find_type_with_recycling_context(list, - AGS_TYPE_STREAM_CHANNEL_RUN, - (GObject *) recall->recall_id->recycling_context)) != NULL){ - stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data); + if((AGS_RECALL_TEMPLATE & (AGS_RECALL(rt_stream_channel_run)->flags)) != 0){ + list = list->next; - if((AGS_RECALL_TEMPLATE & (AGS_RECALL(stream_channel_run)->flags)) != 0){ - list = list->next; + continue; + } + + recall_recycling_list = AGS_RECALL(rt_stream_channel_run)->children; + + while(recall_recycling_list != NULL){ + recall_audio_signal_list = AGS_RECALL(recall_recycling_list->data)->children; + + while(recall_audio_signal_list != NULL && + (AGS_RECALL_DONE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0 && + (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0){ + found = TRUE; + break; + + recall_audio_signal_list = recall_audio_signal_list->next; + } + + recall_recycling_list = recall_recycling_list->next; + } - continue; + list = list->next; } + }else{ + /* connect done */ + list = source->play; + + while((list = ags_recall_find_type_with_recycling_context(list, + AGS_TYPE_STREAM_CHANNEL_RUN, + (GObject *) recall->recall_id->recycling_context)) != NULL){ + stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data); + + if((AGS_RECALL_TEMPLATE & (AGS_RECALL(stream_channel_run)->flags)) != 0){ + list = list->next; + + continue; + } - recall_recycling_list = AGS_RECALL(stream_channel_run)->children; + recall_recycling_list = AGS_RECALL(stream_channel_run)->children; - while(recall_recycling_list != NULL){ - recall_audio_signal_list = AGS_RECALL(recall_recycling_list->data)->children; + while(recall_recycling_list != NULL){ + recall_audio_signal_list = AGS_RECALL(recall_recycling_list->data)->children; - while(recall_audio_signal_list != NULL && - (AGS_RECALL_DONE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0 && - (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0){ - found = TRUE; - break; + while(recall_audio_signal_list != NULL && + (AGS_RECALL_DONE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0 && + (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_audio_signal_list->data)->flags)) == 0){ + found = TRUE; + break; - recall_audio_signal_list = recall_audio_signal_list->next; + recall_audio_signal_list = recall_audio_signal_list->next; + } + + recall_recycling_list = recall_recycling_list->next; } - recall_recycling_list = recall_recycling_list->next; + list = list->next; } - - list = list->next; } if(!found){ @@ -567,7 +605,7 @@ if(channel == NULL){ return; } - + soundcard = AGS_AUDIO(channel->audio)->soundcard; mutex_manager = ags_mutex_manager_get_instance(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_route_dssi_audio_run.c new/gsequencer-1.4.18/ags/audio/recall/ags_route_dssi_audio_run.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_route_dssi_audio_run.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_route_dssi_audio_run.c 2018-01-31 18:13:52.000000000 +0100 @@ -422,6 +422,12 @@ route_dssi_audio_run->count_beats_audio_run = NULL; } + /* feed midi */ + g_list_free_full(route_dssi_audio_run->feed_midi, + g_object_unref); + + route_dssi_audio_run->feed_midi = NULL; + /* call parent */ G_OBJECT_CLASS(ags_route_dssi_audio_run_parent_class)->dispose(gobject); } @@ -448,6 +454,9 @@ g_object_unref(G_OBJECT(route_dssi_audio_run->timestamp)); } + g_list_free_full(route_dssi_audio_run->feed_midi, + g_object_unref); + /* call parent */ G_OBJECT_CLASS(ags_route_dssi_audio_run_parent_class)->finalize(gobject); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_route_lv2_audio_run.c new/gsequencer-1.4.18/ags/audio/recall/ags_route_lv2_audio_run.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_route_lv2_audio_run.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_route_lv2_audio_run.c 2018-01-31 18:13:52.000000000 +0100 @@ -418,6 +418,12 @@ route_lv2_audio_run->count_beats_audio_run = NULL; } + /* feed midi */ + g_list_free_full(route_lv2_audio_run->feed_midi, + g_object_unref); + + route_lv2_audio_run->feed_midi = NULL; + /* call parent */ G_OBJECT_CLASS(ags_route_lv2_audio_run_parent_class)->dispose(gobject); } @@ -427,6 +433,8 @@ { AgsRouteLv2AudioRun *route_lv2_audio_run; + GList *note; + route_lv2_audio_run = AGS_ROUTE_LV2_AUDIO_RUN(gobject); /* delay audio run */ @@ -444,6 +452,9 @@ g_object_unref(G_OBJECT(route_lv2_audio_run->timestamp)); } + g_list_free_full(route_lv2_audio_run->feed_midi, + g_object_unref); + /* call parent */ G_OBJECT_CLASS(ags_route_lv2_audio_run_parent_class)->finalize(gobject); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_rt_stream_audio_signal.c new/gsequencer-1.4.18/ags/audio/recall/ags_rt_stream_audio_signal.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_rt_stream_audio_signal.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_rt_stream_audio_signal.c 2018-02-02 14:05:47.000000000 +0100 @@ -297,7 +297,11 @@ /* get template */ template = source->rt_template; - + + if(template == NULL){ + return; + } + note = source->note; ags_audio_buffer_util_clear_buffer(buffer, 1, @@ -326,9 +330,9 @@ rt_attack = current->rt_attack; pthread_mutex_unlock(recycling_mutex); - - if(offset < delay * x1 || - offset < template->length){ + + if(offset < template->length || + offset < delay * x1){ if(template->loop_start < template->loop_end){ guint frame_count; guint loop_length; @@ -464,7 +468,7 @@ }else{ template_stream = g_list_nth(template->stream_beginning, - offset); + offset); if(template_stream == NULL){ note = note->next; @@ -491,6 +495,11 @@ }else{ ags_audio_signal_remove_note(source, current); + + if(source->note == NULL && + recall->recall_id->recycling_context->parent == NULL){ + ags_recall_done(recall); + } } pthread_mutex_lock(recycling_mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/recall/ags_rt_stream_channel_run.c new/gsequencer-1.4.18/ags/audio/recall/ags_rt_stream_channel_run.c --- old/gsequencer-1.4.15/ags/audio/recall/ags_rt_stream_channel_run.c 2018-01-25 23:18:29.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/recall/ags_rt_stream_channel_run.c 2018-02-02 14:05:47.000000000 +0100 @@ -258,7 +258,7 @@ first_recycling = source->first_recycling; last_recycling = source->last_recycling; - + pthread_mutex_unlock(source_mutex); /* lookup mutex */ @@ -313,7 +313,7 @@ "rt-template", rt_template, NULL); ags_audio_signal_stream_resize(audio_signal, - 1); + 3); audio_signal->stream_current = audio_signal->stream_beginning; pthread_mutex_unlock(recycling_mutex); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/task/ags_append_channel.c new/gsequencer-1.4.18/ags/audio/task/ags_append_channel.c --- old/gsequencer-1.4.15/ags/audio/task/ags_append_channel.c 2017-12-21 01:30:44.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/task/ags_append_channel.c 2018-02-02 14:05:47.000000000 +0100 @@ -332,7 +332,7 @@ AgsAppendChannel *append_channel; AgsAudioLoop *audio_loop; - AgsAudioLoop *channel_thread; + AgsChannelThread *channel_thread; AgsServer *server; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/task/ags_init_channel.c new/gsequencer-1.4.18/ags/audio/task/ags_init_channel.c --- old/gsequencer-1.4.15/ags/audio/task/ags_init_channel.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/task/ags_init_channel.c 2018-02-02 14:05:47.000000000 +0100 @@ -516,7 +516,7 @@ /* recursive play init */ nth_domain = 0; init_playback = TRUE; - + g_atomic_int_or(&(playback->flags), AGS_PLAYBACK_PLAYBACK); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/task/ags_start_soundcard.c new/gsequencer-1.4.18/ags/audio/task/ags_start_soundcard.c --- old/gsequencer-1.4.15/ags/audio/task/ags_start_soundcard.c 2017-12-21 01:30:44.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/task/ags_start_soundcard.c 2018-02-02 14:05:47.000000000 +0100 @@ -287,7 +287,8 @@ AgsThread *main_loop; AgsApplicationContext *application_context; - AgsSoundcard *soundcard; + + GObject *soundcard; GList *start_queue; @@ -324,23 +325,31 @@ while((soundcard_thread = ags_thread_find_type(soundcard_thread, AGS_TYPE_SOUNDCARD_THREAD)) != NULL){ if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(soundcard_thread->flags)))) == 0){ - /* append to AgsSoundcard */ - AGS_SOUNDCARD_THREAD(soundcard_thread)->error = NULL; + soundcard = AGS_SOUNDCARD_THREAD(soundcard_thread)->soundcard; - g_message("start soundcard"); - - start_queue = NULL; - start_queue = g_list_prepend(start_queue, - soundcard_thread); - - if(start_queue != NULL){ - if(g_atomic_pointer_get(&(AGS_THREAD(main_loop)->start_queue)) != NULL){ - g_atomic_pointer_set(&(AGS_THREAD(main_loop)->start_queue), - g_list_concat(start_queue, - g_atomic_pointer_get(&(AGS_THREAD(main_loop)->start_queue)))); - }else{ - g_atomic_pointer_set(&(AGS_THREAD(main_loop)->start_queue), - start_queue); + /* append to AgsSoundcard */ + if(!ags_soundcard_is_playing(AGS_SOUNDCARD(soundcard)) && + ags_soundcard_get_buffer(AGS_SOUNDCARD(soundcard)) == NULL){ + AGS_SOUNDCARD_THREAD(soundcard_thread)->error = NULL; + + g_message("start soundcard"); + + ags_soundcard_play_init(AGS_SOUNDCARD(soundcard), + &(AGS_SOUNDCARD_THREAD(soundcard_thread)->error)); + + start_queue = NULL; + start_queue = g_list_prepend(start_queue, + soundcard_thread); + + if(start_queue != NULL){ + if(g_atomic_pointer_get(&(AGS_THREAD(main_loop)->start_queue)) != NULL){ + g_atomic_pointer_set(&(AGS_THREAD(main_loop)->start_queue), + g_list_concat(start_queue, + g_atomic_pointer_get(&(AGS_THREAD(main_loop)->start_queue)))); + }else{ + g_atomic_pointer_set(&(AGS_THREAD(main_loop)->start_queue), + start_queue); + } } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/thread/ags_audio_loop.c new/gsequencer-1.4.18/ags/audio/thread/ags_audio_loop.c --- old/gsequencer-1.4.15/ags/audio/thread/ags_audio_loop.c 2018-01-19 16:12:03.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/thread/ags_audio_loop.c 2018-02-02 14:05:47.000000000 +0100 @@ -1184,8 +1184,6 @@ remove_play = TRUE; for(stage = 0; stage < 3; stage++){ - - if((AGS_PLAYBACK_PLAYBACK & (g_atomic_int_get(&(playback->flags)))) != 0 && playback->recall_id[0] != NULL){ remove_play = FALSE; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/audio/thread/ags_soundcard_thread.c new/gsequencer-1.4.18/ags/audio/thread/ags_soundcard_thread.c --- old/gsequencer-1.4.15/ags/audio/thread/ags_soundcard_thread.c 2017-11-06 00:08:58.000000000 +0100 +++ new/gsequencer-1.4.18/ags/audio/thread/ags_soundcard_thread.c 2018-02-02 14:05:47.000000000 +0100 @@ -19,15 +19,7 @@ #include <ags/audio/thread/ags_soundcard_thread.h> -#include <ags/object/ags_application_context.h> -#include <ags/object/ags_config.h> -#include <ags/object/ags_connectable.h> -#include <ags/object/ags_main_loop.h> - -#include <ags/thread/ags_mutex_manager.h> -#include <ags/thread/ags_polling_thread.h> -#include <ags/thread/ags_poll_fd.h> -#include <ags/thread/ags_timestamp_thread.h> +#include <ags/libags.h> #include <ags/audio/ags_devout.h> @@ -393,7 +385,7 @@ AgsThread *main_loop; AgsPollingThread *polling_thread; - AgsSoundcard *soundcard; + GObject *soundcard; GList *poll_fd; @@ -402,35 +394,18 @@ soundcard_thread = AGS_SOUNDCARD_THREAD(thread); main_loop = ags_thread_get_toplevel(thread); - soundcard = AGS_SOUNDCARD(soundcard_thread->soundcard); - - /* abort if already playing */ - if(ags_soundcard_is_playing(soundcard)){ - return; - } + soundcard = soundcard_thread->soundcard; /* disable timing */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_TIMING)); - /* check if already initialized */ - soundcard_thread->error = NULL; - - if(ags_soundcard_get_buffer(soundcard) == NULL){ - ags_soundcard_play_init(soundcard, - &(soundcard_thread->error)); - -#ifdef AGS_DEBUG - g_message("ags_devout_alsa_play"); -#endif - } - /* find polling thread */ polling_thread = (AgsPollingThread *) ags_thread_find_type(main_loop, AGS_TYPE_POLLING_THREAD); /* add poll fd and connect dispatch */ - poll_fd = ags_soundcard_get_poll_fd(soundcard); + poll_fd = ags_soundcard_get_poll_fd(AGS_SOUNDCARD(soundcard)); while(poll_fd != NULL){ if(polling_thread != NULL){ @@ -463,7 +438,8 @@ AgsSoundcardThread *soundcard_thread; AgsMutexManager *mutex_manager; - AgsSoundcard *soundcard; + + GObject *soundcard; GList *poll_fd; @@ -476,7 +452,7 @@ soundcard_thread = AGS_SOUNDCARD_THREAD(thread); - soundcard = AGS_SOUNDCARD(soundcard_thread->soundcard); + soundcard = soundcard_thread->soundcard; /* */ mutex_manager = ags_mutex_manager_get_instance(); @@ -509,13 +485,13 @@ /* playback */ pthread_mutex_lock(mutex); - is_playing = ags_soundcard_is_playing(soundcard); + is_playing = ags_soundcard_is_playing(AGS_SOUNDCARD(soundcard)); pthread_mutex_unlock(mutex); if(is_playing){ error = NULL; - ags_soundcard_play(soundcard, + ags_soundcard_play(AGS_SOUNDCARD(soundcard), &error); if(error != NULL){ @@ -535,20 +511,20 @@ AgsThread *main_loop; AgsPollingThread *polling_thread; - AgsSoundcard *soundcard; + GObject *soundcard; GList *poll_fd; soundcard_thread = AGS_SOUNDCARD_THREAD(thread); main_loop = ags_thread_get_toplevel(thread); - soundcard = AGS_SOUNDCARD(soundcard_thread->soundcard); + soundcard = soundcard_thread->soundcard; /* stop thread and soundcard */ AGS_THREAD_CLASS(ags_soundcard_thread_parent_class)->stop(thread); //FIXME:JK: is this safe? - ags_soundcard_stop(soundcard); + ags_soundcard_stop(AGS_SOUNDCARD(soundcard)); g_atomic_int_or(&(thread->flags), AGS_THREAD_TIMING); @@ -558,7 +534,7 @@ AGS_TYPE_POLLING_THREAD); /* remove poll fd */ - poll_fd = ags_soundcard_get_poll_fd(soundcard); + poll_fd = ags_soundcard_get_poll_fd(AGS_SOUNDCARD(soundcard)); while(poll_fd != NULL){ if(polling_thread != NULL){ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/ags/plugin/ags_lv2_plugin.c new/gsequencer-1.4.18/ags/plugin/ags_lv2_plugin.c --- old/gsequencer-1.4.15/ags/plugin/ags_lv2_plugin.c 2017-11-19 21:14:37.000000000 +0100 +++ new/gsequencer-1.4.18/ags/plugin/ags_lv2_plugin.c 2018-02-02 22:24:33.000000000 +0100 @@ -19,11 +19,7 @@ #include <ags/plugin/ags_lv2_plugin.h> -#include <ags/lib/ags_string_util.h> - -#include <ags/object/ags_soundcard.h> -#include <ags/object/ags_config.h> -#include <ags/object/ags_marshal.h> +#include <ags/libags.h> #include <ags/plugin/ags_lv2_plugin.h> #include <ags/plugin/ags_lv2_manager.h> @@ -772,14 +768,42 @@ LV2_ATOM__Int); options[2].value = ptr_buffer_size; - /* terminate */ + /* bounded-block-length */ options[3].context = LV2_OPTIONS_INSTANCE; options[3].subject = 0; - options[3].key = 0; + options[3].key = ags_lv2_urid_manager_lookup(ags_lv2_urid_manager_get_instance(), + LV2_BUF_SIZE__boundedBlockLength); + + ptr_buffer_size = (float *) malloc(sizeof(float)); + ptr_buffer_size[0] = conf_buffer_size; + + options[3].size = sizeof(float); + options[3].type = ags_lv2_urid_manager_lookup(ags_lv2_urid_manager_get_instance(), + LV2_ATOM__Int); + options[3].value = ptr_buffer_size; + + /* fixed-block-length */ + options[4].context = LV2_OPTIONS_INSTANCE; + options[4].subject = 0; + options[4].key = ags_lv2_urid_manager_lookup(ags_lv2_urid_manager_get_instance(), + LV2_BUF_SIZE__fixedBlockLength); - options[3].size = 0; - options[3].type = 0; - options[3].value = NULL; + ptr_buffer_size = (float *) malloc(sizeof(float)); + ptr_buffer_size[0] = conf_buffer_size; + + options[4].size = sizeof(float); + options[4].type = ags_lv2_urid_manager_lookup(ags_lv2_urid_manager_get_instance(), + LV2_ATOM__Int); + options[4].value = ptr_buffer_size; + + /* terminate */ + options[5].context = LV2_OPTIONS_INSTANCE; + options[5].subject = 0; + options[5].key = 0; + + options[5].size = 0; + options[5].type = 0; + options[5].value = NULL; /* set options */ ags_lv2_option_manager_lv2_options_set(*lv2_handle, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/configure.ac new/gsequencer-1.4.18/configure.ac --- old/gsequencer-1.4.15/configure.ac 2018-01-26 03:22:44.000000000 +0100 +++ new/gsequencer-1.4.18/configure.ac 2018-02-02 22:41:50.000000000 +0100 @@ -6,7 +6,7 @@ # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) -AC_INIT([gsequencer],[1.4.15],[[email protected]]) +AC_INIT([gsequencer],[1.4.18],[[email protected]]) AM_INIT_AUTOMAKE([subdir-objects]) AC_CONFIG_SRCDIR([ags/config.h.in]) AC_CONFIG_HEADERS([ags/config.h]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gsequencer-1.4.15/po/POTFILES.in new/gsequencer-1.4.18/po/POTFILES.in --- old/gsequencer-1.4.15/po/POTFILES.in 2018-01-19 16:12:04.000000000 +0100 +++ new/gsequencer-1.4.18/po/POTFILES.in 2018-02-02 22:24:33.000000000 +0100 @@ -117,7 +117,6 @@ ./ags/X/editor/ags_file_selection_callbacks.c ./ags/X/editor/ags_inline_player.c ./ags/X/editor/ags_inline_player_callbacks.c -./ags/X/editor/ags_level_callbacks.c ./ags/X/editor/ags_machine_radio_button.c ./ags/X/editor/ags_machine_radio_button_callbacks.c ./ags/X/editor/ags_machine_selection.c
