From owner-p4-projects@FreeBSD.ORG Tue Oct 30 16:11:10 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6DB20D96; Tue, 30 Oct 2012 16:11:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2D0E7D94 for ; Tue, 30 Oct 2012 16:11:10 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 12C2A8FC0C for ; Tue, 30 Oct 2012 16:11:10 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q9UGB9uI094100 for ; Tue, 30 Oct 2012 16:11:09 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q9UGB9U1094097 for perforce@freebsd.org; Tue, 30 Oct 2012 16:11:09 GMT (envelope-from brooks@freebsd.org) Date: Tue, 30 Oct 2012 16:11:09 GMT Message-Id: <201210301611.q9UGB9U1094097@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 219345 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Oct 2012 16:11:10 -0000 http://p4web.freebsd.org/@@219345?ac=10 Change 219345 by brooks@brooks_zenith on 2012/10/30 16:10:13 Checkpoint a split of pngsb into an image reading library and and program. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/Makefile#5 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libimagebox/Makefile#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libimagebox/imagebox.h#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libimagebox/pngbox.c#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd/pngsb/Makefile#3 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd/pngsb/pngsb.c#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/Makefile#5 (text+ko) ==== @@ -4,6 +4,7 @@ .include SUBDIR= libde4tc \ + libimagebox \ libvuln_magic \ libvuln_png ==== //depot/projects/ctsrd/beribsd/src/ctsrd/pngsb/Makefile#3 (text+ko) ==== @@ -4,8 +4,9 @@ WARNS= 6 -CFLAGS+= -I${.CURDIR}/../../ctsrd-lib/libvuln_png/ -LDFLAGS+= -L/usr/local/lib -LDADD+= -lpthread -lvuln_png -lz -lm +CFLAGS+= -I${.CURDIR}/../../ctsrd-lib/libimagebox/ \ + -I${.CURDIR}/../../ctsrd-lib/libvuln_png/ +#LDFLAGS+= -L/usr/local/lib +LDADD+= -lpthread -lde4tc -limagebox -lvuln_png -lz -lm .include ==== //depot/projects/ctsrd/beribsd/src/ctsrd/pngsb/pngsb.c#3 (text+ko) ==== @@ -32,9 +32,11 @@ #include +#include #include #include #include +#include #include #include #include @@ -42,6 +44,7 @@ #include #include +#if 0 static void read_row_callback(png_structp, png_uint_32, int); static void read_png_from_fd(png_structp, png_bytep, png_size_t); @@ -131,6 +134,8 @@ png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL); + printf("bit_depth = %d, color_type = %d\n", bit_depth, color_type); + if (width != pds->ps->width || height != pds->ps->height) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); pds->ps->error = 1; @@ -139,9 +144,11 @@ pthread_exit(NULL); } - png_set_filler(png_ptr, 0, 0); png_set_gray_to_rgb(png_ptr); + png_set_bgr(png_ptr); + png_set_filler(png_ptr, 0, PNG_FILLER_AFTER); pds->ps->passes_remaining = png_set_interlace_handling(png_ptr); + png_read_update_info(png_ptr, info_ptr); if ((rows = malloc(height*sizeof(png_bytep))) == NULL) png_error(png_ptr, "failed to malloc row array"); @@ -266,6 +273,7 @@ free(__DEVOLATILE(void*, ps->buffer)); free(ps); } +#endif static void usage(void) @@ -273,6 +281,7 @@ errx(1, "usage: pngsb "); } +#if 0 static void read_row_callback(png_structp png_ptr, png_uint_32 row, int pass __unused) { @@ -296,36 +305,59 @@ if (rlen < 0 || (png_size_t)rlen != length) png_error(png_ptr, "read error"); } +#endif int main(int argc, char **argv) { int pfd; - uint32_t last_row = -1; - struct pngstate *ps; + uint32_t i, last_row = 0; + struct iboxstate *ps; if (argc != 2) usage(); + fb_init(); + if ((pfd = open(argv[1], O_RDONLY)) < -1) err(1, "open(%s)", argv[1]); - if ((ps = png_read_start(pfd, 800, 480)) == NULL) + if ((ps = png_read_start(pfd, 800, 480, SB_NONE)) == NULL) err(1, "failed to initialize read of %s", argv[1]); /* XXX: do something with the valid parts of the image as it decodes. */ - while(ps->valid_rows < ps->height) { + while(ps->valid_rows < ps->height ) { if (last_row != ps->valid_rows) { + for (i = last_row; i < ps->valid_rows; i++) + memcpy(__DEVOLATILE(void*, + pfbp + (i * fb_width)), + __DEVOLATILE(void *, + ps->buffer + (i * ps->width)), + sizeof(uint32_t) * ps->width); last_row = ps->valid_rows; printf("valid_rows = %d\n", ps->valid_rows); } +#if 0 + pthread_yield(); +#endif + } + if (last_row != ps->valid_rows) { + for (i = last_row; i < ps->valid_rows; i++) + memcpy(__DEVOLATILE(void*, + pfbp + (i * fb_width)), + __DEVOLATILE(void *, + ps->buffer + (i * ps->width)), + sizeof(uint32_t) * ps->width); + last_row = ps->valid_rows; } printf("valid_rows = %d\n", ps->valid_rows); if (png_read_finish(ps) != 0) errx(1, "png_read_finish failed"); - pngstate_free(ps); + iboxstate_free(ps); + + fb_fini(); return(0); }