自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 H264解析SPS获取宽高等信息

在做音视频开发的时候,存在不解码视频帧的前提下需要获取视频宽高、帧率等信息,而H.264中的SPS数据可为我们提供这些相关的信息。在此之前,我们需要对一些协议和算法有一定的初步了解,后文中有完整的代码展示。H.264协议我们在此不讲解H.264协议,但是我们需要了解NAL单元语法(NAL unit sy...

2020-05-18 20:40:20 1276 1

原创 海思码率控制器各参数说明

开始研究海思码率控制器各个参数对图像质量的影响,这里记录一下,各参数含义如下:#ifndef __HI_COMM_RC_H__#define __HI_COMM_RC_H__#include "hi_defines.h"#ifdef __cplusplus#if __cplusplusextern "C"{#endif#endif /* __cplusplus */typ...

2018-09-03 20:36:44 4113

转载 编解码学习笔记(基础)

 编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最近因为项目的关系,需要理清媒体的codec,比较搞的是,在豆丁网上看运营商的规范 标准,同一运营商同样的业务在不同文档中不同的要求,而且有些要求就我看来应当是历史的延续,...

2018-08-30 15:43:15 3352

原创 pthread_rwlock_wrlock与 pthread_rwlock_rdlock区别

当我们使用pthread_rwlock_rdlock()获取一次读锁时,__nr_readers字段就会加一,注意,就算是同一个线程,在已经获得读锁的情况下,再去获取读锁,__nr_readers字段仍然会加一的,当我们调用pthread_rwlock_unlock()一次时,__nr_readers就会减一,如果我们重复加了读锁,必须重复调用pthread_rwlock_unlock()来使__nr_readers减一,否则其他线程再想获取写锁时,是会阻塞的。具有强读者同步和强写者同步两种形式。

2023-08-29 15:49:15 191

原创 nux查看线程数量及优先级

另外,也可以使用cat /proc/[pid]/status来查看特定进程的线程数量和优先级,其中[pid]是进程的PID。这些命令将会列出当前系统中正在运行的所有进程及其创建的线程。linux查看线程数量及优先级。

2023-08-09 13:57:57 221

原创 C语言实现的滑动窗口求平均值

【代码】C语言实现的滑动窗口求平均值。

2022-09-26 17:33:25 1690 1

原创 移植ffmpeg到arm(ffmpeg x264 x265)

在编译服务器下直接一键执行如下脚本即可,之后将生产的so/bin等文件copy到设备端即可使用

2022-08-31 16:25:28 657

原创 静态库链接两个静态库不报错解决方法

https://blog.csdn.net/zxpoiu/article/details/115178193https://docs.oracle.com/cd/E37934_01/html/E37313/ld-1.html-whole-archive 可以把 在其后面出现的静态库包含的函数和变量输出到动态库,–no-whole-archive 则关掉这个特性。比如你要把 liba.a libb.a libc.a 输出到 libabc.dll(或libabc.so)时应该这么写:libabc.dll:l

2022-07-01 11:25:36 344

原创 FFmpeg 提取运动矢量表extract_mvs方法

FFmpeg提供了获取编码的运动矢量的方法。打开解码器的时候设置参数:av_dict_set(&opts, “flags2”, “+export_mvs”, 0)。使用av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS)来获取解码frame中的运动矢量。av_frame_get_side_data返回的数据类型为AVFrameSideData*,AVFrameSideData定义在libavutil/frame.h,如下所示。.

2021-09-02 19:11:15 989

原创 双线性插值推理及其应用

线性插值函数其实就是一次多项式的插值方式,其几何意义就是用来拟合两点之间的一些点的数值;具体意义可以查阅百度现在首先要理解线性插值的具体计算过程,对于单线性插值,求解其线性插值函数单线性插值函数如上图所示,就是最简单的一种线性插值函数,就是求两点之间的直线方程,与初中的直线方程函数一样,首先知道A(x0,y0),C(x_1,y_1)两点的坐标,然后设B点坐标为(x,y)(x,y);从而得出:上面得出的函数即为AC两点的线性插值函数,B点的值可由插值函数得出,其本质就是在x方向进行了一次线性插值。

2021-08-31 19:32:28 455

原创 利用--wrap重定向函数排查内存泄露

