自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(801)
  • 资源 (43)
  • 收藏
  • 关注

原创 ffmpeg 中 allocate_array_elem 函数的使用及代码技巧

文章摘要: 本文详细解析了FFmpeg中allocate_array_elem函数的使用与实现原理。该函数用于动态分配数组元素,通过三级指针实现内存管理,具有以下特点: 函数原型:void* allocate_array_elem(void* ptr, size_t elem_size, int* nb_elems) ptr:三级指针(传递二级指针的地址) elem_size:单个元素大小 nb_elems:当前元素数量(输入输出参数) 实现机制: 先通过av_mallocz分配元素内存 再通过av_dyn

2025-07-25 16:20:09 705

原创 用ffmpeg 进行视频的拼接

文章摘要:本文介绍了使用FFmpeg进行视频拼接的三种方法。第一种是通过concat协议直接拼接文件(如ffmpeg -i "concat:file1|file2"),原理是concat协议按顺序读取多个文件数据。第二种是通过文件列表方式(ffmpeg -f concat -i filelist.txt),使用concat解复用器逐个读取文件数据包。两种方法都会在当前文件读取结束后自动切换到下一个文件,最终输出合并后的视频文件。文中还分析了相关源码实现,包括文件打开、数据读取和流处理等关

2025-07-22 17:15:10 893

原创 mpegts.c 中 pmt_cb() 代码注释

本文分析了FFmpeg中mpegts.c文件的pmt_cb()函数工作原理。该函数解析PMT(节目映射表)数据,获取节目信息和流参数。主要流程包括:解析PMT头部信息、获取PCR_PID、处理节目描述符、创建并更新节目流信息。函数会遍历所有流信息,检查PID是否已存在,并根据需要合并PMT版本。调试示例展示了37字节的PMT数据结构,包含流类型、PID等关键字段。该函数在TS流解析中起核心作用,负责建立节目与流之间的映射关系。

2025-07-14 17:45:16 599

原创 mpegts.c中handle_packet() 函数代码注释

摘要 handle_packet()是FFmpeg中处理MPEG-TS数据包的核心函数,位于mpegts.c文件。该函数主要负责解析188字节TS包的头部信息,根据PID(包标识符)将数据分发给对应的过滤器进行后续处理。主要功能包括: 提取PID并获取对应过滤器 检查数据包起始位和连续性计数器 处理适配字段(adaptation field)和有效载荷 将数据分发给不同类型的过滤器(如SECTION或PES类型) 函数被上层接口如avformat_open_input、avformat_find_strea

2025-07-14 17:20:56 743

原创 ffmpeg 中 write_option()函数详细注释

本文详细分析了FFmpeg中write_option()函数的功能与实现。该函数是处理命令行参数解析的核心模块,负责将参数值写入目标地址(全局变量或结构体字段)。文章首先介绍了函数原型和OptionDef结构体定义,重点解析了flags字段如何决定参数类型和存储方式。通过示例说明了不同选项(如-f、-y、-c)的处理逻辑,特别解释了OPT_SPEC标志用于处理多值参数的情况。最后对write_option()的代码进行了详细注释,展示了如何根据flags进行字符串复制、数值转换、时间解析等操作,以及如何处理

2025-07-11 11:35:38 861

原创 ffmpeg 代码阅读笔记2/2

本文分析了FFmpeg 4.4的转码主流程。核心函数transcode()分为初始化(transcode_init)和循环处理(transcode_step)两部分。transcode_step通过process_input读取输入包并解码,然后通过reap_filters获取过滤后的帧进行编码输出。重点剖析了过滤器系统的实现机制:当首次解码音频/视频帧时,会动态配置AVFilterGraph,随后通过av_buffersink_get_frame_flags获取过滤后的帧,

2025-07-10 11:37:19 687

原创 linux 下argv参数表所在的内存位置在哪里?

