Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Om ett filter använder filtercentrerad bearbetning anropar AVStream som standard den minidriver-tillhandahållna AVStrMiniFilterProcess-återanropsrutinen när det finns dataramar tillgängliga på varje pin-instans. Minidrivrutiner kan ändra det här standardbeteendet genom att ange Flags-medlemmen i strukturen KSPIN_DESCRIPTOR_EX.
Om du vill implementera filtercentrerad bearbetning anger du en pekare till en avStrMiniFilterProcess-återanropsrutin som tillhandahålls av minidriver i processmedlemmen i KSFILTER_DISPATCH-strukturen . Ange processmedlemmen i KSPIN_DISPATCH till NULL.
AVStream anropar endast AVStrMiniFilterProcess när alla följande villkor uppfylls:
Ramar är tillgängliga på pinnar som kräver ramar för att bearbetning ska ske. Minidrivrutiner kan ändra bearbetningsbeteendet genom att ange flaggor i medlemmen Flags av KSPIN_DESCRIPTOR_EX. Var särskilt uppmärksam på kombinationerna av de ömsesidigt uteslutande flaggorna, KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING och KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING. Minidrivrutinen kan också ändra delmängden av stift som kräver ramar genom att använda förfarandena KsPinAttachAndGate eller KsPinAttachOrGate.
Antalet pin-exemplar är lika med eller större än InstancesNecessary-medlemmen i KSPIN_DESCRIPTOR_EX-strukturen. ClientState-medlemmen i KSPIN-strukturen anger den specifika KSSTATE-uppräknare som pin-koden för närvarande är inställd på. Efter att InstancesNecessary har uppfyllts, kommer ytterligare stift i KSSTATE_STOP-tillståndet inte att förhindra filterbearbetning.
Det antal pin-instanser som krävs är uppfyllt (enligt InstancesNecessary-medlemmen i KSPIN_DESCRIPTOR_EX-strukturen.
Minidrivrutinen har inte stängt processkontrollporten för filtret med hjälp av funktionerna KSGATEXxx.
I återanropsrutinen AVStrMiniFilterProcess tar minidrivrutinen emot en pekare till en matris av KSPROCESSPIN_INDEXENTRY strukturer. AVStream beställer matrisen med KSPROCESSPIN_INDEXENTRY-strukturer efter pin-ID.
Följande kodexempel visar hur du använder processpinstrukturerna. Koden hämtas från exemplet AVStream Filter-Centric Simulated Capture Driver (Avssamp), som visar hur du skriver en filtercentrerad avbildningsdrivrutin. Källkod och en beskrivning av det här exemplet ingår i nedladdningen av Windows Driver Kit-exempel.
Minidrivrutinen tar emot en matris med strukturer av typen KSPROCESSPIN_INDEXENTRY i filterprocessens dispatch. I det här exemplet extraherar minidrivrutinen den första KSPROCESSPIN-strukturen från KSPROCESSPIN_INDEXENTRY-strukturen från index VIDEO_PIN_ID:
NTSTATUS
CCaptureFilter::
Process (
IN PKSPROCESSPIN_INDEXENTRY ProcessPinsIndex
)
{
PKSPROCESSPIN VideoPin = NULL;
...
VideoPin = ProcessPinsIndex [VIDEO_PIN_ID].Pins [0];
...
}
Minidrivrutinen bör inte referera till ProcessPinsIndex [n]. Pins [0] innan den har verifierat att Count-medlemmen i ProcessPinsIndex [n] är minst en, eller att InstancesNecessary-medlemmen i KSPIN_DESCRIPTOR_EX-strukturen i Pins [0] är minst en. (Om det senare är sant är pinnen garanterad att finnas.)
Om du sedan vill ange den pinne som du vill fånga bilder på, skickar callback-rutinen AVStrMiniFilterProcess en pekare till en KSPROCESSPIN-struktur till CaptureFrame, en leverantörslevererad insamlingsrutin.
VidCapPin -> CaptureFrame (VideoPin, m_Tick);
Insamlingsrutinen kan sedan kopieras till eller från datamedlemmen i KSPROCESSPIN-strukturen. Det kan också uppdatera bytesUsed - och Terminate-medlemmarna i den här strukturen, som i följande exempel:
RtlCopyMemory ( ProcessPin -> Data,
m_SynthesisBuffer,
m_VideoInfoHeader -> bmiHeader.biSizeImage
);
ProcessPin -> BytesUsed = m_VideoInfoHeader -> bmiHeader.biSizeImage;
ProcessPin -> Terminate = TRUE;
Minidrivrutinen kan också komma åt dataströmshuvudstrukturen som motsvarar den aktuella strömpekare och pinnen.
PKSSTREAM_HEADER StreamHeader = ProcessPin -> StreamPointer -> StreamHeader;
De flesta minimejslar som använder filtercentrerad bearbetning använder endast strömpekaren för åtkomst till strömhuvud. I den filtercentrerade modellen manipulerar AVStream strömpekaren internt. Därför bör minidrivrutiner vara försiktiga om de manipulerar strömpekaren i en filtercentrerad drivrutin.