Message ID | 1343785906-31256-1-git-send-email-yi.sun@intel.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On 2012-07-31 18:51, Yi Sun wrote: > That option will save all the images which are created and intended > to paint on screen. > The images will be saved in folder "saveimages" with PNG format. > > Signed-off-by: Yi Sun <yi.sun@intel.com> > > diff --git a/tests/testdisplay.c b/tests/testdisplay.c > index 4430d07..2d1fdb0 100644 > --- a/tests/testdisplay.c > +++ b/tests/testdisplay.c > @@ -64,6 +64,7 @@ > > #include <stdlib.h> > #include <signal.h> > +#include <sys/stat.h> > > drmModeRes *resources; > int drm_fd, modes; > @@ -72,6 +73,7 @@ int dump_info = 0, test_all_modes =0, > test_preferred_mode = 0, force_mode = 0, > int sleep_between_modes = 5; > uint32_t depth = 24, stride, bpp; > int qr_code = 0; > +int save_image = 0; > > drmModeModeInfo force_timing; > > @@ -379,6 +381,8 @@ paint_output_info(cairo_t *cr, int l_width, int > l_height, void *priv) > cairo_text_extents_t name_extents, mode_extents; > char name_buf[128], mode_buf[128]; > int i, x, y, modes_x, modes_y; > + static int count = 0; > + count++; > > /* Get text extents for each string */ > snprintf(name_buf, sizeof name_buf, "%s", > @@ -460,6 +464,25 @@ paint_output_info(cairo_t *cr, int l_width, int > l_height, void *priv) > > if (qr_code) > paint_image(cr, "./pass.png"); > + > + if (save_image){ > + char pngname[256]; > + char *pos; > + > + readlink("/proc/self/exe", pngname, sizeof(pngname)); > + pos = strrchr(pngname, '/'); > + *(pos + 1) = '\0'; > + > + strcat(pngname, "saveimages"); > + > + //judge whether folder mkdir existed, if not create it. > + if(access(pngname,0) == -1) > + if (mkdir( pngname,0777)) > + fprintf (stderr, "error %d, %s\n", errno, strerror (errno)); > + > + sprintf(pngname, "%s/%d_%s@%d.png", pngname, count, c->mode.name, > c->mode.vrefresh); I think we've already decided we're willing to piss off the BSD folks, but just in case we haven't I googled around for a more portable way to do this. It seems argv[0] *may* be better, may not. In any case, this reminds me that maybe we should start noting things which won't work in non-linux operating systems. I also find it comical that adding the argument, and writing the surface is like 5 lines, and the rest is all finding the damn executable path :-) > + cairo_surface_write_to_png( cairo_get_target(cr), pngname ); > + } > } > > static void sighandler(int signo) > @@ -599,7 +622,7 @@ int update_display(void) > return 1; > } > > -static char optstr[] = "hiaf:s:d:p:mrt"; > +static char optstr[] = "hiaf:s:d:p:mrtg"; > > static void usage(char *name) > { > @@ -612,6 +635,7 @@ static void usage(char *name) > fprintf(stderr, "\t-m\ttest the preferred mode\n"); > fprintf(stderr, "\t-t\tuse a tiled framebuffer\n"); > fprintf(stderr, "\t-r\tprint a QR code on the screen whose content > is \"pass\" for the automatic test\n"); > + fprintf(stderr, "\t-g\tsave images which is intended to paint on > the screen as png files in folder \"saveimages\"\n"); > fprintf(stderr, "\t-f\t<clock > MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n"); > fprintf(stderr, > "\t\t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n"); > fprintf(stderr, "\t\ttest force mode\n"); > @@ -704,6 +728,9 @@ int main(int argc, char **argv) > case 'r': > qr_code = 1; > break; > + case 'g': > + save_image = 1; > + break; > default: > fprintf(stderr, "unknown option %c\n", c); > /* fall through */
On Wed, Aug 01, 2012 at 09:51:46AM +0800, Yi Sun wrote: > That option will save all the images which are created and intended to paint on screen. > The images will be saved in folder "saveimages" with PNG format. > > Signed-off-by: Yi Sun <yi.sun@intel.com> tbh I don't see the point of this. Care to elaborate a bit what you want to achieve with this? -Daniel
We want to use the option to save the images which are intended to be painted on the screen. The images will be save in the folder "saveimages", and named like "1_1920x1200@60.png", "2_1920x1080@60" ..... That would be help for our automatic display testing. If some mode can't be lighten up in automatic display testing, we could check the image saved in the folder to see which mode setting failed manually. Thanks --Yi Sun > -----Original Message----- > From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel Vetter > Sent: Monday, August 06, 2012 3:09 PM > To: Sun, Yi > Cc: daniel.vetter@ffwll.ch; intel-gfx@lists.freedesktop.org; Jin, Gordon > Subject: Re: [PATCH] tests/testdisplay.c: Add a option '-g' to save images which > intended to paint on screen during each mode setting. > > On Wed, Aug 01, 2012 at 09:51:46AM +0800, Yi Sun wrote: > > That option will save all the images which are created and intended to paint > on screen. > > The images will be saved in folder "saveimages" with PNG format. > > > > Signed-off-by: Yi Sun <yi.sun@intel.com> > > tbh I don't see the point of this. Care to elaborate a bit what you want to > achieve with this? > -Daniel > -- > Daniel Vetter > Mail: daniel@ffwll.ch > Mobile: +41 (0)79 365 57 48
On Mon, Aug 6, 2012 at 9:47 AM, Sun, Yi <yi.sun@intel.com> wrote: > We want to use the option to save the images which are intended to be painted on the screen. > The images will be save in the folder "saveimages", and named like "1_1920x1200@60.png", "2_1920x1080@60" ..... > > That would be help for our automatic display testing. If some mode can't be lighten up in automatic display testing, we could check the image saved in the folder to see which mode setting failed manually. I still don't see what you need the images for ... adding more output sounds sane, only lighting up a specific mode makes sense, but I have no idea what you need the actual pngs for. Maybe I'm a bit dense. -Daniel
> -----Original Message----- > From: daniel.vetter@ffwll.ch [mailto:daniel.vetter@ffwll.ch] On Behalf Of > Daniel Vetter > Sent: Monday, August 06, 2012 4:33 PM > To: Sun, Yi > Cc: intel-gfx@lists.freedesktop.org; Jin, Gordon > Subject: Re: [PATCH] tests/testdisplay.c: Add a option '-g' to save images which > intended to paint on screen during each mode setting. > > On Mon, Aug 6, 2012 at 9:47 AM, Sun, Yi <yi.sun@intel.com> wrote: > > We want to use the option to save the images which are intended to be > painted on the screen. > > The images will be save in the folder "saveimages", and named like > "1_1920x1200@60.png", "2_1920x1080@60" ..... > > > > That would be help for our automatic display testing. If some mode can't be > lighten up in automatic display testing, we could check the image saved in the > folder to see which mode setting failed manually. > > I still don't see what you need the images for ... adding more output sounds > sane, only lighting up a specific mode makes sense, but I have no idea what you > need the actual pngs for. Maybe I'm a bit dense. > -Daniel > -- Oh, it seems that lighting up a specific mode is better than saving the surface into file. I'll try to rewrite it. Thanks --Sun, Yi > Daniel Vetter > daniel.vetter@ffwll.ch - +41 (0) 79 364 57 48 - http://blog.ffwll.ch
diff --git a/tests/testdisplay.c b/tests/testdisplay.c index 4430d07..2d1fdb0 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -64,6 +64,7 @@ #include <stdlib.h> #include <signal.h> +#include <sys/stat.h> drmModeRes *resources; int drm_fd, modes; @@ -72,6 +73,7 @@ int dump_info = 0, test_all_modes =0, test_preferred_mode = 0, force_mode = 0, int sleep_between_modes = 5; uint32_t depth = 24, stride, bpp; int qr_code = 0; +int save_image = 0; drmModeModeInfo force_timing; @@ -379,6 +381,8 @@ paint_output_info(cairo_t *cr, int l_width, int l_height, void *priv) cairo_text_extents_t name_extents, mode_extents; char name_buf[128], mode_buf[128]; int i, x, y, modes_x, modes_y; + static int count = 0; + count++; /* Get text extents for each string */ snprintf(name_buf, sizeof name_buf, "%s", @@ -460,6 +464,25 @@ paint_output_info(cairo_t *cr, int l_width, int l_height, void *priv) if (qr_code) paint_image(cr, "./pass.png"); + + if (save_image){ + char pngname[256]; + char *pos; + + readlink("/proc/self/exe", pngname, sizeof(pngname)); + pos = strrchr(pngname, '/'); + *(pos + 1) = '\0'; + + strcat(pngname, "saveimages"); + + //judge whether folder mkdir existed, if not create it. + if(access(pngname,0) == -1) + if (mkdir( pngname,0777)) + fprintf (stderr, "error %d, %s\n", errno, strerror (errno)); + + sprintf(pngname, "%s/%d_%s@%d.png", pngname, count, c->mode.name, c->mode.vrefresh); + cairo_surface_write_to_png( cairo_get_target(cr), pngname ); + } } static void sighandler(int signo) @@ -599,7 +622,7 @@ int update_display(void) return 1; } -static char optstr[] = "hiaf:s:d:p:mrt"; +static char optstr[] = "hiaf:s:d:p:mrtg"; static void usage(char *name) { @@ -612,6 +635,7 @@ static void usage(char *name) fprintf(stderr, "\t-m\ttest the preferred mode\n"); fprintf(stderr, "\t-t\tuse a tiled framebuffer\n"); fprintf(stderr, "\t-r\tprint a QR code on the screen whose content is \"pass\" for the automatic test\n"); + fprintf(stderr, "\t-g\tsave images which is intended to paint on the screen as png files in folder \"saveimages\"\n"); fprintf(stderr, "\t-f\t<clock MHz>,<hdisp>,<hsync-start>,<hsync-end>,<htotal>,\n"); fprintf(stderr, "\t\t<vdisp>,<vsync-start>,<vsync-end>,<vtotal>\n"); fprintf(stderr, "\t\ttest force mode\n"); @@ -704,6 +728,9 @@ int main(int argc, char **argv) case 'r': qr_code = 1; break; + case 'g': + save_image = 1; + break; default: fprintf(stderr, "unknown option %c\n", c); /* fall through */
That option will save all the images which are created and intended to paint on screen. The images will be saved in folder "saveimages" with PNG format. Signed-off-by: Yi Sun <yi.sun@intel.com>