背景在使用GCC编译器时,如果不想工程使用系统的库函数,例如在自己的工程中可以根据选项来控制是否使用系统中提供的malloc/free函数,可以有两种方法:(1). 使用LD_PRELOAD环境变量:可以设置共享库的路径,并且该库将在任何其它库之前加载,即这个动态库中符号优先级是最高的。(2). 使用GCC的–wrap选项:对symbol使用包装函数(wrapper function),任何对symbol未定义的引用(undefined reference)会被解析成__wrap_symbol,而任何

2021-05-27 15:23:31 599

原创 C 语言回调函数详解及其示例

什么是回调函数回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君。感觉这个让人更容易想到的是异步操作,而不是回调。另外还有两句英文让我印象深刻:1) If you call me, I will call you back; 2) Don’t call me, I will call you.

2021-02-25 20:09:03 323

原创 strace开源库移植及其使用

什么是strace按照strace官网的描述, strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。strace底层使用内核的ptrace特性来实现其功能。在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能。strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。它像是一个侦探,通过系统调用的蛛丝马迹,告诉你异常的真相。移植strace开源库首先官网现在strace源码

2021-02-08 16:03:57 511

原创 Makefile中wildcard等关键字的使用

在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN…) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展开和上一小节匹配通配符的区别。一般我们可以使用“(wildcard∗.c)”来获取工作目录下的所有的.c文件列表。

2021-02-04 16:31:34 344

原创 调用ffmpeg从Mp4中分离出H264文件并且保存

调用ffmpeg从Mp4中分离出H264文件并且保存,ffmpeg的API调用如下:#include <stdio.h>#include "libavutil/log.h"#include "libavformat/avio.h"#include "libavformat/avformat.h"int main(int argc, char **argv){ AVFormatContext *ifmt_ctx = NULL, *ofmt_ctx = NULL

2021-01-31 15:21:53 309

原创 傅里叶变换一步一步推到

具体见链接https://blog.csdn.net/wd18508423052/article/details/100940771

2021-01-14 19:49:37 89

转载 深入浅出的讲解傅里叶变换

我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……这篇文章的核心思想就是:要让读者在不看任何数学公式的情况下理解傅里叶分析。傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成...

2021-01-14 19:44:10 293

原创 dlopen动态加载动态库

1、前言为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形式加载进来,这就是所谓的插件。linux提供了加载和处理动态链接库的系统调用,非常方便。本文先从使用上进行总结,涉及到基本的操作方法,关于动态链接库的本质及如何加载进来,需要进一步学习,后续继续补充。如何将程序设计为插件形式,挖掘出主题和业务之间的关系,需要进一步去学习。2、生产动态链接库编译参数 gcc -fPIC -shared例如将如下程序编译为动态链接库libcacu

2020-12-01 11:19:59 1354

原创 实现应用层的bancktrace函数

很多平台都会进行ulibc库的裁剪,以减小库的大小,但是在程序开发的过程中,难以避免出现段错误,这时候backtrace的功能就显现出来了,可以直接打印出相关的栈调用信息,很方便的解决问题。所以需要我们自己在应用层实现bancktrace函数,代码如下:extern void * __libc_stack_end;struct backtrace_frame_t{ void * fp; void * sp; void * lr; void * pc;};int

2020-11-26 15:57:31 184

原创 VAD检测原理及其过程

顾名思义,VAD(Voice Activity Detection)算法的作用是检测是否是人的语音,它的使用范围极广,降噪,语音识别等领域都需要有vad检测。vad检测有很多方法,这里我们之介绍一下webrtc里面的vad检测。  webrtc的vad检测原理是根据人声的频谱范围,把输入的频谱分成六个子带(80Hz250Hz,250Hz500Hz,500Hz1K,1K2K,2K3K,3K4K。) 分别计算这六个子带的、能量。然后使用高斯模型的概率密度函数做运算,得出一个对数似然比函数。对数似然.

2020-11-26 09:43:23 3651 2

原创 应用层打印PC指针LR指针解决段错误总结

标题1.需求的产生写程序难免会出现段错误的情况,这时候很想知道,到底在什么地方崩溃了,对于代码很少,或者你很有把握的时候,或许用二分法配合printf就可以搞定了;而对于非常复杂的代码,比如像Xserver这样的程序,可能就不太好定位了;(本文讨论的情况都是针对arm环境,并且gdb不方便使用的情况)2. 解决思路思路其实很简单,对于用户态段错误的原因,大约可以分为两种,a) 没有权限访问这个地址;b) 访问的地址没有映射,比如NULL地址;当出现这两种

2020-11-18 10:35:26 2415

