在 directx 11 中渲染 h264 视频帧

2024-01-06

我是新来的DirectX。我正在尝试编写一个自定义 IP 摄像机视频播放器,并且我正在使用它DirectX11使用 Wpf Gui 作为前端渲染解码图像。

I am a 时间:2019-03-17 标签:c#developer并使用了托管的directx,它不再由微软因此转移到 wpf 和 directx11。

我的应用程序的所有部分(直到帧的渲染)都工作正常。

我已经成功创建了一个将在 Wpf 应用程序中使用的 D3DImage 源,成功创建了我的视口和我的设备,包括我的共享资源,因为 D3DImage 仅适用于 Directx9。我在用SharpDX作为包装DirectX API.

现在我的问题是我似乎无法找到一种方法来创建纹理/从解码的图像字节更新纹理,或者什么是正确的方法来这样做,以便从收到的字节渲染解码的图像。

对此有任何帮助都会很棒,或者如果有人可以指导我如何处理这个问题的正确方向?

Thanks.


经过近两周的搜索并试图找到我所说的问题的解决方案,我终于找到了如下。

然而,这确实显示了图像,但不符合预期,但我相信这对我来说是一个开始,因为下面的代码回答了我最初提出的问题。

Device.ImmediateContext.ClearRenderTargetView(this.m_RenderTargetView, Color4.Black);

    Texture2DDescription colordesc = new Texture2DDescription
    {
        BindFlags = BindFlags.ShaderResource,
        Format = m_PixelFormat,
        Width = iWidth,
        Height = iHeight,
        MipLevels = 1,
        SampleDescription = new SampleDescription(1, 0),
        Usage = ResourceUsage.Dynamic,
        OptionFlags = ResourceOptionFlags.None,
        CpuAccessFlags = CpuAccessFlags.Write,
        ArraySize = 1
    };

    Texture2D newFrameTexture = new Texture2D(this.Device, colordesc);

    DataStream dtStream = null;
    DataBox dBox = Device.ImmediateContext.MapSubresource(newFrameTexture, 0, MapMode.WriteDiscard, 0, out dtStream);
    if (dtStream != null)
    {
        int iRowPitch = dBox.RowPitch;

        for (int iHeightIndex = 0; iHeightIndex < iHeight; iHeightIndex++)
        {
            //Copy the image bytes to Texture
            dtStream.Position = iHeightIndex * iRowPitch;
             Marshal.Copy(decodedData, iHeightIndex * iWidth * 4, new IntPtr(dtStream.DataPointer.ToInt64() + iHeightIndex * iRowPitch), iWidth * 4);
        }
    }

    Device.ImmediateContext.UnmapSubresource(newFrameTexture, 0);


    Device.ImmediateContext.CopySubresourceRegion(newFrameTexture, 0, null, this.RenderTarget, 0);
    var shaderRescVw = new ShaderResourceView(this.Device, this.RenderTarget);

    Device.ImmediateContext.PixelShader.SetShaderResource(0, shaderRescVw);

    Device.ImmediateContext.Draw(6, 0);
    Device.ImmediateContext.Flush();
    this.D3DSurface.InvalidateD3DImage();

    Disposer.SafeDispose(ref newFrameTexture);

使用上面的代码,我现在可以使用收到的新图像数据填充纹理,但图像未以正确的颜色/像素渲染,如下图红色框中所示。

Screenshot of the rendered image: enter image description here

图像字节通过 BGRA32 像素格式的解码器接收。 任何解决此问题的建议都会非常有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 directx 11 中渲染 h264 视频帧 的相关文章

  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • ASMX Web 服务,测试表单仅在本地计算机上适用于一种 WebMethod

    我有一个正在测试的 ASMX WebService 并且在大多数方法上我都可以使用测试表单进行测试 然而 我确实有一种方法 测试表上写着 The test form is only available for requests from t
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • 打开位置设置页面或提示用户启用位置

    我一直在绞尽脑汁 徒劳地谷歌搜索 我正在尝试找到一种方法来提示用户通过直接进入设置页面或仅点击屏幕上的 是 来切换位置 我见过的所有代码似乎都不起作用 有人有有效的方法吗 一个详细的例子将不胜感激 谢谢 我对 Xamarin 开发非常陌生
  • 如何在不修改以前的文本的情况下更改 WPF RichTextBox 中的 FontFamily

    当您使用 RichTextBox 的 FontFamily 属性时 它会更改 FlowDocument 内整个内容的 FontFamily 就像执行 EditingCommands ToggleBold 这样的命令一样 它仅更改插入符号下的
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 动态菜单创建IoC

    我想知道是否有人知道我如何创建如何使用 AutoFac 之类的东西来让我动态地允许 dll 创建自己的表单和菜单项以在运行时调用它们 所以如果我有一个 员工 dll 新入门表格 证书表格 供应商 dll 供应商详细信息来自 产品形态 在我的
  • 在 C# 窗口应用程序中运行 C/C++ 控制台应用程序?

    现在 我想开发一个简单的应用程序 因此我决定最快的编码方式是 C NET 但现在 我很难实现我需要的功能之一 我想做的是在 C 应用程序的窗口内运行 C C 控制台应用程序 就像在虚幻前端中一样 添加一点通信方式 以便我可以为控制台应用程序
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同

