- 博客(24)
- 收藏
- 关注
原创 libx264编码过程中修改码率踩坑记录
问题来源于项目中的一个需求,根据当前网络环境实时调整libx264的码率参数,从而让视频播放更加流畅。1、设置码率调整算法为ABR。2、初始化,并提供一个接口供探测网络环境的线程调用。写法大概类似于以下: bool reconfigure_bitrate(uint32_t bitrate) { param_t->rc.i_bitrate = bitrate; x264_encoder_reconfig(); return true; }3、写完
2021-09-02 17:28:03
713
原创 视频编码小结
视频编码小结背景RGB转YUV420代码调用libx264编码编码代码背景最近由于项目需求,搞了一段时间的H264视频编解码,做的过程中还是踩了不少坑,而且在查询资料的过程中发现网上的很多博客里面有一些有误导性的内容,所以自己打算把这段时间的工作记录一下,免得以后再犯。RGB转YUV420我们的编码库采用的是libx264,解码用的FFmpeg,由于H264只支持yuv420的编码,所以需要把rgb的像素点转成yuv420。代码这块需要注意的是,我们项目中原始的像素点是bgra格式,转yuv42
2021-03-16 11:51:07
1599
原创 Linux笔记--shell总结(3)
1.[shell基本结构和执行过程]:2.[变量]:3.[ if 语句]:4.[循环语句]:5.[函数]:
2016-09-19 17:15:53
437
原创 Linux笔记--vim的基本常用操作总结
为什么要学vim?其实是有原因的。因为:所有的UNIX Like系统都会内置VI文本编辑器,其他的文本编辑器则不一定会存在; 很多软件的编辑接口都会主动调用vi; vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计; 程序简单,编辑速度快vim 基本操作太多了,多得根本记不过来,还是对一般模式下一些比较常用的操作做一个小笔记,尤其是替换字符串操作。(1)进入 vim
2016-09-15 10:05:56
492
原创 C/C++笔记--String类的书写及易错点分析
CMyString{public: CMyString(const char* pData = NULL); CMyString(const CMyString &other); ~CMyString(); CMyString& CMyString::operator =(const CM
2016-08-20 12:22:27
1037
原创 C/C++笔记--多态及虚表分析
多态性是面向对象设计语言的基本特征。仅仅将数据和函数捆绑到一起,进行类的封装,使用一些简单的继承,还不能算是真正应用了面向对象的设计思想。多态性是面向对象的精髓。多态性可以概括为“一个接口,多种方法”,函数重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法)。 更通俗的说,多态性是指同一个操作作用于不同的对象就会产生不同的响应;多态性分为静态多态性和动态多态性,其中函数重
2016-08-20 10:23:23
583
原创 计算机网络笔记--TCP流量控制中滑动窗口协议分析
滑动窗口协议,该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。 TCP协议软件依靠滑动窗口机制解决传输效率和流量控制问题。它可以在收到确认信息之前发送多个数据分组。这种机制使得网络通信处于忙碌状态,提高了整个网络的吞吐率,它还解决了端到端的通信流量控制问题,允许接收端在拥有容纳足够数据的缓冲之前对传输进行限制。在实际运行
2016-08-19 16:38:36
1584
原创 计算机网络笔记--TCP三次握手与四次挥手过程状态分析
三次握手: 由于TCP协议提供可靠的连接服务,于是采用有保障的三次握手方式来创建一个TCP连接。三次握手的具体过程如下: 1.客户端发送一个带SYN标志的TCP报文(报文1)到服务器端,表示希望建立一个TCP连接。 2.服务器发送一个带ACK标志和SYN标志的TCP报文(报文2)给客户端,ACK用于对报文1的回应,SYN用于询问客户端是否准备好进行数据传输。 3.客户端发送一个带ACK标志的
2016-08-19 15:07:08
484
原创 计算机网络笔记--拥塞控制和流量控制区别分析
流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。 拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。
2016-08-19 14:40:50
5404
原创 数据结构笔记--实际软件开发中用到的最多的数据结构和算法
最近在复习数据结构,在网上看到一篇博文:既然在实际应用中用不到数据结构和算法,为什么我们还要学习它?因为哥也只是一个学生,没有接触过实际的项目开发。然后在知乎上看到这个问答: https://www.zhihu.com/question/20066988高票答主说得很好,学习数据结构的目的不是为了不参考任何资料自己实现树,实现图,而是为了在遇到实际的问题时能找到最合适的数据结构和算法。更是为了学习
2016-07-30 19:24:38
2777
原创 数据结构笔记--总结各种查找算法及其应用
基于线性表的查找:具体分为顺序查找法、折半查找法以及分块查找法。三种方式都非常简单,在此引出一个概念,平均查找长度。即为了确定数据元素在列表中的位置,需和给定值进行比较的关键字个数的期望值,称为查找算法在查找成功时的平均查找长度。对于长度为n的列表,查找成功时的平均查找长度为ASL = P1C1 + P2C2 + P3C3 + … + PnCn = ∑PiCi (i=i..n) 其中Pi为查找列表
2016-07-30 19:24:06
1092
原创 数据结构笔记--总结各种排序算法及其应用
排序分为直接插入类排序、交换类排序、选择类排序和归并排序。 为了满足每个函数只有一个数组首地址、一个数组长度的要求,我们会对某些函数进行封装。 直接插入类排序:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序的插入到已排好序的记录子集中,直到将所有的待排记录全部插入为止。 直接插入排序:通俗点说,就是把第i个元素插入到前i-1个有序集合并使得插入之后的集合有序。具体做法
2016-07-30 19:22:59
611
原创 数据结构笔记--图的邻接表存储及非递归深度优先遍历
最近在复习数据结构,看到图的时候就想尝试一下非递归的深度优先遍历,虽然写出来了,但是程序的可读性不高,所以在网上看了别人的实现,发现很多人只给了邻接矩阵存储的图的非递归遍历,所以作者自己实现了邻接表存储的图的创建和非递归遍历,水平有限,可读性健壮性尽量再努力提高,图的邻接矩阵存储本文不涉及,仅仅介绍邻接表存储。 1、创建图的邻接表: 图的邻接表结构可以存储有向图和无向图而不用改任何东
2016-07-25 18:41:16
2296
原创 数据结构笔记--反转链表分析
最近在复习数据结构的时候,看到一道反转链表的题。题目要求将给定链表改变指针指向,从而达到链表逆转的目的。尝试着做了几次,发现改的链表不是健壮性不够,就是在反转的时候会断掉。最终改了好几次,终于大功告成。 参数分析:函数传入一个指向原来链表头的指针,可以修改让其直接修改指针指向,也可以返回指向新链表的头指针,不管怎么都是要求改变原链表的结构。 参数合法性分析:当链表为空的时候,直接让函数终止。当链
2016-07-25 13:31:05
474
原创 数据结构笔记--haffman树与haffman编码分析
haffman树的定义与应用网上都有,作者就不复制粘贴了,本文的主要目的是实现haffman树的创建的代码,并实现给haffman树编码。 定义一颗haffman树节点的结构体如下:typedef struct hafftree{ int m_weight; // 权重 int m_lchild; // 左孩子节点位置 int m_rchild; //
2016-07-23 19:14:22
834
1
原创 数据结构笔记--通过与BF算法的比较理解KMP算法
近期在复习数据结构,看到串的时候看到这样一道题,求模式串strSub在主串strPrim中第一次出现的位置。第一种常规算法,定义两个指针,一个i指向strPrim第一个字符,另一个j指向strSub第一个字符,两者相等,同时后移,两者不等,让j回到strSub第一个字符位置,i回到上次比较完成的下一个位置,这就是BF算法。另一种是KMP算法,思路网上都有,作者就不复制粘贴了,本文的目的是通过BF算法
2016-07-23 19:13:01
1081
原创 数据结构笔记--循环队列分析
循环队列是队列的一种顺序表示和实现方法。我们用一个一维数组来存储队列元素值,为了解决“假溢出”现象并使得空间得到充分利用,一个较巧妙的方法是将顺序数组看成一个环状数组(注意:环状空间只是逻辑空间,真实的在内存中的还是连续空间,这就解释了为什么后面的操作要取模)。然而,当我们将数组设计成这样后,队列为满与队列为空就无法正确表示。解决办法有两个:一种是少用一个元素空间。则队满的状况就是(rear+1)%
2016-07-23 19:11:54
637
原创 数据结构笔记--二叉树的非递归遍历与按层遍历分析
二叉树的先序、中序、后序递归遍历方式,四行代码,熟悉数据结构、熟悉二叉树的都会。但是当我们遇到一颗相对比较大的树,也就是节点比较多的二叉树时,递归遍历就显得不能得心应手了。那么有没有一种不用递归又能遍历二叉树的方法呢? 答案是肯定的。先序、中序、后序遍历我们要借助栈,按层遍历需要一个队列。在C++中,STL已经为我们提供了这两种结构,重复的代码就不在书写,直接使用STL的stack和queue。
2016-07-23 19:10:36
558
原创 C/C++笔记--程序内存分区分析
内存分区: 堆: 由程序员手动分配和释放,完全不同于数据结构中的堆,分配方式类似链表。若程序中程序员不释放,程序结束后由系统释放。 栈: 由编译器自动分配和释放,存放函数的参数、局部变量的值,操作方式类似于数据结构中的栈。 静态区: 存放全局变量和静态变量,包括DATA段(全局初始化区)和BSS段(全局未初始化区),程序结束后由系统释放。 文字常量区: 常量字符串就
2016-07-21 20:17:51
470
原创 C/C++笔记--strcpy和strncpy函数的安全性分析
两者都是C/C++里面的字符串拷贝函数,不同的是后者多了一个参数,此参数可以指定从源拷贝多长。char* strcpy(char* strDest, const char* strSrc)char* strncpy(char* strDest, const char* strSrc, int pos)以上为两者原型 下面开始介绍两个的安全性,strcpy函数: 如果参数 dest 所指的内存空间
2016-07-21 18:35:53
5430
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人