- 博客(25)
- 资源 (9)
- 收藏
- 关注
原创 DirectX12(D3D12)基础教程八 天空盒子(1)
DirectXTex纹理处理库, DDS是一种图片格式,由NVIDIA公司开发。大部分3D游戏引擎都可以使用DDS格式的图片用作贴图,也可以制作法线贴图。通过安装DDS插件后可以在PhotoShop中打开。选择编译DirectXTex_Desktop_2019.sln或DirectXTex_Desktop_2022.sln。
2025-06-11 16:00:59
613
原创 DirectX12(D3D12)基础教程六 计算着色器通用计算
D3D12有 计算、3D 和复制 三大引擎,3D图形已作了基本的介绍,本章讲计算着色器,通过GPU实现两个矩阵相加的例子来介绍计算引擎。与以往不同的是两个矩阵相加: 矩阵A+矩阵B= 矩阵C ,矩阵结构如下最后 矩阵C与回读堆的矩阵比较。
2025-04-08 15:03:19
1161
1
原创 DirectX12(D3D12)基础教程五 3D入门旋转的立方体
在第二章的纹理程序基础上做简单的修改就可以显示旋转立方体效果如下: 做以下几点修改:我们从vertex.txt文件读取顶点数据与纹理,数据结构如下这个立方体的3D坐标位置与纹理可以自已构建的(比较复杂模型由别人提供),这里为了简化代码从文件中读取,CVertexData类负责加载数据。代码:增加常量缓冲区视图 (CBV) 资源存放3D模型数据, Cpu修改 世界空间模型,由于沿Y旋转, 改变角度达到自转目的。GPU-Shader读值,进行最后的运算。3D模型数据结构,数据对齐256,所以加f
2025-03-11 16:38:24
821
原创 DirectX12(D3D12)基础教程四 入门指南
D3D12_ROOT_SIGNATURE_DESC结构可以包含描述符表和内联常量、由 D3D12_ROOT_PARAMETER结构和枚举D3D12_ROOT_PARAMETER_TYPE定义的每种槽类型。静态采样器在根签名中使用 D3D12_STATIC_SAMPLER 结构进行描述。
2025-03-07 15:33:34
1024
原创 WDM 驱动程序基本结构
每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱动加载的时候,被内核中的对象管理程序所创建的。驱动对象用DRIVER_OBJECT来表示,内核对一个驱动只加载一个实例。说明一下其中的一个成员:DeviceObject。指向驱动对象的第一个设备对象。DeviceObject->NextDevice指向下一个设备对象,最后一个设备对象的NextDevice指向空。
2025-02-25 16:06:34
552
原创 window NT - WDM - WDF 驱动概念
式驱动程序模型这一特点,程序开发者可以编写一个完全不支持硬件工作的驱动程序,却可以将代码运行在内核模式中。文件,其中记录了必要的硬件安装信息,包括设备类型、设备生产厂商名称、适用产品等信息,格式的文件,前者即所谓的设备信息文件,后者是预编译信息文件。式驱动程序模型是一种比较老式的驱动程序模型,但适用于现有的。式驱动增加了对即插即用的支持,这需要安装的时候提供一个。驱动程序类型,如总线驱动、功能驱动,过滤驱动等;驱动程序包括两个类型,一个是内核级的,称为。驱动程序的架构做了改进,形成了全新的。
2025-02-25 15:02:24
945
原创 DirectX12(D3D12)基础教程三 线性代数与3D世界空间
向量最基本的定义就是一个和如图坐标点(3,4)根据可以计算出它是5=。是与X轴的夹角θ,向量的长度和方向根据坐标可以计算出,通常书写标记为:通常大家喜欢在字母上面加一横表示向量,如:。有一个特殊类型向量的模(长度)等于1叫做单位向量,把一个向量变成单位向量这叫。任意向量的每个分量除以向量的模就得到它的单位向量。特别是在我们只关心方向不关心模(长度)的时候。比如要标准化,先计算模,然后除以向量的模 ,的单位向量。现在我们再计算向量的模,再次证实了。
2025-02-21 17:12:20
750
原创 音视频基础知识-色彩空间
1. YUV444和原数据一样[yuv,yuv,yuv,yuv,yuv,yuv,yuv,yuv] 每像素占位3字节。我们知道RGB取值范围是[0~255], 归一化操作是(除以255)当前值/255.0 那么它的值范围[0~1]如YUV444格式 [yuv1,yuv2,yuv3,yuv4,yuv5,yuv6,yuv7,yuv8]2. YUV422 数据 [yu,yv,yu,yv,yu,yv,yu,yv] ,每像素占位2字节。3. YUV420 数据 [yu,y,yu,y,yv,y,yv,y] ,
2024-12-25 10:10:57
664
原创 ffplay播放器源码(八)overlay、scale、split滤镜综合练习
【代码】ffplay播放器源码(八)overlay、scale、split滤镜综合练习。
2024-12-13 17:01:51
203
原创 ffplay播放器源码(七)overlay滤镜
2.定义滤镜字符串,然后给 avfilter_graph_parse2 函数解析,再用avfilter_graph_get_filter()和av_buffersrc_add_frame_flags()函数把各个滤镜的输入输出连接起来,用起来比较最简单的,但获取滤镜名称会让初学者犯晕。3.5 avfilter_graph_get_filter()查找滤镜名称,avfilter_graph_get_filter(filter_graph, "Parsed_buffer_0");//编号4最后sink滤镜源。
2024-12-13 10:41:47
1238
原创 ffplay播放器源码(六)音视频同步
ffplay用get_clock()实现获取当前媒体时间,用set_clock_at()实现更新媒体时间,其中c->pts_drift字段代表媒体时钟公式中的(-Tf+pts)在get_clock()函数中可以看到 retrun (c->pts_drift + time)-(time - c->last_updated) * (1.0 - c->speed)1.当音频为主时钟,音频流播放线程不需要调整,视频流播放时间需要参考音频流时间轴,如果视频流快了停下来等待音频流时间轴,慢了则快速播放。
2024-12-02 17:16:16
1158
原创 ffplay播放器源码(五)SDL库播放视频
screen_width,screen_height代表窗口原本大小,default_width,default_height代表视频帧大小,如果screen_width为0代表了视频播放窗口用视频帧大小,例 SDL窗口创建大小为:640X480,视频帧大小为1920X1080,播放时窗口调整到1920X1080。4.5 更新渲染纹理细节upload_texture(),根据纹理格式 调用SDL_UpdateYUVTexture()或者 SDL_UpdateTexture()进行渲染。
2024-11-28 16:53:50
896
原创 ffplay播放器源码(四)SDL库播放音频设备
flags: SDL_INIT_TIMER支持定时器子系统,SDL_INIT_AUDIO支持音频子系统,SDL_INIT_VIDEO支持视频子系统。4.填充音频数据 ,让 SDL 来主动执行回调函数来取数据。2. 打开一个特定的音频设备。1. 初始化SDL库。
2024-11-25 16:11:15
374
原创 ffplay播放器源码(三)之设计控制原理分析
先由stream_open()函数初始化一些数据信息比如视频包队列,音频包队列,字幕包队列等,然后创建read_thread()线程.分配AVCodecContext并将其字段设置为默认值,用avcodec_free_context()释放。2.利用SDL设置音频设备播放信息 ,播放回调函数sdl_audio_callback()相关代码。ps[in,out] 可以avformat_alloc_context() ,如视频流序号 av_find_best_stream(ic,
2024-11-21 15:38:24
815
原创 ffplay播放器源码(二)之基础数据结构分析2
ecoder_decode_frame()包括了视频解码处理,音频解码处理,字幕解码处理,以上代码只保留视频解码相关部分这样分析起来比较简单。video_thread()主要功能是 通过get_video_frame()解码得到视频帧数据经过 滤镜处理 最后将视频帧数据加到队列中。视频流解码 get_video_frame() 调用decoder_decode_frame()进行解码。1.初始化解码器信息(视频解码器,音频解码器,字幕解码器,读视频文件得解码器信息),创建解码线程。
2024-11-15 14:03:40
369
原创 ffplay播放器源码(一)之基础数据结构分析1
FrameQueue队列读数据(出队列),视频流,音频流,字幕流,分区有不同的处理。初始化区别:视频流、音频流的队列 keep_last是1,所以rindex_shown是1,而字幕流keep_last是0,所以rindex_shown是0。只有写进去队列了,才可以读,所以 windex 永远是在 rindex 前面的,写数据之前先调用frame_queue_peek_writable()得到可写指针,然调用av_frame_move_ref()复制数据帧,最后调用。)size加1,为下次写队列准备。
2024-11-08 09:41:12
970
原创 在windows 10 使用msys2 + MSVC(VS2017)编译ffmpeg6.0源码 & ffplay播放器移植到 mfc工程
得到视频区域大小,GetDlgItem(IDC_PLAY)->GetSafeHwnd()得到窗口句柄,我们要把ffplay视频窗口显示在mfc上,所以转窗口句柄过去。这里使用c++ lambda表达式 开启线程,调用RunFFpaly函数,相当于"ffplay.exe 视频文件路径", 将ffplay模块main(int argc, char **argv)入口改成RunFFpaly函数。1. ffplay是用C语言写,mfc是c++的工程,所以要将"预编译头"禁用,不然编译会报很错误。
2024-11-01 14:00:06
389
原创 C++ 已知结果、 指数,求底数,已知结果、底数,求指数
指数是幂运算aⁿ(a≠0)中的一个参数,a为底数,n为指数,指数位于底数的右上角,幂运算表示指数个底数相乘。当n是一个正整数,aⁿ表示n个a连乘。当n=0时,aⁿ=1。3. 已知 指数n,S和,求 底数a, 这时要借用log()、exp()函数, 公式: a= exp(log(S)/ n)2. 已知 底数a,S和,求 指数n, 这时要借用log()函数, 公式: n= log(S)/ log(a)1. 已知 底数a,指数n, 求和,s=aⁿ, 函数 s=pow(a,n)
2024-10-30 16:28:14
725
原创 vs2017 +Cmake 编译 SOUI4 源码
6.2 demo工程当前进程的当前工作目录,demo工程工作目录在soui-master\vs2017build\bin\Debug,它的资源目录在soui-master\demo目录,所以demo.cpp文件用以下代码。demo2工程 demo2.c文件与ComLoader.c文件最前面定义 #define NO_DEBUG_SUFFIX。3. 在源码位置 soui-master/doc/build.md编译说明文档,soui-master是源码目录。demo2工程 demo2.c文件。
2024-10-29 14:39:34
798
原创 DirectX12(D3D12)基础教程 二“纹理”
通资源前后状态变化,默认堆资源由D3D12_RESOURCE_STATE_COPY_DEST变成D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE说明复制完成。资源屏障(Resource Barrier)只有当图片数据完全复制到默认堆后默认堆数据才完整,让访问其数据数据才有意义,所以要设置资源屏障,借助DirectX-Headers让代码变得简单。它的最终目标是放图片数据资源,因它GPU 可读写,CPU无法访问,所以需要上传堆。
2024-09-29 16:15:44
1124
原创 DirectX12(D3D12)基础教程一 “你好三角形”
ThrowIfFailed(m_swapChain->GetBuffer(i, IID_PPV_ARGS(&rtv[i]))) RTV描述符它其实是交换链表面,m_device->CreateRenderTargetView(rtv[i].Get(), nullptr, rtvHandle)创建RTV描述符与交换链表面关连起来。PSO 渲染管线状态对象是复杂而重要的概念,这里也不作说明,先了解如何使用,可以理解成使用gpu绘画时,根签名是函数的声明,PSO 渲染管线状态对象则是函数的定义。
2024-03-12 16:18:46
5887
5
原创 在windows 10 使用msys2 + MSVC(VS2017)编译ffmpeg6.0源码 & ffplay播放器移植到 win32工程
1. msys2 下载安装MSYS2,https://www.msys2.org/2. msys2 环境配置 2.1 打开 msys2 msys : 2然后输入以下命令安装:pacman-Syupacman -S base-develpacman -S yasm nasm gcc pacman -S mingw-w64-x86_64-toolchainpacman -S gitpacman -S makepacman -
2023-04-21 11:03:39
2834
3
原创 【live555】 OutPacketBuffer在live555中如何使用源码分析
本文对 OutPacketBuffer做全面解析,从以下两个方面进行分析: 1.OutPacketBuffer在Live555中如何使用 2. 设计原理和代码分析一. Live555-Server端收到play命令开始传输数据,使用OutPacketBuffer做为数据缓冲区,MultiFramedRTPSink从文件解析出帧数据,将帧数据分解成RTP包数据,调用RTPInterface将RTP包数据传送到client端
2022-09-26 15:42:57
607
原创 C++获取DPI值
win10/win11 获取系统DPI 源码 #include #include#include #pragma comment(lib, "Shcore.lib")using namespace std;int main(){ HWND hWnd = ::GetDesktopWindow(); HMONITOR hMonitor = MonitorFromWindow(hWnd, MONITOR_DEF
2022-06-13 16:41:27
1700
DirectX12 计算着色器 通用计算
2025-04-07
Hello DirectX12
2024-03-06
ffplay播放器移移植 mfc工程
2024-11-01
ffplay播放器移移植 win32工程
2023-04-21
完成端口(IOCP) 服务器源码
2022-06-09
Ortp0.25.0_vs2010 源代码
2015-11-26
WinRing0_1_3_0 源代码示例 使用vs2017编译
2020-09-10
WinIO驱动例子代码
2020-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人