转载 调试段错误工具集合(readelf nm gdb objdump)

目录 gdb 调试利器 更强大的工具cgdb 分析线程栈 lsof命令查看进程打开的资源 IPC资源管理 pstack跟踪栈空间  strace分析系统调用 nm列出目标文件的符号清单 objdump readelf size查看程序内存占用 file文件类型查询 strings查询二进制文件中的文本信息 fuser显示文件使用者 ldd 查看程序依赖库 gdb 调试利器...

2020-11-16 16:04:31 512

原创 Linux内存管理及其内存分布

1、LF文件在学习之前我们先看看ELF文件。ELF分为三种类型:.o 可重定位文件(relocalble file),可执行文件以及共享库(shared library),三种格式基本上从结构上是一样的,只是具体到每一个结构不同。下面我们就从整体上看看这3种格式从文件内容上存储的方式,spec上有张图是比较经典的:如上图:其实从文件存储的格式来说,上面的两种view实际上是一样的,Segment实际上就是由section组成的,将相应的一些section映射到一起就叫segment了,就是说seg

2020-11-01 22:18:06 262

转载 GDB调试相关命令解析

一、启动 1、gdb 2、调试在线进程 (1)启动gdb时链接目标进程(2)gdb中链接目标进程:(3)断开链接: 二、信息显示 1、栈信息2、变量3、寄存器4、内存5、源代码6、显示格式 三、断点 1、设置断点2、...

2020-10-31 22:13:22 1017

原创 解决arm启动过程中设置ulimit -c unlimited 不生效的方法

对于嵌入式Linux工程师来说,在工作中经常遇到段错误,而其中调试段错误的最好方式就是core_dump调试。core_dump调试要满足几个条件:1、ulimit -c unlimited,取消core file的大小限制;2、echo /proc/sys/kernel/core_pattern >mydir,设置生成core的目录;3、代码中取消singal相关的信号注册函数,但是很多段错误是发生在设备启动的过程中,所以这时候就需要在相关的脚本中设置在几个命令,由于环境变量的关系发现

2020-10-31 22:02:01 5566 2

原创 栈 堆 malloc深入研究

http://blog.coderhuo.tech/2017/10/12/Virtual_Memory_C_strings_proc/http://blog.coderhuo.tech/2017/10/15/Virtual_Memory_python_bytes/http://blog.coderhuo.tech/2017/10/16/Virtual_Memory_drawing_VM_diagram/http://blog.coderhuo.tech/2017/10/18/Virtual_Memor

2020-10-21 14:27:31 72

转载 编译选项中的硬浮点与软浮点区别

一、硬浮点与软浮点 1. 硬浮点 编译器将代码直接编译成硬件浮点协处理器(浮点运算单元FPU)能识别的指令,这些指令在执行的时候ARM核直接把它转给协处理器执行。FPU 通常有一套额外的寄存器来完成浮点参数传递和运算。使用实际的硬件浮点运算单元(FPU)会带来性能的提升 2. ...

2020-09-19 14:43:03 7871

原创 代码段 数据段 BSS段 程序段堆栈段的理解

其实在程序运行时,由于内存的管理方式是以页为单位的,而且程序使用的地址都是虚拟地址,当程序要使用内存时,操作系统再把虚拟地址映射到真实的物理内存的地址上。所以在程序中,以虚拟地址来看,数据或代码是一块块地存在于内存中的,通常我们称其为一个段。而且代码和数据是分开存放的,即不储存于同于一个段中,而且各种数据也是分开存放在不同的段中的。5个段进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途 不一而不尽相

2020-07-18 15:19:09 368

原创 图像旋转90度C语言实现

最近在看图片相关的,就是图片旋转90度的算法,写下来供记录,旋转90度分为左旋转和右旋转。左旋转代码如下://unsigned char *pImgData: 输入图像指针//int WidthIn, int HeightIn:输入图像宽、高//unsigned char *pImgOut: 旋转后图像指针void RotateOfLeft(unsigned char *pImgData...

2020-03-29 11:41:19 4109 1

原创 利用backtrace和backtrace_symbols函数打印调用栈信息

int backtrace(void **buffer,int size)该函数用与获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针数组。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈框架有一个返回地址。注意某些编译器的优化选...

2020-03-07 20:42:53 564

转载 多线程之间信号量

...

2020-01-16 09:39:26 279

转载 流媒体-----PS流

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

2019-09-21 09:35:33 1462

