摘要:本次使用的ffmpeg版本是4.2,解码的调用方式为: int32_t iRet = -1; // 最后一个包解码完成后,需要取完解码器中剩余的缓存帧; // 调用avcodec_send_packet时塞空包进去,; // 解码器就会知道所有包解码完成,再调用avcodec_receive_fra
阅读全文
09 2022 档案
摘要:目录 前言 一,源码包下载 1.ffmpeg下载 2.下载x264代码 3.下载x265代码 二,MSYS2安装 三,安装cmake工具 四,代码编译 1.编译x264 2.编译x265 3.编译ffmpeg 五,功能验证 1.x264验证 2.x265验证 3.ffmpeg验证 六,其它 1.关于
阅读全文
摘要:作为 H.264 的后继产品,HEVC/H.265 是一种高级视频压缩标准,能够节省 50%的比特率,带来惊人的视觉质量。例如,在 Converter 的 DivX HEVC 配置文件中编码的视频,不仅保持了 DivX Plus 配置文件的高质量,文件还更小。即使在拥挤的网络环境中,HEVC 对于传
阅读全文
摘要:你知道VLC和 FFmpeg 吗?了解过h264/h265/vp8/vp9 编解码库背后的故事吗? 我们日常生活中使用最广泛的五种视频编码:H264(AVC)、H265(HEVC)、vp8、vp9、av1都分别是什么?由哪些组织/公司实现的?编解码库的授权协议都是什么?他们又分别有什么优点? 今天就
阅读全文
摘要:开发中对于特定格式的日期和格式获取很常见,这里给出一系列工具函数: #include <time.h> #include <sstream> using namespace std; // time转格式化字符串 std::string ShowDateTime(const tm& t, const
阅读全文
摘要:在设计回调函数的时候,无可避免地会接触到可回调对象。在C++11中,提供了std::function和std::bind两个方法来对可回调对象进行统一和封装。 可调用对象 C++中有如下几种可调用对象:函数、函数指针、lambda表达式、bind对象、函数对象。其中,lambda表达式和bind对象
阅读全文
摘要:std::ref只是尝试模拟引用传递,并不能真正变成引用,在非模板情况下,std::ref根本没法实现引用传递,只有模板自动推导类型时,ref能用包装类型reference_wrapper来代替原本会被识别的值类型,而reference_wrapper能隐式转换为被引用的值的引用类型。 std::r
阅读全文
摘要:future和promise的作用是在不同线程之间传递数据。使用指针也可以完成数据的传递,但是指针非常危险,因为互斥量不能阻止指针的访问;而且指针的方式传递的数据是固定的,如果更改数据类型,那么还需要更改有关的接口,比较麻烦;promise支持泛型的操作,更加方便编程处理。 假设线程1需要线程2的数
阅读全文
摘要:std::future介绍 在前面几篇文章中基本都用到thread对象,它是C++11中提供异步创建多线程的工具。但是我们想要从线程中返回异步任务结果,一般需要依靠全局变量;从安全角度看,有些不妥;为此C++11提供了std::future类模板,future对象提供访问异步操作结果的机制,很轻松解
阅读全文
摘要:hiredis存储二进制文件,比如char数组的方法,例如: char value[20]={0} value[0]='a' value[15]='b' 这种情况直接调用redisCommand(c, "set key %s",value),是不可行的,因为遇到结束符'\0'会停止,但redis是二
阅读全文
摘要:reids在通过字符串保存压缩文件时有时会遇到/0的字符,从而导致文件保存不完整例如: redisCommand(c,"set %d %s",frag_seq,redis_value); 1 这里的rev.zip含有许多/0可以通过存取二进制串的 方式来保存,防止/0截断字符串hiredis提供了%
阅读全文
摘要:本文脑图 前言 Redis是基于c语言编写的开源非关系型内存数据库,可以用作数据库、缓存、消息中间件,这么优秀的东西客定要一点一点的吃透它。 关于Redis的文章之前也写过另篇,阅读量和读者的反映都还可以,其中第一篇是Redis的缓存三大问题[]。 第二篇是Redis的内存管理和淘汰策略[]。 这是
阅读全文
摘要:Stevens的《Unix 环境高级编程》中第11章线程关于pthread_cond_wait的介绍中有一个生产者-消费者的例子P311,在进入pthread_cond_wait前使用while进行条件判断,而没有直接使用if,耐人费解! 代码如下: #include <pthread.h> str
阅读全文
摘要:pthread_cond_wait() 用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex配套使用。pthread_cond_wait()函数一
阅读全文
摘要:反复研究好几遍,我才发现关于 CMake 变量还可以这样理解! 摘要: 本文记录一下 CMake 变量的定义、原理及其使用。CMake 变量包含 Normal Variables、Cache Variables。通过 set 指令可以设置两种不同的变量。也可以在 CMake 脚本中使用和设置环境变
阅读全文
摘要:一,cmake 变量引用的方式: 前面我们已经提到了,使用${}进行变量的引用。在 IF 等语句中,是直接使用变量名而不通过${}取值 二,cmake 自定义变量的方式: 主要有隐式定义和显式定义两种,前面举了一个隐式定义的例子,就是 PROJECT 指令,他会隐式的定义<projectname>_
阅读全文
摘要:对于简单的项目,将所有内容保存在一个目录中是可以的,但是大多数实际项目倾向于将它们的文件分割到多个目录中。通常可以找到不同的文件类型或分组在各自的目录下的独立模块,或者将属于逻辑功能组的文件放在项目目录层次结构的各自部分中。虽然目录结构可能由开发人员对项目的看法驱动,但项目的结构方式也会影响构建系统
阅读全文
摘要:经常在Linux下面写C++程序,尤其是需要集成各种第三方库的工程,肯定对find_package指令不陌生。 这是条很强大的指令。可以直接帮我们解决整个工程的依赖问题,自动把头文件和动态链接文件配置好。比如说,在Linux下面工程依赖了OpenCV,只需要下面几行就可以完全配置好: add_exe
阅读全文
摘要:find_package find_package用于加载第三方库,可以将需要的部分指定为组件,例如使用包 nodelet:find_package(catkin REQUIRED COMPONENTS nodelet)。例如,使用 Boost 时加载线程组件: 1 find_package(Boo
阅读全文
摘要:1. 指令说明 target_include_directories():指定目标包含的头文件路径。官方文档 target_link_libraries():指定目标链接的库。官方文档 target_compile_options():指定目标的编译选项。官方文档 目标 由 add_library(
阅读全文
摘要:openssl: makefile中搜索-m64选项并删除,共两处1. ./config no-asm shared --prefix=$(pwd)/_install --cross-compile-prefix=arm-none-linux-gnueabi- ./config no-asm no-
阅读全文
摘要:交叉编译指的在一个平台上生成另一个平台上的可执行代码。很多时候,开发的代码可能并不只是在开发主机的平台上执行,比如在Windows下开发的程序,希望能够在Linux、或者MacOS下执行;或者有时候目标平台根本就没有操作系统,没有对应的编译器,所以必然需要进行交叉编译。 交叉编译笔者在工作中经常会遇
阅读全文
摘要:如果不是一个命令行重度用户的话,过了一段时间之后,你就可能已经忘记了这些复杂且冗长的 Linux 命令了。当然,有很多方法可以让你 回想起遗忘的命令。你可以简单的 保存常用的命令 然后按需使用。也可以在终端里 标记重要的命令,然后在任何时候你想要的时间使用它们。而且,Linux 有一个内建命令 hi
阅读全文
摘要:一、引言 很多时候,我们在开发的时候是面对嵌入式平台,因此由于资源的限制需要用到相关的交叉编译。即在你host宿主机上要生成target目标机的程序。里面牵扯到相关头文件的切换和编译器的选择以及环境变量的改变等,我今天仅仅简单介绍下相关CMake在面对交叉编译的时候,需要做的一些准备工作。 二、CM
阅读全文
摘要:CMAKE命令使用时需要与CMakeLists.txt在不同的目录下,一般是在CMakeList.txt文档所在的目录下创建一个build文件夹,然后cd到build文件夹,执行cmake ..,此时会根据CMakeLists.txt将需要的配置文件生成到build目录下,然后在build目录下执行
阅读全文
摘要:说明:所有内容翻译自spdlog的wiki,受英语水平所限,有所错误或失真在所难免,如果您有更好的建议,请在博文下留言。 线程安全 spdlog:: 命名空间下的是线程安全的,当loggers在不同的线程同时执行时,下述函数不应该被调用: spdlog::set_error_handler(log_
阅读全文