自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 RV1126+FFMPEG多路码流项目

本项目采用的是易百纳RV1126开发板和CMOS摄像头,使用的推流框架是FFMPEG开源项目。这个项目的工作流程如下(如下图):通过采集摄像头的VI模块,再通过硬件编码VENC模块进行H264/H265的编码压缩,并把压缩后的数据通过FFMPEG传输到两个流媒体服务器(如同时推送到流媒体服务器:rtmp://xxx.xxx.xx.xxx:1935/live/01和rtmp://xxx.xxx.xx.xxx:1935/live/02)。

2025-09-17 01:06:51 1260

原创 RV1126的OSD模块和SDL_TTF结合输出H264文件

是这个程序的核心,它需要把每个width和height进行16位对齐,因为OSD需要处理16位对齐的数据(所谓十六位对齐可以理解为,width和height能够被16位整除)。上面是OSD叠加的代码,主要是通过RV1126的RNG模块对VENC进行OSD进行字库叠加。VENC模块的初始化实际上就是对VENC_CHN_ATTR_S的参数进行设置、然后调用。VI模块的初始化实际上就是对VI_CHN_ATTR_S的参数进行设置、然后调用。指的是输入的数值,align是要对齐的数值。:将转换后的图像数据存入。

2025-09-10 20:00:55 700

原创 视频码率和视频码率控制模式

视频码率是数据传输时单位时间内传输的数据位数,对于视频来说视频码率的单位是kbps(千比特率)每秒。处理的文件或者码流就越接近原始文件。视频码率传输的大小跟分辨率是息息相关的,下面我们来看看分辨率和视频码率的关系。

2025-08-28 22:05:13 1058

原创 QP原理讲解

QP参数调节,指的是量化参数调节。它主要是来调节图像的细节,最终达到调节画面质量的作用。QP值和比特率成反比,QP值越小码率越高,画面质量越好;反之QP值越大,码率越低,画面质量越低,而且随着视频源复杂度,这种反比的关系会更加明显。但是要注意的是,在设置QP值的时候会容易造成码率的波动,有时候画面质量提升了会导致码率大幅度提升,所以在提升画面质量的时候也需要考虑码率的情况。在编码中,亮度的QP最大值是51、色度的QP最大值是39,在真正开发中调节亮度的QP值为主。

2025-08-28 21:38:41 1226

原创 RGA模块

RGA模块是RV1126用于2D图像的裁剪、缩放、旋转、镜像、图片叠加等格式转换的模块。要把一个原分辨率1920 * 1080的视频压缩成1280 * 720的视频,此时就要用到RGA模块了。比方说把一个视频用RGA进行旋转,比方说把一个视频用RGA进行镜像处理(镜像就是指物体相对于该物体反射出来的虚像,就像一个人照镜子,反射出来的图像),要注意的是RGA是直接对VI的图像进行处理,并不是对VENC数据进行处理,这一点要非常注意。RGA结构体分为:rga区域属性结构体,rga属性结构体。

2025-08-28 20:43:14 348

原创 H265码流结构的分析

下面我们来看看,时域候选列表的建立过程,它的过程如下:利用当前PU在邻近已编码图像中找到对应的PU位置的运动信息,相比于空域,时域候选表不能直接使用候选块的信息,它是需要根据参考图像位置来做对应的比例伸缩调整。对选取得空域和时域信号进行如下处理,最终得到的结果得到时域加空域 :这张图我们可以看出,inter处理过程是从空域MV列表5个里面选择2个,时域MV列表2个选择1个,紧接着去除重复的MV,然后填补零矢量(填补0,0),保留候选列表中前2个MV,最后选择出最优MV。

2025-08-27 18:58:42 1150

原创 RV1126 -VI模块讲解

RV1126的VI模块指的是视频输入模块,它的作用是读取sensor的数据。VI模块底层就是对V4L2驱动架构接口的一系列的封装,它本质上还是依赖Linux底层的V4L2驱动架构并向应用层提供对应的设备文件节点,比方说(/dev/video*)。而VI模块可以通过操作类似于/dev/video*这样的设备节点来读取摄像头数据。

2025-08-27 16:12:34 831

原创 YUV原理讲解

YUV420采样,相当于每一行扫描的时候只扫描一种色度分量(U分量或者V分量),和Y分量按照2:1的方式进行采样(也可以理解为四个Y分量对应一个UV分量)。就比方说,在第一行扫描的时候,YV分量按照2:1的方式进行采样,那么YU分量也是用2:1的方式采样,所以对于每个色度分量来说,它的水平方向和垂直方向的采样比都是2:1。YUV422采样,相当于U、V分量是以Y分量采样的一半进行采样,Y分量和UV分量按照2:1的比例进行采样(也可以理解为两个Y分量对应一个UV分量)。所以,Y分量大小:w * h;

2025-08-26 19:36:12 586

原创 FTP云盘项目编程

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP 协议提供服务。FTP是File Transfer Protocol(文件传输协议)。程序运行,服务端不断接收客户端指令,服务端可同时处理多个客户端接入并对指令作出解析,并把执行结果返回给客户端,客户端根据服务端对指令的 解析并把由服务端传递过来的处理信息通过客户端呈现给客户,实现文件的各种操作。Linux网络编程实现的FTP。

2025-08-13 10:46:00 919

原创 Linux-线程

i<MAX;i++)crt++;usleep(10);上面的线程使用了两把锁,但是最后只解开了一把,另一把还在锁着;