摘要:本文通过测试代码和gdb调试分析了Linux下命令行参数的内存位置。结果显示,argv参数表及其指向的字符串都位于栈区。测试程序输出参数地址后,通过/proc/pid/maps确认这些地址属于栈空间范围(0x7ffffffdd000-0x7ffffffff000)。研究发现,加载器会在栈区创建完整命令行字符串(用0分割为token),并在栈下方建立argv指针表。这验证了命令行参数及其指针表均由栈区存储的结论。(150字)

2025-07-09 10:11:01 723

原创 ffplay 中 audio_open() 函数代码分析

本文分析了ffplay中的audio_open()函数,该函数通过SDL库打开音频硬件设备并返回音频参数。主要功能包括:根据期望的声道布局和采样率设置音频参数,若匹配失败则尝试其他配置组合;处理环境变量设置的声道数;最终填充返回的音频硬件参数结构体(包括采样格式、频率、声道布局等)。函数通过多次尝试确保能在不同硬件条件下成功打开音频设备,若所有尝试均失败则返回错误。文中还详细解释了相关数据结构及参数含义,并指出部分变量命名易引起误解的问题。

2025-07-07 14:21:33 252

原创 ffplay6 播放器关键技术点分析 2/2

FFplay6播放器关键技术分析摘要 本文分析了FFplay6播放器的三个核心功能实现: 暂停功能:通过toggle_pause函数切换播放状态,调整时钟参数。暂停时停止视频刷新和音频播放,各线程进入阻塞状态。 单步播放:step_to_next_frame函数解除暂停并设置单步标志,video_refresh处理下一帧后自动恢复暂停状态。 快进/回退:通过按键设置偏移值,根据流格式确定seek_by_bytes标志,最终调用stream_seek跳转到新位置。TS流因允许字节定位和不连续时间戳而支持字节级

2025-07-06 11:26:44 830

原创 ffplay6 播放器关键技术点分析 1/2

本文分析了ffplay6播放器的视频显示关键技术点。主要探讨了视频刷新机制,包括: refresh_loop_wait_event函数以100Hz频率(0.01秒间隔)调用video_refresh进行显示刷新。 video_refresh的核心逻辑: 通过frame_queue管理视频帧队列 计算帧显示延迟时间(compute_target_delay) 实现音视频同步(AV_SYNC_AUDIO_MASTER模式) 处理丢帧逻辑(当视频落后于音频时) 最终调用video_display进行实际渲染 关键

2025-07-05 20:45:09 1047

原创 视频播放中时钟的概念及音视频同步概念

本文探讨了视频播放中的时钟概念及音视频同步技术。文章首先介绍了三种视频播放方案:固定延时播放、基于帧duration的播放以及最精确的基于PTS时间戳的播放方案。重点分析了第三种方案中时钟同步的实现原理,即通过建立PTS与系统时间的对应关系来计算精准播放时间。最后阐述了音视频同步的基本思路,通过将视频时钟与主时钟(通常为音频时钟)进行对比和调整来实现同步。这些概念为理解ffplay等播放器的实现提供了理论基础。

2025-07-05 18:36:58 704

原创 glib-object 中G_DEFINE_TYPE 宏都作了什么?

GLib对象系统中的G_DEFINE_TYPE宏通过一个简单示例展示了其核心功能。该宏用于实现C语言中的类继承机制,自动生成类型注册相关的代码。示例中定义了一个继承自GObject的Foo类,宏展开后主要生成四个关键函数:类型获取函数(my_foo_get_type)、一次性类型注册函数(my_foo_get_type_once)、类初始化函数(my_foo_class_intern_init)和私有实例获取函数(my_foo_get_instance_private)。其中核心是my_foo_get_ty

2025-06-25 15:40:57 644

原创 std::chrono 问答系列

