SPICE协议定义----显示通道(1)
来源:互联网 发布:淘宝不满意怎么退货 编辑:程序博客网 时间:2024/05/01 19:04
我已参加2014“博客之星的”评选,觉得我的文章对您有帮助的,请投上您宝贵的一票,点击投票
1 显示通道定义
SPICE协议定义了一组消息集支持远程显示区域在客户端显示。协议支持图像渲染(线、图像)和视频流。协议还支持在客户端缓存图片和色彩调和。显示通道支持多种图像压缩方法来减少网络流量。
1.1服务器---》客户端消息
enum { SPICE_MSG_DISPLAY_MODE = 101, SPICE_MSG_DISPLAY_MARK, SPICE_MSG_DISPLAY_RESET, SPICE_MSG_DISPLAY_COPY_BITS, SPICE_MSG_DISPLAY_INVAL_LIST, SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS, SPICE_MSG_DISPLAY_INVAL_PALETTE, SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES, SPICE_MSG_DISPLAY_STREAM_CREATE = 122, SPICE_MSG_DISPLAY_STREAM_DATA, SPICE_MSG_DISPLAY_STREAM_CLIP, SPICE_MSG_DISPLAY_STREAM_DESTROY, SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL, SPICE_MSG_DISPLAY_DRAW_FILL = 302, SPICE_MSG_DISPLAY_DRAW_OPAQUE, SPICE_MSG_DISPLAY_DRAW_COPY, SPICE_MSG_DISPLAY_DRAW_BLEND, SPICE_MSG_DISPLAY_DRAW_BLACKNESS, SPICE_MSG_DISPLAY_DRAW_WHITENESS, SPICE_MSG_DISPLAY_DRAW_INVERS, SPICE_MSG_DISPLAY_DRAW_ROP3, SPICE_MSG_DISPLAY_DRAW_STROKE, SPICE_MSG_DISPLAY_DRAW_TEXT, SPICE_MSG_DISPLAY_DRAW_TRANSPARENT, SPICE_MSG_DISPLAY_DRAW_ALPHA_BLEND, SPICE_MSG_DISPLAY_SURFACE_CREATE, SPICE_MSG_DISPLAY_SURFACE_DESTROY, SPICE_MSG_DISPLAY_STREAM_DATA_SIZED, SPICE_MSG_DISPLAY_MONITORS_CONFIG, SPICE_MSG_DISPLAY_DRAW_COMPOSITE, SPICE_MSG_DISPLAY_STREAM_ACTIVATE_REPORT, SPICE_MSG_END_DISPLAY};
1.2客户端---》服务器消息
enum { SPICE_MSGC_DISPLAY_INIT = 101, SPICE_MSGC_DISPLAY_STREAM_REPORT, SPICE_MSGC_END_DISPLAY};
1.3操作流程
SPICE服务器使用SPICE_MSG_DISPLAY_MODE消息发送到客户端指定当前画面的面积和格式,作为回应客户端创建一个显示的区域来呈现所有服务器发送来的渲染指令,客户端在收到服务器发送信息SPICE_MSG_DISPLAY_MARK将刷新远程显示区域。服务器可以使用SPICE_MSG_DISPLAY_RESET通知客户端放弃绘图区域和缓存。 SPICE_MSG_DISPLAY_MODE消息只允许在客户端不存在可用绘图区域。SPICE_MSG_DISPLAY_RESET消息只允许客户端存在可以用绘图区域。
SPICE_MSG_DISPLAY_MARK只允许在上述两消息之间发送一次。
绘图命令、复制命令和视频流命令只允许客户端存在绘图区域时发送。
在显示通道建立的时候,客户端为了使用图像缓存及glz压缩会发送SPICE_MSGC_DISPLAY_INIT消息到服务器。消息包括图像缓存ID及大小和glz压缩窗口的大小。这些尺寸和ID有客户端决定。只允许发送一次。这个大小是主通道建立的时候spice_session_set_caches_hints函数设置的。
绘图缓存是服务器管理的。缓存条目的插入是另外一组命令实现的。缓存条目的删除是通过SPICE_MSG_DISPLAY_INVAL_LIST和SPICE_MSG_DISPLAY_INVAL_PALETTE。重新设置缓存是通过发送SPICE_MSG_DISPLAY_INVAL_ALL_PIXMAPS和SPICE_MSG_DISPLAY_INVAL_ALL_PALETTES。
1、SpiceMsgDisplayMode
typedef structSpiceMsgDisplayMode { uint32_t x_res; uint32_t y_res; uint32_t bits;} SpiceMsgDisplayMode;
1.4光栅操作符
下面顶一个一组标记来描述光栅操作。可以应用在源图像、源刷,目的和结果。结合这些标记定义了必要的步骤。需要预制渲染操作。
typedef enumSpiceRopd { SPICE_ROPD_INVERS_SRC = (1 << 0),//源图像在渲染前需要翻转 SPICE_ROPD_INVERS_BRUSH = (1 << 1),//画笔在渲染前需要翻转 SPICE_ROPD_INVERS_DEST = (1 << 2),//目标区域在渲染前需要翻转 SPICE_ROPD_OP_PUT = (1 << 3),//应该使用复制操作 SPICE_ROPD_OP_OR = (1 << 4),//应该使用或操作 SPICE_ROPD_OP_AND = (1 << 5),//应该使用与操作 SPICE_ROPD_OP_XOR = (1 << 6),//应该使用异或操作 SPICE_ROPD_OP_BLACKNESS = (1 << 7),//目标像素应该为黑色取代 SPICE_ROPD_OP_WHITENESS = (1 << 8),//目标像素应该为白色取代 SPICE_ROPD_OP_INVERS = (1 << 9),//目标像素应该翻转 SPICE_ROPD_INVERS_RES = (1 << 10),//操作的结果需要被翻转 SPICE_ROPD_MASK = 0x7ff} SpiceRopd;
OP_PUT, OP_OR,OP_AND, OP_XOR, OP_BLACKNESS, OP_WHITENESS, and
OP_INVERS 是相互排斥的。
OP_BLACKNESS,OP_WHITENESS, and OP_INVERS 是独有的。
1.5Raw raster image
下面的部分介绍SPICE象图,象图是SPICE协议传输图像的方法之一。
1.5.1SpiceBitmapFlags宏
typedef enumSpiceBitmapFlags {SPICE_BITMAP_FLAGS_PAL_CACHE_ME = (1 << 0),//指示客户端将此画板加到缓存SPICE_BITMAP_FLAGS_PAL_FROM_CACHE = (1 << 1),//指示客户端从缓存中检索画板SPICE_BITMAP_FLAGS_TOP_DOWN = (1 << 2),//象图行命令是从上到下 SPICE_BITMAP_FLAGS_MASK = 0x7}SpiceBitmapFlags;
1.5.2SpiceBitmapFmt格式
typedef enumSpiceBitmapFmt { SPICE_BITMAP_FMT_INVALID,SPICE_BITMAP_FMT_1BIT_LE, //每像素1bit,小端字节序存储。每个像素的值是颜色表的索引。颜色表的大小是2.SPICE_BITMAP_FMT_1BIT_BE, //每像素1bit,大端字节序存储。每个像素的值是颜色表的索引。颜色表的大小是2.SPICE_BITMAP_FMT_4BIT_LE, //每像素4bit,小端半字节存储。每个像素的值是颜色表的索引。颜色表的大小是16SPICE_BITMAP_FMT_4BIT_BE, //每像素4bit,大端半字节存储。每个像素的值是颜色表的索引。颜色表的大小是16SPICE_BITMAP_FMT_8BIT, //每像素8bit.每个像素的值是颜色表的索引。颜色表的大小是256SPICE_BITMAP_FMT_16BIT, //像素格式是 16 位 RGB555SPICE_BITMAP_FMT_24BIT,//像素格式是 24位 RGB888SPICE_BITMAP_FMT_32BIT,//像素格式是 32 位 RGB888SPICE_BITMAP_FMT_RGBA,//像素格式是 32 位ARGB8888SPICE_BITMAP_FMT_8BIT_A,//不太清楚 SPICE_BITMAP_FMT_ENUM_END}SpiceBitmapFmt;
1.5.3 SpiceBitmap结构体
typedef structSpiceBitmap { uint8_t format; // SpiceBitmapFmt格式 uint8_t flags; // SpiceBitmapFlags 宏 uint32_t x; //位图的宽度 uint32_t y; //位图的高度 uint32_t stride;//从N行到N+1行添加字节的数量。(例如stride*y+x*format) SpicePalette *palette;//调色板的地址,如果没有颜色表所需要的格式必须为0; uint64_t palette_id;//调色板的ID,如果flags设置SPICE_BITMAP_FLAGS_PAL_FROM_CACHE有效 SpiceChunks *data;//数据} SpiceBitmap;
1.5.4SpicePalette结构体
typedef structSpicePalette { uint64_t unique;//palette的唯一ID uint16_t num_ents;//颜色表中条目的数量 uint32_t ents[0];// 每个条目RGB555或RGB888颜色根据当前显示区域模式。如果显示区域模式颜色深度是32岁的有效格式是RGB888。如果显示区域模式颜色深度是有效的格式是RGB555 16。} SpicePalette;
- SPICE协议定义----显示通道(1)
- SPICE协议定义----显示通道(1)
- Spice协议----输入通道定义
- SPICE协议----光标通道定义
- SPICE协议------主通道交互定义
- spice协议----播放和录音通道
- SPICE协议-----基本简介及普通协议定义
- 远程桌面协议浅析(VNC/SPICE/RDP)
- 远程桌面协议浅析(VNC/SPICE/RDP)
- 远程桌面协议浅析(VNC/SPICE/RDP)
- 远程桌面协议浅析(VNC/SPICE/RDP)
- spice协议详解(一):spice协议入门
- [优化篇]OpenStack的虚拟桌面协议Spice代替VNC(1)
- spice 协议简介
- SPICE协议之ImageCache
- android spice 协议入门
- SPICE协议之ImageCache
- Spice协议初探
- spring 源码学习1
- Fabric 批量安装ZeroMQ
- 【众数】【bzoj 2945】: [Poi2000]气垫船
- Linux apache日志分析常用命令汇总
- 设计模式(Design Patterns)
- SPICE协议定义----显示通道(1)
- linux 调试环境搭建
- ArcGIS教程:“提取值到表”的工作原理
- php5.4环境下DedeCMS登录退出后台空白的解决办法汇总
- linux 模拟弱网络环境工具
- “刷榜客”-- 手机木马Google Play恶意刷榜
- HttpPSocket
- TOMCAT 制作自签名 SSL(https) 证书
- Linux让程序后台运行命令之screen与nohup