自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (6)
  • 收藏
  • 关注

原创 x264 main函数走读

可以看到,x264的main函数较为简单,主要由x264_param_default、parse、encode和x264_param_cleanup三个函数。首先x264_param_default函数对参数进行默认设置,通过parse解析命令行,然后调用encode进行编码,编码结束后,调用x264_param_cleanup对参数进行cleanup。代码走读:REALIGN_STACK int main( int argc, char **argv ){ if( argc == ..

2020-09-26 22:52:22 209

原创 x264编译

x264在linux系统上编译较为方便,clone下来x264代码后,执行三部曲,cofigure , make , make install,即可,如下:1、下载源码:git clone http://git.videolan.org/git/x264.git2、cd x264;./configure; make; make install其中运行./configure的时候如果...

2020-01-21 15:28:07 241

原创 二叉树算法

问题一:完成一个函数,输入一颗二叉树,该函数输出它的镜像。二叉树节点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};解题思路:二叉树的镜像过程可以理解为所有左右子节点交换的过程,先前序遍历这个树的每个...

2018-11-20 13:57:36 341

原创 树的子结构

问题:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:struct BinaryTreeNode{ double m_dbValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};解题思路:可以分为两步,一,在树A中找到和树B的根节点的值一样的节点R,二,判断树A中以...

2018-11-20 11:11:35 102

原创 链表的合并

问题:输入两个递增排序的链表,合并这两个链表并使新链表的节点仍然是递增排序的。链表节点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};解题思路:这很像归并排序。同时要考虑鲁棒性ListNode *Merge(ListNode *pHead1, ListNode *pHead2){ ...

2018-11-20 10:21:43 93

原创 链表反转

问题:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点,链表定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};解题思路:链表反转就是每个节点本来是指向后一个节点的现在指向了前一个节点,而反转链表的头节点就是反转前链表的尾节点。ListNode *ReverseList(...

2018-11-20 09:55:12 93

原创 链表中环的问题

问题:如果一个链表中包含环,如何找出环的入口节点?如下图链表中,环的入口节点是节点3.解题思路:第一步是如何确定一个链表中是否包含一个环,也可以采用两个指针来解决,定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步,如果走的快的指针追上了走的慢的指针,那么链表中就包含环,如果走的快的指针走到链表末尾了(m_pNext==nullptr)都没追上走的慢的指针,那么...

2018-11-20 08:37:23 112

原创 查找链表中倒数第k个节点

问题:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点,链表节点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};解题...

2018-11-20 07:55:02 5158

原创 调整数组顺序

问题:输入一个数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。解题思路:最简单的思路是直接从头到尾扫描这个数组,没碰到一个偶数,取出这个偶数并把位于其后的所有数字往前挪动一位,挪完之后,将取出的偶数放到末尾的空位上,这种方法没碰到一个偶数就需要移动O(n)个数字,因此该方法的总的时间复杂度是O(n的平方)。换一种思路,维护两个指针,第一个...

2018-11-19 15:57:16 518

原创 删除链表节点

问题一:在O(1)时间内删除链表节点。给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。链表节点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};解题思路:在单向链表中删除一个节点,直观的做法是从链表的头节点开始,顺序遍历查找要删除的节点,并在链表中删除该节点。该方法的时...

2018-11-19 14:18:09 2841

原创 对大数的处理

问题:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到999。解题思路:首先注意n没有规定范围,意味着n可以输入很大的值,那么这种情况下,无论时用整型还是长整型都会溢出。所以需要考虑大数问题。可以通过字符串来解决大数问题。因为数字最大是n位的,需要用一个n+1长度的字符串(字符串最后以为是结束符‘\0’),字符串中每个字符都是‘0’ ~ ‘9’之间的某一个...

2018-11-19 11:16:34 512

原创 动态规划和贪婪算法

如果是求一个问题的最优解(通常是求最大值或者最小值),而且该问题能够分解成若干个子问题,并且子问题之间还有重叠的更小的子问题,就可以用动态规划来解决这个问题。在应用动态规划之前要分析能否把大问题分解成小问题,分解后的每个小问题也存在最优解。如果把小问题的最优解组合起来能够得到整个问题的最优解,那么就可以使用动态规划来解决这个问题。贪婪算法和动态规划不一样,当我们应用贪婪算法解决问题的时候,每一...

2018-11-18 17:16:18 969

原创 回溯法应用

问题:设计一个函数,来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径就不能再次进入该格。解题思路:这是一个回溯法的应用。首先,在矩阵中任选一个格子作为路径的起点,如果矩阵中某个格子的字符为ch,并且这个格子将对应于路径上的第i个字符。如果路径上的第i个字符不是ch,那...

2018-11-18 10:33:04 876

原创 查找算法

问题:把一个数组最开始的若干个元素搬到数组的末尾,称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.解题思路:最直观的方法,遍历一遍数组就能查找出最小的元素,但这种方法时间复杂度为O(n)。可以采用二分查找法(O(logn)),用两个指针分别指向数组的第一个元素和最后一个元素。旋转...

2018-11-17 10:57:43 82