摘要: 本文介绍了C++标准库中的std::chrono时间处理模块。通过问答形式讲解了std::chrono::duration的基本概念,包括其作为模板类的两个参数(_Rep计数类型和_Period时间单位),以及seconds、milliseconds等常用duration类型的定义。文章对比了C++ chrono与C语言时间函数的差异,用代码示例演示了如何测量时间间隔,并讨论了模板封装带来的类型安全等优势,同时指出其相对于C语言更复杂的使用方式。适合初学者理解chrono的基本原理和使用方法。 (字

2025-06-24 13:17:35 841

原创 最简单的类模板使用示例.(c++ template)

摘要 本文演示了C++类模板的基本用法。通过定义一个简单的Box模板类,展示如何用template<typename T>声明泛型类,包含set/get方法操作T类型数据。示例中分别用Box<int>和Box<string>实例化模板,说明编译器如何根据类型参数生成具体类。文章还解释了类模板实例化过程发生在编译阶段,并推荐使用cppinsights.io工具观察实例化结果。最后详细说明了Box<int> intBox这类声明语句的含义,即调用对应类型的默认构造

2025-06-24 09:48:39 327

原创 c语言命令行参数解析函数 getopt_long() 使用

本文介绍了C语言中解析命令行参数的getopt_long()函数使用方法。通过示例代码展示了如何定义短选项(如"hi:")和长选项结构体数组(如{"help",no_argument,NULL,'h'})。函数支持三种参数类型:无参数、必需参数和可选参数。文章详细说明了函数原型、选项字符串规则、长选项数组定义、返回值含义以及相关全局变量(optarg、optind)。测试案例验证了-h/--help、-i/--input等选项的解析效果,并指出未定义的-o选项会导致错

2025-06-23 19:38:47 790

原创 c语言命令行参数解析函数 getopt() 的使用

摘要:本文介绍了C语言命令行参数解析函数getopt()的使用方法。文章包含测试代码示例,展示了如何定义无参数选项(-a)、必选参数选项(-b value)和可选参数选项(-c[value])。重点解析了optstring格式规则、函数返回值含义及全局变量optarg/optind的作用。通过实例演示了命令行参数解析过程,并指出getopt()会自动将非选项参数移动到argv数组末尾的特性。代码执行结果显示,可选参数选项必须采用"-cvalue"格式而不能用"-c value&

2025-06-23 17:46:56 553

原创 GStreamer 在运行时建立管道

摘要 GStreamer动态构建管道示例解析:文章展示了如何通过信号回调机制动态构建GStreamer媒体处理管道。当处理包含多路流(音频/视频)的容器文件时,需先运行demuxer获取流信息,再选择目标流建立连接。关键点包括: 使用uridecodebin作为动态源,通过"pad-added"信号回调连接目标音频流 信号机制(g_signal_connect)实现模块间的动态连接 完整的处理链包含格式转换(audioconvert)、重采样(audioresample)和输出(auto

2025-06-23 10:08:23 1175

原创 GStreamer 手动创建管道和为管道添加元素

0. 参考代码: 1. 使用gst_pipeline_new()创建一个空管道 2. 使用gst_element_factory_make()创建元素 3 使用gst_bin_add_many()向管道添加元素 4. 使用gst_element_link()将元素相互链接, 顺序很关键,决定谁连谁

2025-06-22 16:45:18 726

原创 模板类的类型操作

1.编译期的类型判断: std::is_same 1.1 测试代码 1.2 代码分析 2 std::is_same<int,int>::value 等于true 的工作原理 2.1 $ man std::is_same 2.2 std::is_same 类模板代码 3.std::is_same 的工作过程 4. 条件编译 4.1 编译时类型过滤例子: 4.2 分析返回值类型

2025-06-22 10:44:54 852

原创 GStreamer 简单的播放控制实例

本文介绍了使用GStreamer框架实现简单视频播放器的方法。通过命令行工具ffplay和gst-launch-1.0演示了网络视频播放效果,重点展示了用GStreamer API编写的4行核心代码实现播放器功能。代码使用playbin元素构建播放管道,通过总线获取播放状态消息,实现了基本的播放控制。文章解释了GStreamer的关键概念如管道、总线和消息机制,并对比了不同播放方式的优缺点。该示例为GStreamer编程提供了简洁的入门参考,展示了如何通过简单代码实现多媒体播放功能。

2025-06-21 12:21:17 1145

原创 模板元编程基础

摘要:本文介绍了C++模板元编程的基础概念,重点区分了编译期代码与运行期代码。主要内容包括:(1)constexpr关键字用于编译期计算;(2)模板元编程的特点和构成(元数据与元函数);(3)对比模板元编程和constexpr函数的实现方式,指出后者更简洁;(4)通过阶乘示例展示两种实现差异;(5)推荐使用在线工具查看模板展开过程。文章强调现代C++更倾向用constexpr函数进行编译期计算,而模板元编程更适合类型推导等场景。

2025-06-12 16:27:12 723

原创 c/c++ 汇编码中的.cfi 指令有什么用途?

1. 几个简写词.2. 看一个简单的测试代码:3. 生成汇编代码:4. 分析.cfi 指令5. 小结:

2025-06-12 15:04:12 1078

原创 递归与循环的互换性

2.什么是递归?2.1 破除递归的神秘性!2.2 递归函数的执行过程.3 递归函数举例.3.1 简单的循环,怎样用递归表示3.2 连加, 循环与递归算法3.2 阶乘, 循环与递归算法3.3 费波那伽, 循环与递归算法

2025-06-10 14:59:33 930

原创 std::ratio 简单使用举例

1. 先看一个简单的例子 1/2+/1/3=5/62 std::ratio 的手册页3. std::ratio_add 到底是什么呢?4. 代码注释5. 加深理解.

2025-06-09 15:04:43 1070

原创 std::allocator 系列问答

本文介绍了C++标准库中的std::allocator类模板,它是一种面向对象的内存管理工具,用于分配、释放内存以及构造和析构对象。文章通过问答形式阐述了std::allocator的作用、必要性及其优势。与直接使用new/delete相比,std::allocator遵循迪米特法则,将底层内存操作封装成类方法,使其他函数无需直接调用内存分配函数。文中还提供了一个使用std::allocator的完整示例代码,展示了如何分配内存、构造对象、使用对象、析构对象及释放内存的过程。最后通过反汇编分析了std::a

2025-06-04 15:50:48 787

原创 c++返回对象,返回引用,返回指针有什么区别?

返回对象, 优化了赋值构造,直接传递了this指针. 在函数内部有外部对象向this对象copy的过程.返回引用. 在函数内部没有copy的过程, 但在调用处,有赋值构造的过程.返回指针. 就是返回一个地址, 对象的使用由指针访问.返回对象,或返回引用都是返回一个地址, 返回对象返回的是目标地址,返回引用返回的是源地址,它们都伴随有源对象向目标对象的数据copy,只是发生的时机不同.而指针没有目标之说,它指的就是源对象的地址.

2025-06-04 11:33:09 600

原创 std::nullopt 深度解析.

1. std::nullopt 是什么?1.1 nullopt 的定义1.2 struct nullopt_t 的定义1.3 测试代码:2. nullopt 的使用,2.1 测试代码:2.2 分析: obj=std::nullopt2.3 std::nullopt 是什么?

2025-05-30 10:20:37 986

原创 c++11 tuple概念和使用

uple 的使用就是直接声明一个对象. 对象的类型由模板参数来确定,对象值由初始化列表来赋值.使用上的简单对应着实现上的复杂.这个对象,背后有一个隐含的,专有的tuple结构来支持. 似乎这个结构专为生成这一个对象而定义.由于这个结构中没有定义成员变量,无法通过名称来访问, 但你可以通过索引来访问.

2025-05-29 13:11:30 826

原创 c++结构化绑定

目的: 结构化绑定是C++17引入的特性,用于简化聚合类型的数据解构操作,操作对象:结构化绑定允许开发者通过单个声明(一行代码)将复合数据对象 (如std::tuple、数组、结构体)的成员直接解构至独立的变量.实现原理: 其本质是编译器自动生成对聚合类型成员的匿名引用或拷贝

2025-05-28 16:09:53 294

原创 c/c++类型别名定义

1. #define 是宏替换.2. c风格的typedef 通用形式 typedef type_orig alias3. c++风格的using 为类型定义别名的一般格式: using alias = type_orig4. using 的优点: 可以直接使用模板类型,5.测试代码, 顺便测试一下引用折叠.

2025-05-28 13:08:44 443

原创 int &&c =5; 代码解释

1. c 的类型是右值引用.2. c 的值类型是左值引用3. 为什么会有这样的设计?4. 总结:5. 测试代码:

2025-05-27 16:01:15 555

原创 c++数据类型和函数参数传递的基本概念

1.数据类型基本概念1.1 什么是左值,右值1.2 什么是左值引用,右值引用1.3 为什么要区分左值引用和右值引用?1.4 左值引用和右值引用在函数调用中是如何传递的?2. delctype 与 typeid 的使用2.1 decltype:2.2 decltype 返回的类型可以打印吗?3. c++怎样打印传递来的参数是左值类型还是右值类型?3.1 std::is_lvalue_reference,判别是否是左值引用3.2 实例代码

2025-05-27 11:51:24 1039

原创 c/c++怎样编写可变参数函数.

可见c++编译器,很好的解决了变参函数问题, 比c好多了.你可以通过sizeof…(args)得到编译器返给你的参数个数,是个常数.你可以通过折叠表达式描述你的代码.通过…来展开操作.

2025-05-25 16:28:25 798

原创 从elf文件动态加载的过程解释got,plt及got.plt,plt.sec

1. 概念定义2. 测试源码3. 外部函数调用对应着 .plt.sec 中的一小段代码,4. .got.plt 将来存储实际的外部函数地址, 开始存储.plt中对应地址5. plt 节对应一小段代码,即以槽号为参数,调用地址解析函数.把真实外部地址存入.got.plt表

2025-05-23 17:47:13 1100

原创 new,operator new,malloc 关系.

1. new 是什么?2. operator new 是什么?3. malloc 是什么?4. 完整测试代码:5. new operator new,malloc 关系图

2025-05-23 09:50:20 1101

原创 std::initialzer_list 与花括号{}数据列表

1.{数值列表}是什么?1.1 数组初始化 时 , 称为数组初始化列表1.2. 当用于容器时, 称为容器初始化列表1.3. 对于结构体或类,{1,2,3,4,5} 可用于初始化成员变量2. std::initializer_list 是什么?3. 实现自己的initializer_list3.1 可变参数包3.2 实现自己的initializer4.std::intializer_list 使用举例5. 小结

2025-05-22 16:23:10 1180

原创 chrono类 根据duration 类的周期类型得到对应的周期名称

熟悉 chrono 定时类的用法,熟悉模板函数的写法.熟悉运行函数及编译函数的混合用法

2025-05-21 16:25:20 647

原创 remove_const的工作原理及c++的类型推导

std::remove_const_t typedef为 std::remove_const::type而模板类中又typedef int std::remove_const::type, 所以说std::remove_const::type 等价于int, 是int的小名,由typedef 定义的.实际推导的过程是用模板类匹配类型参数, 把类型参数重新typedef一下.is_same_v(T,U)的判断更加简单, 也是根据模板类型匹配, T,U为同一类型,返回true

2025-05-21 13:54:16 1255

原创 std::chrono类的简单使用实例及分析

std::chrono类的简单使用实例及分析auto t1 = std::chrono::high_resolution_clock::now(); //t1 是time_point 对象auto delta_t = t2 - t1; //2个time_point 对象相减,肯定被重构了. 返回的是 duration 对象auto dur_obj = std::chrono::duration<double, std::milli>(delta_t); //构造以ms为单位的duration对象

2025-05-20 15:02:35 984

原创 c++虚函数与类型信息

0. 测试代码:1.无虚函数的类导出符号表2.有虚函数的类导出符号表3. vtable表中储存了什么? typeinfo表中储存了什么?4. 进一步研究type_info,5. typeinfo 的意义5.1 运行时类型信息(RTTI: runtime type info)

2025-05-19 15:08:21 704

javaspript 手册

ecma-262 javascript 手册。 英文原版 能说什么呢? 非常详细,象字典一样

2010-03-07

build external modules

linux 2.6 内核 kbuild 文档。 讲述编译内核模块 makefile编写事项 老外写得,英文版

2013-07-12

wget for windows/dos

小巧的wget.exe 文件,单一运行文件。仅253 K bytes wget -h 获取帮助

2010-12-22

windos at 命令详解, ntcmds.chm

读完txt 文档,包你会用at. 另附ntcmds.chm, 可进一步扩充查阅其它windows 命令

2010-09-14

.net 中间语言 IL 指令集

Common Language Infrastruction partition I to VI 非常详细的IL 中间语言手册。 stardard ECMA-335 英文首册。备查。

2010-10-29

gdbinit-gdb 功能扩展插件

Public repo for gdbinit x86/x86_64 and ARM are supported simultaneously since version 8.0. To make ARM the default CPU set the $ARM var to 1 or use the "arm" command to switch. FEEDBACK: http://reverse.put.as - reverser@put.as You should read the header of the script for important information regarding some Mac OS X/iOS gdb bugs. Have fun, fG!

2015-07-10

http 协议分析代码实例

http 1.1 协议分析代码, linux 下编译,代码紧凑,very good!

2015-03-03

JSON 字符串与C 结构变量互转实例

linux c 下 json 字符串与 c 结构的相互转换, 开源软件,很有参考价值。

2015-03-03

linux 64位只读文件系统 romfs64

linux 64位只读文件系统 内核 2.6.32, 其它内核可能需要相应调整 扩展:从32位到64位 提高文件读取效率。 优化方式: 文件节点读入内存,采用数组管理,实现对分搜索,hash 搜索 性能不是很完美,仅供参考

2013-11-07

ida pro权威指南中文版

著名的ida pro权威指南, pdf 文档,我给它加了标签

2013-06-03

tr_research.tar.gz

本篇文章帮助你理解如下几个问题: 1. 翻译过程是如何进行的? 2. 翻译的上下文是指的什么? 3. 如何使用QT_TR_NOOP, QT_TRANSLATE_NOOP 4. QObject::tr() 是如何工作的. 5. lupdate 工具是如何工作的. 6. 如何提取宏定义中的字符串? 也就是说宏定义中字符串如何支持国际化? 7. 类中字符串如何支持国际化. 8. 全局变量引用字符串如何支持国际化. 详细请阅读readme.txt 和把玩代码.

2020-08-14

vim plugin

vim plugin, windows 下工具集合,linux 下 plugin 也可以使用。

2015-05-10

tiny httpd

微型http 服务器, 还实现了cgi 功能

2014-11-27

uxfs 文件系统移植

uxfs 源代码是linux2.4 内核的, 将它移植到linux2.6.32内核,并做了少量修改。编译,运行良好

2013-09-04

vim73-gdb 工具

最新版vim version 73 gdb vim 和 gdb 的结合 你懂得 用 tar xvf vim73 gdb tar 解开2个压缩包 再分别解压缩 再看readme 再打补丁 编译

2015-02-07

windows 版 bochs

bochs 虚拟机 , 可以调试内核。 纯软件模拟dev

2013-06-28

gcc 函数调用探测功能

收集一个函数调用的踪迹,一种方法是通过在函数的入口处和出口处插入一个打印语句来检测。这个过程非常繁琐,而且很容易出错,通常需要对源代码进行大量的修改。 幸运的是,GNU 编译器工具链(也称为 gcc)提供了一种自动检测应用程序中的各个函数的方法。

2015-09-10

bat 的书写范例

bat 的书写范例, 可以学习不少使用的语法,技能

2014-04-23

webbench 批量web 页请求程序

批量 web 请求 知识点: 客户端程序构建http 请求字符串, 并发请求(用fork完成)。父子进程间信息交换

2015-03-04

simple encrypt decrypt algrithm

simple encrypt decrypt algrithm use xor to realize

2015-02-05

全面介绍AVFilter 的添加和使用

readme.txt :this file filtering_video.c :用filtergraph 来验证color_screen 过滤器 read_from_vfilter.c :用通用框架验证color_screen 过滤器 vsrc_color_screen.c : color_screen filter

2025-04-22

全面介绍AVFilter 的添加和使用

ffmpeg filter的上层管理对象是 "lavfi" 对象, 它是一个AVInputFormat对象,是一个虚拟设备源, 让它的实现类匹配我们的filter,使它的数据直接从我们的filter来取. 就可以验证我们的filter. 这是标准的ffmpeg操控数据的流程,用avformat_open_input 打开文件,用avcodec_open2打开codec. 用av_read_frame 来读取数据, ffplay,ffprobe,ffmpeg也是这样处理过滤器的. 核心思想是把filter当文件使用. 第2个文件是直接使用filtergraph的例子

2025-04-22

全面介绍AVFilter 的添加和使用

ffmpeg filter的上层管理对象是 "lavfi" 对象, 它是一个AVInputFormat对象,是一个虚拟设备源, 让它的实现类匹配我们的filter,使它的数据直接从我们的filter来取. 就可以验证我们的filter. 这是标准的ffmpeg操控数据的流程,用avformat_open_input 打开文件,用avcodec_open2打开codec. 用av_read_frame 来读取数据, ffplay,ffprobe,ffmpeg也是这样处理过滤器的. 核心思想是把filter当文件使用. 第2个文件是直接使用filtergraph的例子

2025-04-22

全面介绍AVFilter 的添加和使用

ffmpeg filter的上层管理对象是 "lavfi" 对象, 它是一个AVInputFormat对象,是一个虚拟设备源, 让它的实现类匹配我们的filter,使它的数据直接从我们的filter来取. 就可以验证我们的filter. 这是标准的ffmpeg操控数据的流程,用avformat_open_input 打开文件,用avcodec_open2打开codec. 用av_read_frame 来读取数据, ffplay,ffprobe,ffmpeg也是这样处理过滤器的. 核心思想是把filter当文件使用.

2025-04-22

离散傅立叶变换DFT及其反变换IDFT c 源代码

离散傅立叶变换DFT及其反变换IDFT c 源代码 非常简洁的代码,有简洁的复数运算代码及DFT,IDFT代码 测试代码实现了从时域到频域变换,再从频域到时域变换. 验证了变换的正确性!

2024-06-28

IDA Free8.3 For Linux

是Free 版本, 支持x86, x86_64, 不支持Arm 等 支持反编译成C 语言伪代码, 开放的功能已经非常友好了.. 供学习使用还是非常不错的. linux 下版本, 我喜欢在linux 下操作. 安装: chmod +x idafree83_linux.run ./idafree83_linux.run 即可. enjoy!

2023-10-08

用SDL2.0显示图片实例代码

建议在linux下编译。 1.演示了如何显示背景图(平铺),前景图(居中)及处理键盘事件(退出)等

2022-11-02

将视频存储为一张张jpg 图片源码

利用ffmpeg 来读取视频,解压缩为一个个frame, 再利用ffmpeg 将frame 压缩成jpeg 格式存成图片. 对ffmpeg 的主要调用接口如下: 1. 打开一个文件进行解码的过程: //初始化 avformat_open_input() avformat_find_stream_info() av_find_best_stream() avcodec_find_decoder() avcodec_parameters_to_context() avcodec_open2() //循环执行 av_read_frame() avcodec_send_packet() avcodec_receive_frame() //结尾 avformat_close_input() 2. 打开一个文件进行编码的过程: //初始化 av_guess_format() avio_open(); avformat_new_stream() avcodec_find_encoder() avcodec_parameters_to_context()

2022-06-11

linux 命名管道创建及使用demo程序

1. 在程序中创建命名管道 在程序中创建命名管道,可以使用 mkfifo 函数,其原型如下: #include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); 2. 在程序中使用命名管道 pipe_fd = open(FIFO_NAME, open_mode); 3. 编译: make 4. 执行: 先在一个终端中执行生产者: ./namedpipe_produce 然后在另一个终端中执行消费者:./namedpipe_consume 结果是二者完成数据传输后都返回了 5. 删除命名管道 删除命名管道和删除一个普通文件没有什么区别: $ rm /tmp/testp

2022-06-02

监视程序的内存使用(linux c 源代码)

当你面对内存泄露的时候, 该程序时刻监视着你程序的内存使用情况. 你甚至可以用gdb 单步执行你的程序,来观察监视程序所报的内存使用量. 如此便能找到是谁(哪个函数?哪行代码)占用了内存. linux 下的程序, 有源代码, 你可以修改程序成更顺手的工具.

2022-05-04

Qt5 信号与槽研究,线程研究

QT5 信号与槽研究 ---------------------------------------- 一个主窗口给多个工作线程发信号,线程的槽函数是如何工作的? 是并行的还是串行的? 通过研究知道, 它是串行工作的. 而且纵然工作线程没有启动,它也可以工作. 各个槽函数只是signal 依次调用各线程下的槽函数而以. signal-slot 机制跟线程没有关系,只跟对象有关系. 下面贴上我的研究代码,里面还有其它thread 的相关知识. 例如:线程是并行运行的,如何停止线程和重启线程等.可以参考注释.

2022-03-12

OpenSSH for windows (64bits)

1,下载openSSH windows版(注:该版本是64位) 2,解压到C:\Program Files\OpenSSH 不要放在别的路径下,官方这样要求的 3,cmd到openSSH路径下 依次执行 1)安装sshd服务 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 2)开放22号端口(如果你在windows关闭了防火墙并配置了入站规则可以不执行如下命令,多执行不影响) netsh advfirewall firewall add rule name=sshd dir=in action=allow p

