Use base::Bind With std::function

base::Bind()base::Callback 可以看作是对标准库 std::bind()std::function 的模拟;因为 chromium 项目早在 C++ 11 正式通过前就已经存在好多年了。

Read More

禁止程序多实例并存并且自动激活第一个实例

多实例检测非常常规,在程序启动时直接检查用来标记的内核对象是否存在即可,一般都是使用 Mutex

麻烦的点在于如何激活第一个实例,显示它的主窗口。

某直播姬一开始的想法是利用 Pipe 建立 IPC 通讯连接,然后后续实例通过发送消息,让主实例 activate 自己的窗口。

Read More

Monthly Read Posts in May 2017

http resumable download

虽然之前写直播姬自动更新时实现过续传下载,但是功能规范上并没有太完备;而这篇文章很好的补充了几个断点续传中,严格实现会遇到的几个 key points。

Read More

修复 Breakpad 不能启用 Full Minidump

发布分支为 chrome-58 的 google-breakpad 存在无法启用 full minidump 的问题,表现症状是,一旦启用 MiniDumpWithFullMemory 标志,则输出的 dump 文件为 0 字节,但是整个 dump 生成流程没有任何其他异常,相关返回值甚至是 true

Read More

用 FFMpeg 生成视频缩略图

除了可以使用 ffmpeg 压制视频外,还能利用 ffmpeg 生成某个视频的缩略图。

利用命令行:

1
ffmpeg.exe -skip_frame nokey -i "some_video.mp4" -vsync 0 -vframes 9 -c:v mjpeg "output_dir\thumb_%d.jpg"

Read More

Monthly Read Posts in Apr 2017

The Cost of Conditional Moves and Branches

Conditional moves 指令并不一定能提升性能,有时候甚至会导致性能衰减。

Read More

使用 ffmpeg 压制视频

帮主站重写完投稿工具的上传模块后,Neo 和我说,我们这期版本还是得带上视频压制功能…

这是我第一次知道原来 ffmpeg 还可以压制视频。因为重构的缘故,老版本的代码完全不能用(就算不考虑换上层 UI 框架的事儿,老版本那个代码质量…),所以只能抄一下他们的压制相关的驱动参数,自己从头把功能实现一遍。

Read More