自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 资源 (9)

原创 音频基础知识详解

参考自:https://www.jianshu.com/p/86e1b1017564    https://blog.csdn.net/qq_25333681/article/details/906829891、引言现实生活中,我们听到的声音都是时间连续的,我们称为这种信号叫模拟信号。模拟信号需要进行数字化以后才能在计算机中使用。目前我们在计算机上进行音频播放都需要依赖于音频文件。音频文件的生成过程是将声音信息采样、量化和编码产生的数字信号的过程,人耳所能听到的声音,最低的频率是从20Hz起一直到最

2020-10-20 10:55:11 50

原创 mmap函数实现

1、认真分析mmap:是什么 为什么 怎么用:https://www.cnblogs.com/huxiao-tee/p/4660352.html2、Mmap系列一: Mmap的实现原理和应用(及与read/fread的比较):https://blog.csdn.net/don_chiang709/article/details/893322953、mmap 函数:原理与使用(含代码):https://www.jianshu.com/p/187eada7b9004、linux中mmap系统调用原理

2020-10-16 17:32:19 7

原创 编译报错: error: expected ‘=‘, ‘,‘, ‘;‘, ‘asm‘ or ‘__attribute__‘ before *‘ token

今天在melis SDK中添加了VE驱动的适配层代码,在编译的过程中报以下错误:In file included from ./emodules/mod_cedar/toolkit/toolkit.h:29, from ./emodules/mod_cedar/drivers/drv_video/vdrv_common_cfg.h:23, from emodules/mod_cedar/drivers/drv_video/libcedar

2020-09-25 10:29:49 27

转载 RTThread IO设备和驱动学习

参考自:https://www.jianshu.com/p/d84fab908c571、IO设备模型框架一共分三层:设备管理层实现了对设备驱动程序的封装。应用程序通过 I/O 设备层提供的标准接口访问底层设备,设备驱动程序的升级、更替不会对上层应用产生影响。这种方式使得设备的硬件操作相关的代码能够独立于应用程序而存在,双方只需关注各自的功能实现,从而降低了代码的耦合性、复杂性,提高了系统的可靠性。设备驱动框架层对同类硬件设备驱动的抽象,将不同厂家的同类硬件设备驱动中相同的部分抽取出

2020-09-01 18:55:33 114

原创 melis cedar模块的链接脚本

/* * ===================================================================================== * * Filename: linker.lds * * Description: linker script file, This file describes the memory layout (memory * blocks) as virtual me

2020-08-31 16:28:57 32

转载 利用__attribute__((section()))构建初始化函数表与Linux内核init的实现

本文详细讲解了利用 __attribute__((section())) 构建初始化函数表,以及Linux内核各级初始化的原理。1. 问题导入传统的应用编写时,每添加一个模块,都需要在main中添加新模块的初始化。使用__attribute__((section()))构建初始化函数表后,由模块告知main:“我要初始化“,添加新模块再也不需要在main代码中显式调用模块初始化接口。以此实现main与模块之间的隔离,main不再关心有什么模块,模块的删减也不需要修改main。那么,如何实现这个

2020-08-11 16:49:34 94

原创 linux交叉编译的库在链接时提示:xxx uses VFP register arguments xxx does not

参考自:https://blog.csdn.net/jimaofu0494/article/details/102496715    https://blog.csdn.net/gujintong1110/article/details/23038217很多时候我们要处理的数据,不仅仅是整数和字符串,还有浮点数即小数。在多媒体数据处理方面表现的更多。是不是所有的CPU都支持,浮点运算呢?答案:不是。今天我在链接一个音频库时,就发现了以下问题:1、问题描述在库文件链接阶段报以下错误:2、原因该

2020-07-22 20:20:48 710 1

原创 melis链接库报错:undefined reference to ‘_close‘, ‘_fstat‘, ‘_isatty‘, ‘_lseek‘, ‘_read‘等

在melis sdk中链接库时,有时会报以下错误:此时是由于,在库文件的函数里调用了一些系统函数,但是这些系统函数无法找到对应的C库所致,例如 printf()、assert()、open()、close()、read()、write() 等。将这些函数修改为所用C库中对应的函数即可。...

2020-07-21 17:51:39 104

转载 Gstreamer学习笔记(8):Gobject类对象

文章目录1、Gobject类定义2、向Gobject系统注册类3、类的构造函数4、父子类的继承关系5、类的析构函数6、类的其他设置1、Gobject类定义Gstreamer框架是基于插件的,同时插件是可以动态的注册、创建,gstreamer基于Gobject开发,下面来了解一下gstreamer是如何通过Gobject完成自定义类的注册。在每个类的c文件中,都会有以下这样的一个宏定义:/* class initialization */#define DEBUG_INIT \ GST_DEB

