摘要:
一、前言 C++ 中比较不错的日志工具有 log4cxx,log4qt 等,但是它们都不能和 qDebug(), qInfo() 等有机的结合在一起,所以在 Qt 中使用总觉得不够舒服,感谢 Qt 提供了 qInstallMessageHandler() 这个函数,使用这个函数可以安装自定义的日志输 阅读全文
摘要:
一、前言 前面只是开了个异步线程来同时解码音频和视频,音频和视频的解码没有分开,同时将这个异步线程封装成类。这里实现三个类: XAudioThread:音频解码线程 XVideoThread:视频解码线程 XDemuxThread:“生产者” 线程,生产 AVPacket 添加到音频或视频队列,进而 阅读全文
摘要:
一、前言 在上一篇中我们只实现了 OpenGl 播放视频,现在我们实现播放音频功能,播放音频首先要实现音频重采样,然后通过 Qt 的 QAudioOutput 类实现播放音频。 二、XResample类的实现(重采样) 新创建个工程,命名为 XPlayer_4。然后我们看下 XDemux 类要实现哪 阅读全文
摘要:
一、前言 这里我们加入 Qt 来设计播放器界面,解码出的 RGB 数据使用 OpenGl 来进行渲染绘制,这样比直接转换成 QImage 在 QLabel 等控件上显示效率更高。 二、XVideoWidget类的实现(渲染绘制RGB) 新创建个工程。然后我们先看下 XVideoWidget 的头文件 阅读全文
摘要:
一、前言 在上一篇中我们实现了视频和音频的解封装、解码及写文件,但其基本是堆出来的代码,可复用性以及扩展性比较低,现在我们对它进行类的封装。这里我们先只实现解封装类和解码类。 二、XDemux类的实现(解封装) 新创建个工程 XPlayer_2。然后我们看下 XDemux 类要实现哪些函数: #if 阅读全文
摘要:
一、OpenCv简介 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在 Linux、Windows、Android 和 Mac OS 操作系统上。 它轻量级而且高效,由一系列 C 函数和少量 C++ 类构成,同时提供了 Python、Ruby、MATLAB 阅读全文
摘要:
一、编译开源库的传统方法 Windows 下开发 C/C++ 程序,少不了编译开源的第三方库。比如用于网络连接的高性能库 libcurl、用于压缩解压的 zlib 等等。使用这些库开发极大的方便了程序员,使得我们不必重复造轮子。但是使用这些库必须要处理以下问题。 编译方式 由于这些开源库绝大部分都来 阅读全文
摘要:
C++11 引入了右值引用,本文从实用角度出发,用尽量通俗易懂的语言讲清左右值引用的原理,性能分析及其应用场景,帮助大家在日常编程中用好右值引用和 std::move。 一、什么是左值、右值 首先不考虑引用以减少干扰,可以从 2 个角度判断:左值可以取地址、位于等号左边;而右值没法取地址,位于等号右 阅读全文
摘要:
五、技巧 当设计 C++软件时, 总会再三地受到一些问题的困扰。 你如何让构造函数和非成员函数具有虚拟函数的特点? 你如何限制一个类的实例的数量? 你如何防止在堆中建立对象呢?你如何又能确保把对象建立在堆中呢?其它一些类的成员函数无论何时被调用, 你如何能建立一个对象并让它自动地完成一些操作?你如何 阅读全文
摘要:
四、效率 本章的内容从两个角度阐述效率的问题。第一是从语言独立的角度,关注那些你能在任何语言里都能使用的东西。C++ 为它们提供了特别吸引人的实现途径,因为它对封装的支持非常好,从而能够用更好的算法与数据结构来替代低效的类似实现,同时接口可以保持不变。 第二是关注 C++ 语言本身。高性能的算法与数 阅读全文