SPICE协议之流媒体算法

流媒体维护是在渲染树维护过程中同时进行的。我们需要先了解几个知识:

1、可以作为流媒体数据的drawable一定是opaque drawable。

2、可以作为流媒体数据的drawable分为sized drawable和普通drawable,前者的尺寸比普通drawable增大,增大面积不超过一定门限(比如50%),且宽高都必须增大或者不变,不能有减小,覆盖的位置也必须包含普通drawable的位置。

3、流媒体使用CLIP来屏蔽不希望显示的部分。客户端收到CLIP消息之后所有的缓存帧也必须使用该CLIP。

流媒体启动有两个入口,一个是red_stream_maintenance(),另一个是red_use_stream_trace()。在这两个函数中会通过__red_is_next_stream_frame()看drawable是否可以是流媒体数据drawable,然后在red_stream_add_frame()进行以下判断:

首先判断是否为GRADUAL_LOW,如果不是我们可以称之为non_low drawable,有资格进行下个判断。接着判断是否需要复位计数器,如果超过RED_STREAM_FRAMES_RESET_CONDITION(100)个 drawable还没进入流媒体,就需要复位计数器重新开始判断。最后red_is_stream_start()判断是否出现了20帧以上数据,并且其中至少20%,也就是至少出现4个non_low_drawable。如果判断通过就启动流媒体。

流媒体维护入口函数是red_stream_maintenance(),如果prev drawable已经是 stream的current drawable了,则detach旧drawable,attach新drawable。注意后继发送函数marshall_qx

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值