opengl

使用 VS2015 编译并调试 ffmpeg

我们两清 提交于 2020-08-14 08:56:18
导读   ffmpeg 是 音频处理方面 非常强大非常有名的开源项目了,然而如 雷神 所说,“ FFMPEG 难度比较大,却没有一个循序渐进,由简单到复杂的教程。现在网上的有关FFMPEG的教程多半难度比较大,不太适合刚接触 FFMPEG 的人学习;而且很多的例子程序编译通不过,极大地打消了学习的积极性 ” ,对于平时只习惯在 Windows 下开发的初学者来说,从零开始了解相关依赖,搭建起项目并调试 ffmpeg 并不是件容易的事,好在另一个非官方的 开源项目,提供了一整套 Windows 下,用 VS 来调试 ffmpeg 的解决方案—— Shift Media Project 。   本文使用最新版本的 ShiftMediaProject 的代码(20191015),展示在Windows10 下使用 VS2015 下载代码并成功编译的过程。在另一篇本文参考的 博文 中亦介绍了整个过程,不过由于是 20180307 写的,有些新的内容没有覆盖到,这里可当做是对其进行补充和拓展。同时也作为个人笔记分享出来,希望能帮助到更多刚好有需求的人。 目录 工具准备 下载源代码 按项目指引下载相关依赖 使用VS编译ffmpeg 编译与运行 1、工具准备 本文测试使用环境: 操作系统: Windows 10 编译使用开发环境: Visual Studio 2015 下载源代码工具: git

第11课 OpenGL 飘动的旗帜

人盡茶涼 提交于 2020-08-14 08:13:16
飘动的旗帜: 这一课从第六课的代码开始,创建一个飘动的旗帜。我相信在这课结束的时候,你可以掌握纹理映射和混合操作。 大家好!对那些想知道我在这里作了些什么的朋友,您可以先按文章的末尾所列出的链接,下载我那毫无意义的演示(Demo)看看先!我是bosco,我将尽我所能教您来实现一个以正弦波方式运动的图象。这一课基于NeHe的教程第六课,当然您至少也应该学会了一至六课的知识。您需要下载源码压缩包,并将压缩包内带的data目录连其下的位图一起释放至您的代码目录下。或者使用您自己的位图,当然它的尺寸必须适合OpenGL纹理的要求。   在我们开始之前,先打开Visual C++(译者:我可是用的C++ Builder…)并在其他的#inlude之后,添加如下的代码。这将引入我们在程序中将要用到的复杂(译者:复杂吗?)数学函数sine和cosine。 #include <math.h> // 引入数学函数库中的Sin 我们将使用points数组来存放网格各顶点独立的x,y,z坐标。这里网格由45×45点形成,换句话说也就是由44格×44格的小方格子依次组成了。wiggle_count用来指定纹理波浪的运动速度。每3帧一次看起来很不错,变量hold将存放一个用来对旗形波浪进行光滑的浮点数。这几行添加在程序头部,位于最后一行#include之后、GLuint texture[1]之前的位置。

iOS 渲染原理解析

て烟熏妆下的殇ゞ 提交于 2020-08-14 05:22:47
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨Rickey 来源丨一瓜技术(tech_gua) 0. 本文知识目录 1. 计算机渲染原理 CPU 与 GPU 的架构 对于现代计算机系统,简单来说可以大概视作三层架构:硬件、操作系统与进程。对于移动端来说,进程就是 app,而 CPU 与 GPU 是硬件层面的重要组成部分。CPU 与 GPU 提供了计算能力,通过操作系统被 app 调用。 CPU(Central Processing Unit) :现代计算机整个系统的运算核心、控制核心。 GPU(Graphics Processing Unit) :可进行绘图运算工作的专用微处理器,是连接计算机和显示终端的纽带。 CPU 和 GPU 其设计目标就是不同的,它们分别针对了两种不同的应用场景。CPU 是运算核心与控制核心,需要有很强的运算通用性,兼容各种数据类型,同时也需要能处理大量不同的跳转、中断等指令,因此 CPU 的内部结构更为复杂。而 GPU 则面对的是类型统一、更加单纯的运算,也不需要处理复杂的指令,但也肩负着更大的运算任务。 因此,CPU 与 GPU 的架构也不同。因为 CPU 面临的情况更加复杂,因此从上图中也可以看出,CPU 拥有更多的缓存空间 Cache