2025-06-13 11:02:56 2458

原创 Linux-进程间的通信

Inter Process Communication(进程间通信):由于每个进程在操作系统中有,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。

2025-06-05 10:24:00 9461

原创 Linux-进程控制

通过系统创建一个与原来进程几乎相同的一个进程,一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。结果:子进程延迟一秒运行,此时父进程已经运行结束,所以此时的子进程就成为了孤儿进程,此时孤儿进程的ppid显示的就不是父进程的pid,通过查询得知该进程被init进程收养;结果:子进程已经结束,但父进程还在运行,通过指令”ps aux“查看pid 3070此时的状态是出于一个僵尸进程,特点是:z+,<defound>;克隆后原来的进程为父进程,新进程为子进程;

2025-05-28 16:41:05 2012

原创 Linux-进程

进程基本的状态有五种,分别为初始态,就绪态,运行态,挂起态和终止态。

2025-05-26 16:50:22 252

原创 文件IO与标准IO的区别

结果: 并没有任何输出,因为printf函数为C库函数,且需要将库缓存写满才会输出但是并没有所以不会输出。因此fopen函数的可移植性强于open。功能:重新定位文件内部的指针。

2025-05-14 22:12:45 499

原创 Linux操作系统-函数

pathname:文件的路径名,如果只写文件名,就默认当前目录,如果在文件名加上路径,就按照绝对路径来打开文件。

2025-04-15 10:16:07 442

原创 C语言-指针

C语言中,内存单元的地址成为指针,专门用来存放地址的变量,有时对地址,指针和指针变量不区分,统称指针。

2025-03-25 20:18:48 855

原创 C语言-字符数组

int main()// 字符串数组的列数//字符串数组的行数for(i=0;i<n;j<t;结果:int main()for(i=0;i<n-1;i++);for(j=n-1;j>0;str[j] = t;return 0;结果:通过向电脑里输入一个字符,并将这个字符反转:实现逆序输出。i<n;

2025-03-20 17:13:15 664

原创 C语言-数组

将数组中的每个元素进行比较,并按照从小到大的顺序进行排列,由于数组的长度等于n,因此将数组中的一个元素与其他元素循环比较需要5次,即n-1次,因此第一个元素进行比较的时候i=0,j=0,如果a[0]>a[1]则通过中间变量t将a[0]与a[1]的两个元素位置进行交换,实现从小到大排列,以此类推,实现所有元素的从小到达排列。其中j<n-i-1,是因为n是数组元素的个数,但是a[]的第一个元素是a[0],所以需要这样设置。初始化方式:在定义数组的时候,为数组元素赋初值。3.1一维数组初始化。

