Back to Windows Driver Samples

AVStream filter-centric simulated capture sample driver (Avssamp)

avstream/avssamp/README.md

latest4.3 KB
Original Source

AVStream filter-centric simulated capture sample driver (Avssamp)

The AVStream filter-centric simulated capture sample driver (Avssamp) provides a filter-centric AVStream capture driver with functional audio. This streaming media driver performs video captures at 320 x 240 pixel resolution in RGB24 or YUV422 format while playing a user-provided Pulse Code Modulation (PCM) wave audio file in a loop. The sample demonstrates how to write a filter-centric AVStream minidriver.

Installation instructions

  1. Copy AVssamp.inf to a directory, for example, C:\Avstream\.

  2. In this directory, create a new subdirectory named objfre_x86 if the target operating system is x86-based, or objfre_amd64 for an x64-based target operating system, for example, C:\AVstream\objfre_x86\.

  3. Copy the processor-appropriate Avssamp.sys file to the objfre_* directory.

  4. Start a command prompt with administrator privilege and run the processor-specific WDK tool Devcon.exe to launch the installation. For example:

    C:\WinDDK\7600.16384.0\tools\devcon\i386\devcon.exe install C:\AVstream\avssamp.inf SW\{20698827-7099-4c4e-861A-4879D639A35F}

Programming tour

DriverEntry in Avssamp.cpp is the initial point of entry into the driver. This routine passes control to AVStream by calling KsInitializeDriver. In this call, the minidriver passes the device descriptor, an AVStream structure that recursively defines the AVStream object hierarchy for a driver. This is common behavior for an AVStream minidriver.

Filter.cpp is where the sample lays out the KSPIN_DESCRIPTOR_EX structure for the single capture pin. Audio.cpp contains the KSPIN_DESCRIPTOR_EX structure for the audio capture pin. This pin is dynamically created only if C:\avssamp.wav exists and is a valid and readable PCM format wave file.

The filter dispatch structure KSFILTER_DISPATCH in Filter.cpp provides dispatches to create and process data. The DispatchProcess method is defined inline in Filter.h. It calls the Process method in Filter.cpp in the context of the CCaptureFilter class. Be aware that the process dispatch is provided in KSFILTER_DISPATCH because this sample is filter-centric.

Audio.cpp lays out a KSPIN_DISPATCH pin dispatch structure, which contains the dispatch table for the audio pin. Be aware that the Process member of this structure is NULL because the sample is filter-centric. Similarly, Video.cpp contains the KSPIN_DISPATCH structure for the video capture pin, again with the Process member set to NULL.

For more information, see the comments in all .cpp files.

File manifest

FileDescription
Audio.cppAudio capture pin implementation
Audio.hHeader file for Audio.cpp
Avssamp.cppMain file for the AVStream filter-centric sample.
Avssamp.hMain header for the AVStream filter-centric sample.
Avssamp.infInstallation information for the AVStream sample driver (avssamp.sys).
Capture.cppCapture pin implementation for all capture pins on the sample filter.
Capture .hCapture pin level header for all capture pins on the sample filter.
Filter.cppCapture filter implementation (including frame synthesis) for the fake capture filter.
Filter.hFilter level header for the filter-centric capture filter.
Image.cppImage synthesis and overlay code. These objects provide image synthesis (pixel, color-bar, etc) onto RGB24 and UYVY buffers as well as software string overlay into these buffers.
Image.hImage synthesis and overlay header
Purecall.h_purecall stub necessary for virtual function usage in drivers.
Video.cppVideo capture pin implementation
Video.hVideo capture pin header
Wave.cppWave object implementation
Wave.hWave object header