summaryrefslogtreecommitdiff
path: root/apps/graphics
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-12-04 08:00:41 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-12-04 08:00:41 -0600
commite29f159be33872667d4863f685c324cb3034d7dd (patch)
tree79c17cae2c227f701b734dc7bb06084fcb9a7d17 /apps/graphics
parent80ebe5194e912fd1de32489da37a5bd916565672 (diff)
downloadnuttx-e29f159be33872667d4863f685c324cb3034d7dd.tar.gz
nuttx-e29f159be33872667d4863f685c324cb3034d7dd.tar.bz2
nuttx-e29f159be33872667d4863f685c324cb3034d7dd.zip
Correct some image scaling
Diffstat (limited to 'apps/graphics')
-rw-r--r--apps/graphics/traveler/include/trv_graphics.h17
-rw-r--r--apps/graphics/traveler/src/trv_graphics.c34
2 files changed, 24 insertions, 27 deletions
diff --git a/apps/graphics/traveler/include/trv_graphics.h b/apps/graphics/traveler/include/trv_graphics.h
index b51a8d4fc..cb0684e9b 100644
--- a/apps/graphics/traveler/include/trv_graphics.h
+++ b/apps/graphics/traveler/include/trv_graphics.h
@@ -86,16 +86,15 @@ struct trv_graphics_info_s
NXHANDLE hnx; /* The connection handle */
NXHANDLE bgwnd; /* Background window handle */
#else
- trv_coord_t hoffset; /* Horizontal to start of data (in columns) */
- trv_coord_t voffset; /* Offset to start of data (in rows) */
- trv_coord_t stride; /* Length of a line (in bytes) */
+ trv_coord_t xoffset; /* Horizontal offset to start of data (pixels) */
+ trv_coord_t yoffset; /* Vertical offset to start of data (rows) */
+ trv_coord_t stride; /* Length of a line (bytes) */
#endif
- trv_coord_t hwwidth; /* Display width (pixels) */
- trv_coord_t hwheight; /* Display height (rows) */
- trv_coord_t swwidth; /* Software render width (pixels) */
- trv_coord_t swheight; /* Software render height height (rows) */
- uint8_t vscale; /* Vertical image scale factor */
- uint8_t hscale; /* Horizontal image scale factor */
+ trv_coord_t xres; /* Physical display width (pixels) */
+ trv_coord_t yres; /* Physical display height (rows) */
+ trv_coord_t imgwidth; /* Width of visible display region (bytes) */
+ uint8_t xscale; /* Horizontal image scale factor */
+ uint8_t yscale; /* Vertical image scale factor */
struct trv_palette_s palette; /* Color palette */
FAR dev_pixel_t *hwbuffer; /* Hardware frame buffer */
FAR trv_pixel_t *swbuffer; /* Software render buffer */
diff --git a/apps/graphics/traveler/src/trv_graphics.c b/apps/graphics/traveler/src/trv_graphics.c
index 19f5b81e5..c37086cab 100644
--- a/apps/graphics/traveler/src/trv_graphics.c
+++ b/apps/graphics/traveler/src/trv_graphics.c
@@ -131,8 +131,8 @@ static void trv_fb_initialize(FAR struct trv_graphics_info_s *ginfo)
trv_abort("getvideoinfo() failed\n");
}
- ginfo->hwwidth = vinfo.xres;
- ginfo->hwheight = vinfo.yres;
+ ginfo->xres = vinfo.xres;
+ ginfo->yres = vinfo.yres;
ret = fbdev->getplaneinfo(fbdev, 0, &pinfo);
if (ret < 0)
@@ -344,7 +344,7 @@ void trv_row_update(struct trv_graphics_info_s *ginfo,
/* Expand pixels horizontally via pixel replication */
- for (i = 0; i < ginfo->hscale; i++)
+ for (i = 0; i < ginfo->xscale; i++)
{
*dest++ = pixel;
}
@@ -397,8 +397,8 @@ int trv_graphics_initialize(FAR struct trv_graphics_info_s *ginfo)
/* Check the size of the display */
- width = ginfo->hwwidth;
- height = ginfo->hwheight;
+ width = ginfo->xres;
+ height = ginfo->yres;
if (width < TRV_SCREEN_WIDTH || height < TRV_SCREEN_HEIGHT)
{
@@ -415,8 +415,9 @@ int trv_graphics_initialize(FAR struct trv_graphics_info_s *ginfo)
scale++;
}
- ginfo->hscale = scale;
- ginfo->hoffset = (width >> 1);
+ ginfo->xscale = scale;
+ ginfo->xoffset = (width >> 1);
+ ginfo->imgwidth = scale * TRV_SCREEN_WIDTH * sizeof(dev_pixel_t);
scale = 0;
while (height >= TRV_SCREEN_HEIGHT)
@@ -425,8 +426,8 @@ int trv_graphics_initialize(FAR struct trv_graphics_info_s *ginfo)
scale++;
}
- ginfo->vscale = scale;
- ginfo->voffset = (height >> 1);
+ ginfo->yscale = scale;
+ ginfo->yoffset = (height >> 1);
/* Allocate buffers
*
@@ -453,8 +454,7 @@ int trv_graphics_initialize(FAR struct trv_graphics_info_s *ginfo)
*/
#ifdef CONFIG_NX
- ginfo->hwbuffer = (trv_pixel_t*)
- trv_malloc(ginfo->hwwidth * sizeof(dev_pixel_t));
+ ginfo->hwbuffer = (trv_pixel_t*)trv_malloc(ginfo->imgwidth);
if (!ginfo->hwbuffer)
{
trv_abort("ERROR: Failed to allocate hardware line buffer\n");
@@ -515,7 +515,6 @@ void trv_display_update(struct trv_graphics_info_s *ginfo)
trv_coord_t destrow;
#else
FAR uint8_t *first;
- trv_coord_t lnwidth;
#endif
int i;
@@ -526,17 +525,16 @@ void trv_display_update(struct trv_graphics_info_s *ginfo)
/* Get the start of the first destination row */
dest = (FAR uint8_t *)ginfo->hwbuffer +
- (ginfo->hoffset * ginfo->stride) + ginfo->voffset;
+ (ginfo->yoffset * ginfo->stride) +
+ (ginfo->xoffset * sizeof(dev_pixel_t));
/* Loop for each row in the src render buffer */
#ifdef CONFIG_NX
destrow = 0;
-#else
- lnwidth = ginfo->hwwidth * sizeof(dev_pixel_t);
#endif
- for (srcrow = 0; srcrow < ginfo->swheight; srcrow++)
+ for (srcrow = 0; srcrow < TRV_SCREEN_HEIGHT; srcrow++)
{
/* Transfer the row to the device row/buffer */
@@ -555,7 +553,7 @@ void trv_display_update(struct trv_graphics_info_s *ginfo)
/* Then replicate as many times as is necessary */
- for (i = 1; i < ginfo->vscale; i++)
+ for (i = 1; i < ginfo->yscale; i++)
{
#ifdef CONFIG_NX
/* Transfer the row buffer to the NX window */
@@ -565,7 +563,7 @@ void trv_display_update(struct trv_graphics_info_s *ginfo)
#else
/* Point to the next row in the frame buffer */
- memcpy(dest, first, lnwidth);
+ memcpy(dest, first, ginfo->imgwidth);
dest += ginfo->stride;
#endif
}