Video output duplication

I’ll preface this by mentioning I’ve never developed a kernel-mode component however I’m familiar with most of the concepts involved (I’ve read over “The Basics” section on this site and found nothing I didn’t already know)

I’m interested in some direction in the most efficient method of sampling the primary surface for the purpose of real-time streaming. I’m familiar with the usual methods (e.g, userland hooking of D3D) however these aren’t too elegant and aren’t too reliable.

Essentially what I’d like to accomplish is having the video adapter DMA the contents of the primary surface (or the next buffer in the flip-chain) to system memory periodically.

The most promising interface I’ve found [in the WDDM] is the VidPN model where-in I’m wondering if it’s possible to emulate an output pin by registering a virtual target set? The documentation isn’t all that great for understanding the details, frankly.

I understand any solution in this area would probably involve hacking up the miniport and/or dxkrnl interfaces and I’m comfortable with that if it’s required.

Thanks,

Matt.

xxxxx@hotmail.com wrote:

I’m interested in some direction in the most efficient method of sampling the primary surface for the purpose of real-time streaming. I’m familiar with the usual methods (e.g, userland hooking of D3D) however these aren’t too elegant and aren’t too reliable.

There are political reasons for this, as well as technical. The
entertainment industry wants to make it difficult to make perfect copies
of streamed movies. Well-dressed Hollywood lawyers have spent lots of
time in Redmond making sure that Microsoft understands their position on
this.

Many large teams have spent many thousands of man hours exploring the
solutions to this problem. What we have now is very nearly the best
that can be done.

Essentially what I’d like to accomplish is having the video adapter DMA the contents of the primary surface (or the next buffer in the flip-chain) to system memory periodically.

You understand that the primary surface does not always reflect the
visible screen? Overlays and textures are sometimes applied at refresh
time.

The most promising interface I’ve found [in the WDDM] is the VidPN model where-in I’m wondering if it’s possible to emulate an output pin by registering a virtual target set?

I believe this is essentially the approach taken by DisplayLink.

I understand any solution in this area would probably involve hacking up the miniport and/or dxkrnl interfaces and I’m comfortable with that if it’s required.

Yes, it does. Unfortunately, because of the extreme consolidation of
the graphics chip industry, there are only about half a dozen places in
the world today that have the kind of WDDM expertise you need to pull
this off. I’m afraid you have a long road ahead of you.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.