摘要: YUV是视频原始数据存储格式,如何将文件中的YUV解析出来呢? 一、YUV概要 YUV中的Y表示图像的亮度,即灰度值;U和V表示图像的色度,即图像的颜色。一帧YUV数据只提取Y分量,仍然可以完整的显示这一帧图像,但是黑白色。 YUV存储格式为两种: planar : 平面格式,即先存储Y分量,再U分 阅读全文
posted @ 2021-12-10 19:20 blackstar666 阅读(1183) 评论(0) 推荐(0) 编辑
摘要: 音乐播放器一般通过调节扬声器的音量来改变音频的播放音量,如果在不调节扬声器的情况下,如何改变音频的播放音量呢? 一、音频的音量的控制参数 不改变输出设备的音量,那么就必须改变音频数据达到控制音量的目的。音频的音量大小由音频振幅决定,而音频振幅的PCM音频格式中的名称为:位深,即:8bits,16bi 阅读全文
posted @ 2021-12-02 14:37 blackstar666 阅读(846) 评论(0) 推荐(0) 编辑
摘要: As software developers, we get to learn many good practices and strive to apply them in our code. 作为软件开发者,我们渴望学习到一些优秀的实践方法并努力将它们运用到编码中。 For instance w 阅读全文
posted @ 2021-10-17 23:36 blackstar666 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 最近在开发项目中遇到一个很奇怪的问题:在源文件没有任何修改的情况下,每次使用visual studio(2020预览版)启动程序调试前,项目都会被重新编译一遍。这一度让我怀疑是最新版本预览版IDE的隐藏的问题,但是仔细思考又不太可能,于是基于一个没有出现这个问题的commit创建新的测试分支,对比验 阅读全文
posted @ 2021-08-22 20:35 blackstar666 阅读(758) 评论(0) 推荐(0) 编辑
摘要: 在windows系统上使用C/C++开发,使用微软提供的LoadLibrary API动态加载动态库。在使用的时候加载动态库句柄为空,错误码为:126。下面对错误的出现原因和解决方式进行说明。 一、LoadLibrary错误码126 在MSDN上126错误码的错误信息是: 最初我把错误码2和126弄 阅读全文
posted @ 2021-08-22 18:46 blackstar666 阅读(5312) 评论(0) 推荐(0) 编辑
摘要: 在socks5代理浅识中对代理请求认证等协议分别定义相关的结构体类型,在向代理服务发送请求协议的部分中,通过sizeof获取结构体大小来指定要发送的数据字节数,这恰恰隐藏了一个严总的问题,尤其是同学们对C++数据对齐不甚了解的前提下。 一、你想的结构体大小不是你想的"结构体大小" 下面是代码中定义的 阅读全文
posted @ 2021-07-05 01:01 blackstar666 阅读(768) 评论(0) 推荐(0) 编辑
摘要: C++11标准库的条件变量为我们实现多线程直接通信带来的变量,如果对其提供的函数使用不当会给程序带来隐藏的问题。比如:伪唤醒和唤醒丢失问题。 一、什么是伪唤醒和唤醒丢失 先看代码如何使用条件变量: 1 std::condition_variable cv; 2 std::mutex gMtx; 3 阅读全文
posted @ 2021-07-03 21:51 blackstar666 阅读(4333) 评论(0) 推荐(0) 编辑
摘要: 在C++语言中,同一范围内相同名称的不同声明称为重载,只有函数声明可以重载,对象或类型声明都不能重载。那是不是所有满足签名相同的函数就一定可以被重载呢? 一、函数重载适用范围 必须在同一范围(scope),比如同一命名空间或类中。不同命名空间或类中的同名函数不能称为函数重载。下面通过代码进行验证。 阅读全文
posted @ 2021-06-24 23:43 blackstar666 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 在学习C++泛型编程或者接触过STL源码的同学,一定对模板声明和实现放置在一起编写印象非常深刻。相交于C++非泛型编程,我们习惯上将函数的声明和实现分开存放,一来是代码更加“干净”,二来即使提供给三方使用也不会泄漏源码实现。那C++模板声明和实现能够分离吗? 一、C++模板声明和实现不分离 下面是N 阅读全文
posted @ 2021-06-20 23:01 blackstar666 阅读(2001) 评论(0) 推荐(0) 编辑
摘要: RAII(资源获取即初始化)机制给我们的编程带来了极大的帮助,C++标准库中的std::lock_guard就使用到了该机制。它的作用是:guard对象在构造的时候将资源初始化好,在guard对象析构的时候将资源自动释放掉;完美的解决了过去C++程序员需要手动或异常情况下管理资源释放的问题。那么"s 阅读全文
posted @ 2021-06-16 22:50 blackstar666 阅读(834) 评论(0) 推荐(0) 编辑