diff options
Diffstat (limited to 'AVStream/avshws/capture.h')
| -rw-r--r-- | AVStream/avshws/capture.h | 313 |
1 files changed, 0 insertions, 313 deletions
diff --git a/AVStream/avshws/capture.h b/AVStream/avshws/capture.h deleted file mode 100644 index 502e01e3..00000000 --- a/AVStream/avshws/capture.h +++ /dev/null @@ -1,313 +0,0 @@ -/************************************************************************** - - AVStream Simulated Hardware Sample - - Copyright (c) 2001, Microsoft Corporation. - - File: - - capture.h - - Abstract: - - This file contains header for the video capture pin on the capture - filter. The capture sample performs "fake" DMA directly into - the capture buffers. Common buffer DMA will work slightly differently. - - For common buffer DMA, the general technique would be DPC schedules - processing with KsPinAttemptProcessing. The processing routine grabs - the leading edge, copies data out of the common buffer and advances. - Cloning would not be necessary with this technique. It would be - similiar to the way "AVSSamp" works, but it would be pin-centric. - - History: - - created 3/8/2001 - -**************************************************************************/ -#include <initguid.h> -// -// STREAM_POINTER_CONTEXT: -// -// This is the context structure we associate with all clone stream pointers. -// It allows the mapping code to rip apart the buffer into chunks the same -// size as the scatter/gather mappings in order to fake scatter / gather -// bus-master DMA. -// -typedef struct _STREAM_POINTER_CONTEXT { - - PUCHAR BufferVirtual; - -} STREAM_POINTER_CONTEXT, *PSTREAM_POINTER_CONTEXT; - -// -// CCapturePin: -// -// The video capture pin class. -// -class CCapturePin : - public ICaptureSink { - -private: - - // - // The AVStream pin we're associated with. - // - PKSPIN m_Pin; - - // - // Pointer to the internal device object for our capture device. - // We access the "fake" hardware through this object. - // - CCaptureDevice *m_Device; - - // - // The state we've put the hardware into. This allows us to keep track - // of whether to do things like unpausing or restarting. - // - HARDWARE_STATE m_HardwareState; - - // - // The clock we've been assigned. As with other capture filters, we do - // not expose a clock. If one has been assigned, we will use it to - // time stamp packets (plus a reasonable delta to work the capture stream - // in a preview graph). - // - PIKSREFERENCECLOCK m_Clock; - - // - // The captured video info header. The settings for "fake" hardware will be - // programmed via this video info header. - // - PKS_VIDEOINFOHEADER m_VideoInfoHeader; - - // - // If we are unable to insert all of the mappings in a stream pointer into - // the "fake" hardware's scatter / gather table, we set this to the - // stream pointer that's incomplete. This is done both to make the - // relasing easier and to make it easier to fake the scatter / gather - // hardware. - // - PKSSTREAM_POINTER m_PreviousStreamPointer; - - // - // An indication of whether or not we pended I/O for some reason. If this - // is set, the DPC will resume I/O when any mappings are completed. - // - BOOLEAN m_PendIo; - - // - // An indication of whether or not this pin has acquired the necessary - // hardware resources to operate. When the pin reaches KSSTATE_ACQUIRE, - // we attempt to acquire the hardware. This flag will be set based on - // our success / failure. - // - BOOLEAN m_AcquiredResources; - - // - // Presentation time for the sample - // - LONGLONG m_PresentationTime; - - LONGLONG m_FrameNumber; - LONGLONG m_DroppedFrames; - - // - // CleanupReferences(): - // - // Clean up any references we hold on frames in the queue. This is called - // when we abruptly stop the fake hardware. - // - NTSTATUS - CleanupReferences ( - ); - - // - // SetState(): - // - // This is the state transition handler for the capture pin. It attempts - // to acquire resources for the capture pin (or releasing them if - // necessary) and starts and stops the hardware as required. - // - NTSTATUS - SetState ( - IN KSSTATE ToState, - IN KSSTATE FromState - ); - - // - // Process(): - // - // This is the processing dispatch for the capture pin. It handles - // programming the scatter / gather tables for the hardware as buffers - // become available. This processing routine is designed for a direct - // into the capture buffers kind of DMA as opposed to common-buffer - // and copy strategies. - // - NTSTATUS - Process ( - ); - // - // CaptureVideoInfoHeader(): - // - // This routine stashes the video info header set on the pin connection - // in the CCapturePin object. This is used to base hardware settings. - // - PKS_VIDEOINFOHEADER - CaptureVideoInfoHeader ( - ); - - // - // Cleanup(): - // - // This is the free callback from the bagged item (CCapturePin). If we - // do not provide a callback when we bag the CCapturePin, ExFreePool - // would be called. This is not desirable for C++ constructed objects. - // We merely delete the object here. - // - static - void - Cleanup ( - IN CCapturePin *Pin - ) - { - delete Pin; - } - -public: - // - // CCapturePin(): - // - // The capture pin's constructor. Initialize any non-0, non-NULL fields - // (since new will have zero'ed the memory anyway) and set up our - // device level pointers for access during capture routines. - // - CCapturePin ( - IN PKSPIN Pin - ); - - // - // ~CCapturePin(): - // - // The capture pin's destructor. - // - ~CCapturePin ( - ) - { - } - - // - // ICaptureSink::CompleteMappings() - // - // This is the capture sink notification mechanism for mapping completion. - // When the device DPC detects that a given number of mappings have been - // completed by the fake hardware, it signals the capture sink of this - // through this method. - // - virtual - void - CompleteMappings ( - IN ULONG NumMappings - ); - - /************************************************* - - Dispatch Routines - - *************************************************/ - - // - // DispatchCreate(): - // - // This is the creation dispatch for the capture pin. It creates - // the CCapturePin object and associates it with the AVStream object - // bagging it in the process. - // - static - NTSTATUS - DispatchCreate ( - IN PKSPIN Pin, - IN PIRP Irp - ); - - // - // DispatchSetState(): - // - // This is the set device state dispatch for the pin. The routine bridges - // to SetState() in the context of the CCapturePin. - // - static - NTSTATUS - DispatchSetState ( - IN PKSPIN Pin, - IN KSSTATE ToState, - IN KSSTATE FromState - ) - { - return - (reinterpret_cast <CCapturePin *> (Pin -> Context)) -> - SetState (ToState, FromState); - } - - // - // DispatchSetFormat(): - // - // This is the set data format dispatch for the pin. This will be called - // BEFORE pin creation to validate that a data format selected is a match - // for the range pulled out of our range list. It will also be called - // for format changes. - // - // If OldFormat is NULL, this is an indication that it's the initial - // call and not a format change. Even fixed format pins get this call - // once. - // - static - NTSTATUS - DispatchSetFormat ( - IN PKSPIN Pin, - IN PKSDATAFORMAT OldFormat OPTIONAL, - IN PKSMULTIPLE_ITEM OldAttributeList OPTIONAL, - IN const KSDATARANGE *DataRange, - IN const KSATTRIBUTE_LIST *AttributeRange OPTIONAL - ); - - // - // DispatchProcess(): - // - // This is the processing dispatch for the capture pin. The routine - // bridges to Process() in the context of the CCapturePin. - // - static - NTSTATUS - DispatchProcess ( - IN PKSPIN Pin - ) - { - return - (reinterpret_cast <CCapturePin *> (Pin -> Context)) -> - Process (); - - } - - // - // IntersectHandler(): - // - // This is the data intersection handler for the capture pin. This - // determines an optimal format in the intersection of two ranges, - // one local and one possibly foreign. If there is no compatible format, - // STATUS_NO_MATCH is returned. - // - static - NTSTATUS - IntersectHandler ( - IN PKSFILTER Filter, - IN PIRP Irp, - IN PKSP_PIN PinInstance, - IN PKSDATARANGE CallerDataRange, - IN PKSDATARANGE DescriptorDataRange, - IN ULONG BufferSize, - OUT PVOID Data OPTIONAL, - OUT PULONG DataSize - ); - -};
\ No newline at end of file |
