spice common模块

库分为三部分libspice-common.a,libspice-common-client.a,libspice-common-server.a。
1、libspice-common.a工程编译代码
#
# libspice-common
#
spice_common_sources = [
  'agent.c',
  'agent.h',
  'backtrace.c',
  'backtrace.h',
  'canvas_utils.c',
  'canvas_utils.h',
  'demarshallers.h',
  'draw.h',
  'lines.c',
  'lines.h',
  'log.c',
  'log.h',
  'lz.c',
  'lz.h',
  'lz_common.h',
  'lz_config.h',
  'macros.h',
  'marshaller.c',
  'marshaller.h',
  'mem.c',
  'mem.h',
  'messages.h',
  'pixman_utils.c',
  'pixman_utils.h',
  'quic.c',
  'quic.h',
  'quic_config.h',
  'rect.h',
  'region.c',
  'region.h',
  'ring.h',
  'rop3.c',
  'rop3.h',
  'snd_codec.c',
  'snd_codec.h',
  'utils.c',
  'utils.h',
  'verify.h',
  'recorder.h'
]
if get_option('instrumentation') == 'recorder'
  spice_common_sources += [
    'recorder/recorder.c',
    'recorder/recorder.h',
    'recorder/recorder_ring.c',
    'recorder/recorder_ring.h'
  ]
endif
if get_option('instrumentation') == 'agent'
  spice_common_sources += [
    'agent_interface.c',
    'agent_interface.h'
  ]
endif
spice_common_lib = static_library('spice-common', spice_common_sources,
                                  install : false,
                                  include_directories : spice_common_include,
                                  dependencies : spice_common_deps)
spice_common_dep = declare_dependency(link_with : spice_common_lib,
                                      include_directories : spice_common_include,
                                      dependencies : spice_common_deps)
# client_demarshallers
if spice_common_generate_client_code or spice_common_generate_server_code
  codegen_cmd = [python, spice_codegen]
  codegen_args = ['--generate-demarshallers',
                  '--client',
                  '--include', 'common/messages.h',
                  '--generated-declaration-file', '@OUTPUT1@',
                  '@INPUT@', '@OUTPUT0@']
  client_demarshallers = custom_target('client_demarshallers',
                                       input : [spice_proto],
                                       output : ['generated_client_demarshallers.c', 'generated_messages.h'],
                                       install : false,
                                       command : [codegen_cmd, codegen_args],
                                       depend_files : [spice_codegen_files, 'messages.h'])
endif
2、libspice-common-client.a工程编译代码
#
# libspice-common-client
#
if spice_common_generate_client_code
  # client_marshallers
  codegen_args = ['--generate-marshallers',
                  '--generate-header',
                  '-P',
                  '--client',
                  '--include', 'common/client_marshallers.h',
                  '@INPUT0@', '@OUTPUT0@']
  client_marshallers = custom_target('client_marshallers',
                                     input : [spice_proto, client_demarshallers],
                                     output : ['generated_client_marshallers.c', 'generated_client_marshallers.h'],
                                     install : false,
                                     command : [codegen_cmd, codegen_args],
                                     depend_files : [spice_codegen_files, 'client_marshallers.h'])
  spice_common_client_sources = [
    client_demarshallers,
    client_marshallers,
    'client_marshallers.h',
    'ssl_verify.c',
    'ssl_verify.h',
  ]
  spice_common_client_lib = static_library('spice-common-client', spice_common_client_sources,
                                           install : false,
                                           dependencies : [spice_common_dep, gio2_deps])
  spice_common_client_dep = declare_dependency(sources : client_marshallers[1],
                                               link_with : spice_common_client_lib,
                                               dependencies : [spice_common_dep, gio2_deps])
endif
编译完成输出:
3、ibspice-common-server.a工程编译代码
#
# libspice-common-server
#
if spice_common_generate_server_code
  structs_args = [
   '-M', 'String',
   '-M', 'Rect',
   '-M', 'Point',
   '-M', 'DisplayBase',
   '-M', 'Fill',
   '-M', 'Opaque',
   '-M', 'Copy',
   '-M', 'Blend',
   '-M', 'Blackness',
   '-M', 'Whiteness',
   '-M', 'Invers',
   '-M', 'Rop3',
   '-M', 'Stroke',
   '-M', 'Text',
   '-M', 'Transparent',
   '-M', 'AlphaBlend',
   '-M', 'Composite',
  ]
  targets = [
    { 'name' : 'server_demarshallers',
      'input' : [ spice_proto, client_demarshallers ],
      'output' : ['generated_server_demarshallers.c'],
      'codegen_args' : ['--generate-demarshallers',
                        '--server',
                        '--include', 'common/messages.h',
                        '@INPUT0@', '@OUTPUT0@'],
    },
    { 'name' : 'server_marshallers',
      'input' : [ spice_proto, client_demarshallers ],
      'output' : ['generated_server_marshallers.c', 'generated_server_marshallers.h'],
      'codegen_args' : ['--generate-marshallers',
                        '--generate-header',
                        '--server',
                        structs_args,
                        '--include', 'common/messages.h',
                        '@INPUT0@', '@OUTPUT0@']
    },
  ]
  spice_common_server_sources = []
  spice_common_server_dep_sources = []
  foreach t : targets
    target = custom_target(t['name'],
                           input : t['input'],
                           output : t['output'],
                           install : false,
                           command : [codegen_cmd, t['codegen_args']],
                           depend_files : [spice_codegen_files, 'messages.h'])
    spice_common_server_sources += target
    if t['output'].length() > 1
      spice_common_server_dep_sources += target[1]
    endif
  endforeach
  spice_common_server_lib = static_library('spice-common-server', spice_common_server_sources,
                                           install : false,
                                           dependencies : spice_common_dep)
  spice_common_server_dep = declare_dependency(sources : spice_common_server_dep_sources,
                                               link_with : spice_common_server_lib,
                                               dependencies : spice_common_dep)