2020-07-03 18:54:47 126

原创 /usr/bin/ld: skipping incompatible解决方案

今天在做项目的时候,用make命令后出现了/usr/bin/ld: skipping incompatible…问题。分析:编译器给出的错误信息已经很清楚了:兼容性问题,即产生了不兼容性且找不到libgstaudio-1.0.so共享库,可是libgstaudio-1.0.so在指定的路径下明明是存在的呢。错误原因排查:经过排查发现,我链接的共享库是在arm环境下编译产生的,而主程序却是在...

2020-04-16 13:42:25 571

转载 C语言:volatile关键字的作用

一、前言1、编译器优化介绍由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内...

2020-03-28 18:04:14 116

转载 C语言:static关键字的作用

static用法:在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。1、定义全局静态变量在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。a. 在全局区分配内存。b. 如果没有初始化,其默认值为0。c. 该变量在本文件内从定义开始到文件结束可见。2、定义局部静态变量在局部变量前面加上关键字static,其特点如下...

2020-03-28 16:37:23 76

转载 Linux命令(一): ln - 创建和删除软、硬链接

Linux ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。语法: ln [参数][源文件或目录][目标文件或目录]其中参数的格式为其中参数的...

2020-03-28 16:12:02 149

转载 Git学习(四):git clean的用法

git clean 命令用来从你的工作目录中删除所有没有tracked过的文件。git clean 经常和 git reset --hard 一起结合使用。记住reset只影响被track过的文件,所以需要clean来删除没有track过的文件。结合使用这两个命令能让你的工作目录完全回到一个指定的<commit>的状态。用法:git clean -n是一次clean的演习, 告...

2020-03-28 15:46:14 98

转载 详解shell中source、sh、bash、./执行脚本的区别

1、source命令用法:source FileName作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"注:该命令通常用命令“.”来替代。如:source .bash_profile. .bash_profile两者等效。source(或点) 命令通常用于重新执行刚修改的初始化文档。source命令 (从 C Shell 而来)...

2020-03-28 15:35:40 353 1

原创 WAV系列之二:ADPCM编解码原理及代码实现

1、PCMPCM (Pulse Code Modulation),脉冲编码调制。PCM是把声音从模拟信号转化为数字信号的技术,把一个时间连续取值连续的模拟信号变换成时间离散取值离散的数字信号,模拟信号转化为数字信号需要三个步骤:采样、量化、编码。1.1、采样采样用一个固定的频率对模拟信号进行提取样值。常用采样率为8KHz,16kHz,22.05kHz,32kHz,44.1kHz,48kH...

2020-03-09 17:41:47 1224

原创 WAV系列之一:G711编解码原理及代码实现

参考自:https://blog.csdn.net/u012323667/article/details/79214336    https://blog.csdn.net/szfhy/article/details/52448906G711也称为PCM(脉冲编码调制),是国际电信联盟制定出来的一套语音压缩标准,主要用于电话。G711编码的声音清晰度好,语音自然度高,但压缩效率低,数据量大常在...

2020-03-06 19:10:31 493

原创 网页大全

http://www.verysource.com/ 各种源码大全

2020-03-04 14:36:23 45

转载 Git学习(三):Git 撤销commit文件 和 回退push的文件

第一种情况 : 撤销commit文件我们先查看一下log日志:两种查看方法:git log 显示从近到远的日志记录,按向下键来查看更多,按 Q 键退出查看日志git log --pretty=oneline 简洁显示日志记录当然还有更多查看 log 的方法,就不展示了,自行百度吧.前五次提交是已经 push 到远程仓库的,第六次是 commit 的,然后我突然不想 commit ...

2020-02-25 16:45:22 234

转载 C语言:inline,static inline

inline函数被调用时,需要出栈入栈。当函数频繁被调用时,则不断地有函数出栈入栈,会造成栈空间或栈内存的大量消耗。所以引入了inline。inline: 在函数声明或定义中函数返回类型前加上关键字inline,即可以把函数指定为内联函数。内联函数: 建议编译器对一些特殊函数进行内联扩展(有时称作在线扩展)。也就是说建议编译器将指定的函数体插入并取代每一处调用该函数的地方(上下文),从而节省...

2020-02-19 11:59:44 131

转载 C语言:命令行选项解析函数---getopt()和getopt_long()

上午在看源码项目 webbench 时,刚开始就被一个似乎挺陌生函数 getopt_long() 给卡住了,说实话这函数没怎么见过,自然不知道这哥们是干什么的。于是乎百度了一番,原来是处理命令行选项参数的,的确,正规点的大型程序一般第一步就是处理命令行参数的,接着才是主干程序。在百度和 man 的帮助下,找到了具体使用方法和解释,二话不说赶紧学习一下,并总结出文档记录一下。平时在写程序时常常需要...

