- 博客(647)
- 资源 (43)
- 收藏
- 关注
原创 c++实现的一个定时器实例
小结: 所谓的定时器, 当时间到时执行某一个任务,是通过启动一个线程来实现的,等待时是timer线程在等待,执行时是timer线程在执行.调用线程和执行线程是不同的线程
2023-09-23 12:05:47
82
原创 C++11 Lambda函数 入门
小结: lambda 函数存在的意义: lambda 函数可以直接访问父作用域变量(以值方式传递或以引用方式传递) [=]以值传递的方式捕获父作用域变量, 父作用域变量是不能直接修改的 加mutable 修饰符,就可以在函数体里修改, 但退出后值不变 [&]以引用方式捕获父作用域变量,就可以直接修改父作用域变量 于是乎, 当你在写一个函数时,如果你愿意,就可以随便再定义一个lambda函数, 它可以操控该函数的变量. 使得书写函数更灵活了!
2023-09-22 19:50:36
62
原创 avformat_find_stream_info 为什么总是等到超时或超过大小才退出?
avformat_find_stream_info 为什么不能正常退出了?对于 ts 流文件,如果你设置了scan_all_pmts 选项, 则主动退出条件将不会满足,因为它的ctx_flags一直是1而不能清0. 所以find_stream_info 不会主动退出. 只能等超时或超过指定大小才退出了。
2023-09-21 11:11:36
38
原创 emacs从缓冲中获取信息,并执行shell 命令
我现在想把光标放到某一行,然后敲一个按键就能播出该udp码流,如何实现?当然,这需要两步走,第一步: 获取所在行的url信息第二步: 调用ffplay 命令,例如当放在第一行时,它应该调用 ffplay udp://239.3.1.105:8092
2023-09-20 12:21:58
120
原创 linux 下用posix semaphore 解决资源竞争问题实例
让10个线程竞争5个资源,用semaphore 来实现1. sem_init(信号量,num) 初始化资源数2. 每个线程要 sem_wait(信号量) 申请资源,申请不到会等待3. 用完要sem_post(信号量), 归还资源
2023-09-20 09:54:59
161
原创 linux 应用中offsetof ()是个啥?
//总结: linux 应用中 offsetof 是在stddef.h 中定义的一个宏//#define offsetof(TYPE, MEMBER) __builtin_offsetof (TYPE, MEMBER)
2023-09-13 13:43:21
130
原创 configure 文件 check_cxxflags() 函数的注释
#测试gcc 带CXXFLAGS的命令 # test_cmd 是函数名称 # $cxx 是命令, 此为gcc # $CPPFLAGS $CFLAGS $CXXFLAGS 初始都为空 # "$@"是传来的额外flags, 例如 -std=c++11 # $CXX_C 为 "-c", 只编译,不连接 # $TMPO 为例如: TMPO=/tmp/ffconf.ZI0lwmVZ/test.o # $TMPCPP为例如: TMPCPP=/tmp/ffconf.ZI0lwmVZ/test.cpp
2023-08-28 16:54:45
51
原创 configure 文件 test_exec() 函数的注释
j# 执行test_exec ,这里重定向命令行输入为EOF 之间的内容# 实际上这里输入的内容被保存为TMPC, 然后执行了$ld 命令,再查看其输出# linux 下 测试结果应返回0 (true)
2023-08-28 14:24:47
60
原创 linux log 日志
两种方法:1. 自己用cat, vim 等查看各分离的log 文件, 这些是ascii 文件2. 用journalctl 统一管理各个log(它查看的是/var/log/journal/目录下的文件,这是二进制文件,只能用工具看.
2023-08-08 17:41:16
404
原创 configure 文件中测试Makefile 是否支持嵌套变量的代码注释
# configure 文件中测试Makefile 是否支持嵌套变量的代码注释.# 下面代码是从configure 脚本中择出的一小段代码,供研究用,有详细注释# 向控制台输出了一段 Makefile, 然后用 make 去执行,成功则设变量为yes# Makefile 的意思是执行$(TRUE), 其展开过程为V=1 则 $(V)=1 则内层为BAR1# 由于BAR1=true, 所以${BAR1}=true, 所以 TRUE=true; 所以 $(TRUE)为true, true 就是命令tr
2023-08-07 17:54:53
72
原创 从c++的角度来看ffmpeg 的架构
1. AVClass 类就是一个普通的类. 基本的类.2. ffmpeg 中包含了很多context类, 它们共同继承于baseContext类.3. ffmpeg 中有很多对象: 这些对象都是常对象,存在于全局变量中
2023-08-01 11:35:20
447
原创 ffmpeg 的帮助系统
$ffprobe -h 1996行输出$ffmpeg -h 111行输出$ffplay -h 8492行输出在 /home/hjj/FFmpeg-n4.4/fftools/cmdutils.c 下调用 show_help_default() 函数, 根据执行文件的不同,它可能会连接到ffprobe.c 或 ffmpeg.c 或 ffplay.c , 而这三个执行文件中各有各的实现. 这属于不同的执行文件,没什么好说的.它们各自调用的函数,主要还是show_help_options(), show
2023-07-31 14:51:22
675
原创 c语言重定向stdout 到 /dev/null 及恢复
/ 重定向stdout 到 /dev/null, 则以后打印将不可见。//STDOUT_FILENO = 1, 虽可打开, 但不能恢复打印。//把保存的fd 恢复到1上, 恢复标准输出文件描述符, 返回值的newfd 是1。// 清空fp 内容,否则恢复时"world"会打印到屏幕上。
2023-07-27 17:54:29
325
原创 ffmpeg 中 av_log 是怎样工作的?
av_log 功能其实只是添加了颜色,LOG级别,及log上下文名称,没有添加时间,函数名称,行号等信息.
2023-07-27 15:05:32
504
原创 linux 下输出彩色字符串
地球人都都知道, \e是转移,其值8进制是\033,十进制是27,16进制是1B。\033[1m 设置高亮度。\033[30m----\33[37m 设置前景色。\033[40m----\33[47m 设置背景色。\033[0m 关闭所有属性。中间[和m之间的数值为属性,其意义主要就是上面介绍的.4ym 设置,x,y取值为0-7。//红字绿底,hello world。
2023-07-27 11:40:34
210
原创 linux 下va_start,va_end,va_arg,va_list这些宏到底是什么?
// va_start,va_arg,va_end,及 va_list 都是__builtin_ 内置变量// 都依赖于编译器的实现, 成了黑箱操作了.//// 在简易内核linux0.11 上 , va_*操作并不是黑箱操作,而是显示定义的.如下:// va_list args: va_list被定义成char *, 即args 为一个char *// va_start(args,para)初始化 args 为第一个参数地址+1. 下一个参数地址// va_arg(args,type),
2023-07-27 11:01:02
194
原创 h264 decode_nal_units() 测试代码
/AVClass, H264Context, 通过那个描述对象,就可以对H264Context 对象赋值。// 为class 赋值,codec->priv_class是描述类对象,真是精巧!//因为h指针会访问AVCodecContext,例如访问其flags,codec等 , 所以要分配内存,给h->avctx。//同时avctx->codec 也需要赋值,其内部会使用到,这跟测试数据有关,我这里直接赋值了。//这个函数默认被链接成局部的,要放开成全局函数,方法,修改链接选项。
2023-07-20 16:51:39
56
原创 ff_h2645_packet_split 代码注释
包含多个数据结构的复杂结构及各对象相互交互的典型代码目的: 对于buf中存储原始数据流,长度为len, 分割,分析出各个包到NAL(网络抽象层),但这里的目标用pkt来管理.有感于它解析数据时采用了NAL数组,nal单元的数据指针指向rbsp,用一个pkt变量把它们管理起来,这样实现分割数据的过程.
2023-07-20 16:46:44
73
原创 ffmpeg av_parser_parse2函数分析各种码流测试程序
我需要一个简单的程序,实现能跟入ffmpeg 库.了解av_parser_parse2的工作原理.关于测流码流的获取,通常我们见到的是音视频在一起的ts流文件,你可以用ffmpeg 工具提取.av_parser_parse2 代码分析:其实整了半天,发现写这么多代码,只是把原数据进行了分割,每次读一个片段到packet中而已!简单的说,你如果知道包的长度,喀喀!,从大缓冲中copy到packet中指定长度就可以了.
2023-07-14 16:27:24
1190
原创 ffmpeg 0阶哥伦布算法的详细注释及简单测试程序
在FFmpeg中采用了查表和计算相结合的方法来解码. 为的是加快速度对码长不超过9比特的码字制作了ff_golomb_vlc_len和ff_ue_golomb_vlc_code直接获取码长和码值,对码长超过9bits的码字要计算得到码值,看后面代码.
2023-07-14 15:22:35
1133
原创 ffmpeg anull 是个啥?
/给了pads 指针,又给了idx,当然可以返回name, 这个指针对anull而言必然是文件中定义的地址.首先获取filter , 过程是枚举,这里忽略.拿到了AVFilter 对象的指针ff_af_anull, 在文件中定义的全局对象。anull 对象是一个全局对象,它的地址是通过avfilter_get_by_name()找到的.由于参数是filter=anull, 从=号处分割,前为"filter", 后为"anull"所以调用: show_help_filter("anull")
2023-07-13 18:01:54
1119
原创 tcpdump 使用入门
你看,那个主机.6.106正在往外发udp 组播流呢(234.1.1.234.8005). 就是我要的.$sudo tcpdump -D 查看接口号和接口名称(--list-interfaces)协议[x:y]=z 其中x,y为十进制数字,x是协议偏移量,y是截取的字节数。关键词 (host)主机, (port)端口, (portrange)端口范围;协议icmp,arp,tcp ,sctp,udp,ether,vlan之类;可以使用关系符如(not)非,(and)与,(or)k或。
2023-07-13 17:23:16
524
原创 Pacman 包管理器
pacman -Sy;pacman -Su;MSYS2 是MSYS的一个升级版,集成了pacman和Mingw-w64。pacman -Qg;pacman 第一级命令如上, 重要的是-S, -R, -Q 命令。当然,你需要先安装man.db, pacman -S man.db。pacman -Q;pacman -S;pacman -R;
2023-07-13 17:09:36
176
原创 H.264格式 入门
00 00 01 65 88 84 00 18 FF FE F7 C9 EF C0 A6 DA // 65,这是IDR frame, frame slice0(重要性11), 数据太大,几千行,我只能用省略号了!20 00 00 03 00 20 00 00 06 41 E3 06 32 C0 00 //67 序列参数集(重要), 直到下一个00 00 01 的均是它的数据,< 当前H.264的编码配置, baseline(66) | main(77) | extended(88)
2023-07-13 16:58:51
103
原创 ffmpeg get_bits() 函数是如何工作的.
GetBitContext 是如下定义的, 没有什么特别之处,指明了数据指针buffer,size_in_bits.是如何从Ctx 中获取所需的数据位的,下面是测试程序,调试可完全搞懂.//my_get_bits函数是get_bits.h 中get_bits函数的翻版, 把宏去掉方便看清本来面目//改名字不与头文件中的名字冲突//调试知get_bits() 原来是把左边的位去掉,把右边的位去掉,保留了所指定的 n bit位
2023-07-13 16:48:11
1172
原创 说清楚 std::cout<<std::hex<<std::endl 到底是什么意思
在 "/usr/include/c++/9/bits/ios_base.h" 872行, 定义了hex 为一个函数,其参数是ios_base。# 在 "/usr/include/c++/9/iostream" 第107行, 定义了 ostream操作符
2023-07-12 17:34:25
170
原创 C++重载 抽取运算符 <<
/ cout 就是一个ostream 类的对象。//添加命名空间,否则会找不到ostream。return out;//返回ostream 对象则可以支持连续调用。//重载了ostream 操作符
2023-07-12 13:06:26
215
原创 ffmpeg ts section 表及pes表解释
pes = add_pes_stream(ts, pid, pcr_pid) 其中会打开Pes 过滤器 mpegts_open_pes_filter(ts, pid, mpegts_push_data, pes);根据pmt_pid,可以创作一个Pmt filter, mpegts_open_section_filter(ts, pmt_pid, pmt_cb, ts, 1);其中ts 是上下文,pid是基础流id, mpegts_push_data 是回调函数,pes是回调函数的参数。
2023-07-10 15:55:56
704
原创 qsort 使用举例
/第1参数:数组地址, 第2参数:数组个数,第3参数:数组元素大小,第4参数:比较函数。int cmp(const void *a,const void *b) //比较函数只能是这样的声明.//cmp决定顺序, 返回0(第一项在后)
2023-07-09 15:51:37
104
原创 理解 ffmpeg avio 操作
ff_file_protocol 是一个全局的URLProtocal 对象,在libavformat/file.c 中定义. 这个对象主要包含着一堆函数地址, 这个对象地址有可能会付给URLContext 中的协议对象指针.想知道AVIOContext , 想知道AVIO 的操作, 例如avio_open, avio_size,avio_read,avio_tell,函数指针是需要初始化的, 查代码,它们付给了固定的ffurl_read,ffurl_wirte,ffurl_seek。
2023-07-06 19:15:39
822
原创 errno 5追踪.
再打开文件,看到了35到133的错误号定义,它包含了一个文件 #include -> /usr/include/asm-generic/errno-base.h。打开,我们看到了错误号125 - 133的定义, 还有一个包含文件 -> /usr/include/linux/errno.h。-5, 这种小号的错误值是ffmpeg 把系统错误号取反形成的,
2023-06-29 14:36:39
108
原创 清理内存缓存
缓存即内存,可用free命令查看甲. 清理swap 缓存, 配合free 命令查看乙. 清理页缓存、目录项和inode缓存丙. 刷新缓存到磁盘
2023-06-26 15:16:03
805
原创 linux 下时间转换(c接口)
以上架构的时间精度是基于秒的, 但是如果想提高精度, 例如提高到ms 怎么办? 我这里做音视频开发,每帧播放时间一般是40ms, 秒值太大了, 需要提高到ms级别. 方法1: 利用现有架构, 在其上追加毫秒. 我相信这是比较容易走通的. 方法2: 修改当前架构, 使其支持毫秒精度,这个方法难度更大,改动更深刻,理解更彻底!我这里采用方法2, 字符串+双箭头+struct tm_ms+双箭头+time_t_ms
2023-06-08 09:52:17
635
原创 iwyu: include what you use 工具的用法
如果编译不包含 /usr/lib/gcc/x86_64-linux-gnu/9/include/ 路径, g++编译没有问题,但iwyu 会报 'stddef.h' file not found这说明 g++ 的搜索的路径比 iwyu 搜索的路径多.我用strace 跟踪了一下, 发现g++ 从/usr/lib/gcc/x86_64-linux-gnu/9/include/下找到了stddef.h所以我明确指定了这个包含路径, 则iwyu 也能找到stddef.h了
2023-06-07 09:10:49
443
原创 怎样同时让两个网段工作(经常切换外网出口)
route 属于net-tools 工具包中的工具../myroute.sh 1 时由1网段上网./myroute.sh 6 时由6网段上网# 调整默认网关# 添加访问gitserver网站的路由# 添加访问广播的路由# 显示路由表
2023-03-16 09:24:22
363
1
原创 bash 变量加双引号与不加双引号效果大不相同!
temp_var=$(route -n)temp_var 变量加""是这样的, "$temp_var"可认为是原样输出temp_var 变量不加""是这样的, $temp_var可认为是把原输出的空白字符都用空格代替了.
2023-03-13 09:57:19
256
原创 emacs:在多项目中使用desktop.el
;;我希望不同的项目,在其根目录下存一个.emacs.desktop 文件,;;从该目录启动emacs, 它自动加载以前保存的工作环境.;;通过阅读代码及文档,找到了正确的使用方法!
2023-03-12 11:46:11
198
tr_research.tar.gz
2020-08-14
vim73-gdb 工具
2015-02-07
linux 64位只读文件系统 romfs64
2013-11-07
.net 中间语言 IL 指令集
2010-10-29
将视频存储为一张张jpg 图片源码
2022-06-11
linux 命名管道创建及使用demo程序
2022-06-02
监视程序的内存使用(linux c 源代码)
2022-05-04
Qt5 信号与槽研究,线程研究
2022-03-12
OpenSSH for windows (64bits)
2020-11-09
buttonTable.zip
2020-07-23
the-23-gang-of-four-design-patterns-with-cplusplus.tar.gz
2020-03-08
LFS-BOOK-CN.html
2019-12-29
stl-views.gdb
2016-01-23
gcc 函数调用探测功能
2015-09-10
gdbinit-gdb 功能扩展插件
2015-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人