chiark
/
gitweb
/
~yarrgweb
/
ypp-sc-tools.web-live.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Reverse order of samples in Rgb and other optimisations
[ypp-sc-tools.web-live.git]
/
pctb
/
pages.c
diff --git
a/pctb/pages.c
b/pctb/pages.c
index 95a1c460688716a710f216fd8d92a5d8c69f409f..e7d3ec909cb4663c74486fa8e94a25ec3d3288a8 100644
(file)
--- a/
pctb/pages.c
+++ b/
pctb/pages.c
@@
-264,9
+264,9
@@
static void snapshot(Snapshot **output) {
#define COMPUTE_SHIFT_MASK(ix, rgb) \
compute_shift_mask(&shiftmasks[ix], im_use->rgb##_mask)
#define COMPUTE_SHIFT_MASK(ix, rgb) \
compute_shift_mask(&shiftmasks[ix], im_use->rgb##_mask)
- COMPUTE_SHIFT_MASK(0,
red
);
+ COMPUTE_SHIFT_MASK(0,
blue
);
COMPUTE_SHIFT_MASK(1, green);
COMPUTE_SHIFT_MASK(1, green);
- COMPUTE_SHIFT_MASK(2,
blue
);
+ COMPUTE_SHIFT_MASK(2,
red
);
if (!*output)
*output= alloc_rgb_image(wwidth, wheight);
if (!*output)
*output= alloc_rgb_image(wwidth, wheight);
@@
-274,7
+274,7
@@
static void snapshot(Snapshot **output) {
rtimestamp(&begin, "compute_shift_masks+alloc_rgb_image");
int x,y,i;
rtimestamp(&begin, "compute_shift_masks+alloc_rgb_image");
int x,y,i;
- u
nsigned char *op
= (*output)->data;
+ u
int32_t *op32
= (*output)->data;
for (y=0; y<wheight; y++) {
if (im_use->xoffset == 0 &&
im_use->format == ZPixmap &&
for (y=0; y<wheight; y++) {
if (im_use->xoffset == 0 &&
im_use->format == ZPixmap &&
@@
-286,21
+286,19
@@
static void snapshot(Snapshot **output) {
im_use->blue_mask == 0xff0000U) {
const char *p= im_use->data + y * im_use->bytes_per_line;
// debugf("optimised copy y=%d",y);
im_use->blue_mask == 0xff0000U) {
const char *p= im_use->data + y * im_use->bytes_per_line;
// debugf("optimised copy y=%d",y);
- for (x=0; x<wwidth; x++) {
- *op++ = *p++;
- *op++ = *p++;
- *op++ = *p++;
- p++;
- }
+ memcpy(op32, p, wwidth*sizeof(*op32));
+ op32 += wwidth;
} else {
for (x=0; x<wwidth; x++) {
long xrgb= XGetPixel(im_use,x,y);
} else {
for (x=0; x<wwidth; x++) {
long xrgb= XGetPixel(im_use,x,y);
+ Rgb sample= 0;
for (i=0; i<3; i++) {
for (i=0; i<3; i++) {
- unsigned long sample=
+ sample <<= 8;
+ sample |=
((xrgb << shiftmasks[i].lshift) >> shiftmasks[i].rshift)
& SAMPLEMASK;
((xrgb << shiftmasks[i].lshift) >> shiftmasks[i].rshift)
& SAMPLEMASK;
- *op++= sample;
}
}
+ *op32++= sample;
}
}
}
}
}
}
@@
-519,22
+517,20
@@
static void set_focus_commodity(void) {
static CanonImage *convert_page(const Snapshot *sn, RgbImage **rgb_r) {
CanonImage *im;
static CanonImage *convert_page(const Snapshot *sn, RgbImage **rgb_r) {
CanonImage *im;
- RgbImage *r
gb
;
+ RgbImage *r
i
;
fwrite_ppmraw(screenshot_file, sn);
fwrite_ppmraw(screenshot_file, sn);
- const unsigned char *pixel= sn->data;
- CANONICALISE_IMAGE(im, sn->w, sn->h, rgb, {
- r= *pixel++;
- g= *pixel++;
- b= *pixel++;
+ const Rgb *pixel= sn->data;
+ CANONICALISE_IMAGE(im, sn->w, sn->h, ri, {
+ rgb= *pixel++;
});
sysassert(!ferror(screenshot_file));
sysassert(!fflush(screenshot_file));
});
sysassert(!ferror(screenshot_file));
sysassert(!fflush(screenshot_file));
- if (rgb_r) *rgb_r= r
gb
;
- else free(r
gb
);
+ if (rgb_r) *rgb_r= r
i
;
+ else free(r
i
);
return im;
}
return im;
}
@@
-583,8
+579,12
@@
static void convert_store_page(Snapshot *current) {
CanonImage *ci;
PageStruct *pstruct;
CanonImage *ci;
PageStruct *pstruct;
+ progress("page %d prescanning ...",npages);
ci= convert_page(current,&rgb);
ci= convert_page(current,&rgb);
+
+ progress("page %d overview ...",npages);
find_structure(ci,&pstruct, 0,0,0,0);
find_structure(ci,&pstruct, 0,0,0,0);
+
store_current_page(ci,pstruct,rgb);
}
store_current_page(ci,pstruct,rgb);
}
@@
-612,7
+612,7
@@
void take_screenshots(void) {
debugf("PAGING page %d converted\n",npages);
wait_for_stability(¤t,last, 0,
debugf("PAGING page %d converted\n",npages);
wait_for_stability(¤t,last, 0,
- "page %d collecting...",
+ "page %d collecting
...",
npages+1);
if (npages && /* first pagedown doesn't do much */
npages+1);
if (npages && /* first pagedown doesn't do much */