http://se.aminet.net/pub/Linux/distributions/slackware/slackware-10.1/source/xap...
[xscreensaver] / hacks / analogtv.c
index d3d51aed3077befc780f73ea78727d971218a26e..31fe02f3b1f8bc8655aa5eb9e62b6a47375f5a2f 100644 (file)
@@ -264,8 +264,9 @@ analogtv_alloc_image(analogtv *it)
   if (!it->image) {
     it->image = XCreateImage(it->dpy, it->xgwa.visual, it->xgwa.depth, ZPixmap, 0, 0,
                              it->usewidth, it->useheight, 8, 0);
-    it->image->data = (char *)calloc(it->image->height, it->image->bytes_per_line);
+    it->image->data = (char *)malloc(it->image->height * it->image->bytes_per_line);
   }
+  memset (it->image->data, 0, it->image->height * it->image->bytes_per_line);
 }
 
 
@@ -851,7 +852,7 @@ void
 analogtv_setup_sync(analogtv_input *input, int do_cb, int do_ssavi)
 {
   int i,lineno,vsync;
-  char *sig;
+  signed char *sig;
 
   int synclevel = do_ssavi ? ANALOGTV_WHITE_LEVEL : ANALOGTV_SYNC_LEVEL;
 
@@ -1565,6 +1566,9 @@ analogtv_draw(analogtv *it)
 #endif
 
   XSync(it->dpy,0);
+
+  /* Small delay to avoid hogging the CPU. */
+  usleep (10000);
 }
 
 analogtv_input *
@@ -1719,9 +1723,9 @@ void analogtv_add_signal(analogtv *it, analogtv_reception *rec)
   double *ps=it->rx_signal;
   double *pe=it->rx_signal + ANALOGTV_SIGNAL_LEN;
   double *p=ps;
-  char *ss=&inp->signal[0][0];
-  char *se=&inp->signal[0][0] + ANALOGTV_SIGNAL_LEN;
-  char *s=ss + ((unsigned)rec->ofs % ANALOGTV_SIGNAL_LEN);
+  signed char *ss=&inp->signal[0][0];
+  signed char *se=&inp->signal[0][0] + ANALOGTV_SIGNAL_LEN;
+  signed char *s=ss + ((unsigned)rec->ofs % ANALOGTV_SIGNAL_LEN);
   int i;
   int ec=it->channel_change_cycles;
   double level=rec->level;