- 博客(155)
- 收藏
- 关注
原创 FFmpeg 常用的API和结构体说明
初始化所有组件,只有调用了该函数,才能使用复用器和编解码器,该接口内部的调用为:(1).avcodec_register_all(),该接口内部执行步骤:注册硬件加速器:REGISTER_HWACCEL()注册音视频编码器:REGISTER_ENCODER()注册音视频解码器:REGISTER_DECODER()打包注册:REGISTER_ENCDEC()注册解析器:REGISTER_PARSER()(2).执行复用器和解复用器的注册:注册复用器:REGISTER_MUXER()
2023-07-15 12:53:26
1479
原创 RTMP简介
RTMP协议支持用户自定义【3,65599】之间的CSID,0,1,2由协议保留特殊消息信息,0表示Basic Header总共要占用2字节,CSID在【64,319】之间,1代表用3个字节,CSID在【64,65599】之间,2表示该chunk是控制信息和一些命令信息。3表示Basic为1个字节。
2023-07-15 12:48:11
227
原创 SDL学习
是一个,旨在通过和提供对。它被视频播放软件、模拟器和流行游戏使用,包括的获奖目录和许多游戏。SDL正式支持Windows、macOS、Linux、iOS和Android。对其他平台的支持可以在源代码中找到。SDL是用C编写的,可以在C++中原生运行,并且有几种其他语言,包括C#和Python。
2023-07-15 12:05:07
334
原创 c++ 的Protobuf学习使用
然后编译成二进制的码流再进行传输或者存储。Protocol buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。Protobuf 使用的时候必须写一个。
2023-07-14 14:47:06
1026
原创 QT学习之QDateTimeAxis
类向图表的轴添加日期和时间。DateTimeAxis可以设置为。可以通过设置适当的。可以正确处理从4714 BCE到287396 CE的日期。有关QDateTime的其他限制,请参阅文档。QDateTimeAxis可以与任何一起使用。要将数据点添加到系列中,请使用下面的代码片段说明了如何将序列添加到图表中并设置Propertiesparent此属性保存在从QDateTime对象创建轴标签时使用的格式字符串。
2023-07-13 12:58:02
1840
原创 Qchart学习
chart view不需要对象即可工作。若要在现有中显示图表,应改用QChart或QPolarChart类。QAbstractAxis类是用于专门轴类的基类。每个serial可以绑定到一个或多个水平轴和垂直轴,但不支持将导致不同域的混合轴类型,例如在同一方向上指定QValueAxis和。可以单独控制各种轴元素(如轴线、标题、标签、网格线和阴影)的属性和可见性。QAbstractSeries类是所有Qt Chart系列的基类、通常,使用序列类型特定的继承类来代替基类。
2023-07-13 12:32:16
656
原创 QT学习-线程
应用程序在某些情况下需要处理比较复杂的逻辑, 如果只有一个线程去处理,就会导致窗口卡顿,无法处理用户的相关操作,这种情况下就需要使用多线程。QThread类,(QObject *parent= nullptr)virtual()() constvoid(intreturnCode= 0)bool() constbool() constbool() constint() const() const获取当前线程优先级void()此函数可用于使长时间运行的任务完全可中断。
2023-07-10 17:47:44
345
原创 vins-fusion-featureTracker文件解析
关键点的提取和描述子的计算特别耗时,在实践中,SIFI无法进行实时的计算,而ORB的计算需要接近20毫秒才能完成,保留特征点,
2023-07-06 12:34:48
691
原创 vins-fusion之前端学习
VINS的状态估计器模块(estimator),主要在代码中的相关部分实现。这个模块可以说是VINS的最核心模块,从论文的内容上来说,里面的内容包括了VINS的估计器初始化、基于滑动窗口的非线性优化实现紧耦合。此外还包括了关键帧的选择内容。该模块的代码放在文件夹vins_estimator中,可以看到,除了上述内容外,还包括有外参标定、可视化等其他功能的实现。
2023-07-05 10:16:00
595
原创 git学习1
有人把 Git 的分支模型称为它的“必杀技特性”,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。为何 Git 的分支模型如此出众呢?Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。理解和精通这一特性,你便会意识到 Git 是如此的强大而又独特,并且从此真正改变你的开发方式。
2023-07-04 10:40:29
528
原创 git学习
又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是。git log,最近的更新排在最上面。正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。git log有许多选项可以帮助你搜寻你所要找的提交, 下面我们会介绍几个最常用的选项。-p--patch-2你也可以为git log附带一系列的总结性选项。比如你想看到每次提交的简略统计信息,可以使用--stat。
2023-07-03 21:48:00
890
原创 python数据结构之集合
集合是无序且。至于可变内容列表(list)、字典(dict)、集合(set)等则不可以是集合元素。但是集合本身是可变的,我们可以增加或删除集合的元素。
2023-07-03 11:39:59
661
原创 Python数据结构之字典
字典也是一个列表型的数据结构,但是他的元素是使用“键-值方式配对存储,在操作时使用键取得值的内容,定义字典是将键-值放在大括号{}内。name_dict = {键1:值1,键2:值2 ....键n:值n}fruits = {"西瓜":15,"橡胶":12,"水蜜桃":45}noodles = {"牛肉面":15,"肉丝面":12,"阳春面":12}# 列出字典的类型print("字典fruits数据类型是:",type(fruits)){'西瓜': 15, '橡胶': 12, '水蜜桃': 45}
2023-07-03 10:39:10
256
原创 Python数据结构之元组
列表在定义时将元素放在中括号内,而元组的定义则是将元素放在小括号内。name_tuple = (元素1,元素2......元素n)元组中的每个数据称为元组。元素的类型可以是整数,字符串,列表或者是元组类型如果元组内的元素只有一个,在定义时需要在元素右边加上逗号。name_tuple = (元素1,)(10,)
2023-07-02 21:27:11
330
原创 访问者模式(Vistor)
访问者是一种行为设计模式,它能将算法与其所作用的对象隔离开来。假如你的团队开发了一款能够使用巨型图像中地理信息的应用程序。图像中的每个节点既能代表复杂实体(例如一座城市), 也能代表更精细的对象(例如工业区和旅游景点等)。如果节点代表的真实对象之间存在公路,那么这些节点就会相互连接。在程序内部,每个节点的类型都由其所属的类来表示,每个特定的节点则是一个对象。一段时间后, 你接到了实现将图像导出到 XML 文件中的任务。这些工作最初看上去非常简单。
2023-06-30 12:02:43
706
原创 模板方法模式(Template Method)
模板方法是一种行为设计模式它在超类中定义了一个算法的框架,允许子类在不修改结构 的情况下重写算法的特定步骤。假如你正在开发一款分析公司文档的数据挖掘程序。用户需要向程序输入各种格式(PDF、DOC 或 CSV)的文档,程序则会试图从这些文件中抽取有意义的数据,并以统一的格式将其返回给用户。该程序的首个版本仅支持 DOC 文件。在接下来的一个版本中,程序能够支持 CSV 文件。一个月后,你“教会”了程序从 PDF 文件中抽取数据。一段时间后,你发现这三个类中包含许多相似代码。
2023-06-30 11:22:25
339
原创 策略模式(Strategy)
策略是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。你打算为游客们创建一款导游程序。该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位。用户期待的程序新功能是自动路线规划:他们希望输入地址后就能在地图上看到前往目的地的最快路线。程序的首个版本只能规划公路路线。驾车旅行的人们对此非常满意。但很显然,并非所有人都会在度假时开车。因此你在下次更新时添加了规划步行路线的功能。此后,你又添加了规划公共交通路线的功能。而这只是个开始。
2023-06-30 11:15:11
629
原创 状态模式(State)
状态是一种行为设计模式,让你能在一个对象的内部状态变化时改变其行为,使其看上去就像改变了自身所属的类一样。状态模式与有限状态机的概念紧密相关。其主要思想是程序在任意时刻仅可处于几种有限的状态中。在任何一个特定状态中,程序的行为都不相同,且可瞬间从一个状态切换到另一个状态。不过,根据当前状态,程序可能会切换到另外一种状态,也可能会保持当前状态不变。这些数量有限且预先定义的状态切换规则被称为转移。你还可将该方法应用在对象上。
2023-06-29 21:15:18
1128
原创 观察者模式(Observer)
观察者是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。假如你有两种类型的对象:“顾客”和“商店”。顾客对某个特定品牌的产品非常感兴趣(例如最新型号的 iPhone 手机),而该产品很快将会在商店里出售。一方面顾客可以每天来商店看看产品是否到货。但如果商品尚未到货时,绝大多数来到商店的顾客都会空手而归。另一方面,每次新产品到货时,商店可以向所有顾客发送邮件(可能会被视为垃圾邮件)。这样,部分顾客就无需反复前往商店了,但也可能会惹恼对新产品没有兴趣的其他顾客。
2023-06-29 18:22:33
791
原创 备忘录模式(Memento)
备忘录是一种行为设计模式,允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。假设你正在开发一款文字编辑器应用程序,除了简单的文字编辑功能外,编辑器中还要有设置文本格式和插入内嵌图片等功能。后来你决定让用户能撤销施加在文本上的任何操作。你选择采用最直接的方式来实现该功能:程序在执行任何操作前会记录所有的对象状态, 并将其保存下来。当用户此后需要撤销某个操作时,程序将从历史记录中获取最近的快照,然后使用它来恢复所有对象的状态。
2023-06-29 17:56:02
412
原创 python之argparse
当你在服务端要运行一个工具或服务时,输入参数似乎是一种硬需(当然你也可以通过配置文件来实现)。这样的标志 指示可选参数,这些参数在命令行中始终可以省略。值是一个字符串,包含参数的简要说明。值是一个字符串,则解析器会将该值视为 是一个命令行参数 特别是,分析器应用任何。关键字参数将一个 不同数量的命令行参数。关键字参数将一个 不同数量的命令行参数。将收集来自命令行的参数 一起列成一个清单。将收集来自命令行的参数 一起列成一个清单。- 要添加到返回的对象的属性的名称。- 应该使用的命令行参数的数量。
2023-06-28 21:06:20
220
原创 python装饰器学习
类中定义装饰器很简单,首先要确认它的使用方式。到底是作为一个实例方法还是类方法。class A:a = A()# 实例调用# 类调用通过观察可以发现,装饰器的调用,一个是实例调用,一个是类调用。在实际的应用中,我们需要使用一个装饰器取包装函数,但是希望返回的一个可以调用的实例,并且的需要装饰器的可以同时工作在的类定义的内部和外部为了将装饰器定义为一个实例,我们需要的确保的它实现了__call__()方法和__get__()方法。
2023-06-28 17:55:30
204
原创 迭代器模式(Iterator)
迭代器是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。大部分集合使用简单列表存储元素。但有些集合还会使用栈、树、图和其他复杂的数据结构。无论集合的构成方式如何,它都必须提供某种访问元素的方式,便于其他代码使用其中的元素。集合应提供一种能够遍历元素的方式,且保证它不会周而复始地访问同一个元素。如果你的集合基于列表, 那么这项工作听上去仿佛很简单。但如何遍历复杂数据结构(例如树)中的元素呢?
2023-06-28 11:25:18
268
原创 命令模式(Command)
命令是一种行为设计模式它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。假如你正在开发一款新的文字编辑器,当前的任务是创建一个包含多个按钮的工具栏,并让每个按钮对应编译器的不同操作。你创建了一个「Button」类。它不仅用于生成工具栏上的按钮,还可用于生成各种对话框的通用按钮。尽管所有按钮看上去都很相似,但它们可以完成不同的操作(打开、保存、打印和应用等)。你会在哪里放置这些按钮的点击处理代码呢?最。
2023-06-28 10:52:51
1280
原创 责任链模式(Chain of Responsibility)
责任链是一种行为设计模式允许你将请求沿着处理者链进行发送。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下个处理者。假如你正在开发一个在线订购系统。你希望对系统访问进行限制,只允许认证用户创建订单。此外,拥有管理权限的用户也拥有所有订单的完全访问权限。简单规划后,你会意识到这些检查必须依次进行。只要接收到包含用户凭据的请求,应用程序就可尝试对进入系统的用户进行认证。但如果由于用户凭据不正确而导致认证失败,那就没有必要进行后续检查了。
2023-06-27 19:47:26
527
原创 代理模式(Proxy)
代理是一种结构型设计模式让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问,并允许在将请求提交给对象前后进行一些处理。举个例子:有这样一个消耗大量系统资源的巨型对象, 你只是偶尔需要使用它,并非总是需要。你可以实现延迟初始化:在实际有需要时再创建该对象。对象的所有客户端都要执行延迟初始代码。不幸的是,这很可能会带来很多重复代码。在理想情况下,我们希望将代码直接放入对象的类中,但这并非总是能实现:比如类可能是第三方封闭库的一部分。
2023-06-27 15:18:26
898
原创 享元模式(Flyweight)
享元是一种结构型设计模式,它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。假如你希望在长时间工作后放松一下,所以开发了一款简单的游戏:玩家们在地图上移动并相互射击。你决定实现一个真实的粒子系统,并将其作为游戏的特色。大量的子弹、导弹和爆炸弹片会在整个地图上穿行,为玩家提供紧张刺激的游戏体验。开发完成后,你推送提交了最新版本的程序,并在编译游戏后将其发送给了一个朋友进行测试。
2023-06-27 11:49:40
295
原创 外观模式(Facade)
外观是一种结构型设计模式能为程序库、框架或其他复杂类提供一个简单的接口。假设你必须在代码中使用某个复杂的库或框架中的众多对象。正常情况下,你需要负责所有对象的初始化工作、管理其依赖关系并按正确的顺序执行方法等。最终,程序中类的业务逻辑将与第三方类的实现细节紧密耦合,使得理解和维护代码的工作很难进行。
2023-06-27 10:53:29
222
原创 装饰模式(Decorator)
装饰是一种结构型设计模式,允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。假设你正在开发一个提供通知功能的库,其他程序可使用它向用户发送关于重要事件的通知。库的最初版本基于通知器Notifier 类,其中只有很少的几个成员变量,一个构造函数和一个send 发送方法。该方法可以接收来自客户端的消息参数,并将该消息发送给一系列的邮箱,邮箱列表则是通过构造函数传递给通知器的。作为客户端的第三方程序仅会创建和配置通知器对象一次,然后在有重要事件发生时对其进行调用。
2023-06-27 10:41:31
133
原创 组合模式(Composite)
组合是一种结构型设计模式,你可以使用它将对象组合成树状结构,并且能像使用独立对象一样使用它们。如果应用的核心模型能用树状结构表示,在应用中使用组合模式才有价值。例如你有两类对象:产品和盒子。一个盒子中可以包含多个产品或者几个较小的盒子。这些小盒子中同样可以包含一些产品或者更小的盒子。假设你希望在这些类的基础上开发一个订购系统。订单中可以包含无包装的简单产品,也可以包含装满产品的盒子。此时你会如何计算每张订单的总价格呢?
2023-06-26 15:37:25
478
原创 桥接模式(Bridge)
桥接是一种结构型设计模式,可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能在开发时分别使用。假如你有一个几何形状(Shape)类, 从它能扩展出两个子类: 圆形(Circle)和方形(Square)。你希望对这样的类层次结构进行扩展以使其包含颜色, 所以你打算创建名为红色(Red)和蓝色(Blue)的形状子类。但是,由于你已有两个子类,所以总共需要创建四个类才能覆盖所有组合,例如蓝色圆形(BlueCircle)和红色方形(RedSquare)。
2023-06-26 15:17:58
852
原创 适配器模式(Adapter)
适配器是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。假如你正在开发一款股票市场监测程序,它会从不同来源下载 XML 格式的股票数据,然后向用户呈现出美观的图表。在开发过程中, 你决定在程序中整合一个第三方智能分析函数库。但是遇到了一个问题, 那就是分析函数库只兼容JSON 格式的数据。你可以修改程序库来支持XML。但是,这可能需要修改部分依赖该程序库的现有代码。甚至还有更糟糕的情况,你可能根本没有程序库的源代码,从而无法对其进行修改。
2023-06-26 14:27:56
857
原创 单例模式(Singleton)
单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。保证一个类只有一个实例。为该实例提供一个全局访问节点。为什么会有人想要控制一个类所拥有的实例数量?最常见的原因是控制某些共享资源(例如数据库或文件)的访问权限。它的运作方式是这样的:如果你创建了一个对象,同时过一会儿后你决定再创建一个新对象,此时你会获得之前已创建的对象,而不是一个新对象。注意,普通构造函数无法实现上述行为,因为构造函数的设计决定了它必须总是返回一个新对象。
2023-06-25 14:51:05
576
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