2019-12-19 16:20:51 65

转载 C语言:断言assert函数完全攻略

对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查。 在 C 语言中,断言被定义为宏的形式(assert(expression)),而不是函数,其原型定义在 <assert.h> 文件中。其中,assert 将通过检查表达式 expression 的值来决定是否需要终止执行程序。也就是说,如果表达式 expression 的值为假(即...

2019-12-19 14:11:51 89

转载 C语言:二级指针(指向指针的指针)详解

摘自:《C语言入门》 http://c.biancheng.net/c/指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char * 等。如果一个指针指向的是另外一个指针,我们就称它为二级指针,或者指向指针的指针。假设有一个 int 类型的变量 a,p1是指向 a 的指针变量,p2 又是指向 p1 的...

2019-12-17 16:35:15 59

转载 C语言:堆和栈的区别是什么?

首先,讨论的堆和栈指的是内存中的“堆区”和“栈区”,OC语言是C语言的超集,所以先了解C语言的内存模型的内存管理会有很大的帮助。C语言的内存模型分为5个区:栈区、堆区、静态区、常量区、代码区。每个区存储的内容如下:1、栈区: 存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内...

2019-12-17 16:22:58 39

转载 vim字符串替换

vi/vim 中可以使用 :s 命令来替换字符串。以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询。替换:s/vivian/sky/ 替换当前行第一个 vivian 为 sky:s/vivian/sky/g 替换当前行所有 vivian 为 sky:n,$s/vivian/sky/ 替换第 n 行开始...

2019-12-17 16:17:14 28

原创 vim+ctags+cscope+Taglist+NERDTree打造成SourceInsight

参考:Vim神器 | vim+ctags+cscope+Taglist+Nerdtree打造成sourceinsight   vim+ctags+cscope+taglist+nerdtree   将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相)文章目录0. 环境描述1. 安装...

2019-12-17 15:51:47 382

原创 Git学习(二):git-rev-parse命令初识

git rev-parse --git-dir //显示版本库.git命令所在的位置执行命令 git rev-parse --git-dirgit rev-parse --show-toplevel //显示工作区根目录执行命令 git rev-parse --show-toplevelgit rev-parse --show-prefix //显示相...

2019-12-16 19:11:00 404

转载 编译和链接的过程

参考:https://www.cnblogs.com/linhaostudy/p/8808967.html程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。对于上边用到的几个选项需要说明一下。使用 gcc 命令不跟任何的选项的话,会默认执行预处理、编译、汇编、链接这整个过程,如果程序没有错,就会得到一个可执行文件,默认为a.out...

2019-12-16 16:56:17 62

转载 Linux 2.6内核Makefile浅析

1. 概述Makefile由五个部分组成:Makefile:根目录Makefile,它读取.config文件,并负责创建vmlinux(内核镜像)和modules(模块文件)。.config:内核配置文件(一般由make menuconfig生成)。arch/$(ARCH)/Makefile:目标处理器的Makefile。scripts/Makefile.*:所有kbuild Make...

2019-12-16 15:31:28 37

原创 RT-thread相关

RT-thread文档官网:https://www.rt-thread.org/document/site/programming-manual/basic/basic/RT-thread论坛:https://www.rt-thread.org/qa/forum.phpRT-thread github:https://github.com/RT-Threadopenedv论坛:htt...

2019-12-11 20:08:22 33

转载 Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)

1. ASoC的由来ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性:Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Linux中有分别针对4个...

2019-12-03 10:01:24 41

转载 Linux ALSA声卡驱动之四:Control设备的创建

1. Control接口Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频codec芯片中的多路开关,滑动控件等。对于 Mixer (混音)来说,Control接口显得尤为重要,从ALSA 0.9.x版本开始,所有的mixer工作都是通过control接口的API来实现的。ALSA已经为AC97定义了完整的控制接口模型,如果你的Codec芯片只支持AC97接口,你...

2019-12-02 19:10:08 50

转载 Linux ALSA声卡驱动之三:PCM设备的创建

1. PCM是什么PCM是英文Pulse-code modulation的缩写,中文译名是脉冲编码调制。我们知道在现实生活中,人耳听到的声音是模拟信号,PCM就是要把声音从模拟转换成数字信号的一种技术,他的原理简单地说就是利用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲,把这些脉冲的幅值按一定的精度进行量化,这些量化后的数值被连续地输出、传输、处理或记录到...

2019-12-02 16:54:58 87

转载 Linux ALSA声卡驱动之二:声卡的创建

