- 博客(60)
- 收藏
- 关注
原创 Video标签添加跨域头信息后的缓存问题
为第video标签添加参数 crossorigin=“anonymous” ,那么会报错。“xxxx” has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.问题分析这里的video.mp4的静态文件服务器,服务端的代码用 express写的,后面会贴出,我们这里分析一下http协议。通过上面的response请求,我们可以看出,这
2023-07-10 15:41:56 2292
原创 开发环境的搭建(MacOS下学习单片机)
硬件:单片机最小系统及电源,CH340芯片的usb-ttl线,89c52芯片,11.0592hz晶振。软件:sdcc,stcgal,
2023-03-20 21:55:08 963 2
原创 30天自制操作系统(Mac版)读书笔记(day12)
那么CPU上的“晶震”会定时的调用到timerHandler这个c语言函数中,那么我们再在这里做一些操作。当然也需要在init8259A的会变函数中,打开时钟中断的开关。,可以直接把timer.c 和timer.h拷贝到项目中,在main函数中自适当的调用就可以了。具体的就可以直接参考。
2023-02-18 15:27:30 133
原创 30天自制操作系统(Mac版)读书笔记(day11)
这里是直接照搬了书上的代码,其实也很简单。主要就是适时的修改int13 bh,cl,dh寄存器的内容。这里修改ipl.nasm成以下代码就可以了。中的关于Messagebox和sheet_refreshsub函数的实现,因为这块比较费事且对理解操作系统没有什么作用,就暂时不用理解。现在的代码越来越多了,之前使用int13中断读取扇区,只能按照扇区数量来读取,但是想读取更多的扇区,需要切换柱面和磁盘。
2023-02-18 15:05:20 94
原创 30天自制操作系统(Mac版)读书笔记(day6)
这里可以理解成两个线程,一个是主程序的主线程,一个是事件线程,但实际上并没有分开线程,只是打个比方。在这里,主线程中读取队列中的数据,事件回掉负责写入数据。
2023-01-30 17:50:25 303
原创 30天自制操作系统(Mac版)读书笔记(day3.2)
开启GDT以后,可以开启CPU的32位模式,寻址能力达到4GB,但是在我的测试下,前期其实是没有这个必要的,给代码加上伪注释,这里参考了。
2023-01-30 17:47:30 91
原创 30天自制操作系统(Mac版)读书笔记(day3.1)
书上的第三天,真的干了太多的事情了,而且这哥们总是用自己的工具,还是在Windows平台,让我们mac下的用户实在是够呛,书上的目标其实就是把c语言和汇编结合在一起,也就是说,C语言可以调用汇编的代码,c语言去定义函数,实际实现由汇编来实现。
2023-01-30 17:47:13 136
原创 30天自制操作系统(Mac版)读书笔记(day3)
(3)、功能02H功能描述:读扇区入口参数:AH=02HAL=扇区数CH=柱面CL=扇区DH=磁头DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘ES:BX=缓冲区的地址出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明。
2023-01-30 17:46:43 273
原创 30天自制操作系统(Mac版)读书笔记 (day2)
目标:原来是通过汇编生成了整个磁盘的镜像,也就是 1.44M。现在只需要用汇编生成前面的512个字节,以0x55aa结束,然后后面剩下的用工具来生成全0的数据。整个项目按照Makefile 的模式来管理。写一份makefile,只保留ipl.nas文件,其他的都可以删除。0x00007c00-0x00007dff :启动区内容的装载地扯。
2023-01-30 17:46:12 238
原创 关于optimization.runtimeChunk: ‘single‘的理解
optimization.runtimeChunk: ‘single’ 一直很难理解,直到我看到了webpack的官方文档中说到的otherwise we could get into trouble described (下面称文章),下面我们就用两个例子把这个trouble复现一下。Bug重现文章中说,当两个模块从同一个模块(下面叫公用模块)中import后,公用模块的值,在同一个页面中(同一个runtime中),应该是多少?在文章中component-1和component-2都累加了1,因此.
2022-04-25 18:58:46 4391
原创 Android JNI利用opengl渲染文字 (三)
这篇文章需要渲染一个文字渲染出来。文章的来源参考https://learnopengl-cn.github.io/06%20In%20Practice/02%20Text%20Rendering/opengl渲染文字的原理freetype的作用是把字体文件从一个文件变成一个点阵图,并且会计算出文字的大小。对于opengl,只需要把这个点阵图转换成texture传入显卡中,当渲染的时候,把点阵图加上颜色即可。渲染文字的shader这里,创建shader,创建program等等操作就不再赘述了,可以.
2021-09-09 12:04:24 540
原创 Android JNI利用opengl渲染文字 (二)
上篇文章准备了opengl渲染图像的环境。这片文章要做的是把freetype加载到程序中,并可以从路径中加载字体。编译Android平台上的freetypehttps://www.cnblogs.com/freedreamnight/p/14930341.html这篇文章写的十分详细,要注意的是,他这里用的是静态库,我自己使用的是动态库,只需要删除–enable-static这个参数就行了。集成freetype到项目中在项目app/src/main/cpp,把头文件放入对应的目录,其实不用在意,.
2021-09-09 11:28:06 524
原创 Android JNI利用opengl渲染文字 (一)
Learning opengl 中关于文字渲染的部分,写的非常详细,但是在android jni环境下如何利用opengl的能力,渲染出文字,找了一圈,确实没有特别讲这块的内容,这里涉及到几点比较重要的点,首先如何把surface设置到c++层,其次如何家在freetype库,第三,渲染文字shader在android下如何写。创建Native C++项目名字可以随便起,不过语言最好选择Kotilin,跑起来的话修改activity_main.xml删除label组建,添加一个surfacev.
2021-09-09 10:07:48 687
原创 opengl入门(6)纹理的渲染
再之前的文章中,我们最多也就只能使用opengl绘制一个纯色的图形,如何绘制一张图片,就是下一步的重点。再opengl中或者大多数显卡程序中,这个过程叫做贴图。Shader的原理vertexShader的原理很简单,第一步就是把定点坐标绘制出来,第二步就是把 贴图的坐标传输给fragmentShader,这里vertexShader的out就是fragmentShader的in,要注意的是,参数的名称都需要相同才行。fragmentShader的原理也很简单,就是通过texture函数从unifo.
2021-09-07 15:31:38 539
原创 Opengl中NV12和YUV420p的fragment Shader(Android平台)
项目中在android平台上,需要对nv12的yuv数据支持,其实在cpu中利用libyuv可以很快速的转换,但是为了性能,能直接从渲染器中支持是再好不过了。Fragment Shader的代码texture2D()函数生成的对象有rgba四个成员变量,在yuv中,rgb是一样的(猜的,因为别人的shader用的r,我这个用的是g),这里需要非常注意的是,在代码中glTexImage2D函数,就是创建texture的函数中,nv12因为是uv放在一起的,所以它的类型应该是GL_LUMINANCE_.
2021-09-01 10:09:59 668
原创 opengl入门(五)错误处理
这就是为什么我要把平台从macOS换到windows的原因了,在设置opengl版本的时候,会莫名其妙的黑屏,openg也特别有意思,他根本不会告诉你哪里出了问题。所以,错误处理就很重要了。错误错误函数首先要清空错误,然后再去load错误,发生错误后,还需要断点到错误位置。这里打出来的只有错误代码。#define ASSET(x) if(!x) __debugbreak();#define GLCALL(x) GlClearError(); \ x\ ASSET(GlGetErr.
2021-08-30 16:07:58 930
原创 opengl入门(五)使用indices复用vertex
上一节中,使用了6个顶点来控制显卡的绘制顺序,但是可以发现,vertex中存在多个顶点的定义,有没有一种办法能够顶点只负责定义顶点,另外一个参数能够指导显卡绘制。vertex定义修改原来的6个节点成4个节点。 float positions[] = { -0.5f,-0.5f,//0 0.5f,-0.5f,//1 0.5f,0.5f,//2 -0.5f,0.5f,//3};//存入显存的大小修改为:glBufferData(GL_ARRAY_BUFFER,8*sizeof(floa.
2021-08-30 15:56:49 839
原创 opengl入门(四)windows平台的支持,绘制一个正方形
因为有一些莫名其妙的原因,macOS的opengl有些实现确实有点诡异,为了与教程保持一致,需要把整体项目迁移到windows平台Windows平台的支持支持cmake本身就是跨平台的,这里只需要在命令行中敲入cmake .就可以生成vs项目,打开项目,切换默认启动项目位"main",就能调试、运行了。CMakeLists的修改,只需要修改为下面的配置即可,其中glew和glfw都设置为静态库,且添加opengl32.lib的依赖即可target_link_libraries (main o.
2021-08-30 14:48:13 200
原创 opengl入门(三)使用shader绘制三角形
虽然在最开始的文章中可以直接画出一个三角形,但是并不是所有的平台和显卡都可以,为啥能画出来,主要是因为opengl会自带一个fragment shader和一个vertex shader,这就是为什么只设置几个位置就能画出一个三角形。本文将自己写两个shader来完成同样的工作,为了区别,我们用红色来填充三角形。概念Vertex Shader简单的说,vertex shader是管三角形的三个顶点的,这里说一个重要概念,任何二维图形都可以拆分成若干个三角形的,如下图。所以,我们第一步就是要画一个三.
2021-08-26 18:42:02 1110
原创 opengl入门(二)使用Glew
前一篇文章中提到了Glfw,这个是一套跨平台opengl环境与窗口管理的库。各个平台和显卡厂家的opengl的api都有区别,这时候又出了一个Glew,它就是把这些个api整合起来的库。生成libGLEW库这里只介绍再macOS上的情况,类unix平台的其实都一样,不一样的是windows,官网直接给了二进制库。下载glew源码包解压后,命令行进入文件夹,发现文件夹中有一个Makefile,果断敲入命了:make,等待一段时间后,根目录下的lib文件夹中出现四个文件libGLEW.2.1.0..
2021-08-26 13:50:48 1529
原创 opengl入门(一)OpenGL环境搭建
youtube博主The Cherno,播放列表在这 https://thecherno.com/opengl 。OpenGL环境搭建首先,opengl只是一个标准,每个显卡厂商都有自己的实现,而且,opengl的open并不是指开源。其次,本文使用GLFW,GLFW就是一个对各个平台api的一个封装,youtube教程上是在window上实现的,本文在macOS上实现下载GLFW,点击箭头位置就行,会根据你的系统版本下载对应的包目录介绍,include里面是头文件,因为在macOS上使用,.
2021-08-24 17:08:31 847
原创 websocketpp在linux下的使用 (不用编译boost)
在ubuntu下变异这个websocketpp是在是痛苦,他非得以来asio,然而这个asio又依赖于boost。好在asio发展的不错,出了一个ASIO_STANDALONE版本,咱们只用一个websocketpp,所以,standalone 很合适下载各个依赖Standalone Asio 测试发现,虽然说独立,那也只是不依赖boost库的实现,还是需要引入boost头文件。下载 boost 库下载websocketpp。写一个sample可以直接拷贝tutorials/utili.
2021-05-28 17:24:20 2210
原创 windows虚拟摄像头开发
在之前的文章中研究过mac上虚拟摄像头的开发,主体思想就是借用obs的驱动,然后我们只要负责给驱动喂正确的数据就行了,那么同样的想法我在windows上复刻了出来。OBS 虚拟摄像头 windows版首先,最新的git地址是https://github.com/Fenrirthviti/obs-virtual-cam,整个项目依赖于ffmpeg,所以自己编译的话,需要先编译ffmpeg,如果不想编译ffmpeg,那就使用vcpkg,如果连 obs-virtual-cam都懒得编译,那就直接下载r.
2021-05-28 12:16:39 3121 2
原创 使用iphone作为zoom会议的摄像头
如果你打开quick time,并且你把iphone通过数据线插到mac上,你会发现,quick time可以抓到iphone的画面!这时候,如果你打开摄像头,quick time就可以把iphone当成了摄像头来用了,其实,obs的虚拟摄像头就可以通过这样的方式来实现iphone的虚拟摄像头的。那么代码怎么写呢?CoreMediaIO如果你有兴趣,可以尝试用ffmpeg的设备列表命令(如下),你会发现,普通的列出设备的方法并不能找到iphone,但是quick time和obs都可以。这就要说到了.
2021-05-27 11:35:39 2215
原创 mac虚拟摄像头开发
OBS这个软件,在26.1的时候引入了 obs-mac-virtualcam 这个插件,实现了虚拟摄像头的功能,但是这个原理是什么,有没有办法做一个自己的虚拟摄像头程序。调研过程coremediaio-dal-minimal-example这个项目,下载后,直接运行,按照他的readme把生成的plguin放到文件夹/Library/CoreMediaIO/Plug-Ins/DAL/中后,打开quick time,选择CMIOMinimalSample Device摄像头,就能拿到这样的画面。.
2021-05-27 10:56:50 1352
原创 Swift的CoreAudio播放pcm文件
开发中会遇到在swift中播放内存中pcm音频的需求。常见的pcm格式有signed16bit,signed32bit,float32bit,在iOS和macOS中,有个avfundation下的core audio就是专门处理pcm格式音频的。从文件中读取pcm文件生成想要的pcm文件,参照我之前的文章生成三个文件,分别对应signed16bit,signed32bit,float32bit。开始一个swift项目,创建一个Controller,参照之前的文章把文件拉入到xcode项目中,.
2021-04-15 19:40:04 1039
原创 directsound播放32位float类型的pcm格式音频
在的雷霄骅《最简单的视音频播放示例8:DirectSound播放PCM》阐述了使用directsound播放pcm文件的方法。这里的pcm文件为16位int类型,但是项目中可能会遇到32位的int或者32为float。生成不同格式的pcm文件从文档中可以得到ffmpeg支持的音频类型有以下这么多种: ffmpeg -formats | grep PCM DE alaw PCM A-law DE f32be PCM 32-bit floating-poi.
2021-04-14 15:38:53 1281
原创 ffmpeg在iOS上的编译(动态库)与验证
ffmpeg在iOS上编译,github上有两个开源的编译脚本,https://github.com/tanersener/mobile-ffmpeg和https://github.com/kewlbear/FFmpeg-iOS-build-script,前者能变iOS和android,后者看名字就知道很专注。问题是,前者的iOS只能支持静态库(出处),好在后者编译起来挺方便的编译ffmpeg下载 https://github.com/kewlbear/FFmpeg-iOS-build-script.
2021-04-09 16:29:54 589
原创 Swift调用Objective-c调用C++的方法
iOS项目中的核心用c++的库,例如ffmpeg,那么如何在Swift中调用c++库就是一个大问题了。因为Objective-c和c++都是c体系,他们两之间的调用还算是方便。所以,要首先要解决的是Swift和objective-c之间的调用问题。Swift中调用Objective-c创建一个工程点击 file->new->file 添加一个 Header File ,起名为 FunctionFromOC,如下图所示:添加以下代码#ifndef FunctionFromOC.
2021-04-09 15:18:34 701
原创 Metal开发入门(四) 绘制渐变色
本文需要在第三节的基础上,绘制一个渐变色,效果如下,首先需要恢复到第三节的代码,删除Constants,timer等。丰富Vertex结构体添加以下机构,一个字段存储位置信息,另一个字段存储颜色信息。struct Vertex { var position:float3 var color:float4}对应的,VertexBuffer也需要修改vetextBuffer = device.makeBuffer(bytes: vetices, length: vetices.
2021-03-29 18:58:59 239
原创 Metal开发入门(三) 绘制动画
上一节交代了如何使用gpu绘制一个三角形,这一届会利用gpu来绘制一个简单的动画#首先绘制一个矩形在上一节的基础上,如果需要绘制一个矩形,只需要在原来的verices里面多添加几个定点即可,如下图所示,第一个三角形的定点是,v0,v1,v2,第二个是v2,v3,v0。 var vetices : [Float] = [ -1,1,0, -1,-1,0, 1,-1,0, 1,-1,0, 1,1,0, -1,1,0]使用index来减少.
2021-03-29 16:02:22 583
原创 Metal开发入门(二)绘制三角形
GPU在绘制的时候,只会去绘制线和三角形。绘制线段比较好理解,但是为啥是三角形,因为,三角形是在二维平面中利用最少的点就能绘制出来的图形。而且,它可以很容易的切割成两个。本文就是使用Metal来绘制一个三角形Metal绘制的过程大体上分为两个部分,一个部分是在整体初始化的过程中,初始化的过程主要是编译metal文件,取得三角形定点和整体的着色函数shader,着色函数和颜色格式组成了一个叫做piplineDescriptor的对象,通过piplineDescriptor即可生成一个piplineSt.
2021-03-29 14:34:33 399
原创 Metal开发入门(一)Hello Metal
环境:macOS 11 iOS14 swift4 xcode12项目准备新建一个iOS项目,值得注意的是:life Cycle请选择 UIKit App Delegate,后续因为需要从UIView中集成,项目还需要做一些变化。删除 AppDelegate.swift中关于SceneDeleagete的相关函数,添加一个成员变量window类型为UIWindow。删除info.plist中关于Scene Manifest的配置,添加一个storyboard。命名为main.storyboard,.
2021-03-29 09:13:45 1275 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人