其他分享
首页 > 其他分享> > 谁是卧底? 科普影子寄存器

谁是卧底? 科普影子寄存器

作者:互联网

寄存器是软件和硬件真正交互的接口. 影子寄存器是常常听到, 但很多人没有正常了解.简单科普一下.

大多数寄存器是保存静态的数据, 比如某个屏幕的硬件分辨率,固定是1920x1080的.我们给摄像头的长宽寄存器分别设置为1920和1080.那么这个摄像头输出的图像大小就这么定好了.

But, 有时候, 有的数据参数需要在运行时动态地更新, 比如用户用鼠标把窗口缩小成360P了, 这时候需要设置新的分辨率. 但是, 这些数据不能在当前正处理的帧上更新, 只能在某一帧处理结束并且新的一帧尚未开始这样的节点, 从采集到缩放的每个流程上都恰如其分的给它变了. 要不然, 直接在把当前的1080P图像硬生生裁剪成360P, 那就出了问题.

但是, 啥时候去重新修改这个值呢? 总不能因为拖一下窗口就让用户重启播放流程吧!

于是, 就出现了两个寄存器. 一个是我们直接设定的值,这里我们可以称它为代理寄存器, 代理就是一名线人, 在设定之后它会发出通知, 但是不会真的马上生效.
另一个是影子寄存器, 形象一点是幕后寄存器, 它是一名卧底, 真正起作用的幕后大佬. 只有这个影子寄存器改变的时候, 数据才会真正地改变. 但是啥时候改变, 是卧底自己来判定的事. 我们不能直接去联络它.

因此, 我们只能预先设定代理寄存器, 告诉线人, 计划已定, 迅速行动. 但是啥时候真的转移, 我们没法管. 等到晚上天黑了之后, 幕后大佬才开始动手.它可能趁着两个保安换班的十几秒间隙, 悄悄地把事情干了, 两边都不晓得, 不然就会出事.

于是, 用户拖动窗口的时候, 当前的30毫秒, 正在显示图像是不会立即变小的, 可能等到下一个30毫秒,当前的图像显示完了, 开始准备显示下一张图片的时候, 影子寄存器马上就把大小换成360P了, 于是后面新的视频图像就都按照360P来显示了.

当然这只是举了个不恰当的例子, 实际的场景中, 影子寄存器还有更多的时序考虑. 等到各个寄存器都设定好了, 影子寄存器才开始生效. 就好比要完成赤壁之战, 须周瑜取了草船箭, 黄盖使了苦肉计,阚泽下了诈降书, 庞统献了连环计, 人马粮草都就绪, 最后还得等孔明借到东风, 才能开始火烧赤壁.

标签:影子,卧底,360P,寄存器,设定,图像,科普
来源: https://blog.csdn.net/yuangc/article/details/122728711