C++变量命名规则

半世苍凉 提交于 2020-08-14 03:46:43
转自:http://www.cnblogs.com/finallyliuyu/archive/2010/09/25/1834301.html 浅谈C++变量命名规则 不知道别的公司如何,反正我现在的公司对变量命名并没有一定的规范,唯一要求就是能简单易懂,但是,我想,这个多个程序员,大概每个人都有自己习惯的一套 命名规则吧,不过,要是并不通用的话,大概看别人的程序会很头疼吧,SO 为了别人看偶的程序不至于太头疼,偶决定找个通俗的命名法来参考下,于是,搜到了匈牙利命名法。。。 匈牙利命名法的来历和介绍分类:C Plus Plus 匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部 分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。 举例来说,表单的名称为form,那么在匈牙利命名法中可以简写为frm,则当表单变量名称为Switchboard时,变量全称应该为 frmSwitchboard。这样可以很容易从变量名看出Switchboard是一个表单,同样,如果此变量类型为标签,那么就应命名成 lblSwitchboard。可以看出,匈牙利命名法非常便于记忆,而且使变量名非常清晰易懂,这样,增强了代码的可读性,方便各程序员之间相互交流代 码。

OpenCV开发笔记(六十八):红胖子8分钟带你使用特征点Flann最邻近差值匹配识别(图文并茂+浅显易懂+程序源码)

▼魔方 西西 提交于 2020-08-14 01:49:24
若该文为原创文章,未经允许不得转载 原博主博客地址: https://blog.csdn.net/qq21497936 原博主博客导航: https://blog.csdn.net/qq21497936/article/details/102478062 本文章博客地址: https://blog.csdn.net/qq21497936/article/details/107357296 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...(点击传送门) OpenCV开发专栏(点击传送门) 上一篇:《 OpenCV开发笔记(六十七):红胖子8分钟带你深入了解特征点暴力匹配(图文并茂+浅显易懂+程序源码) 》 下一篇:持续补充中… <br> 前言   红胖子,来也!   前面讲解了特征点,那么匹配特征点,就是匹配两者的相似度,相似度达到一定的阈值,则认为识别了。   考虑性能,除开暴力匹配外,还有最近邻匹配。 <br> Demo             <br> 最近邻匹配(FLANN)   FlannBasedMatcher中FLANN的含义是Fast Library forApproximate

QEMU KVM 虚拟机移植之性能提高篇小结(android 虚拟机双系统方案)

房东的猫 提交于 2020-08-13 06:04:43
一、提升性能核心要素 1、将OPENGL 接口进行穿透调用,下面对opengl穿透做个小结 2、在arm开发板上打开kvm特性,这个qcom&mtk都是实现了的,只需要打开开关即可 二、ANDROID OPENGL 业务实现细节解释 1、 OPENGL命令队列是确定了,可是命令的参数,有的是系统给的,有的是上一个命令计算的结果,例如纹理操作,首先调用API创建一个纹理,得到纹理标记,然后后面再使用API操作该纹理时,就是使用这个纹理标记的。因此如果遇到这个创建纹理的API,则要把以前积累的API队列传到host端,依次执行,最后得到这个API的结果,然后回传,这个过程是循环执行,直到遇到最终API后,把剩余的API队列传到HOST端,这一帧才算完。 2、 OPENGL命令队列有时候根据一个API的结果会有变化的,APP的四个绘制过程只是把系统给的参数计算完,如果遇到需要API计算参数的,同样会先把积压的API计算完,然后根据结果选择分支路径。所以ANDROID系统的那四个过程并不是完全独立的,它们之间有一些重叠。最好的APP,就要把这种重叠降低到最少。APP想要运行效率高,就是要非常利索的一次生成命令队列,减少打断。 三、opengl 远程调用技术小结。 A:业务层面 1、 本来是一帧的命令队列一次性传递,但由于有打断,所以实际情况是一帧的命令队列分批传递。 2、

用OpenGL进行立方体表面纹理贴图

