转自:http://blog.csdn.net/zhoujiaxq/article/details/11201893
目前的spice图像压缩主要采用了quic,glz和jpeg。quic和glz是无损压缩算法,quic主要用于照片,glz用于人工图像,jpeg也主要用于照片压缩但是是有损的。jpeg能节省50%的带宽,glz只能节省20%,但是jpeg会带来更大的开销,所以不能都使用jpeg进行压缩。
spice官网对于广域网支持的介绍:http://spice-space.org/page/Features/WanSupport
spice图像压缩的流程:
qxl首先通过gdi接口获取到刷新的区域图像,然后传送给spice-server,spice-server获取到图像后通过
- static inline void marshall_qxl_drawable(RedChannelClient *rcc,SpiceMarshaller *m, DrawablePipeItem *dpi)
- red_marshall_stream_data(rcc, m, item)
- static void red_init(RedWorker *worker, WorkerInitData *init_data)
如果想采用jpeg压缩可以直接更改为worker->jpeg_state =SPICE_WAN_COMPRESSION_ALWAYS;或者在Reds.c里把
spice_wan_compression_t jpeg_state = SPICE_WAN_COMPRESSION_AUTO;更改为
spice_wan_compression_t jpeg_state = SPICE_WAN_COMPRESSION_ALWAYS;
spice-server中图像的最终压缩都是在
- static inline int red_compress_image(DisplayChannelClient *dcc,SpiceImage *dest, SpiceBitmap *src, Drawable *drawable,int can_lossy,compress_send_data_t* o_comp_data)