自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(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)基础教程七 深度模板视图\剔除\谓词

创建一个布尔表达式或函数,该表达式根据特定条件返回true或false。

2025-04-30 16:18:49 642

原创 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(D3D12)基础教程八 天空盒子(1)

Skybox工程 天空盒子

2025-06-11

DirectX12 计算着色器 通用计算

使用VS2022 + DirectX12 让gpu 实现两个矩阵简单的加法运算, 结构如下: 1. 有两个着色器资源视图(SRV),分别存放两个矩阵数据 2. 一个无序访问视图 (UAV),存放两个矩阵相加的结果 3. 一个ComputeShader.hlsl ,实现加法运算 4.一个回读的堆,读序访问视图 (UAV)数值到内存中

2025-04-07

Hello DirectX12

1.一有共三工程: HelloTriangle ,HelloTexture,HelloCube 2. DirectX-Headers-main是DirectX12帮助类文件源码 3. HelloTriangle.pdf 是HelloTriangle工程 流程结构图 HelloTriangle工程: CD3D12Triangle类对DirectX12创建三角形做了封装。 HelloTexture工程: CD3D12Texture 类对DirectX12创建纹理做了封装。 CWICIamge类对读取图片像素做了封装。 HelloCube工程: 实现3D旋转的立方体

2024-03-06

ffplay播放器源码(六)音视频同步

ffplay播放器源码(六)音视频同步

2024-12-11

ffplay播放器移移植 mfc工程

ffplay播放器移植到vs2017 mfc工程,引用SDL2、ffmpeg库文件,将cmdutils.c、ffplay.c 、opt_common.c源码增加到mfc工程 将SDL2播放器嵌入到mfc窗口上

2024-11-01

ffplay播放器移移植 win32工程

ffplay播放器移植到vs2017 win32工程,引用SDL2、ffmpeg库文件,将cmdutils.c、ffplay.c 、opt_common.c源码增加到win32工程,输出win32版本ffplay.exe

2023-04-21

完成端口(IOCP) 服务器源码

Windows下IOCP模型 socket服务器端实例 1. 创建服务器socket, 并将socket设置为非阻塞模式 2. bind()绑定IP地此与端口 3. listen() 4. 创建IO完成端口,将socket绑定到IO完成端口上 5. 根据当前机器CPU个数创建工作者线程池 6. 使用AcceptEx()提前创建客户socket,创建个数与CPU个数相关 以上准备工作全部完成 7. 工作者线程池 GetQueuedCompletionStatus()处理 7.1 收到 客户连接事件 后将 客户 绑定到IO完成端口上,并增加一个AcceptEx() 7.2 处理 客户收发事件 7.3 处理 客户 关闭事件 源码使用vs2017 MFC编写

2022-06-09

音视频同步算法

音视频同步算法, 使用pts同步 音频流、视频流 流程图

2016-12-28

Ortp0.25.0_vs2010 源代码

关于 oRTP 是一款开源软件,实现了 RTP 与 RTCP 协议。 目前使用 oRTP 库的软件主要是linphone(一款基于IP 进行视频和语音通话的软件)。 在windows平台下,使用vs2010编译Ortp_0.25.0库的工程。

2015-11-26

ffmpeg mfc 播放器

基于ffmpeg + mfc 的播放器例子。处理流程:音/视频编码分离、音/视频同步、音/视频解码编码转换、显示、支持任意格式视频的播放器例子。

2015-01-31

VS2008编译live555工程项目

环境为VS2008+Win7 + 2016_07_24下载live555版本,文件里包含VS2008编译好的live555工程项目;

2016-12-08

WinRing0_1_3_0 源代码示例 使用vs2017编译

源代码框架: 1. WinRing0SampleCpp.exe 调用 WinRing0.dll 接口。 源码: \source\sample\Cpp\目录。 2. WinRing0.dll将WinRing0x64.sys驱动文件动态加载到系统服务中。源码: \source\dll\目录。 3. winRing64.sys 有数字签名可以直接使用。 源码: \source\dll\sys\目录。 4. manual.chm 使用说明和api文档。 注意: 使用vs2017编译 打开\sour

2020-09-10

demo-udp.zip

vs2017 mfc CAsyncSocket 实现组播的代码

2021-09-27

mfc socket 客户端/服务器 实例

vs2008下CAsyncSocket类, 实现客户端/服务器通信,

2012-09-18

WinIO驱动例子代码

包含WinIO的源代码,WinIO的VB实例代码,WinIO的C++实例代码。 1. Source目录:驱动代码 。 2. Help 目录:使用说明。 3. Examples 目录: c++,vb使用例子代码。

2020-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除