2020-11-09

calltree-2.3.tar.gz

makefile 用qmake 生成, 去除了测试文件,已修改了代码文件中需要修改的地方. 在ubuntu14 下已经编译通过

2019-07-02

qt 在控件上绘制图形

qt 在qlabel 上画一个叉, 用来演示如何在qt 控件上绘制图形,只要重写控件的paintEvent 方法即可!很简单.

2020-05-07

stl-views.gdb

gdb 打印功能扩展 # The following STL containers are currently supported: # # std::vector -- via pvector command # std::list -- via plist or plist_member command # std::map -- via pmap or pmap_member command # std::multimap -- via pmap or pmap_member command # std::set -- via pset command # std::multiset -- via pset command # std::deque -- via pdequeue command # std::stack -- via pstack command # std::queue -- via pqueue command # std::priority_queue -- via ppqueue command # std::bitset -- via pbitset command # std::string -- via pstring command # std::widestring -- via pwstring command

2016-01-23

the-23-gang-of-four-design-patterns-with-cplusplus.tar.gz

c++ 23种设计模式参考代码, 帮助理解23种设计模式 源代码整理自 k_eckel 的《设计模式精解-GoF 23 种设计模式解析附 C++实现源码》 内含CMakelist.txt 文件, 方便linux 下编译运行. 我设定的积分是免费,0积分,代码公开,以后下载会不会要积分就不知道了.

2020-03-08

virtualpanel.zip

用qt4 实现的虚拟面版, 上面有几个指示灯,几个按键, 指示灯和按键数量可自己定义, 指示灯可以定义点亮状态为红,绿,蓝, 熄灭固定为灰色.

2020-07-15

buttonTable.zip

QTableWidget 是qt 提供的表格控件, 这里需要一个按键矩阵, 所以将按键作为一个单元塞到表格中,方便管理. 有一张图片显示了运行效果.

2020-07-23

Qt 4.8 Timer

qt 下简单的timer 使用 和日期,时间的更新显示

2016-09-02

LFS-BOOK-CN.html

首先,你应该知道Linux From Scratch 是干什么的,这篇文档是中文的. 由 Linux 中国 - LCTT - LFS 翻译小组 翻译 无分页,所有文档在一个页面中,方便查找. 还是看中文文档方便操作

2019-12-29

空空如也

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

TA关注的人

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