Alessandro
There are 2 directshow implementations. The original directshow (P_DIRECTSHOW) was dependent on DirectSound being present (which sometimes it is not) and the second directshow2 (P_DIRECTSHOW2) did not. DirectShow2 files should be in the distro but may or may not be loaded in the project (vidinput_directx2.h.cxx) Check to see in the ptbuildopts.h what has been enabled.
It appears directshow is not loading because the dependency is not present. Try DirectShow2.
The current PTLIB SVN and H323plus CVS now use DirectShow2 by default.
Simon
-----Original Message----- From: h323plus-bounces@lists.packetizer.com [mailto:h323plus-bounces@lists.packetizer.com] On Behalf Of Alessandro Angeli Sent: Thursday, October 28, 2010 9:30 AM To: h323plus@lists.packetizer.com Subject: [h323plus] enabling DirectShow video input
I successfully built the debug configurations of ptlib 2.4.5 (static), h323plus 1.21.0 and simpleplus 1.21.0 in VS2008SP1 + WinSDK 7.1 on Win7/x64.
Audio and text work fine. However, video does not work: "No Video Grabber available Disabling Video Support!".
DirectShow support in vidinput_directx.cxx is compiled successfully and the DirectShow branches in simpleplus/main.cxx are active, since P_DIRECTSHOW is #define'd as 1 in ptbuildopts.h. I tried #define'ing P_DSHOW to 1 as well in simpleplus, without any difference.
As far as I can tell, the problem is that the DirectShow service is never registered on startup.
I expanded the PCREATE_VIDINPUT_PLUGIN(DirectShow) macro in vidinput_directx.cxx to put a breakpoint in PPlugin_PVideoInputDevice_DirectShow_Registration::<ctor>() and that code is compiled but never executed. Actually, it appears to never be mapped into memory at all, which should imply that the linker is removing it from the final EXE, but adding /OPT:NOREF in the build config of simpleplus does not make a difference.
However FakeVideo is registered and it also uses the PCREATE_VIDINPUT_PLUGIN() macro, and I can not spot any difference between the way FakeVideo and DirectShow are compiled and linked.
The only reference to a similar issue I could find is from over one year ago:
http://lists.packetizer.com/pipermail/h323plus/2009-August/001165.html
But the current code already uses PCREATE_VIDINPUT_PLUGIN() and, as I said, FakeVideo uses the same macro but is correctly registered.
-- Alessandro