diff options
| -rw-r--r-- | src/jpeg.c | 12 | ||||
| -rw-r--r-- | src/main.c | 8 | ||||
| -rw-r--r-- | src/xlib.c | 75 | 
3 files changed, 15 insertions, 80 deletions
@@ -14,12 +14,6 @@ struct error_mgr{  	jmp_buf jmp_buffer;  }; -static void error_exit(j_common_ptr cinfo){ -	(void) cinfo; -	printf("\nerror!\n"); -	exit(1); -} -  struct jpeg_t{  	struct image img;  	FILE *f; @@ -27,6 +21,12 @@ struct jpeg_t{  	struct error_mgr jerr;  }; +static void error_exit(j_common_ptr cinfo){ +	(void) cinfo; +	printf("\nerror!\n"); +	exit(1); +} +  static struct image *jpeg_open(FILE *f){  	struct jpeg_t *j; @@ -98,14 +98,14 @@ void handlekeypress(XEvent *event){  			exit(0);  			break;  		case XK_Return: -		//	puts(filename); +			puts(images[imageidx]);  			fflush(stdout);  			break; -		case XK_t: -		case XK_n: +		case XK_j: +		case XK_k:  			if(mode == MODE_CTL)  				return; -			direction = key == XK_t ? nextimage : previmage; +			direction = key == XK_j ? nextimage : previmage;  			direction();  			/* Pass through */  			freeimage(img); @@ -21,75 +21,8 @@ GC gc;  int xshm = 0; -#define GETVAL(x, c) (ibuf[(x) * 3 + (c)]) -#define GETLVAL(x, y, u, v, c) (( \ -			(GETVAL((x), (c)) * (1023^(u)) + GETVAL((x)+1, (c)) * (u)) * (1023^(v)) + \ -			(GETVAL((x)+img->bufwidth, (c)) * (1023^(u)) + GETVAL((x)+img->bufwidth+1, (c)) * (u)) * (v)) >> 20) - -void scale(struct image *img, XImage *ximg){ -	int x, y; -	unsigned char * __restrict__ ibuf; -	char* __restrict__ newBuf = ximg->data; -	unsigned int jdy = ximg->bytes_per_line / 4 - ximg->width; -	unsigned int dx = (img->bufwidth << 10) / ximg->width; - -	struct timeval t0; -	struct timeval t1; -	gettimeofday(&t0, NULL); - -	for(y = 0; y < ximg->height; y++){ -		unsigned int bufy = (y << 10) * img->bufheight / ximg->height; -		unsigned int v_ratio = (bufy & 1023); -		unsigned int bufx = img->bufwidth / ximg->width; -		unsigned char *ibuf = &img->buf[y * img->bufheight / ximg->height * img->bufwidth * 3]; -		for(x = ximg->width; x; x--){ -			unsigned int u_ratio = (bufx & 1023); - -			*newBuf++ = GETLVAL(bufx >> 10, bufy >> 10, u_ratio, v_ratio, 2); -			*newBuf++ = GETLVAL(bufx >> 10, bufy >> 10, u_ratio, v_ratio, 1); -			*newBuf++ = GETLVAL(bufx >> 10, bufy >> 10, u_ratio, v_ratio, 0); -			newBuf++; -			 -			bufx += dx; -		} -		newBuf += jdy; -	} - -	gettimeofday(&t1, NULL); -	printf("%i ms\n", ((t1.tv_sec - t0.tv_sec) * 1000000 + t1.tv_usec - t0.tv_usec) / 1000); -} - - -void linearscale(struct image *img, XImage *ximg){ -	unsigned int i; -	int x, y; -	unsigned int dx; -	unsigned char * __restrict__ ibuf; -	char* __restrict__ newBuf = ximg->data; -	unsigned int jdy = ximg->bytes_per_line / 4 - ximg->width; -	dx = (img->bufwidth << 10) / ximg->width; - -	struct timeval t0; -	struct timeval t1; -	gettimeofday(&t0, NULL); - -	for(y = 0; y < ximg->height; y++){ -		i = 0; -		ibuf = &img->buf[y * img->bufheight / ximg->height * img->bufwidth * 3]; -		for(x = 0; x < ximg->width; x++){ -			*newBuf++ = (ibuf[(i >> 10)*3+2]); -			*newBuf++ = (ibuf[(i >> 10)*3+1]); -			*newBuf++ = (ibuf[(i >> 10)*3]); -			newBuf++; -			 -			i += dx; -		} -		newBuf += jdy; -	} - -	gettimeofday(&t1, NULL); -	printf("%i ms\n", ((t1.tv_sec - t0.tv_sec) * 1000000 + t1.tv_usec - t0.tv_usec) / 1000); -} +void scale(struct image *img, XImage *ximg); +void linearscale(struct image *img, XImage *ximg);  XShmSegmentInfo *shminfo;  XImage *ximage(struct image *img, unsigned int width, unsigned int height) { @@ -110,6 +43,8 @@ XImage *ximage(struct image *img, unsigned int width, unsigned int height) {  				shminfo,  				width, height  			))){ +				fprintf(stderr, "XShm problems\n"); +				exit(1);  			}  			if((shminfo->shmid = shmget(IPC_PRIVATE, ximg->bytes_per_line * ximg->height, IPC_CREAT|0777)) == -1){  				fprintf(stderr, "XShm problems\n"); @@ -133,7 +68,7 @@ XImage *ximage(struct image *img, unsigned int width, unsigned int height) {  				width, height,  				32, 0  			); -			ximg->data  = malloc(ximg->bytes_per_line * ximg->height + /*HACK*/(ximg->bytes_per_line+1)); +			ximg->data  = malloc(ximg->bytes_per_line * ximg->height);  			XInitImage(ximg);  		}  		scale(img, ximg);  | 
