Click here to Skip to main content
15,891,976 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
Hi,

I developped an application that plays video through DirectShow with the VMR9 API.
Of course, I want to prevent the user from playing if VMR9 is not present, which I found could be done by classical success of the following code
VB
hr = CoCreateInstance(CLSID_VideoMixingRenderer9, NULL,
  CLSCTX_INPROC, IID_IBaseFilter,(LPVOID *)&pBF);


My application is capable of playing video on whatever monitor selected by the user.

It worked fine until I tried to connect a USB graphic device, as I found that it seems relative to the VMR9 capability of the graphic device.

Here are the tests I did so far :
- On a laptop (Windows XP), with this USB device defined as the primary, my application said VMR9 was not installed.
- On the same laptop, with this USB device defined as a desktop extension, my application said VMR9 was installed, probably because my laptop chipset supports it.

Of course, the way it is implemented, the result of the VMR9 capabilities test is global to the system, and it seems it is only considering the checking of the primary device.

So my questions are
- How can I know that a device is VMR9 capable ?
- Moreover, I tried the same tests on a Windows 7 desktop PC and it reports VMR9 installed, whatever the USB device is primary or not. So it is not only related to the hardware as the same USB device works under 7 and not under XP. Would I have to install something else ?

Thanks in advance for advices and comments.
Posted

After investigations (with help of DXDiag), it looks the behavior is not only linked to VMR9, but also to Direct3D which is not enabled for the USB device under Windows XP (not supported ?), while it is under Windows 7.
As far as my knowledge, VMR9 is based on Direct3D.
Hence the issue, probably.

How can I determine if a device supports Direct3D ?
Basically, what is the code behind the DXDiag report ?

Thanks in advance.
 
Share this answer
 
Well, here is my final conclusion :

All this is logical, as I found the explanation on the USB graphic card driver knowledge base :

Interface      Windows XP support  Windows Vista/Win7 support
DX10             No Yes, if supported by the primary graphics card.
DX9  No Yes, but not full screen, windowed only
Direct 3D  No Yes, but not if the screen is primary


So, managing USB Graphic card VMR9 capability in an application is actually not as easy as checking the success of creating the Video Mixing Renderer, but we MUST check the Direct3D capability.

Please let me know if you know how to do that :-)

Thanks.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900