- 博客(942)
- 资源 (52)
- 收藏
- 关注

原创 老程序员解Bug的通用套路
程序员在很多人的印象里是一份严(ku)谨(bi)的职业,也是一个被搞怪吐槽乐此不疲的职业,程序员们面对复杂的代码敲打电脑时连眉头都不会皱一下,但是有一个词却是他们痛苦的根源,它就是Bug。 记得刚毕业入行时,我们老大派给我和另外一个新来同事的第一件事就是修Bug,要不是在学校敲过几年代码,还真不知道如何下手!和我一起进公司的另外一个同事完全就是以“看戏者”的身份,看我搞了...
2018-06-06 09:25:29
11857
26

原创 C++17新属性详解
C++17的入选特性有:(1).非类型模板参数的 auto 模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种:template <typename T, typename U>auto add(T t, U u) { return t+u;} 里面的 T 和 U 都是类型模板参数。另一种是非类型模板参数,它可以让不同的字面量成为模板的参数:te...
2018-05-27 21:59:38
53340
5

转载 60个开发者不容错过的免费资源库
文章作者Juan Pablo Sarmiento收集了60个较为实用、高效的工具资源库,可以帮助开发者快速创建各种Web App和移动App。这些资源的特点是:简单、便捷、免费、高效、功能多。当你独自一人需要在短期内构建一个产品的时候,这些起关键作用的工具定会给你留下更深刻的印象。(以下是编译内容)下面所列举的就是近期比较受欢迎的资源集合:1、Mmenu:这个jQuery插件能够为移动网站创造出灵...
2018-03-18 20:50:55
805
1

转载 C++大牛的博客
1. C++大牛的博客 Bjarne Stroustrup的博客: Bjarne Stroustrup’s HomepageBjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样
2018-01-21 21:37:00
5438
1

原创 如何提高C/C++大型项目的软件质量?
如何提高c/c++大型项目的软件质量? 软件的交付质量一直是我们软件开发项目最为关注的核心问题,那么如何保证软件项目,尤其是大型和超大型软件项目的质量,不管在国内还是国外一直是许多软件企业一直关注和研究的问题。 通常我们会在功能性,可用性,高效性,可测试性,可维护性和可移植性等6个维度来对软件质量进行把控和评定。1.功能性,即软件是否满足了客户业务要求;2.可用性,即衡量...
2017-10-01 22:11:55
4932

原创 Qt5 中对 C++11 一些新特性的封装详解(二)
1、static_assert C++11 可通过编译时使用static_assert 来帮助生成更详细的错误信息,在 Qt5 中对应引入了宏 Q_STATIC_ASSERT 和 Q_STATIC_ASSERT_X ,它们可自动判断是否可用 static_assert ,如果不支持则使用其他模板来代替。Qt 大量的使用了一些宏定义,来避免因为编译器不支持某些 API 时采取的相
2017-08-27 22:00:40
777

原创 Qt5 中对 C++11 一些新特性的封装详解(一)
C++11 是现在的 C++ 标准的名称,C++11 为 C++ 语言带来很多新特性。而 Qt 4.8 是 Qt 首个在其 API 中开始使用一些新的 C++11 特性的版本,我之前写过一篇博文:C++11 in Qt 4.8 描述了这个问题,这里不再罗嗦。在 Qt5 中,提供更多 C++11 的特性支持,接下来我们将进行详细的说明。slots (槽) 的 Lambda 表
2017-08-27 22:00:12
1106

原创 C++模板详解
一.C++模板的定义: 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;二.使用模板的目的: 能够使得程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些
2017-05-31 21:19:42
2318
3

原创 Qt的5种常用布局搭建
Qt布局详解: 界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置。那么做出来的界面才看起来美观。那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。(布局管理类)这些类简单易用,无论在代码中还是用Qt Design
2016-09-30 09:06:16
5136
1