转载 Linux多线程——使用信号量同步线程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...

2019-08-24 15:01:12 174

转载 MP4封装格式简介

视频封装格式是指视频数据如何存储的,视频编码格式是指原始视频数据如何编码为二进制数据码流。编码后的视频数据最终通过视频封装格式存储为视频文件。本文对视频封装格式MP4做一些介绍...

2019-05-31 16:45:25 5828

原创 makefile编译不同文件夹下文件生成静态库

在不同的文件下:src文件夹中包含.c文件,lib文件夹中包含.h文件,obj文件夹中包含编译过程中生成的.o文件,bin文件夹中包含生成的目标文件和.a文件,代码结构如下:root:~/share/makefile$ tree ├── bin│ ├── libfun.a│ └── main├── include│ └── main.h├── Makefile├── o...

2019-05-09 09:39:07 1883

转载 gdb利用core调试段错误

core dump 一般是在segmentation fault(段错误)的情况下产生的文件,需要通过ulimit来设置才会得到的。 调试的话输入: gdb filename core   filename就是产生core文件的可执行文件,core就是产生的dump文件 查看栈信息————— 当程序被停住了,你需要做的第一件事就是查看程序是在哪里停住的。当你的程...

2019-01-14 09:58:09 491

原创 C语言判断点是否在不规则四边形内部

最近在做人脸设备区域屏蔽功能,说白了就是对人脸进行过滤;在四边形内的人脸不进行检测,其中涉及到一个算法,即判断点是否在四边形内部,网上查了下,最简单方便的便是向量积法,如下:先提供一种简单情景(假定四边形是一个凸四边形)的解决方法:原理:凸多边形内部的点都在凸多边形的边所在的向量的同一侧(前提是计算边所在的向量时采用的是同一个方向,同为顺时针或者同为逆时针),利用叉积求解。假设四边形四个顶...

2018-12-12 19:50:50 3559

转载 AAC 音频格式详解

http://www.it6655.com/2012/08/aac-adts-html1.ADTS是个啥ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。记得第一次做demux的时候,把AAC音频的ES流从FLV封装格式中抽出来送给硬件解码器时,不能播;保存到本地用pc的播放器播时,我靠也不能播。当时崩溃了,后来通过查找资料才知道。...

2018-11-12 19:40:45 7113

转载 Wireshark抓包工具使用以及数据包分析

多年之后,愿你有清风与烈酒,也有人是你的归途。打开Wireshark抓包工具开始抓包会看到如下展开内容: 这里我是对wlan进行抓包,192.168.2.112是我当前wifi的ip地址。点击某个包,可以查看具体内容,差不多刚好对于五层协议:Frame:物理层的数据帧概况。Eth...

2018-10-29 20:43:41 3413

原创 H264裸流分析

1 SPS和PPS从何处而来?2 SPS和PPS中的每个参数起什么作用?3 如何解析SDP中包含的H.264的SPS和PPS串?1、 客户端抓包在做客户端视频解码时,一般都会使用Wireshark抓包工具对接收的H264码流进行分析,如下所示:在这里我们可以看到对解码视频起关键作用的SPS和PPS。双击SPS内容如下:双击PPS内容如下:那么从上面的sps中我们知道图像的宽,...

2018-10-29 17:17:28 7645

aac转换为pcm

可以直接运行可执行程序,将AAC格式转化为PCM格式,基于faac库。

2018-07-26

TCP实现(client server)

TCP 的socket的实现,包括client.c和server.c两个文件

2018-05-20

Elecard StreamEye Tools

elecardstreameyetools,Elecard.Streameye.Tools,一个强大的视频序列或码流分析软件,YUV分析,264文件分析软件,H.264视频编解码学习必备的东西,Elecard StreamEye Suite是一套用于专业视频压缩领域的功能强大的工具 ,能够帮助用户进行有效的对于视频序列的深入分析。感觉STREAM EYE的界面更加亲民,而且他的视频窗口可缩放,比较好操作,但是功能上面还是不如VISA强大,不过初学的话也是可以接受了。编码视频的可视化表现,流结构分析,这些流可以是MPEG-1/2/4 or AVC/H.264 VES(视频基本流)、SS(MPEG1的系统流)、,PS(MPEG2的程序流)、TS(mpeg2的传输流)。

2018-05-19

stm32封装 底板

stm32的封装 自己画,需要的拿走,不谢

2015-09-01

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

TA关注的人

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