M
mymail2rss
Hello, everybody,
I have a task to share a single video stream among several user mode
applications at the same time. User mode apps can be written to use
DirectShow or VfW architecture -- I need both of those to work with
the
shared video stream. Here's the approach I use. I have a user mode
part
which captures the stream from a physical video stream source (web
camera,
if it matters) then it transfers captured frames to a WDM stream
minidriver.
The minidriver is installed as a virtual video capture source in the
system
so other user mode applications can connect to it and capture the
video
stream. This minidriver is a modified version of the Micrsoft's
testcap
sample from the DDK. To support multiple connections (output pins) I
set the
NumberOfPossibleInstances in the HW_STREAM_INFORMATION to a required
number
(say 32). Then I made several more changes to support datastructures
for
every stream instance and to track creation and closing of those
instances.
After all this I came up with the following result: those applications
that
use DirectShow for video capturing can connect to my driver and
capture the
video stream with no problem. I can have several such applications (up
to
NumberOfPossibleInstances value set for the stream) connected to the
WDM
driver at the same time. BUT VfW applications now can't connect to the
driver at all! Not even a single instance can be created! As soon as I
start
an old style app using VfW and try to select my virtual capture source
as an
input source I end up with the error "Video device already in
use" ("You
cannot use this device... close the application that is using it..."
and all
that crap).
I would think that it's the way the VfW to WDM mapper works and
there's no
solution to the problem, but I have a working driver (binary) that can
do
the job. I looked at it's internals from a debugger and can see that
it is
also a modified version of MS' testcap sample and it also increases
the
NumberOfPossibleInstances parameter to get several connections to the
same
output pin in the filter.
Could someone please advise, what can be the trick to make VfW
applications
to work with the WDM driver which servs more than one instance of a
single
stream? I've been trying to figure out the answer for several weeks
and I'm
starting to feel a bit suicidal now. Any advise will be highly
appreciated.
Thanks in advance,
Al K.
I have a task to share a single video stream among several user mode
applications at the same time. User mode apps can be written to use
DirectShow or VfW architecture -- I need both of those to work with
the
shared video stream. Here's the approach I use. I have a user mode
part
which captures the stream from a physical video stream source (web
camera,
if it matters) then it transfers captured frames to a WDM stream
minidriver.
The minidriver is installed as a virtual video capture source in the
system
so other user mode applications can connect to it and capture the
video
stream. This minidriver is a modified version of the Micrsoft's
testcap
sample from the DDK. To support multiple connections (output pins) I
set the
NumberOfPossibleInstances in the HW_STREAM_INFORMATION to a required
number
(say 32). Then I made several more changes to support datastructures
for
every stream instance and to track creation and closing of those
instances.
After all this I came up with the following result: those applications
that
use DirectShow for video capturing can connect to my driver and
capture the
video stream with no problem. I can have several such applications (up
to
NumberOfPossibleInstances value set for the stream) connected to the
WDM
driver at the same time. BUT VfW applications now can't connect to the
driver at all! Not even a single instance can be created! As soon as I
start
an old style app using VfW and try to select my virtual capture source
as an
input source I end up with the error "Video device already in
use" ("You
cannot use this device... close the application that is using it..."
and all
that crap).
I would think that it's the way the VfW to WDM mapper works and
there's no
solution to the problem, but I have a working driver (binary) that can
do
the job. I looked at it's internals from a debugger and can see that
it is
also a modified version of MS' testcap sample and it also increases
the
NumberOfPossibleInstances parameter to get several connections to the
same
output pin in the filter.
Could someone please advise, what can be the trick to make VfW
applications
to work with the WDM driver which servs more than one instance of a
single
stream? I've been trying to figure out the answer for several weeks
and I'm
starting to feel a bit suicidal now. Any advise will be highly
appreciated.
Thanks in advance,
Al K.