原创 斐波那契数列的应用

问题:一个人一次可以上一个台阶,也可以上两个台阶,那么上n个台阶有几种走法.解题思路:我们把n级台阶的跳法看成n的函数,记为f(n)。当n>2时,第一次上台阶有两种选择:一是第一次只上一级台阶,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);二是第一次上两级台阶,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2)。所以,n级台阶的不同跳法的总数f(n)...

2018-11-16 17:35:42 767

原创 用两个栈实现一个队列

问题:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和在队列头部删除节点。template<typename T> class CQueue{public: CQueue(void); ~CQueue(void); void appendTail(const T&...

2018-11-16 16:42:07 105

原创 X264编码摘要

x264是一个开源的H.264/MPEG-4 AVC视频编码函数库,是符合标准H.264最好的有损视频编码器。目前新一代视频编码标准H.265也已发布多时,对应的X265也已比较成熟,但是x264目前仍然在市场上占有主要地位,使用居多,应该和其复杂度较低,便于硬件实现由一定关系。x264是符合H.264标准协议的,其编码环节分为预测,变换,量化,熵编码以及重建五大部分。H264的编码框架图如下...

2018-11-16 11:03:11 851

原创 替换字符串中空格

问题:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,则输出“We%20are%20happy.”。解题思路:可以先遍历一次字符串,这样就能统计出字符串中空格的总数,并可以计算出替换之后的字符串的总长度。每替换一个空格,长度增加2,因此替换以后字符串的长度等于原来字符串的长度加上2乘以空格数目。如“We are happy.”这个字符串长度是14(...

2018-11-15 10:18:00 149

原创 在二维数组中查找一个整数

问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路:首先选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则去除该数字所在的列;如果该数字小于要查找的数字,则去除该数字所在的行。即如果要查找的数字不在数组的右上角,则每一...

2018-11-15 08:20:43 258

原创 快速排序

快速排序是冒泡排序的改进版,也是最好的一种内排序。快速排序的思路:1、在待排序的元素任取一个元素作为基准(通常选第一个元素),称为基准元素;2、将待排序的元素进行分区,比基准元素大的元素放在它的右边,比其小的放在它的左边;3、对左右两个分区重复以上的步骤直到所有元素都是有序的。#include <stdio.h>int partition(int k[], i...

2018-11-10 17:08:49 125

原创 归并排序

归并排序两种方法:递归实现---------#include <stdio.h>#define MAXSIZE 10void Mergelist(int *list1, int size1, int *list2, int size2){ int i, j, k, m; int temp[MAXSIZE]; i = j = k = m = ...

2018-11-10 13:58:53 94

原创 堆排序

堆排序的基本思路:1、将待排序的序列构造成一个大顶堆。2、大顶堆的根节点就是序列的最大值,将它放在数组末尾就是最大值3、将剩余的n-1个序列重新构造一个大顶堆,得到n-1个中的最大值,放在数组倒数第二个位置4、反复进行#include <stdio.h>void swap(int k[], int i, int j){ int temp; tem...

2018-11-10 11:57:03 102

原创 希尔排序

希尔排序是插入排序的一种改进,是把记录按下标的一定增量分组,对每组使用直接插入排序算法进行排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法终止。#include <stdio.h>void ShellSort(int k[], int n){ int temp, j; int step = n; do ...

2018-11-10 10:57:58 82

原创 直接插入排序

直接插入排序是一种最简单的排序方法,其基本操作是将一条记录插入到已经排好的有序表中,从而得到一个新的、记录数量增1的有序表。#include <stdio.h>void InsertSort(int k[], int n){ int temp; for(int i = 1; i < n; i++) { if(k[i] <...

2018-11-10 10:17:28 78

原创 选择排序

选择排序:如果有n个元素会进行n-1次比较,每次比较会找到最小的元素与对应的元素进行互换#include <stdio.h>void SelectSort(in k[], int n){ int temp,min; for(int i=0;i<n-1;i++) { min=i; for(int j=i+1;j&...

2018-11-09 08:37:09 106

原创 冒泡排序

冒泡排序:两两相邻两个元素进行比较,如果有n个元素需要比较n-1次,并且从下往上两两比较普通版类冒泡排序:#include <stdio.h>void BubbleSort(int k[], int n){ int temp; for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j+...

2018-11-09 08:16:22 83

原创 树的表示方法

树是n(n>=0)个结点的有限集。当n=0时称为空树,在任意一个非空树中,1、有且只有一个称为根的结点,2、当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,。。。Tm,其中每一个集合本身又是一个树,并且称为根的子树。如下图:该树的度为3,深度为3.树的表示方法一:  data parent 0 A -1 1 ...

2018-11-08 08:42:37 1499

原创 字符匹配KMP算法

KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为T),如果它在一个主串(接下来称为S)中出现,就返回它的具体位置,否则返回-1.KMP算法的核心就是避免不必要的回...

2018-11-07 08:38:51 169

原创 字符串匹配BF算法

BF算法是朴素的字符串匹配算法,说是朴素其实就是效率低下。#include <stdio.h>#include <string>using namespace std;int index(string S, string T, int pos){ int i = pos; int j = 0; while (i < S.size() &amp...

2018-11-05 08:40:03 821

原创 八皇后问题

八皇后问题是高斯提出的一个经典问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。这里用递归实现。#include <stdio.h>int count=0;int notDanger(int row,int j,int (*chess)[8]){ int i,k,flag1=0,fla...

2018-11-04 18:02:08 79

原创 汉诺塔问题

汉诺塔来源于印度的古老传说:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。这其实是一个经典的递归问题:抽象问题为将64个圆盘借助柱子Y从柱子X移动到柱子...

2018-11-04 16:51:29 129

原创 折半查找法实现

折半查找法的思想是:减少查找序列的长度,分而治之的进行关键字的查找。方法一:迭代实现#include <stdio.h>int bin_search(int str[],int size,int key){ int low,mid,high; low=0; high=size-1; while(low<=high) { ...

2018-11-04 11:21:04 3470

原创 斐波那契数列实现

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........。这个数列从第3项开始,每一项都等于前两项之和。方法一:迭代实现(打印前40个数列值)#include <stdio.h>#...

2018-11-04 09:43:29 213

原创 Windows下vs2013编译ffmpeg源码

在搜罗网上各种资源以及网上请教各位大声终于在今天晚上编译成功,经测试编译出来的库可正常使用,故可证明编译正确。在此特感谢群里大神的帮助。感谢雷神现将具体步骤记录如下;本人编译用的是vs2013,在win7系统下,对ffmpeg-3.0进行编译,其他版本尚未测试,后续若有问题会补充。1、下载ffmpeg源码,可自行到ffmpeg官网上下载个版本的源码;2、下载安装器MinGW,然后安

2016-11-08 20:54:32 3780

原创 对Apple ProRes编解码器的学习

Apple ProRes编解码器可以充分利用多核处理,并具有快速、降低分辨率的解码模式,而且都支持全分辨率的任意帧尺寸(SD、HD、2K、4K和5K),其对每一帧都是独立于任何其他帧进行编码解码的,这样可以提供最佳编辑性能和灵活性。Apple ProRes包括以下格式:1、Apple ProRes 4444 XQ  目标速率500Mbps2、Apple ProRes 4444   目标

2016-10-18 11:42:30 3954

原创 AVInputFormat结构体源码介绍

本文对AVInputFormat结构体源码进行了简单介绍typedef struct AVInputFormat { /** * 格式名列表.也可以分配一个新名字. */ const char *name; /** * 对格式的一个描述性名字,增加可读性. */ const char *long_name; /**

2016-06-06 10:18:48 1049

原创 AVDictionary结构体相关源码介绍

本文对AVDictionary结构体部分相关函数代码进行了介绍本文研究分析AVDictionary相关代码 struct AVDictionary { int count; AVDictionaryEntry *elems; };typedef struct AVDictionaryEntry { char *key; char *value;}

2016-06-06 09:33:29 3567

原创 AVFormatContext结构体源码解析

/** * 利用avformat_alloc_context()来create一个 AVFormatContext. */typedef struct AVFormatContext { /** * AVClass最主要的作用就是给结构体(如AVFormatContext等)增加AVOption功能的 *支持。换句话说就

2016-06-03 10:17:53 2212

转载 avformat_open_input()源码分析

int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options){ AVFormatContext *s = *ps; int i, ret = 0; AVDictio

2016-06-02 16:31:38 797

原创 C++了解2

1、为了支持分离式编译,C++程序将声明和定义区分开来。声明使得名字呗程序所知,一个文件如果想使用别处定义的名字则必须包含那个名字的声明。而定义负责创建与名字关联的实体。      变量声明规定了变量的类型和名字,在这一点上定义与之相同,但是除此之外,定义还申请存储空间,也可能为变量赋一个初始值。如果想声明一个变量而非定义它,就在变量名前添加关键字extern, 而且不要显示的初始化变量 

2015-12-25 14:40:48 340

nasm-2.13.03.tar.gz

nasm 2.13版本,编码x264时没有nasm可能会导致编译失败,另外再其他一些应用中nasm也有一定的重要性

2020-01-21

bmp文件转yuv420

该工作利用cuda和DX编程实现将一张bmp图片转换为yuv420文件,读者可以在代码中直接设置bmp文件和分辨率,也可通过修改代码从bmp文件头信息中读取分辨率。如有问题请随时留言提出,谢谢

2018-10-18

h264中的NAL技术解释

对h264中的nal单元、类型以及码流中的相应字符意义进行了解释

2018-09-30

信息论与编码

信息论编码的复习资料可以帮助复习信息论的知识,不错的资料,

2014-06-11

基于DM642的X264视频监控系统的软件实现

有心去研究视频监控的可以下下来看看,不错的文章,可以好红啊看看卡可能

2014-06-11

基于X264和流媒体的嵌入式视频监控系统_王立青

好好,细细看看,关于基于X264和流媒体的嵌入式视频监控系统,需要的同学可以下载看看

2014-06-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除