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:
Gerd Hoffmann 2010-07-01 17:55:48 +02:00 committed by Alexander Larsson
parent 1d74c91701
commit 3f1e240574
2 changed files with 106 additions and 79 deletions

View File

@ -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;

View File

@ -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;