pico-playground/scanvideo/render/image.h

75 wiersze
1.5 KiB
C

/*
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _RENDER_IMAGE_H
#define _RENDER_IMAGE_H
#include "pico.h"
typedef uint16_t short_flags;
// common flags
#define CF_HAS_OPAQUE ((short_flags)1)
#define CF_HAS_SEMI_TRANSPARENT ((short_flags)2)
#define CF_HAS_TRANSPARENT ((short_flags)4)
#define CF_PALETTE_INDEX_0_TRANSPARENT ((short_flags)8)
#define CF_PALETTE_COMPOSITED ((short_flags)16)
#define CF_OPACITY_MASK (CF_HAS_OPAQUE | CF_HAS_SEMI_TRANSPARENT | CF_HAS_TRANSPARENT)
struct palette32 {
uint16_t size;
short_flags flags;
uint32_t entries[];
};
struct palette16 {
uint16_t size;
short_flags flags;
uint32_t composited_on_color; // if flags & CF_PALETTE_COMPOSITED
uint16_t entries[];
};
enum image_format {
IMG_FMT_4BIT_VOGON = 1,
IMG_FMT_8_BIT_RAW,
IMG_FMT_16_BIT_RAW
};
struct blob {
size_t size;
const uint8_t *bytes;
};
struct image_data {
int format;
int width;
int height;
struct blob blob;
const uint16_t *row_offsets; // optional and possibly initted on demand
};
struct tile_data {
uint8_t depth;
uint16_t count;
uint16_t width;
uint16_t height;
struct blob blob;
const uint16_t *span_numbers;
};
struct tile_data16 {
uint16_t count;
uint16_t width;
uint16_t height;
struct blob blob;
const uint16_t *span_offsets;
};
extern struct palette16 *blend_palette(const struct palette32 *source, uint32_t back_color);
#endif //SOFTWARE_IMAGE_H