r4148 - trunk/bse



Author: timj
Date: 2006-12-13 17:56:16 -0500 (Wed, 13 Dec 2006)
New Revision: 4148

Modified:
   trunk/bse/ChangeLog
   trunk/bse/bseenginemaster.c
Log:
Wed Dec 13 23:55:15 2006  Tim Janik  <timj gtk org>                                                                                                           
                                                                                                                                                              
        * bseenginemaster.c (master_process_locked_node): set buffer start                                                                                    
        fragments to zero for nodes that are partially suspended and have                                                                                     
        pending probe jobs, so probes don't contain outdated junk data.                                                                                       
                                                                                                                                                              



Modified: trunk/bse/ChangeLog
===================================================================
--- trunk/bse/ChangeLog	2006-12-13 20:34:07 UTC (rev 4147)
+++ trunk/bse/ChangeLog	2006-12-13 22:56:16 UTC (rev 4148)
@@ -1,3 +1,9 @@
+Wed Dec 13 23:55:15 2006  Tim Janik  <timj gtk org>
+
+	* bseenginemaster.c (master_process_locked_node): set buffer start 
+	fragments to zero for nodes that are partially suspended and have
+	pending probe jobs, so probes don't contain outdated junk data.
+
 Wed Dec 13 21:30:39 2006  Tim Janik  <timj gtk org>
 
 	* bseenginemaster.c (master_take_probes): fixup ostreams[].value 

Modified: trunk/bse/bseenginemaster.c
===================================================================
--- trunk/bse/bseenginemaster.c	2006-12-13 20:34:07 UTC (rev 4147)
+++ trunk/bse/bseenginemaster.c	2006-12-13 22:56:16 UTC (rev 4148)
@@ -807,7 +807,8 @@
   const guint64 current_stamp = GSL_TICK_STAMP;
   guint64 next_counter, new_counter, final_counter = current_stamp + n_values;
   guint i, j, diff;
-  
+  bool needs_probe_reset = node->probe_jobs != NULL;
+
   g_return_if_fail (node->integrated && node->sched_tag);
   
   while (node->counter < final_counter)
@@ -851,7 +852,11 @@
 	  }
       /* update obuffer pointer */
       for (i = 0; i < ENGINE_NODE_N_OSTREAMS (node); i++)
-	node->module.ostreams[i].values = node->outputs[i].buffer + diff;
+        node->module.ostreams[i].values = node->outputs[i].buffer + diff;
+      if (diff && needs_probe_reset)
+        for (i = 0; i < ENGINE_NODE_N_OSTREAMS (node); i++)
+          memset (node->outputs[i].buffer, 0, diff * sizeof (node->outputs[0].buffer[0]));
+      needs_probe_reset = false;
       /* process() node */
       if (UNLIKELY (ENGINE_NODE_IS_SUSPENDED (node, node->counter)))
 	{




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]