随机推荐

  • 如何找到两个序列之间的重叠并返回它

    我需要找到两个序列之间的重叠部分 重叠位于第一个序列的左端和第二个序列的右端 我希望该函数找到重叠部分并返回它 我的序列是 s1 CGATTCCAGGCTCCCCACGGGGTACCCATAACTTGACAGTAGATCTC s2 GGCT
  • putpkt:写入失败,管道损坏

    我正在使用 AdHoc 部署在 iPad 上部署我的应用程序 但收到此错误 我已经检查了 SO 中的几个问题 它们的说法相同 但解决方案始终是重新启动 XCode 重新启动 iPad 重新启动 Mac 我已经完成了所有三个操作 但此错误并未
  • 带枕头的图像上出现羽状边缘

    我试图弄清楚如何使用 Pillow 和 Python 来羽化图像的边缘 我需要像这只可爱的猫这样的东西 忽略可见的边缘 I tried im filter ImageFilter BLUR 但这不是我要找的 看看这个例子 from PIL
  • 使用 Hibernate / Spring / JUnit 设置和拆除复杂的数据库状态

    我有一个正在进行单元测试的课程 需要相当广泛的数据库设置才能运行各个测试方法 此设置需要很长时间 由于希望与当前问题无关的原因 我需要以编程方式而不是从 SQL 转储填充数据库 我遇到的问题是拆卸 如何轻松回滚数据库设置阶段所做的所有更改
  • 我可以用python生成真实的随机数吗?

    我正在学习Python的随机模块 我知道它会生成伪随机数 其核心思想是使用高频时钟作为种子 然后使用函数产生 看起来像随机数 据我所知 在现实世界中产生真实的随机数是不可能的 但我知道Unix随机数生成器引入了一些其他因素 例如鼠标移动轨迹
  • C# - ADO.NET 的一些高性能最佳实践/技巧是什么 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我决定不使用 orm 并直接在我的项目中使用 ADO NET 我知道我知道它会花费更长的时间来编程 但我只是希望页面即使在高峰时间也能高速加载
  • 声明 xsl 变量并为其赋值

    我正在开发一个使用 apache cocoon 将 XML 转换为 PDF 的应用程序 并且我正在重新设计处理输入 XML 的 XSL 目前在 XSL 中 我们有这样的代码
  • 使设置随机种子独立的函数

    有时我想编写一个随机函数 它始终为特定输入返回相同的输出 我总是通过在函数顶部设置随机种子然后继续来实现这一点 考虑以这种方式定义的两个函数 sample 12 lt function size set seed 144 sample 1
  • 更改运行 Windows 窗体程序的用户

    我用 C 编写了一个简单的 Windows 窗体程序 我希望能够输入 Windows 用户名和密码 当我单击登录按钮来运行代码时 我会以我输入的用户身份运行代码 您可以使用 WindowsIdentity Impersonate 方法来 实
  • iOS购买收据验证失败怎么办?

    iOS购买收据服务器验证通常是这样的 用户在 iPhone 上购买 您的应用程序将购买收据发送到服务器 服务器收到收据并发送给Apple进行验证 服务器从Apple获取验证结果 服务器将验证结果发送给应用程序 但如果只有第 1 步成功怎么办
  • 带填充的 Python 整数到十六进制字符串

    考虑一个整数 2 我想将其转换为十六进制字符串 0x02 通过使用python的内置函数hex 我可以获得 0x2 这不适合我的代码 谁能告诉我如何以方便的方式获得我想要的东西 谢谢 integer 2 hex string 0x 02x
  • 将 CoreData 添加到现有项目

    我正在尝试将 CoreData 添加到现有项目中并且 有奇怪的错误 我收到错误 由于未捕获的异常而终止应用程序 NSInvalidArgumentException 原因 无法创建 NSPersistentStoreCoordinator
  • 当 `git add` 操作时,“不会添加文件别名‘samefile’(‘SameFile’已存在于索引中)”

    我下载了linux的内核源代码 并且想要git add商场 When I git add git 开始添加它们 但很快它返回一个错误 fatal Will not add file alias include linux netfilter
  • 应用掩码以格式化 SQL Server 查询/视图中的字符串

    有没有一种巧妙的方法可以将掩码应用于 SQL Server 查询中的字符串 我有两张表 一张的电话号码存储为 varchar 没有文字0155567890和电话类型 其中具有该电话号码类型的掩码 返回字符串 对于合并文档 以便查询返回完全格
  • 您可以对多个泛型类型参数强制执行相同的约束吗?

    我知道你可以 你可以这样做 void M
  • 无法在 Linux 上安装 pyodbc

    我正在运行 Linux 2 6 18 164 15 1 el5 centos plus 并尝试安装 pyodbc 我正在执行 pip install pyodbc 并得到一个很长的错误列表 其结尾为 错误 命令 gcc 失败 退出状态为 1
  • 如何减少 SORT 操作中的 CPU 占用

    我正在使用 DFSORT 将磁带数据集复制到临时文件 并处理大约 80000000 条记录 仅复制数据集就需要 3 个小时 有没有其他方法可以减少CPU时间 建议将会非常有帮助 谢谢 STEP40 EXEC SORTD SORTIN DD
  • AWS - IAM 角色和信任关系

    我是 AWS 和 IAM 的新手 正在尝试了解角色和信任关系 我完全理解为什么使用角色 如何创建它们以及它们的用例 我不明白的是信任关系步骤 在我见过的几乎所有案例中 都是一对一的关系 EC2 需要与 EC2 建立信任 为什么会有额外的步骤
  • 如何在 .env 文件中定义数组/对象?

    以下是我的 Javascript 对象 window options VAR1 VAL1 VAR2 VAL2 VA31 VAL3 我希望它 对象或数组 定义在 env文件 我怎样才能做到这一点 值在 env值只能是字符串 简单的解决方法是将
  • 在 directx 11 中渲染 h264 视频帧

    我是新来的DirectX 我正在尝试编写一个自定义 IP 摄像机视频播放器 并且我正在使用它DirectX11使用 Wpf Gui 作为前端渲染解码图像 I am a 时间 2019 03 17 标签 c developer并使用了托管的d