mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice-protocol
synced 2026-01-08 12:24:48 +00:00
qxl abi: Add QXLImage and & co
Also, this changes the SpiceImage types to be more useful as internal types, with real typed pointers. It also adds a SpiceChunk iovec type for easy representation of chunked data.
This commit is contained in:
parent
1d74c91701
commit
3f1e240574
144
spice/draw.h
144
spice/draw.h
@ -85,31 +85,6 @@ typedef struct SPICE_ATTR_PACKED SpiceClip {
|
||||
SpiceClipRects *rects;
|
||||
} SpiceClip;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpicePattern {
|
||||
SPICE_ADDRESS pat;
|
||||
SpicePoint pos;
|
||||
} SpicePattern;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceBrush {
|
||||
uint32_t type;
|
||||
union {
|
||||
uint32_t color;
|
||||
SpicePattern pattern;
|
||||
} u;
|
||||
} SpiceBrush;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceQMask {
|
||||
uint8_t flags;
|
||||
SpicePoint pos;
|
||||
SPICE_ADDRESS bitmap;
|
||||
} SpiceQMask;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceFill {
|
||||
SpiceBrush brush;
|
||||
uint16_t rop_descriptor;
|
||||
SpiceQMask mask;
|
||||
} SpiceFill;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpicePalette {
|
||||
uint64_t unique;
|
||||
uint16_t num_ents;
|
||||
@ -126,87 +101,106 @@ typedef struct SPICE_ATTR_PACKED SpiceImageDescriptor {
|
||||
uint32_t height;
|
||||
} SpiceImageDescriptor;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceChunk {
|
||||
uint8_t *data;
|
||||
uint32_t len;
|
||||
} SpiceChunk;
|
||||
|
||||
enum {
|
||||
SPICE_CHUNKS_FLAGS_UNSTABLE = (1<<0),
|
||||
SPICE_CHUNKS_FLAGS_FREE = (1<<1)
|
||||
};
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceChunks {
|
||||
uint32_t data_size;
|
||||
uint32_t num_chunks;
|
||||
uint32_t flags;
|
||||
SpiceChunk chunk[0];
|
||||
} SpiceChunks;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceBitmap {
|
||||
uint8_t format;
|
||||
uint8_t flags;
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
uint32_t stride;
|
||||
SPICE_ADDRESS palette;
|
||||
SPICE_ADDRESS data; //data[0] ?
|
||||
SpicePalette *palette;
|
||||
uint64_t palette_id;
|
||||
SpiceChunks *data;
|
||||
} SpiceBitmap;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceBitmapImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceBitmap bitmap;
|
||||
} SpiceBitmapImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceSurface {
|
||||
uint32_t surface_id;
|
||||
} SpiceSurface;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceSurfaceImage {
|
||||
SpiceImageDescriptor descriptor; //?
|
||||
SpiceSurface surface;
|
||||
} SpiceSurfaceImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceQUICData {
|
||||
uint32_t data_size;
|
||||
uint8_t data[0];
|
||||
SpiceChunks *data;
|
||||
} SpiceQUICData, SpiceLZRGBData, SpiceJPEGData;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceQUICImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceQUICData quic;
|
||||
} SpiceQUICImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceLZRGBImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceLZRGBData lz_rgb;
|
||||
} SpiceLZRGBImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceLZPLTData {
|
||||
uint8_t flags;
|
||||
uint32_t data_size;
|
||||
SPICE_ADDRESS palette;
|
||||
uint8_t data[0];
|
||||
SpicePalette *palette;
|
||||
uint64_t palette_id;
|
||||
SpiceChunks *data;
|
||||
} SpiceLZPLTData;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceLZPLTImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceLZPLTData lz_plt;
|
||||
} SpiceLZPLTImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceJPEGImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceJPEGData jpeg;
|
||||
} SpiceJPEGImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceZlibGlzRGBData {
|
||||
uint32_t glz_data_size;
|
||||
uint32_t data_size;
|
||||
uint8_t data[0];
|
||||
SpiceChunks *data;
|
||||
} SpiceZlibGlzRGBData;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceZlibGlzRGBImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceZlibGlzRGBData zlib_glz;
|
||||
} SpiceZlibGlzRGBImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceJPEGAlphaData {
|
||||
uint8_t flags;
|
||||
uint32_t jpeg_size;
|
||||
uint32_t data_size;
|
||||
uint8_t data[0];
|
||||
SpiceChunks *data;
|
||||
} SpiceJPEGAlphaData;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceJPEGAlphaImage {
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
SpiceJPEGAlphaData jpeg_alpha;
|
||||
} SpiceJPEGAlphaImage;
|
||||
union {
|
||||
SpiceBitmap bitmap;
|
||||
SpiceQUICData quic;
|
||||
SpiceSurface surface;
|
||||
SpiceLZRGBData lz_rgb;
|
||||
SpiceLZPLTData lz_plt;
|
||||
SpiceJPEGData jpeg;
|
||||
SpiceZlibGlzRGBData zlib_glz;
|
||||
SpiceJPEGAlphaData jpeg_alpha;
|
||||
} u;
|
||||
} SpiceImage;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpicePattern {
|
||||
SpiceImage *pat;
|
||||
SpicePoint pos;
|
||||
} SpicePattern;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceBrush {
|
||||
uint32_t type;
|
||||
union {
|
||||
uint32_t color;
|
||||
SpicePattern pattern;
|
||||
} u;
|
||||
} SpiceBrush;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceQMask {
|
||||
uint8_t flags;
|
||||
SpicePoint pos;
|
||||
SpiceImage *bitmap;
|
||||
} SpiceQMask;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceFill {
|
||||
SpiceBrush brush;
|
||||
uint16_t rop_descriptor;
|
||||
SpiceQMask mask;
|
||||
} SpiceFill;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceOpaque {
|
||||
SPICE_ADDRESS src_bitmap;
|
||||
SpiceImage *src_bitmap;
|
||||
SpiceRect src_area;
|
||||
SpiceBrush brush;
|
||||
uint16_t rop_descriptor;
|
||||
@ -215,7 +209,7 @@ typedef struct SPICE_ATTR_PACKED SpiceOpaque {
|
||||
} SpiceOpaque;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceCopy {
|
||||
SPICE_ADDRESS src_bitmap;
|
||||
SpiceImage *src_bitmap;
|
||||
SpiceRect src_area;
|
||||
uint16_t rop_descriptor;
|
||||
uint8_t scale_mode;
|
||||
@ -223,7 +217,7 @@ typedef struct SPICE_ATTR_PACKED SpiceCopy {
|
||||
} SpiceCopy, SpiceBlend;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceTransparent {
|
||||
SPICE_ADDRESS src_bitmap;
|
||||
SpiceImage *src_bitmap;
|
||||
SpiceRect src_area;
|
||||
uint32_t src_color;
|
||||
uint32_t true_color;
|
||||
@ -232,12 +226,12 @@ typedef struct SPICE_ATTR_PACKED SpiceTransparent {
|
||||
typedef struct SPICE_ATTR_PACKED SpiceAlphaBlnd {
|
||||
uint16_t alpha_flags;
|
||||
uint8_t alpha;
|
||||
SPICE_ADDRESS src_bitmap;
|
||||
SpiceImage *src_bitmap;
|
||||
SpiceRect src_area;
|
||||
} SpiceAlphaBlnd;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED SpiceRop3 {
|
||||
SPICE_ADDRESS src_bitmap;
|
||||
SpiceImage *src_bitmap;
|
||||
SpiceRect src_area;
|
||||
SpiceBrush brush;
|
||||
uint8_t rop3;
|
||||
|
||||
@ -573,12 +573,45 @@ enum {
|
||||
(image)->descriptor.id = (((uint64_t)_unique) << 32) | _group; \
|
||||
}
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLImageDescriptor {
|
||||
uint64_t id;
|
||||
uint8_t type;
|
||||
uint8_t flags;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
} QXLImageDescriptor;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLPalette {
|
||||
uint64_t unique;
|
||||
uint16_t num_ents;
|
||||
uint32_t ents[0];
|
||||
} QXLPalette;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLBitmap {
|
||||
uint8_t format;
|
||||
uint8_t flags;
|
||||
uint32_t x;
|
||||
uint32_t y;
|
||||
uint32_t stride;
|
||||
QXLPHYSICAL palette;
|
||||
QXLPHYSICAL data; //data[0] ?
|
||||
} QXLBitmap;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLSurfaceId {
|
||||
uint32_t surface_id;
|
||||
} QXLSurfaceId;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLQUICData {
|
||||
uint32_t data_size;
|
||||
uint8_t data[0];
|
||||
} QXLQUICData, QXLLZRGBData, QXLJPEGData;
|
||||
|
||||
typedef struct SPICE_ATTR_PACKED QXLImage {
|
||||
SpiceImageDescriptor descriptor;
|
||||
QXLImageDescriptor descriptor;
|
||||
union { // variable length
|
||||
SpiceBitmap bitmap;
|
||||
SpiceQUICData quic;
|
||||
SpiceSurface surface_image;
|
||||
QXLBitmap bitmap;
|
||||
QXLQUICData quic;
|
||||
QXLSurfaceId surface_image;
|
||||
};
|
||||
} QXLImage;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user