孤者浪人 提交于 2020-08-13 03:34:16
一、目的 掌握OpenGL中纹理对象的创建、绑定与使用方法。 二、简单介绍 1,连接静态库 #pragma comment(lib, "glut32.lib") #pragma comment(lib, "glaux.lib") 2,载入位图图像到内存(这是固定用法) AUX_RGBImageRec *LoadBMP(CHAR * Filename) { FILE *File = NULL; // 文件句柄 if (!Filename) // 确保文件名已提供 { return NULL; // 如果没提供,返回 NULL } File = fopen(Filename, " r " ); // 尝试打开文件 if (File) // 判断文件存在与否 { fclose(File); // 关闭句柄 return auxDIBImageLoadA(Filename); // 载入位图并返回指针 } return NULL; // 如果载入失败,返回 NULL } 3,载入位图并转换成纹理(固定用法) int LoadGLTextures(GLuint *texture, char *bmp_file_name, int texture_id) { int Status = FALSE; // 状态指示器 // 创建纹理的存储空间 AUX_RGBImageRec

直播技术中音视频的处理

南楼画角 提交于 2020-08-13 02:14:17
今天我们来讲一下音视频直播都用到了哪些技术。图玩智能科技作为直播领域专业服务商,为企业提供直播平台的二次开发服务,搭建更完善更稳定的直播系统,欢迎随时咨询 www.toivan.com 。说到音视频直播技术,我们最先想到的是音频技术和视频技术。 其实音频技术和视频技术它们的大体处理流程都是差不多的。一般都分为五大步: 数据采集,编码,传输,解码和渲染。 音视频处理 数据采集。对于音频来说采集到的数据是 PCM 格式,对于视频数据采集的格式是 YUV 格式。 数据压缩编码。数据采集完成之后,需要对数据进行压缩编码。音视频使用的压缩技术称为有损压缩技术。而像我们平 RAR , ZIP 工具进行的压缩都是无损压缩。就是说解压后的数据与原始数据一样叫做无损压缩,解压后和原始数据高度接近称为有损压缩,音视频编码属于后者。对于音频来讲,常用的编码格式有 speex, AAC, OPUS, G.711 等。现在比较常用的是 AAC ,一是它音质比较好,二是 RTMP 对 AAC 支持的比较好。对于视频编码格式有 H.264, H.265, VP8, VP9 等,目常基本上都是使用 H.264 。注意,衡量有损压缩好坏的指标就是看同等压缩率的情况下,解压后的数据与原始数据之间差别的大小,差别越小证明压缩的算法越优。当然在实时互动直播中

10VulKan——深度缓冲 模型加载

梦想的初衷 提交于 2020-08-13 01:03:57
整体思路: GLM生产出的透视投影矩阵默认使用OpenGL的深度范围,收敛在 -1.0 到 1.0 。我们需要使用 GLM_FORCE_DEPTH_ZERO_TO_ONE 定义将其配置为使用 0.0 到 1.0 的Vulkan深度范围 ; 使用 tinyobjloader 库来从OBJ文件中加载vertices和faces数据 ,并将 tiny_obj_loader.h 头文件( https://github.com/tinyobjloader/tinyobjloader ) 下载到库目录中的文件夹中;模型使用的是viking_room.obj( https://github.com/Overv/VulkanTutorial/tree/master/resources )。 注意: 索引数据类型 为uint32_t 。因为将会有超过65535个或者更多的顶点。 顶点着色器: #version 450 #extension GL_ARB_separate_shader_objects : enable layout(binding = 0) uniform UniformBufferObject { mat4 ModelMatrix; mat4 ViewMatrix; mat4 ProjectiveMatrix; } UBO; layout(location = 0) in vec3

Android CDD 兼容性文档

若如初见. 提交于 2020-08-12 08:50:21
文档列举了设备需要满足的要求才能与最新Android兼容 任何测试套件(包括 CTS)都无法真正面面俱到。例如,CTS 包含一项可检查 OpenGL 图形 API 是否存在及其行为是否正确的测试,但任何软件测试都无法验证这些图形在屏幕上实际显示时是否正确 来源: oschina 链接: https://my.oschina.net/u/4590274/blog/4467402