olaf neophyte and de.po updates, valgrind tweaks, delete green lady, inkscape dpi=96
[goodguy/history.git] / cinelerra-5.1 / cinelerra / virtualanode.C
index f922c7f774eb46525809e9dda890c7aab0b2b089..a1ad5235c65841c413e88d309034820a5e3d7395 100644 (file)
@@ -281,8 +281,6 @@ if(debug) printf("VirtualANode::render_as_module %d\n", __LINE__);
 // Scan fragment in meter sized fragments
                for(int i = 0; i < len; )
                {
-                       int current_level = ((AModule*)real_module)->current_level;
-                       double peak = 0;
                        meter_render_start = i;
                        meter_render_end = i + meter_render_fragment;
                        if(meter_render_end > len)
@@ -290,25 +288,20 @@ if(debug) printf("VirtualANode::render_as_module %d\n", __LINE__);
 // Number of samples into the fragment this meter sized fragment is,
 // normalized to project sample rate.
                        int64_t meter_render_start_project = meter_render_start *
-                               project_sample_rate /
-                               sample_rate;
+                               project_sample_rate / sample_rate;
 
 // Scan meter sized fragment
-                       double *output_samples = output_temp->get_data();
-                       for( ; i < meter_render_end; i++)
-                       {
-                               double sample = fabs(output_samples[i]);
-                               if(sample > peak) peak = sample;
+                       double peak = 0, *output_samples = output_temp->get_data();
+                       while( i < meter_render_end ) {
+                               double sample = fabs(output_samples[i++]);
+                               if( sample > peak ) peak = sample;
                        }
 
-                       ((AModule*)real_module)->level_history[current_level] =
-                               peak;
-                       ((AModule*)real_module)->level_samples[current_level] =
-                               (direction == PLAY_FORWARD) ?
+                       MeterHistory *meter_history = ((AModule*)real_module)->meter_history;
+                       int64_t pos = (direction == PLAY_FORWARD) ?
                                (start_position_project + meter_render_start_project) :
-                               (start_position_project - meter_render_start_project);
-                       ((AModule*)real_module)->current_level =
-                               arender->get_next_peak(current_level);
+                               (start_position_project - meter_render_start_project) ;
+                       meter_history->set_peak(0, peak, pos);
                }
        }
 if(debug) printf("VirtualANode::render_as_module %d\n", __LINE__);
@@ -515,53 +508,50 @@ void VirtualANode::get_pan_automation(double &slope,
        intercept = 0;
        slope = 0;
 
-       PanAuto *prev_keyframe = 0;
-       PanAuto *next_keyframe = 0;
-       prev_keyframe = (PanAuto*)autos->get_prev_auto(input_position,
-               direction,
-               (Auto* &)prev_keyframe);
-       next_keyframe = (PanAuto*)autos->get_next_auto(input_position,
-               direction,
-               (Auto* &)next_keyframe);
+       Auto *prev_keyframe = 0, *next_keyframe = 0;
+       prev_keyframe = autos->get_prev_auto(input_position, direction, prev_keyframe);
+       next_keyframe = autos->get_next_auto(input_position, direction, next_keyframe);
+       PanAuto *prev_pan_auto = (PanAuto *)prev_keyframe;
+       PanAuto *next_pan_auto = (PanAuto *)next_keyframe;
 
        if(direction == PLAY_FORWARD)
        {
 // Two distinct automation points within range
-               if(next_keyframe->position > prev_keyframe->position)
+               if(next_pan_auto->position > prev_pan_auto->position)
                {
-                       slope = ((double)next_keyframe->values[channel] - prev_keyframe->values[channel]) /
-                               ((double)next_keyframe->position - prev_keyframe->position);
-                       intercept = ((double)input_position - prev_keyframe->position) * slope +
-                               prev_keyframe->values[channel];
+                       slope = ((double)next_pan_auto->values[channel] - prev_pan_auto->values[channel]) /
+                               ((double)next_pan_auto->position - prev_pan_auto->position);
+                       intercept = ((double)input_position - prev_pan_auto->position) * slope +
+                               prev_pan_auto->values[channel];
 
-                       if(next_keyframe->position < input_position + slope_len)
-                               slope_len = next_keyframe->position - input_position;
+                       if(next_pan_auto->position < input_position + slope_len)
+                               slope_len = next_pan_auto->position - input_position;
                }
                else
 // One automation point within range
                {
                        slope = 0;
-                       intercept = prev_keyframe->values[channel];
+                       intercept = prev_pan_auto->values[channel];
                }
        }
        else
        {
 // Two distinct automation points within range
-               if(next_keyframe->position < prev_keyframe->position)
+               if(next_pan_auto->position < prev_pan_auto->position)
                {
-                       slope = ((double)next_keyframe->values[channel] - prev_keyframe->values[channel]) /
-                               ((double)next_keyframe->position - prev_keyframe->position);
-                       intercept = ((double)input_position - prev_keyframe->position) * slope +
-                               prev_keyframe->values[channel];
+                       slope = ((double)next_pan_auto->values[channel] - prev_pan_auto->values[channel]) /
+                               ((double)next_pan_auto->position - prev_pan_auto->position);
+                       intercept = ((double)input_position - prev_pan_auto->position) * slope +
+                               prev_pan_auto->values[channel];
 
-                       if(next_keyframe->position > input_position - slope_len)
-                               slope_len = input_position - next_keyframe->position;
+                       if(next_pan_auto->position > input_position - slope_len)
+                               slope_len = input_position - next_pan_auto->position;
                }
                else
 // One automation point within range
                {
                        slope = 0;
-                       intercept = next_keyframe->values[channel];
+                       intercept = next_pan_auto->values[channel];
                }
        }
 }