git常用命令及场景
git常用命令
基本操作
建立本地仓库
git init
本地仓库和远端仓库相关联
git remote add origin <git地址>
查看当前版本与上个版本的不同
git diff <file_name>
查看当前仓库的配置信息(用户名、邮箱等)
git config --list
查看状态
git status
查看diff(具体修改行)
git diff <!-- 所以修改 -->
git diff <f...
ffmpeg结构体分析之AVFrame
概述
基于ffmpeg 4.3.2
AVFrame结构体一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),此外还包含了一些相关的信息。比如说,解码的时候存储了宏块类型表,QP表,运动矢量表等数据。编码的时候也存储了相关的数据。
参考1-雷神 参考2
定义
typedef struct AVFrame {
#define AV_NUM_DATA_POINTERS 8
/**
* 指针指向图像/通道平面。
* 这可能与第一个被分配的字节不同
*
* 一些解码器访问0,0以外的区域--宽度、高度,请
* 见avcodec_align_dimensions2()。一些滤波器和sw...
ffmpeg之音频重采样
ffmpeg之音频重采样
头文件
#include <libswresample/swresample.h>
定义
#define SWR_FLAG_RESAMPLE 1 ///< Force resampling even if equal sample rate
//TODO use int resample ?
//long term TODO can we enable this dynamically?
/** Dithering algorithms */
enum SwrDitherType {
SWR_DITHER_NONE = 0,
SWR_DITHER_RECTANGULAR,
SWR_DITHER_TRIANG...
ffmpeg之音频编解码器
实验背景
基于ffmpeg-4.3.2
相关问题
ffmpeg自带的音频aac编码器支持信息:
采样率 7350~96000
样本格式 fltp(float planar)
可以看到格式只支持float planar格式,所以一般使用libfdk_aac库,需要自己集成.
fdk_aac编码器支持信息:
采样率 8000~96000
样本格式 s16le(16-bit integer)
相关头文件
#include <libavcodec/avcodec.h> // "codec.h"
相关定义
/**
* Decoder can use draw_horiz_band callback.
*/
#define AV_COD...
ffmpeg之音频格式
样本格式
基于ffmpeg-4.3.2
相关头文件
#include <libavutil/samplefmt.h>
相关定义
音频样本格式:
enum AVSampleFormat {
AV_SAMPLE_FMT_NONE = -1,
AV_SAMPLE_FMT_U8, ///< unsigned 8 bits
AV_SAMPLE_FMT_S16, ///< signed 16 bits
AV_SAMPLE_FMT_S32, ///< signed 32 bits
AV_SAMPLE_FMT_FLT, ///< float...
cmake之编译库
简介
下面一个基本库的编译安装为例
目录结构
编译前
math
├── CMakeLists.txt
└── src
├── MathFunctions.cc
└── MathFunctions.h
编译安装后
math
├── CMakeLists.txt
├── dist
│ ├── include
│ │ └── MathFunctions.h
│ └── lib
│ ├── libMathFunctions.a
│ ├── libMathFunctions.dll
│ └── libMathFunctions.dll.a
└── src
├── MathFunc...
cmake之常用命令
概述
更多详细示例请点击cmake-demo查看
步骤
windows下需要手动设置编译器
mkdir build
cd build
cmake ../
make
make install
基本项目
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 项目信息
project (Demo1)
# 指定生成目标
add_executable(${PROJECT_NAME} main.cc)
查找目录下的所有源文件
# 查找目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
# 多目录
aux_sou...
cmake之交叉编译
交叉编译
使用方法
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
编写cmake工具链文件
目前在Linux上交叉编译成功,在Windows上使用MinGW交叉编译失败
# 设置系统名
set(CMAKE_SYSTEM_NAME Linux)
# 设置硬件平台(不是必需的)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(MY_TOOL_DIR /opt/toolchain-arm_cortex-a7+neon_gcc-5.3.0_glibc-2.22_eabi)
set(MY_CROSS arm-openwrt-linux-)
set(CMAKE_C_COMPILER ${MY_T...
cmake之test命令
添加CTEST测试
需要先实现一个可以接受输入参数的可执行程序,用 add_executable 就可以,不用管这个可执行程序的存放目录,CMake 会帮你自动填上。
# 启用测试
enable_testing()
# 测试 5 的平方
# add_test (test_5_2 Demo 5 2)
# set_tests_properties (test_5_2 PROPERTIES PASS_REGULAR_EXPRESSION "is 25")
# 定义一个宏,用来简化测试工作
macro (do_test arg1 arg2 result)
add_test (test_${arg1}_${arg2} Demo ${arg1}${arg2})
s...
cmake之message命令
blog
cmake之message函数
message :为用户显示一条消息
message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
“message to display” …)
message( [STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]
"message to display" ...)
消息类型
(无) = 重要消息
STATUS = 非重要消息
WARNING = CMake 警告, 会继续执行
AUTHOR_WARNING = CMake 警告 (dev), 会继续执行
SEND_ERR...
cmake之list命令
列表操作命令
总语法:
list(LENGTH <list> <output variable>)
list(GET <list> <element index> [<element index> ...] <output variable>)
list(APPEND <list> <element> [<element> ...])
list(FIND <list> <value> <output variable>)
list(INSERT <list> <element_index> <eleme...
cmake之install
make install打包安装
install用于指定在安装时运行的规则。它可以用来安装很多内容,可以包括目标二进制、动态库、静态库以及文件、目录、脚本等:
install(TARGETS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
指定安装位置
CMAKE_INSTALL_...
cmake之find_package
基本调用模式
CMake的find_package指令用于查找并载入一个外部包的设置.详细了解请点击
find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])
自定义module包
自定义config包
我们可以自定义一个module给别人使用,步骤如下:
生成静态库和动态库(同时)
install库相关文件
in...
SDL2之播放音频
SDL2音频子系统相关API介绍
实验环境
QT 5.14.2(mingw730_64)
SDL2.0.16
音频相关结构体
// 音频格式
typedef Uint16 SDL_AudioFormat;
// audio flags
#define SDL_AUDIO_MASK_BITSIZE (0xFF)
#define SDL_AUDIO_MASK_DATATYPE (1<<8)
#define SDL_AUDIO_MASK_ENDIAN (1<<12)
#define SDL_AUDIO_MASK_SIGNED (1<<15)
#define SDL_AUDIO_BIT...
GDB常用命令
1. 概述
转自链接
GDB 全称“GNU symbolic debugger”,从名称上不难看出,它诞生于 GNU 计划(同时诞生的还有 GCC、Emacs 等),是 Linux 下常用的程序调试器。发展至今,GDB 已经迭代了诸多个版本,当下的 GDB 支持调试多种编程语言编写的程序,包括 C、C++、Go、Objective-C、OpenCL、Ada 等。实际场景中,GDB 更常用来调试 C 和 C++ 程序。一般来说,GDB主要帮助我们完成以下四个方面的功能:
启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
在某个指定的地方或条件下暂停程序。
当程序被停住时,可以检查此时你的程序中所发生的事。
在程序执行过程中修改程序中的变量或条件,将一个b...
C++的boost库的下载编译
概述
来自维基百科
Boost C++ 库(Libraries)是一组扩展C++功能的经过同行评审(Peer-reviewed)且开放源码程序库。大多数的函数为了能够以开放源码或者封闭项目的方式运作,而许可于Boost软件许可协议(Boost Software License)之下。许多Boost的开发人员是来自C++标准委员会,而部分的Boost库成为C++的TR1标准之一。
为了要确保库的效率与弹性,Boost广泛的使用模板(template)功能。而它是针对各式领域的C++用户与应用领域(Application Domain)上,包含的库类别从像smart_ptr库这种类通用库,到像是文件系统的操作系统抽象层,甚至能够利用Boost来开发额外的库或是给高级的C++用户利用,像...
C++的asio库的下载编译
概述
Asio是一个跨平台的C++库,用于网络和低级I / O编程 为开发人员提供一致的异步模型,使用现代 C++方法。
当针对C ++ 11(或更高版本)时,大多数asio都可以在没有任何额外依赖项的情况下使用。独立版的asio是header-only,所以使用时只需包含头文件即可。把解压得到的include目录(包含asio.hpp)放到项目目录里。
相关链接
Asio官网
独立版使用说明
boost版使用说明
下载
下载地址1
我这里选择的是1_24_0版本,下载之后解压。
编译
编译环境
Windows
gcc version 7.3.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 projec...
C++的关键字
C++关键字
类关键字
class
声明类
声明有作用域枚举类型(C++11 起)
在模板声明中,class 可用于引入类型模板形参与模板模板形参
若作用域中存在具有与某个类类型的名字相同的名字的函数或变量,则 class 可附于类名之前以消歧义,这产生一个详述类型说明符
struct
复合类型的声明
有作用域枚举类型的声明(C++11 起)
若存在于作用域中的某个函数或变量所拥有的名字,与某个非联合体类类型的名字相同,则可在其名字之前加上 struct 来消歧义,这产生一个详述类型说明符
union
联合体类型的声明
若存在于作用域中的某个函数或变量所拥有的名字与某个联合体类型的名字相同,则可在该名字之前加上 union 以...
C++中的lambda表达式
lambda表达式
lambda介绍
到目前为止,我们使用过的两种可调用对象有 函数 和 函数指针, 还有其它两种可调用对象:重载了调用运算符的类, 还有lambda表达式
一个lambda表达式表示一个可调用的代码单元。可理解为一个未命名的内联函数。与函数类似,一个lambda具有一个返回类型、一个参数列表和一个函数体。lambda与函数不同的地方在于,lambda可以定义在函数内部。
形式:
[capture list] (parameter list) -> return type { function body}
其中,capture list(捕获列表)是lambda表达式所在函数定义的局部变量列表(通常为空)
return type 、parameter l...
共计 90 篇文章,5 页。