return 0;
int compare_to= a->h;
- if (max_relevant_y && compare_to > max_relevant_y)
+ if (max_relevant_y>=0 && compare_to > max_relevant_y)
compare_to= max_relevant_y;
return !memcmp(a->data, b->data, a->w * 3 * compare_to);
char *doing;
sysassert( vasprintf(&doing,fmt,al) >=0 );
- progress("%s",doing);
debugf("PAGING wait_for_stability"
" last_input=%f previously=%p `%s'\n",
last_input, previously, doing);
+ double min_interval= 25000; /*us*/
for (;;) {
- usleep(250000);
+ progress_spinner("%s",doing);
+
+ double since_last_input= timestamp() - last_input;
+ double this_interval= min_interval - since_last_input;
+
+ if (this_interval >= 0)
+ usleep(this_interval);
+
snapshot(output);
if (!last) {
debugf("PAGING wait_for_stability changed...\n");
free(last); last=*output; *output=0;
nidentical=0;
+ if (!with_keypress) {
+ min_interval *= 3.0;
+ min_interval += 0.5;
+ }
} else {
nidentical++;
int threshold=
!previously ? 3 :
- identical(*output,previously) ? 3
+ identical(*output,previously) ? 5
: 1;
debugf("PAGING wait_for_stability nidentical=%d threshold=%d\n",
nidentical, threshold);
if (nidentical >= threshold)
break;
+
+ min_interval += 0.5;
+ min_interval *= 2.0;
}
- progress_spinner("%s",doing);
if (with_keypress)
with_keypress();
-
- usleep(250000);
}
free_snapshot(&last);
static CanonImage *convert_page(Snapshot *sn, RgbImage *ri) {
CanonImage *im;
- fprintf(screenshot_file,
- "P6\n"
- "%d %d\n"
- "255\n", sn->w, sn->h);
+ fwrite_ppmraw(screenshot_file, sn);
+ if (ri) memcpy(ri->data, sn->data, ri->h * ri->w * 3);
+ unsigned char *pixel= sn->data;
CANONICALISE_IMAGE(im, sn->w, sn->h, {
- int i;
- rgb= 0;
- for (i=0; i<3; i++) {
- rgb <<= 8;
- unsigned long sample= RI_PIXEL(sn,x,y)[i];
- rgb |= sample;
- fputc(sample, screenshot_file);
- }
- if (ri)
- CANONIMG_ALSO_STORERGB(ri);
+ rgb=
+ (pixel[0] << 16) |
+ (pixel[1] << 8) |
+ (pixel[2] );
+ pixel += 3;
});
-
+
sysassert(!ferror(screenshot_file));
sysassert(!fflush(screenshot_file));