diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2015-10-01 15:56:28 -0700 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2015-10-27 15:22:41 +0100 |
commit | 20b790704155f6af8306156c450c8ca029763acd (patch) | |
tree | 9a4cef621baa688f0d73c04eabc76dbcaee2fcac /payloads/libpayload/drivers | |
parent | 9aed1465d70c32e186c2c65e83240630453bf017 (diff) | |
download | coreboot-20b790704155f6af8306156c450c8ca029763acd.tar.xz |
cbgfx: add get_image_dimension
get_image_dimension returns the width or height of the image projected on
canvas.
This is necessary for example when two images of different lengths have to
be placed side by side in the center of the canvas and the widths of the
images must be adjusted according to the height.
BUG=chromium:502066
BRANCH=tot
TEST=Tested on Samus
Change-Id: I119c83891f48046e888b6b526e63348e74f8b77c
Signed-off-by: Patrick Georgi <pgeorgi@google.com>
Original-Commit-Id: d1a97f0492eb02f906feb5b879b7b43518dfa4d7
Original-Change-Id: Ie13f7994d639ea1556f73690b6b6b413ae64223c
Original-Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Original-Reviewed-on: https://chromium-review.googlesource.com/304113
Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-on: http://review.coreboot.org/11929
Tested-by: build bot (Jenkins)
Diffstat (limited to 'payloads/libpayload/drivers')
-rw-r--r-- | payloads/libpayload/drivers/video/graphics.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/payloads/libpayload/drivers/video/graphics.c b/payloads/libpayload/drivers/video/graphics.c index b4cdcdea69..52c003511c 100644 --- a/payloads/libpayload/drivers/video/graphics.c +++ b/payloads/libpayload/drivers/video/graphics.c @@ -611,3 +611,34 @@ int draw_bitmap_direct(const void *bitmap, size_t size, return draw_bitmap_v3(top_left, &scale, &dim, &dim, &header, palette, pixel_array); } + +int get_bitmap_dimension(const void *bitmap, size_t sz, struct scale *dim_rel) +{ + struct bitmap_header_v3 header; + const struct bitmap_palette_element_v3 *palette; + const uint8_t *pixel_array; + struct vector dim, dim_org; + int rv; + + if (cbgfx_init()) + return CBGFX_ERROR_INIT; + + /* Only v3 is supported now */ + rv = parse_bitmap_header_v3(bitmap, sz, + &header, &palette, &pixel_array, &dim_org); + if (rv) + return rv; + + /* Calculate height and width of the image */ + rv = calculate_dimension(&dim_org, dim_rel, &dim); + if (rv) + return rv; + + /* Calculate size relative to the canvas */ + dim_rel->x.n = dim.width; + dim_rel->x.d = canvas.size.width; + dim_rel->y.n = dim.height; + dim_rel->y.d = canvas.size.height; + + return CBGFX_SUCCESS; +} |