
c++
文章平均质量分 88
芥末的无奈
这个作者很懒,什么都没留下…
展开
-
基于 FFmpeg 的跨平台视频播放器简明教程(七):使用多线程解码视频和音频
在上篇文章中基于 FFmpeg 的跨平台视频播放器简明教程(六):使用 SDL 播放音频和视频,我们能够同时播放画面和音频。其中 SDL 启动了一个音频线程,每次需要音频数据时都会回调到我们定义的函数。现在,我们需要对视频显示做同样的事情。这么做能让我们的代码更加模块化,更容易使用。本文参考文章来自。这个系列对新手较为友好,但 2015 后就不再更新了,以至于文章中的 ffmpeg api 已经被弃用了。幸运的是,有人对该教程的代码进行重写,使用了较新的 api,你可以在找到这些代码。本文的代码在。原创 2023-07-28 21:29:51 · 1543 阅读 · 0 评论 -
使用 gcov/lcov/gcovr 在 Android APK 下获取代码覆盖率
本文介绍了 gcov 生成代码覆盖率的基本流程和原理,重点说明了 gcno、gcda 和源码文件之间的关系;通过 `strings` 命令可以查询 gcno 中指定的源码位置,以及 gcda 的生成位置;通过对 `GCOV_PREFIX` 和 `GCOV_PREFIX_STRIP`的设置,可以指定 gcda 生成的位置。最后,通过 [AndroidNativeCodeCoverageExample](https://github.com/jiemojiemo/AndroidNativeCodeCovera原创 2022-07-27 21:59:15 · 2786 阅读 · 1 评论 -
C/C++ 内存治理神器 - Google Sanitizers
Google sanitizers 简介;Mac 使用内存泄漏检查;CLion 中使用 asan原创 2022-07-12 18:21:23 · 6814 阅读 · 0 评论 -
使用 Github Actions 和 Codecov 监控 C/C++ 仓库的代码覆盖率
文章目录前言一、Github Actions二、使用 Lcov 获取代码覆盖率三、Github Actions 配置 Codecov总结参考前言我总是有强烈的欲望去追求更高代码质量,而代码覆盖率是衡量代码质量的指标之一,它意味着你编写的单元测试、回归测试是否有完整执行到所有代码行。对于 C/C++ 这种需要 “小心翼翼” 的编程语言,内存泄漏、越界、野指针等问题防不胜防,这些问题也是破坏代码质量的重要元凶,提早发现并修正此类问题可以帮助我们提升代码质量。我喜欢使用 AddressSanitizer原创 2022-04-22 19:18:41 · 2880 阅读 · 0 评论 -
C/C++ Native 包大小测量
文章目录C/C++ Native 包大小测量测试 demoAndroid .so 动态库包大小测量Bloaty使用 Bloaty分析与裁剪iOS .a 静态库包大小测量基于 Xcode 的 .a 测试方法0. 编译 iOS 库1. 新建 ios 工程2. 打开 `Write Link Map File`3. 分析 Link Map File总结C/C++ Native 包大小测量公司内部有很多 C/C++ native 库,例如 XXSDK、YYYSDK、ZZZSDK 等等,随着业务迭代包体积也在逐渐膨原创 2021-11-22 16:58:40 · 3707 阅读 · 0 评论 -
实时音频编程(二):实践与技巧
文章目录简介Q&AQuestion 1: 你是选择传递还是共享对象?Question 2: 是否与实时线程交互?Question 3: 共享数据是否足够小?Question 4: 获取共享资源是否允许失败?Question 5:实时线程会修改线程间共享的数据吗?Question 6:非实时线程会修改线程间共享的数据吗?Question 7: 实时线程和非实时线程都会修改数据,这该怎么办?总结简介在(一)中,我们总结了实时音频编程几条经验法则,先来回顾下它们,在实时线程中,你不能做:不要申请或原创 2021-09-19 15:00:50 · 1074 阅读 · 0 评论 -
测试驱动开发(TDD)实践与技巧
引言测试驱动开发,英文全称 Test-Driven Development,简称 TDD,是一种不同于传统软件开发流程的开发方法。在《程序员的职业素养》第五章,我第一次看到有关 TDD 内容,当时Bob大叔向我展示了一种不可思议的编程开发方法,这种方法颠覆了我的认知。Bob 大叔列举了 TDD 很多好处,例如确定性、降低代码缺陷、方便代码重构、测试单元文档化,更优秀的代码设计等等。并强力安利读者们尝试 TDD,因为 TDD 是专业人士的选择。在 Bob 大叔的洗脑下,我决定去尝试学习如何使用 TDD。原创 2021-06-11 09:34:47 · 12416 阅读 · 3 评论 -
基于 CoreAudio 的音频编解码(二):音频编码
系列文章目录基于 CoreAudio 的音频编解码(一):音频解码基于 CoreAudio 的音频编解码(二):音频编码前言在 基于 CoreAudio 的音频编解码(一):音频解码 中,我们介绍了 Core Audio 中常见的数据结构和基本概念,如果你还没有看过这些内容,最好去看一看。Core Audio 表示音频的数据的方式并不是告诉你 ”hi,这是个 mp3 文件“ 那么简单。文件格式和文件内的音频数据格式之间有很大的区别。关于格式的很多内容看起来似乎很随意,但 Audio Fi原创 2020-11-24 15:43:19 · 1102 阅读 · 0 评论 -
基于 CoreAudio 的音频编解码(一):音频解码
系列文章目录基于 CoreAudio 的音频编解码(一):音频解码基于 CoreAudio 的音频编解码(二):音频编码前言Core Audio 是iOS和MAC系统中的关于数字音频处理的基础,它是应用程序用来处理音频的一组软件框架,所有关于iOS音频开发的接口都是由Core Audio来提供或者经过它提供的接口来进行封装的。下图是 Core Audio 框架结构,其功能可谓是丰富且强大,几乎涵盖了所有与音频处理相关的内容。这篇文章中,我们关注 Core Audio 中编解码能力,也就原创 2020-11-24 15:42:29 · 1548 阅读 · 0 评论 -
JUCE 中的音频编解码
JUCE 中的音频编解码JUCE (Jules’ Utility Class Extensions)是由Raw MaterialSoftware发布的一套基于C++的跨平台应用程序框架类库(Windows, Mac,Linux)。JUCE的特殊之处在于其友好的用户界面以及强大的音频、图像处理能力。JUCE适合那些想使用干净、快捷、高层的API,而不想 把时间浪费在使用不同类库,面向不同平台上的开发者。JUCE能够胜任大型、复杂的应用程序(C++)的开发。与其他应用程序框架类似,JUCE有众多覆盖音频、原创 2020-11-08 19:42:00 · 1896 阅读 · 0 评论 -
C++20 系列(一)- Hello C++20
系列文章目录C++20 系列(一)- Hello C++20四大模块毋庸置疑,C++20 将会和 C++11 一样,从根本上改变我们的 C++ 编程方式。C++20 中引入了四大模块:RangesCoroutinesConceptsModulesRanges 库使其能够在容器上直接表达算法,通过管道符号组合算法,并将其用于数据流中。Coroutines 库让 C++ 异步编程能力更加强大,甚至可能成为主流。Coroutines 是多任务合作、事件循环、管道的基础。Concepts原创 2020-11-04 19:59:30 · 7548 阅读 · 0 评论 -
C++ 中 async、packaged_task、promise 区别及使用
Introduction编程难,多线程编程更难 – 鲁迅多线程编程,如此令人着迷、令人痛恨的字眼。人类为了追求更好的效率、更快的速度,非常残忍的发明了多线程编程,这不仅让写代码的难度陡增,同时也加快了头发掉落的速度,写到这时,我不禁感觉头上又凉了一些。最近,我一脚踏进了 C++ 多线程编程的海洋中,在各种 std::thread、std::condition_variable、std::mutux、std::unique_lock、std::async 等等中挣扎徘徊。并且,同事告诉我,这些小玩意只能原创 2020-05-29 08:55:06 · 5224 阅读 · 6 评论 -
音频特效:Flanger 和 Chorus
Introduction 开场白今天要讨论的是 Flanger 和 Chorus 这两个音效,它们也是基于 Delay 实现的,并且在实现和原理上,它们又有很多相似的地方。我们还是老规矩,先分别介绍这两种音效的具体效果,分析其实现细节,并最后给出两者的异同。Flanger 镶边音效首先是 flanger,中文译为“镶边”,原意指的是开盘式录音机的边缘为了产生 flanger 音效,可以用...原创 2020-04-26 10:00:47 · 7115 阅读 · 2 评论 -
Eigen 简明教程之如何从Python转到Eigen
Eigen Quick Reference一个 Eigen 的参考手册,包含 Python(Numpy) 与 Eigen 的对应用法,以及一些练习题。持续更新中。Eigen array, matrix and vector types在 Eigen 中,Matrix 用来表示数学意义上的矩阵和向量,Array 用来表示 1D 和 2D 的数组,你可以这样定义它们:typedef Matri...原创 2020-02-14 10:25:28 · 5900 阅读 · 1 评论 -
快速上手Google C++ 测试框架googletest
Google Test 是一套编写C++单元测试的框架,可以运行在很多平台上。如何安装$ git clone https://github.com/google/googletest.git$ cd googletest$ mkdir build$ cd build$ cmake ..$ make$ sudo make install安装之后,如何在代码中使用呢?用一个Cmak...原创 2019-12-10 09:54:21 · 1853 阅读 · 0 评论 -
基于Adaboost的音乐情绪分类算法
基于Adaboost的音乐情绪分类算法-2015实习设计总结=========================================基于Adaboost的音乐情绪分类算法-2015实习设计总结写在开头1 感谢2 参考资料音乐情绪Adaboost1 关于代码11 训练样本12 训练结果13 进行分类音乐特征1. 写在开头此次实习设计选题是基于Adaboost的音乐情绪分类原创 2016-01-04 14:37:33 · 7165 阅读 · 3 评论 -
图像处理-灰度变换函数imadjust和stretchlim
imadjust在matlab中imadjust原型如下:g = imadjust(f,[low_in high_in], [low_out high_out], gamma)f表示一张灰度图片,此函数将f的灰度值映象到g中的新值,也就是将low_in与high_in之间的值映射到low_out和high_out之间的值。 其中low_in以下与high_in以上的值可以被截去,也就是说小于low原创 2016-06-16 14:48:06 · 15050 阅读 · 0 评论 -
如何写出优雅的跨平台的C/C++代码
在开发中,如何将代码做到跨平台,如何保持C/C++代码能够在多个平台上编译,是一个值得研究的问题。此外,不同平台对某些操作有自己独特的优化,例如FFT(快速傅里叶变化)在android和ios上都有自己的独特的优化方式,如何在特定平台做优化,同样值得研究混乱的 #ifdef如何编写跨平台的代码呢?哥们,你脑袋里蹦出的第一个想法应该是使用:#ifdef因此,你写的跨平台代码类似这样:头文件...原创 2019-05-16 12:16:52 · 3212 阅读 · 1 评论 -
如何优雅地管理C++ 中的内存
C++的内存管理C++是一门Native Language,而说到Native Languages就不得不说资源管理,其中内存管理又是资源管理中的一个大问题,由于堆内存需要手动分配和释放,所以必须确保申请的内存得到正确的释放。对此一般的原则是"谁分配的谁释放",但即便如此任然会出现内存泄漏,野指针等问题。托管语言们为了解决这个问题引入了GC(Garbage Collection),它们认为”内...原创 2019-07-22 11:49:24 · 806 阅读 · 0 评论 -
《深入探索C++对象模型》笔记之第一章关于对象
1.0C++的编程范式一共有三种,分为程序模型(procedural model)、抽象数据类型模型(abstract data type model, ADT)和面向对象模型(object-oriented model)。这三种范式不止在程序风格上有显著的不同,在程序的思考上也有明显的差异。在C++中加上封装后的布局成本:与C struct相比并没有增加成本。在C++中,布局及存取时间上的主要额原创 2015-11-26 23:04:34 · 528 阅读 · 0 评论