原创 优秀程序设计的18大原则
优秀程序设计的18大原则1、避免重复原则(DRY - Don’t repeat yourself)编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就很容易形成一个抽象体。2、抽象原则(Abstraction Principle)与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。
2016-07-11 17:07:57
6123
原创 GPUImage源码分析与使用(二)
5. GPUImageMovie,视频文件-> 使用AVAssetReader逐帧读取-> 帧数据转化成纹理-> 滤镜处理,AVAssetReaderOutput -> CMSampleBufferRef -> CVImageBufferRef -> CVOpenGLESTextureRef -> texture。4. GPUImageUIElement,UIView、CALayer,通过Coregraphic把要绘制的内容填充到上下文来获取图片数据->纹理,用在截屏、获取当前UIview的时候。
2023-05-31 22:15:58
14
原创 OpenGL之GPUImage源码分析
在相机数据采集中,还有一些小的细节问题,比如相机前置与后置摄像头的左右镜像翻转问题。在前面讲到过,GPUImage 的纹理坐标原点是位于左上角的,所以使用 TEXTURE_NO_ROTATION 的纹理坐标实质上是将图像进行了上下翻转,两次调用TEXTURE_NO_ROTATION纹理坐标时,又将图像复原了,这也就可以解释为什么滤镜个数为偶数时,需要使用 mGLTextureFlipBuffer 纹理坐标将图像再进行一次翻转,而 mGLTextureBuffer 纹理坐标不需要了。
2023-05-31 22:15:46
12
原创 OpenGL 学习笔记(六)
并且可以开辟很多个 VBO ,每个 VBO 在 OpenGL 中有它的唯一标识 ID ,这个 ID 对应着具体的 VBO 的显存地址,通过这个 ID 可以对特定的 VBO 内的数据进行存取操作。首先,uniform 是全局的(Global)。EBO 中存储的内容就是顶点位置的索引 indices,EBO 跟 VBO 类似,也是在显存中的一块内存缓冲器,只不过 EBO 保存的是顶点的索引。(2).VAO 是一个保存了所有顶点数据属性的状态结合,它存储了顶点数据的格式以及顶点数据所需的 VBO 对象的引用。
2023-05-31 22:14:41
18
原创 OpenGL 学习笔记(五)
虽然着色器是各自独立的小程序,但它们都是一个整体的一部分。为了展示这是如何工作的,我们会稍微改动一下之前教程里的那个着色器,让顶点着色器为片元着色器决定颜色。引入相应的库-->编写顶点位置和颜色-->编写顶点着色器-->编写片元着色器(也称片段着色器)-->编写着色器程序-->设置链接顶点属性-->设置顶点缓冲对象(VBO)-->设置顶点数组对象(VAO) (也称顶点阵列对象)-->绘制三角形。GLSL中的向量是一个可以包含有1、2、3 或者 4 个分量的容器,分量的类型可以是前面默认基础类型的任意一个。
2023-05-31 22:14:14
11
原创 GPUImage源码分析与使用(一)
有丰富的输入组件,可以处理图片、纹理、视频、二进制数据、UIElement(UIView、CALayer),可以使用GPUImage拍照、处理纹理图片、给视频或拍摄中的视频添加滤镜、添加水印可以使用UIElement。支持对大图进行处理,GPU的纹理限制是4096*4096,对于超出限制的图片,GPUImage会压缩处理导致损失图片质量,CoreImage会把图片拆解成小图处理。可以传入字符串类型,也可以传入文件类型,比如以.vsh/.fsh/.glsl等为后缀等命名的文件。
2023-05-31 22:13:43
9
原创 OpenGL 学习笔记(三)
通过以上,我们可以看出OpenGL的简单流程,首先调用OpenGL的接口,将Attributes、textturedata、uniform等数据输入到vetexshader等着色器中,如果是attributes数据,顶点着色器会处理它,并把结果流转到下一个primitive assembly中实现光栅化,紧接着配合textturedata通过片元着色器进行处理,最终渲染出结果,可以对照着OpenGL渲染管线图进行参考。以上只是一个窗口,那么如何使用OpenGL绘制呢?图1-1 OpenGL绘制窗口。
2023-05-31 22:13:01
10
原创 OpenGL 学习笔记(四)
代码中的indices数组,可能有人会对此有疑惑,这就是索引点,每一列数据如(0,1,2),对应着顶点坐标数据中的第一行,第二行,第三行数据,这样opengl绘制的时候就会去寻找这三行数据对应的顶点按照绘制图像进行链接,以此类推,我们绘制下一个图像可以反复使用,例如(0,1,3),openlg绘制就寻找第一行,第二行,第四行数据,索引数组在实际项目中经常使用。我们定义的数组,必须绑定到VBO中才能输入到着色器中。在OpenGL中,我们创建好着色器程序对象,紧接着就需要输入数据,数据的类型如何定义呢?
2023-05-31 22:12:15
10
原创 OpenGL 学习笔记(一)
如矩阵入栈函数glPushMatrix(),矩阵出栈函数glPopMatrix(),装载矩阵函数glLoadMatrix(),矩阵相乘函数glMultMatrix(),当前矩阵函数glMatrixMode()和矩阵标准化函数glLoadIdentity(),几何变换函数glTranslate()、*glRotate*()和glScale(),投影变换函数*glOrtho()、glFrustum()和视口变换函数glViewport()OpenGL可以支持很多不同的图元类型,最基础的为点,线,或三角形。
2023-04-30 22:48:35
54
1
原创 OpenGL学习笔记(二)
有丰富的输入组件,可以处理图片、纹理、视频、二进制数据、UIElement(UIView、CALayer),可以使用GPUImage拍照、处理纹理图片、给视频或拍摄中的视频添加滤镜、添加水印可以使用UIElement。支持对大图进行处理,GPU的纹理限制是4096*4096,对于超出限制的图片,GPUImage会压缩处理导致损失图片质量,CoreImage会把图片拆解成小图处理。可以传入字符串类型,也可以传入文件类型,比如以.vsh/.fsh/.glsl等为后缀等命名的文件。
2023-04-30 22:35:48
68
原创 OpenGL渲染流程详解
将顶点数据根据Primitive(原始链接关系)还原出网格结构,网格由顶点和索引组成,在此阶段根据索引将顶点链接在一起,组成点、线、面三种不同的图元,之后就是对超出屏幕的三角形进行剪裁,如果三角形ABC三个顶点其中一个点在屏幕的外面,另外两个点在屏幕里面,其实屏幕上看到的应该是个四边形,然后再将这个四边形切成2个小的三角形。VBO/VAO(到底是啥,下回讲解)是cpu提供给GPU的顶点信息,包括了顶点的位置、颜色(只是顶点的颜色,和纹理的颜色无关)、纹理坐标(用于纹理贴图)等顶点信息。
2023-04-30 21:57:14
72
原创 OpenHarmony相机系统详解
相机框架中主要包含会话管理、设备输入和数据输出,设备的输入和数据的输出配置都是在采集会话中完成,会话管理模块管理相机设备输入和数据输出。底层硬件提供了相机设备功能,比如相机的设备管理,包括相机设备枚举、相机设备能力查询、流的创建管理以及图像的捕获。相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。(3).数据输出:相机的输出有拍照输出、预览输出和录像输出,分别对应三个不同的类,所以上层需要根据不同的场景创建出不同的数据输出。
2023-04-30 21:57:04
51
原创 OpenHarmony系统的微内核
但是5G时代,一个万物互联(Internet of Things, IoT)的时代,将有更多的小型智能设备接入互联网,低功耗、低内存、安全性成为了新的要求,在这些设备上跑宏内核的系统绝对不是好的选择,由此,微内核的热度又起来了。也就是说,宏内核提供了大量的冗余功能,兼容了太多的硬件,代码量自然就大。我们常说的Linux/UNIX就是基于宏内核的,内核提供了相当多的功能,包括驱动,调度器,地址空间管理,进程间通信,文件系统,虚拟文件系统,系统调用等,以Linux为例,其宏内核的代码量高达2700万行。
2023-04-30 21:56:53
65
原创 OpenHarmony 3D显示框架详解
由于 Mesa 3D 的 API 是和 OpenGL 相同,具体的 OpenGL 版本浏览 Mesa 3D 官方网站,我们可以这么认为它就是 OpenGL 的软件模拟,GPU 光栅处理器的一个实现。但是支持3D的显示扩展,我们可以使用OpenGL进行3D显示,Mesa库编译到OpenHarmony后,我们就可以使用OpenGL的2D,3D功能了,利用Openharmony里边Mesa3D,可以用OpenGL ES 接口在OpenHarmony里写3d的程序或者游戏。
2023-04-30 21:56:42
206
原创 OpenHarmony多媒体播放器框架详解
首先根据RunCase可以大致了解一下播放音视频的主要流程,创建播放器,设置播放源,设置回调方法(包含播放过程中的多种状态的回调),设置播放显示的Surface,这些准备工作做好之后,需要调用播放器的PrepareASync方法,这个方法完成后,播放状态会变成Prepared状态,这时就可以调用播放器的play接口,进行音视频的播放了。RegisterTable()方法中,将字符串和对应的方法映射到Map中,这样后续的DoNext会根据输入的命令,来决定播放器具体的操作。这个方法中发起了一个播放的任务。
2023-04-30 21:55:56
45
原创 OpenHarmony媒体组件
媒体组件为开发者提供一套简单易于理解的接口,能够使得开发者方便接入系统并使用系统的媒体资源。图1 媒体组件架构图。3、媒体组件代码仓结构。
2023-03-31 23:36:04
128
原创 OpenHarmony媒体子系统音频组件
常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。PCM(Pulse Code Modulation),即脉冲编码调制,是一种将模拟信号数字化的方法,是将时间连续、取值连续的模拟信号转换成时间离散、抽样值离散的数字信号的过程。以下步骤描述了如何使用。
2023-03-31 23:34:49
164
原创 OpenHarmony媒体子系统相机组件
预览的宽和高可以配置为所支持的 640x480 或 832x480 分辨率,如果想保存到文件,可以按照拍照流程提到步骤,创建 Surface,注册监听器以监听缓冲区更新。如果用户想要切换其他 照相机,现存的相机输入和输出需要先移除并加入新的相机输入和输出(示例中使用的是photo output)15)、创建拍照输出,成功创建后将拍照输出添加到采集会话。相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。
2023-03-31 23:00:48
172
1
原创 OpenHarmony媒体子系统audio_lite组件
图1 媒体子系统系统架构图。audio_lite组件提供音频能力的支持。音频组件单仓的编译构建,在根目录下进行单仓的构建和编译。需要C++11版本或以上。2、音频组件代码目录。3、音频组件使用说明。
2023-03-31 22:13:46
96
原创 OpenHarmony媒体子系统媒体引擎组件
HiStreamer作为媒体引擎,向上对接player_framework(standard设备上)或者media_lite(mini/small设备上),再对外提供应用API。这些节点的具体功能,主要在插件中实现。可以插件的形式扩展支持新的数据源、封装格式、编解码格式、输出方式。HiStreamer是一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。需要C++11版本或以上。4、媒体引擎组件代码目录。
2023-03-31 22:11:30
112
原创 OpenHarmony媒体子系统media_utils组件
提供媒体错误码等公用信息的定义,以及录制、播放音频和视频所需的数据类型。图1 媒体子系统系统架构图。单仓的编译构建,在根目录下进行单仓的构建和编译。2、media_utils组件代码目录。需要C++11版本或以上。3、media_utils组件使用说明。
2023-03-31 22:11:28
82
原创 OpenHarmony媒体子系统media_lite组件
media_lite组件提供播放、录制、解析、解码等接口能力,并提供媒体播放录制引擎服务化能力。图1 媒体子系统系统架构图。media_lite组件单仓的编译构建,在根目录下进行单仓的构建和编译。需要C++11版本或以上。2、media_lite组件代码目录。3、media_lite组件使用说明。
2023-03-31 22:11:25
92
原创 OpenHarmony媒体子系统Camera_Lite组件
Camera_Lite组件提供相机能力的支持。相机组件单仓的编译构建,在根目录下进行单仓的构建和编译。├── frameworks # 框架代码。└── kits # 对外接口。└── interfaces # 接口。C++11版本或以上。2、相机组件代码目录。3、相机组件使用说明。
2023-03-31 22:11:20
115
原创 OpenHarmony OpenSl ES音频播放开发
当前仅实现了部分OpenSL ES接口,因此调用未实现接口后会返回SL_RESULT_FEATURE_UNSUPPORTED。(5).获取接口 SL_IID_OH_BUFFERQUEUE 的 bufferQueueItf 实例。(7).获取接口 SL_PLAYSTATE_PLAYING 的 playItf 实例,开始播放。(3).获取接口 SL_IID_ENGINE 的 engineEngine 实例。(2).使用 slCreateEngine 接口和获取 engine 实例。(8).结束音频播放。
2023-02-28 22:38:56
221
原创 OpenHarmony OpenSl ES音频录制
(4).配置录音器信息(配置输入源audiosource、输出源audiosink),创建录音对象pcmCapturerObject。(6).获取接口 SL_IID_OH_BUFFERQUEUE 的 bufferQueueItf 实例。(2).使用 slCreateEngine 接口创建引擎对象和实例化引擎对象 engine。(3).获取接口 SL_IID_ENGINE 的引擎接口 engineEngine 实例。(5).获取录音接口SL_IID_RECORD 的 recordItf 接口实例。
2023-02-28 22:38:45
198
原创 OpenHarmony音频焦点模式开发
音频焦点模式指的是应用内,允许对多个声音的播放进行控制。音频应用可以在AudioRenderer下设置独立焦点模式、共享焦点模式。当设置在共享的模式下,多个音频共用一个会话ID;独立焦点模式下,每一个音频拥有单独会话ID。对于每个API均提供了callback函数和Promise函数,以下示例均采用Promise函数。在AudioRenderer初始化完毕后,可以进行焦点模式的设置。该实例可用于音频渲染、控制和获取采集状态,以及注册通知回调。2、OpenHarmony音频焦点模式开发指导。
2023-02-28 22:38:36
207
原创 OpenHarmony音频流管理开发
开发者可通过调用on('audioRendererChange')、on('audioCapturerChange')监听音频播放应用和音频录制应用,在应用状态变化、设备变化、音频属性变化时获得通知。与此同时,开发者可以通过调用(可选)使用getCurrentAudioRendererInfoArray()获取当前音频播放应用的音频流唯一ID、音频播放客户端的UID、音频状态等信息,同理可调用getCurrentAudioCapturerInfoArray()获取音频录制应用的信息。音频流管理调用关系图。
2023-02-28 22:38:11
165
原创 git fatal: detected dubious ownership in repository 解决方法
【代码】git fatal: detected dubious ownership in repository 解决方法。
2023-02-28 22:37:40
83
原创 OpenHarmony音频采集开发
RUNNING状态: 正在进行音频数据播放,可以在prepared状态通过调用start()方法进入此状态,也可以在stopped状态通过调用start()方法进入此状态。RELEASED状态: 在prepared和stop状态,用户均可通过release()方法释放掉所有占用的硬件和软件资源,并且不会再进入到其他的任何一种状态了。(9).如果应用需要在采集器状态更新时进行一些操作,可以订阅该事件,当采集器状态更新时,会受到一个包含有事件类型的回调。采集器采集的帧数到达设定值时,会触发回调并返回设定的值。
2023-02-28 22:37:40
502
原创 OpenHarmony音量管理开发
说明: AudioVolumeManager包含音量变化监听处理和音频音量组管理相关(AudioVolumeGroupManager),开发者调用AudioVolumeGroupManager的相关方法,需要先调用getVolumeGroupManager方法创建AudioVolumeGroupManager实例,从而调用对应的接口实现相应的功能,主要接口有:获取指定流的音量、设置麦克风静音、监听麦克风状态变化等。如果开发者需要获取、设置麦克风状态,或者监听麦克风状态变化等信息,可参考并调用以下接口。
2023-02-28 22:36:53
172
vncserver和vncviewer
2017-06-01
大数据资料集锦
2016-03-30
Hadoop技术全套图书
2016-03-21
Apache Flume Distributed Log Collection for Hadoop
2016-03-21
《Hadoop技术内幕:深入解析MapReduce架构设计i与实现原理》
2016-03-21
《Hadoop技术内幕:深入解析Hadoop Common和HDFS
2016-03-21
jQuery瀑布流经典布局源码
2016-01-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人