diff options
Diffstat (limited to 'server/spice-bitmap-utils.h')
-rw-r--r-- | server/spice-bitmap-utils.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/server/spice-bitmap-utils.h b/server/spice-bitmap-utils.h new file mode 100644 index 00000000..38cb88ac --- /dev/null +++ b/server/spice-bitmap-utils.h @@ -0,0 +1,91 @@ +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + Copyright (C) 2009-2015 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef RED_BITMAP_UTILS_H_ +# define RED_BITMAP_UTILS_H_ + +#include <glib.h> +#include <stdint.h> +#include "common/draw.h" +#include "common/log.h" + +typedef enum { + BITMAP_GRADUAL_INVALID, + BITMAP_GRADUAL_NOT_AVAIL, + BITMAP_GRADUAL_LOW, + BITMAP_GRADUAL_MEDIUM, + BITMAP_GRADUAL_HIGH, +} BitmapGradualType; + +typedef struct { + uint8_t b; + uint8_t g; + uint8_t r; + uint8_t pad; +} rgb32_pixel_t; + +G_STATIC_ASSERT(sizeof(rgb32_pixel_t) == 4); + +typedef struct { + uint8_t b; + uint8_t g; + uint8_t r; +} rgb24_pixel_t; + +G_STATIC_ASSERT(sizeof(rgb24_pixel_t) == 3); + +typedef uint16_t rgb16_pixel_t; + + +static inline int bitmap_fmt_get_bytes_per_pixel(uint8_t fmt) +{ + static const int bytes_per_pixel[] = {0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 1}; + + spice_return_val_if_fail(fmt < SPICE_N_ELEMENTS(bytes_per_pixel), 0); + + return bytes_per_pixel[fmt]; +} + + +static inline int bitmap_fmt_is_plt(uint8_t fmt) +{ + static const int fmt_is_plt[] = {0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}; + + spice_return_val_if_fail(fmt < SPICE_N_ELEMENTS(fmt_is_plt), 0); + + return fmt_is_plt[fmt]; +} + +static inline int bitmap_fmt_is_rgb(uint8_t fmt) +{ + static const int fmt_is_rgb[] = {0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1}; + + spice_return_val_if_fail(fmt < SPICE_N_ELEMENTS(fmt_is_rgb), 0); + + return fmt_is_rgb[fmt]; +} + +static inline int bitmap_fmt_has_graduality(uint8_t fmt) +{ + return bitmap_fmt_is_rgb(fmt) && fmt != SPICE_BITMAP_FMT_8BIT_A; +} + + +BitmapGradualType bitmap_get_graduality_level (SpiceBitmap *bitmap); +int bitmap_has_extra_stride (SpiceBitmap *bitmap); + +#endif /* RED_BITMAP_UTILS_H_ */ |