spice图像压缩简介

目前的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)

 

    static inline void marshall_qxl_drawable(RedChannelClient *rcc,SpiceMarshaller *m, DrawablePipeItem *dpi)
函数先判断图像是应该当做视频处理还是图像处理,如果是视频就调用
    red_marshall_stream_data(rcc, m, item)

 

    red_marshall_stream_data(rcc, m, item)
如果是图像先判断是否采用jpeg压缩,是否采用jpeg压缩是在
    static void red_init(RedWorker *worker, WorkerInitData *init_data)
 
    static void red_init(RedWorker *worker, WorkerInitData *init_data)
里设置,worker->jpeg_state = init_data->jpeg_state;

如果想采用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)

 

    static inline int red_compress_image(DisplayChannelClient *dcc,SpiceImage *dest, SpiceBitmap *src, Drawable *drawable,int can_lossy,compress_send_data_t* o_comp_data)
在这个函数里会根据image_compression,图像的大小,图像的格式来选择相应的压缩算法。

spice-server通过tcp传输给spice-gtk客户端,客户端会通过数据流来判断出是采用何种压缩算法并采用相应的算法进行decode。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值