else
filename = argv[1];
ctx.points = ReadPoints ("pro-gnu");
+ ctx.points = drop_dup_frames (ctx.points, 20);
rescale_points (ctx.points);
ctx.picture = gdk_pixbuf_new_from_file (filename, NULL);
ctx.i = ctx.points->len;
return points;
}
+GArray *
+drop_dup_frames (GArray *points, int n)
+{
+ GArray *frames;
+ Point *point;
+ Point *next;
+ int i;
+ int j;
+ int inc;
+ int thre;
+ int err;
+ inc = n;
+ frames = g_array_new (FALSE, TRUE, sizeof (Point));
+ for (i = 0; i < points->len;)
+ {
+ j = i + 1;
+ point = next = &(g_array_index (points, Point, j));
+ while (next->name == NULL && j < points->len)
+ {
+ j++;
+ next = &(g_array_index (points, Point, j));
+ }
+ thre = j - i;
+ err = 0;
+ g_array_append_val (frames, g_array_index (points, Point, i));
+ for (; i < j; i++)
+ {
+ err += inc;
+ while (err > thre)
+ {
+ err -= thre;
+ g_array_append_val (frames, g_array_index (points, Point, i));
+ }
+ }
+ }
+ return frames;
+}
+
void
rescale_points (GArray *points)
{
GArray * ReadPoints (char *);
void rescale_points (GArray *);
+GArray * drop_dup_frames (GArray *, int);
#endif