endif
4、主要功能

源代码文件

1、snd_codec.c/.h      opus编码的封装实现

2、agent.c/.h,agent_interface.c/.h  agent接口

3、canvas_base.c/.h,canvas_utils.c/.h,sw_canvas.c/.h ,draw.h  画布

4、lz.c/.h,lz_config.h,lz_common.h,lz_compress_tmpl .c,lz_decompress_tmpl .c lz压缩算法

5、macros.h 宏定义

6、mem.c/.h  SpiceBuffer内存区处理  

7、pixman_utils.c/.h     pixman图像处理

8、quic.c/.h ,quic_config.c/.h ,quic_tmpl.h ,quic_family_tmpl.h  :Spice的专有的基于SFALIC算法的图像压缩工具(图像压缩算法:quic,glz(就是调用zlib库),jpeg)。

9、region.c/.h   区域

10、ssl_verify.c/.h ,verify.c/.h   ssl认证

11、rop3.c/.h  栅格化

12、log.c/.h  日志

13、ring.h 命令环

14、backtrace.c/.h 跟踪信息

15、demarshallers.c/.h ,marshaller.c/.h 序列化和反序列化

16、messages.h 打包消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/595359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sql编写规范(word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

高德地图在vue3项目中使用:实现画矢量图、编辑矢量图

使用高德地图实现画多边形、矩形、圆&#xff0c;并进行编辑保存和回显。 1、准备工作 参考高德地图官网&#xff0c;进行项目key申请&#xff0c;链接: 准备 2、项目安装依赖 npm i amap/amap-jsapi-loader --save3、地图容器 html <template><!-- 绘制地图区域…

GNSS 地球自转改正算例分析

文章目录 Part.I IntroductionPart.II 由地球自转引起的误差的概念和改正方法Chap.I 误差概念Chap.II 改正方法 Part.II 算例分析Chap.I 基础数据Chap.II 计算过程 AppendixReference Part.I Introduction 为了更好地理解 地球自转改正&#xff0c;本文将介绍一个算例。 Part.…

手动交互式选点提取三维点云轮廓边界线 附python代码

一种新的三维点云轮廓边界提取方案: 1 手动选择一个边界或者其附近的点 2 自动搜索临近区域,并找到附近的平面和进行平面分割 3 提取平面的交点 4 该交点就是点云的轮廓边界点,把它往两边延展,就是完整的点云轮廓边界 import open3d as o3d import numpy as np import …

Java模块化系统:引领代码革命与性能飞跃

JDK工程结构的问题 在说Java模块化系统之前&#xff0c;先来说说Java9之前的JDK在工程结构上的问题&#xff0c;从JDK本身的问题说起&#xff0c;Java从1996年发布第一版到2017年发布Java9&#xff0c;中间经历了近20年的时间&#xff0c;在这期间发布了无数个大大小小的版本用…

RESTFul风格设计和实战

四、RESTFul风格设计和实战 4.1 RESTFul风格概述 4.1.1 RESTFul风格简介 RESTful&#xff08;Representational State Transfer&#xff09;是一种软件架构风格&#xff0c;用于设计网络应用程序和服务之间的通信。它是一种基于标准 HTTP 方法的简单和轻量级的通信协议&#x…

YAML如何操作Kubernetes核心对象

Pod Kubernetes 最核心对象Pod Pod 是对容器的“打包”&#xff0c;里面的容器&#xff08;多个容器&#xff09;是一个整体&#xff0c;总是能够一起调度、一起运行&#xff0c;绝不会出现分离的情况&#xff0c;而且 Pod 属于 Kubernetes&#xff0c;可以在不触碰下层容器的…

存储或读取时转换JSON数据

一、 数据库类型 二、使用Hutool工具 存储时将数据转换为JSON数据 获取时将JSON数据转换为对象 发现问题&#xff1a; 原本数据对象是Address 和 Firend但是转换完成后数据变成了JSONArray和JSONObject 三、自定义TypeHandler继承Mybatis的BaseTypeHandler处理器 package …

Feign 和 OpenFeign 的区别

Feign 和 OpenFeign 都是用来进行服务间调用的客户端库&#xff0c;它们旨在简化HTTP API客户端的编写过程&#xff0c;使得编写对外部服务的接口就像调用本地方法一样简单。尽管它们有相似之处&#xff0c;但也存在一些关键差异&#xff1a; 归属和演进&#xff1a; Feign 最初…

硬件设计计划与APQP

硬件设计的关键节点: 大的里程碑milestone分为: Kickoff->A Samples->做出第一批B样总成件->B Samples/OTS->C Samples->PPAP->SOP 具体到硬件,A/B/C sample阶段,又可细分为: 关键器件选型&硬件系统方案设计原理图绘制PCB LayoutA_BOM输出PCB制板…

3. 深度学习笔记--优化函数

深度学习——优化器算法Optimizer详解&#xff08;BGD、SGD、MBGD、Momentum、Adagrad、Adadelta、RMSprop、Adam、Nadam、AdaMax、AdamW &#xff09; 0. GD &#xff08;梯度下降&#xff09; Gradient Descent&#xff08;梯度下降&#xff09;是一种迭代优化算法&#xf…

FreeRTOS内存管理(1-20)

FreeRTOS内存管理简介 在使用FreeRTOS创建任务&#xff0c;队列&#xff0c;信号量等对象时&#xff0c;一般都提供两种方法 1&#xff1a;动态创建任务&#xff08;方法&#xff09;自动地从FreeRTOS管理的内存堆中申请创建对象所需要的内存&#xff0c;并且在删除对象后可以…

九州金榜|孩子沉迷于网络:家庭教育的挑战与对策

随着时代的进步&#xff0c;科技的发展&#xff0c;网络现在成为了我们日常生活不可分割的一部分。然而&#xff0c;随着网络的普及也出现了一些列的问题&#xff0c;其中孩子沉迷于网络就是当前家长最为关心的问题&#xff0c;对于这种情况的发生&#xff0c;家庭教育就显得尤…

Linux主机重启后报错:[FAILED] Failed to start Switch Root.

一、问题描述 某次云主机因计费问题&#xff0c;导致批量重启&#xff0c;重启后发现某台云主机竟进入紧急救援模式&#xff08;emergency模式&#xff09;&#xff0c;如下所示&#xff1a; 二、原因及处理 1&#xff09;原因&#xff1a;加载根分区失败&#xff0c;导致无…

Libcity笔记:原子文件

1 介绍 Libcity中的数据以原子文件的形式存在 2 原子文件类别 对于不同的交通预测任务&#xff0c;可能用到不同的原子文件&#xff0c;同一个数据集不一定包含全部六种原子文件 网格数据需要按照先行后列的顺序遍历OD数据需要按照先起点后终点的顺序遍历 2.1 geo 存储地理…

Netty 实现dubbo rpc

一、RPC 的基本介绍 RPC (Remote Procedure Call) 远程过程调用&#xff0c;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序&#xff0c;而程序员无需额外的为这个交互编程。也就是说可以达到两个或者多个应用程序部署在不同的服务器上&…

OpenCV 入门(七)—— 身份证识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

德国韦纳WENAROLL滚压刀,液压缸,滚光刀,挤压刀,滚轧刀

德国韦纳WENAROLL滚压刀,液压缸&#xff0c;滚光刀,挤压刀&#xff0c;滚轧刀&#xff08;百度一下&#xff0c;西安尚融&#xff09; 德国韦纳&#xff08;WENAROLL&#xff09;的滚压刀、液压缸、滚光刀、挤压刀和滚轧刀在工业领域享有很高的声誉&#xff0c;这些产品因其高…

SM618卡件SM480模块和利时

SM618卡件❗电:183-6998-1851❗SM480模块和利时。自动化程度的提高&#xff0c;I/O点数大幅增 加&#xff0c;传统单一配线的方式已经无法满足发展的需 要SM618卡件SM480模块和利时。&#xff0e;对简单、可靠的配线方式的需求日益强烈&#xff0e; 传统接线 - 以并联方式连 接…

C# WinForm —— 12 ListBox绑定数据

ListBox加载大量数据时&#xff0c;避免窗体闪烁的方法&#xff1a; 在加载语句的前后分别加上 BeginUpdate()方法 和 EndUpdate()方法 指定一个集合为绑定的数据源 1. 首先&#xff0c;右键项目&#xff0c;添加类 2. 在新建的类文件中添加属性值信息 3. 构建初始化的对象…