Giter Club home page Giter Club logo

microsoftdisplaycapturetools's Introduction

ArtifactType Language Platform Tags
nupkg
c++, csharp, markdown
windows
display,testing,taef,displays,graphics

Microsoft Display Capture Tools

This repository contains the source for a generic test framework for validating display adapter devices, such as GPUs and USB-display dongles. It contains a plugin model for physical capture devices that can emulate monitors and receive pixel data, metadata, and other channels common to display protocols.

The goal for this project is to provide a standard for validating display adapters. The framework is designed to be as generic and extensible as possible, to enable a very wide variety of hardware devices, protocols, and tests to be plugged in.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

A test system running Windows 11 Enterprise or Pro For Workstations

You will need to install:

  1. Visual Studio 2022 with the following components:
    • .NET 7.0 Runtime
    • Windows 11 SDK
    • C++ Core Features
    • C# and Visual Basic
    • MSVC v143 - VS 2022 C++ x64/x86 build tools
    • MSBuild
    • C++ Universal Windows Platform support for v143 build tools
    • NuGet package manager

Note: Installing the Visual Studio 2022 "Workflows" for .Net desktop development, Universal Windows Platform development, and Desktop development with C++ will install all required individual components.

Installing

A step by step series of examples that tell you how to get a development environment running

  1. Clone the repository
  2. Open the solution file (HardwareHLK.sln) from an admin Visual Studio 2022 instance.
    • Due to the nature of these tests, admin is required for most testing situations.
  3. Right click on the solution and select "restore nuget packages"
    • During initial set up for a machine, this will fail to restore the MicrosoftIteIt68051 and Microsoft.TAEF packages. See Nuget Authentication.
  4. Build the solution.

Starting a Test

This entire code project is meant to be executed as a series of tests using a display device and a display capture device in tandem to verify that the expected display output is received. With the solution built, there are a few steps for running our default test pass:

  1. Attach a capture device supporting one of the installed plugins.
    • Two plugins are initially included:
      • CapturePlugins\TanagerPlugin:
        • Designed for a soon-to-be release capture device developed alongside this framework.
      • CapturePlugins\GenericCaptureCardPlugin:
        • Designed for DirectShow compatible USB capture cards.
          • The Elgato Cam Link is an example of such a device (although this is not an explicit endorsement). Generally... if the capture device appears as a Camera device to Windows, it should work.
        • These capture cards generally cannot emulate an arbitrary display, and as such have an additional setup step: you will need to go into Windows Display Settings and remove the target display from the desktop.
  2. Run the Tests project in the solution
    • By default - this will attempt to automatically determine which display sources correspond to available display sink devices, and will run all available tests on all source-to-sink combinations.

Troubleshooting

Generally, the command line output of the tests will indicate what the problem is and next steps. Problems can be raised as Github issues or you can contact the authors.

Nuget Authentication

The MicrosoftIteIt68051 package is sourced directly from this Github repo. However, to access a feed such as this you must authenticate your nuget requests, which will require a Github account. To do this, first create an access token as described here. To maintain best practices and prevent accidentally seeing tokens checked-in, use a nuget.config file in a parent directory to your clone - or a user-wide nuget.config for this authentication. Please see the nuget documentation for more information.

A working parent nuget.config file might look something like this:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="github" value="https://nuget.pkg.github.com/microsoft/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <github>
        <add key="Username" value="Spruill-1" />
        <!-- Github token as described in their documentation -->
      </github>
  </packageSourceCredentials>
</configuration>

Contributing

Please read our CONTRIBUTING.md which outlines all of our policies, procedures, and requirements for contributing to this project.

Versioning and changelog

We use SemVer for versioning. For a PR to be accepted it will have to include appropriate versioning updates for the impacted components.

We maintain a ChangeLog to be updated alongside any notable changes.

Authors

David Spruill (Microsoft) - principle author, framework Katie Anderson (Microsoft) - principle author, Tanager plugin Dave Hargrove (Microsoft) - hardware design, debugging Zachary Northrup (Microsoft) - software design, CaptureCardViewer project Larissa Umulinga (Microsoft) - author, CaptureCardViewer project

Note: Please add to this list as new components/contributors are added.

Contact Us

Suggestions and feedback can be sent to the authors at [email protected]

License

This project is licensed under the MIT license - see the LICENSE file for details

Acknowledgments

  • Hat tip to industry partners who helped inspire this project and provided early-stage feedback: Intel, Nvidia, AMD, Qualcomm, and Synaptics

microsoftdisplaycapturetools's People

Contributors

daspr-microsoft avatar lumulinga avatar zhuman avatar microsoftopensource avatar spruill-1 avatar microsoft-github-operations[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.