2025-03-18 20:20:08 513

原创 C语言-控制语句

当循环中遇到continue时直接终止本次循环,但是可以执行下一次循环。

2025-03-17 20:17:54 340

原创 C语言-循环语句

实验1、使用goto来完成1-100的求和,

2025-03-16 18:44:18 381

原创 C语言-switch case语句

91分评级为A 65分评级为C。break语句用于强行跳出switch体,一般每个switch后面有一个break语句。当表达式的值与case后面的常量表达式的值相等时,就执行case后的语句。switc中的表达式可以是整形,字符型表达式或枚举。每个常量表达式的值各不相同,否则将出现矛盾。case常量:只起语句标号的作用。

2025-03-14 14:28:32 432

原创 C-语言:控制语句

当输入的成绩 大于等于90且小于100时,评级为A;当输入的成绩大于100或者小于0则视为输出错误,当输入的成绩大于等于80且小于90时,评级为B;当输入的成绩大于等于60且小于80时,评级为C;当输入的成绩大于0且小于60时,评级为D;使用阶梯形式来给每个同学的分数进行评级;

2025-03-14 10:05:14 293

原创 C语言-输出函数

结果:%15s表示输出15个字符,%10.5表示有效位为5,左侧补5个空格,%2.5表示有效位为5大于2,直接输出5位有效字符,%3s由于字符共为15位大于3,直接输出全部15位字符。结果:其中%8f表示输出8位,空的字符在左侧补空格,%8.1f表示输出8位字符并保留一位小数,%.2f表示输出保留两位小数。%x表示按照十六进制格式输出,1表示16的个数+4=20。此时按照8进制格式输出则8*2+3=19。若输入为a,b,c,则C1为a,c2为空格,c3为b。以下按照4个字符,4个字符,2个字符输出。

2025-03-13 15:00:10 793

原创 C语言-运算符

先判断最后一个逗号z=x+y+z>0的真假,由于大于号的优先级大于等号,则x+y+z>0为真,则z=1,在判断x+=y==z,由于==的优先级大于+=,所以y的值为1,x+=y,所以x等于2,在判断y=x+2,则有y=4.所以最后的结果为,x=2,y=4,z=1.此处x++>70为表达式1,100为表达式2,0为表达式3,x++处于后执行,先判断 x是否大于70,此时x=70,则表达式1为假输出0.结果x等于71,y=0.有一个运算量为0结果为0,全为1结果为1。位逻辑或”|“:有1为1,全0为0.

2025-03-12 15:41:47 735

原创 C语言-变量

auto int k;int j;double x;上面代码并没有给a进行赋值,输出的值是0 ,是因为用的是Code :Blocks环境,在其他环境下就不一定是0.int main()if(1)auto int a;return 0;将代码编译后会报错,这是因为auto存储类型只能在if语句里进行运用,并不能应用于整个代码。但是定义的全局变量只可以在当前文件中使用,并不能应用于其他文件。其次只要程序没有结束,该存储类型变量不会重新说明,而且保留上一次的调用存储。

2025-03-06 21:05:48 378

原创 C语言-常量

其中 采用#define进行宏定义,如图使用宏定义标识符one为常量1,TWO为one+one,并进行如下计算,但按照人们的计算思路通常是:1+(1+1)*20+10=51,但是由于宏定义只是对和标识符的简单定义,所以要实现这个计算需要在定义的时候事先加上括号。

2025-03-05 16:07:17 402

原创 C语言数据类型分类,查询不同数据类型的字节长度

C语言的数据类型:chrar ,int ,short ,bool;

2025-03-04 16:19:54 343

原创 C语言-原码,反码,补码

对于正数其原码,反码,补码都是其本身: 对于负数其反码等于符号位不动,其余部分取反,补码等于反码加一。

2025-03-02 10:15:37 324

空空如也

空空如也

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

TA关注的人

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