1. struct snd_card1.1. snd_card是什么snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作通常就是创建一个snd_card结构体。正因为如此,本节中,我们也从 struct cnd_card开始吧。1.2. snd_card的定义s...

2019-12-02 15:18:38 67

转载 Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET)

转载自:https://blog.csdn.net/cstarbl/article/details/7645298在Linux中,内核利用文件描述符(File Descriptor)即文件句柄,来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。宏FD_ZERO、FD_SET、FD_CLR、FD_ISSET中“FD...

2019-11-29 19:57:38 292

转载 C语言:线程同步之信号量(sem_init,sem_post,sem_wait)

一、什么是信号量线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。如果一个程序中有多个线程试图改变一个信号量的值,系统将保证所有的操作都将依次进行。而只有0和1两种取值的信号量叫做二进制信号量,在这里将重点介绍。而信号量一般常用于保护一段代码,使其每次只被一个执行线程运行。我们可以使用二进制信号量来完成这个工作。二、...

2019-11-29 19:10:42 84

转载 C语言:堆栈溢出一般是由什么原因导致的?

1、函数调用层次太深。函数递归调用时,系统要在栈中不断保存函数调用时的现场和产生的变量,如果递归调用太深,就会造成栈溢出,这时递归无法返回。再有,当函数调用层次过深时也可能导致栈无法容纳这些调用的返回地址而造成栈溢出。2、动态申请空间使用之后没有释放。由于C语言中没有垃圾资源自动回收机制,因此,需要程序主动释放已经不再使用的动态地址空间。申请的动态空间使用的是堆空间,动态空间使用不会造成堆溢...

2019-11-29 18:48:05 219

转载 alsa 音频库的移植

alsa 是在LINUX出现比较晚的音频处理库,主要是针对原有的OSS的库进行改进,性能更好,支持多个播放源等。但相应的,增加的编程的复杂性。旧的oss是采用标准文件IO接口,设备打开采用open,声音播录是采用数据IO接口 (read/write),设备的参数采用ioctl来控制,都是系统调用因此无需额外库和配置文件来操作设备。但alsa也是最终采用open/read/write/ioctl,...

2019-11-29 18:33:12 84

转载 在Linux中安装ALSA声卡驱动

1.下载驱动:  你可以到这里下载ALSA的驱动:  你需要下载以下几个包:alsa-driver-1.0.10.tar.bz2alsa-lib-1.0.10.tar.bz2alsa-utils-1.0.10.tar.bz2  2.分别解压:  #tar jxvf alsa-driver-1.0.10.tar.bz2#tar jxvf alsa-lib-1.0.10.tar...

2019-11-29 17:28:44 140

原创 Linux ALSA声卡驱动之一:ALSA架构简介

1、概述ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa...

2019-11-01 16:37:43 782 1

G711_G721_G723.7z

在电话技术中,有两个主要的算法标准,分别定义在 mu-law 算法(美国使用)和 a-law 算法(欧洲及世界其他国家使用)中。两者都是基于对数关系的,但对于计算机的处理来说,后者更为简单。

2020-03-06

.vimrc配置文件

介绍Vim配置文件.vimrc,配置Vim显示行号、支持utf8中文不乱码、突出显示Vim当前行,设置高亮显示括号匹配和tab缩进,解决Vim粘贴时多出缩进和空格问题。

2019-12-17

视频编解码学习之五:差错控制及传输 - Mr.Rico - 博客园.pdf

介绍了差错控制目的、差错控制技术、纠错、重传、前向纠错码等知识

2019-09-03

视频编解码学习之四:视频处理及编码标准 - Mr.Rico - 博客园.pdf

介绍了视频处理、预处理、去隔行的方法、MPEG去隔行处理、空间缩放、超分辨率等知识

2019-09-03

视频编解码学习之三:变换,量化与熵编码 - Mr.Rico - 博客园.pdf

介绍了变换编码、变换类型、KL变换、离散傅立叶变换、离散余弦变换、快速DCT变换、H.264的4x4整数变换等知识

2019-09-03

视频编解码学习之二:编解码框架 - Mr.Rico - 博客园.pdf

介绍了码流结构、帧类型、条带、宏块、预测编码、运动估计、变化编码、量化等知识

2019-09-03

视频编解码学习之一:理论基础 - Mr.Rico - 博客园.pdf

①为什么要进行视频压缩? ②为什么可以压缩? ③数据压缩分类 ④编解码器 ⑤压缩系统的组成 ⑥编解码器实现 等等

2019-09-03

mp4文件格式详解.7z

mp4文件格式详解,介绍了各个box的含义,以及如何解析出所需要的媒体信息

2019-07-24

ISO base media file format.pdf

Information technology — Coding of audio-visual objects — Part 12: ISO base media file format

2019-07-24

空空如也

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