KSPIN_DESCRIPTOR_EX 구조체(ks.h)
KSPIN_DESCRIPTOR_EX 구조체는 지정된 필터 형식의 핀 형식 특성을 설명합니다.
통사론
typedef struct _KSPIN_DESCRIPTOR_EX {
const KSPIN_DISPATCH *Dispatch;
const KSAUTOMATION_TABLE *AutomationTable;
KSPIN_DESCRIPTOR PinDescriptor;
ULONG Flags;
ULONG InstancesPossible;
ULONG InstancesNecessary;
const KSALLOCATOR_FRAMING_EX *AllocatorFraming;
PFNKSINTERSECTHANDLEREX IntersectHandler;
} KSPIN_DESCRIPTOR_EX, *PKSPIN_DESCRIPTOR_EX;
회원
Dispatch
이 핀의 KSPIN_DISPATCH 구조체에 대한 포인터입니다. 이 포인터는 선택 사항이며 알림을 받으려는 클라이언트에서만 제공해야 합니다. 핀 중심 처리를 수행해야 하는 클라이언트(데이터 라우팅과 관련된 필터, 즉 하드웨어 드라이버)는 이 디스패치 테이블과 프로세스 디스패치를 제공해야 합니다. 자세한 내용은 KSPIN_DISPATCH 참조하세요.
AutomationTable
이 핀의 KSAUTOMATION_TABLE 구조체에 대한 포인터입니다. 자동화 테이블에는 핀에서 지원하는 속성, 메서드 및 이벤트가 포함됩니다. 이 자동화 테이블은 모든 핀에 대해 AVStream에서 제공하는 자동화 테이블과 병합됩니다. 클라이언트가 AVStream에서 이미 제공된 속성, 이벤트 또는 메서드 처리기를 제공하는 경우 클라이언트의 구현은 AVStream의 속성, 이벤트 또는 메서드 처리기를 대체합니다.
PinDescriptor
이 멤버는 KSPIN_DESCRIPTOR형식의 구조를 지정합니다.
Flags
ULONG 형식의 값을 지정합니다. 다음 목록에 나열된 플래그의 조합일 수 있습니다. 비트 OR를 사용하여 플래그를 지정합니다. KSPIN_FLAG_CRITICAL_PROCESSING 및 KSPIN_FLAG_HYPERCRITICAL_PROCESSING 함께 사용할 수 없습니다. KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 및 KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL 함께 사용할 수 없습니다. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 및 KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING 함께 사용할 수 없습니다. KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 및 KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 함께 사용할 수 없습니다.
KSPIN_FLAG_DISPATCH_LEVEL_PROCESSING
미니 드라이버가 PASSIVE_LEVEL 대신 IRQL DISPATCH_LEVEL 프로세스 디스패치를 요청하도록 요청했음을 나타냅니다.
KSPIN_FLAG_CRITICAL_PROCESSING
비동기 처리가 지정되었거나 시스템이 PASSIVE_LEVEL 실행 중이고 프로세스 호출이 DISPATCH_LEVEL 들어오는 경우 대기 중인 작업 항목에서 처리가 수행됩니다. 이 플래그는 작업 항목이 지연된 작업 큐가 아닌 중요한 작업 큐에 배치되어야 임을 나타냅니다.
KSPIN_FLAG_HYPERCRITICAL_PROCESSING
비동기 처리가 지정되었거나 시스템이 PASSIVE_LEVEL 실행 중이고 프로세스 호출이 DISPATCH_LEVEL 들어오는 경우 대기 중인 작업 항목에서 처리가 수행됩니다. 이 플래그는 작업 항목이 지연된 작업 큐 또는 중요한 작업 큐가 아닌 하이퍼크리티컬 작업 큐에 배치되어야 임을 나타냅니다.
KSPIN_FLAG_ASYNCHRONOUS_PROCESSING
핀이 데이터를 비동기적으로 처리해야 임을 나타냅니다. 이 플래그가 설정된 경우 AVStream은 추가 프레임을 진행하기 전에 하나의 프로세스 디스패치가 호출될 때까지 기다리지 않습니다.
KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING
AVStream은 미니 드라이버가 KsXxxAttemptProcessing명시적으로 호출하는 경우에만 처리 디스패치를 호출합니다. 큐를 직접 폴링하려는 클라이언트(예: DPC 시간)에서 데이터를 하드웨어로 전송하려는 클라이언트에 유용합니다.
KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL
데이터 프레임이 큐에 도착할 때마다 처리가 발생해야 임을 나타냅니다. 이 플래그를 지정하지 않으면 데이터가 이전에 빈 큐에 도착할 때만 프로세스 디스패치가 호출됩니다.
KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING
처리를 시작하기 위해 이 핀에 프레임이 필요하지 않음을 나타냅니다. 큐에 프레임이 없더라도 이제 상태 변경으로 인해 AVStream에서 처리 디스패치를 호출하는 것으로 충분합니다. 이 플래그는 필터 중심 필터에만 유용합니다. 사용 가능한 프레임이 없는 경우 필터에서 이 플래그 지연 처리를 지정하지 않는 핀입니다. 이 플래그를 지정하는 핀은 이러한 방식으로 처리를 지연시키지 않습니다. 핀이 이 플래그를 지정하면 사용 가능한 프레임을 확인하는 프로세스 디스패치의 책임이 됩니다.
KSPIN_FLAG_ENFORCE_FIFO
이 플래그를 지정하면 큐가 선입선 실행 방식으로 IRP를 강제로 처리하게 됩니다. 이전에 전송된 IRP 이전에 미니 드라이버에서 하나의 IRP를 완료한 경우 이전 IRP가 미니 드라이버에서 완료될 때까지 AVStream에서 이후 IRP를 완료하지 않습니다.
KSPIN_FLAG_GENERATE_MAPPINGS
이 플래그를 지정하면 미니 드라이버가 해당 프레임을 참조하는 스트림 포인터를 잠가는 경우 AVStream에서 대기 중인 프레임에 대한 분산/수집 매핑을 자동으로 생성합니다. 이 기능을 사용하려는 클라이언트는 KsDeviceRegisterAdapterObject 함수를 통해 AVStream에 DMA 어댑터 개체를 등록해야 합니다. 이 플래그가 KSSTREAM_HEADER 구조에 미치는 영향은 KSSTREAM_HEADERDataUsed 멤버를 참조하세요. KSSTREAM_POINTER_OFFSET참조하세요.
KSPIN_FLAG_DISTINCT_TRAILING_EDGE
핀과 연결된 큐에 후행 에지 스트림 포인터가 있어야 임을 나타냅니다. 후행 에지 포인터는 이전 데이터에 복제 포인터가 없는 한 큐에서 가장 오래된 데이터를 가리키는 특수 스트림 포인터입니다. 선행 및 후행 에지 스트림 포인터 사이의 창에 있는 모든 데이터 프레임은 하나 이상의 참조 개수가 있는 것으로 간주되며 KsPinGet을 사용하여 후행 가장자리를 이동하여 창 밖으로 이동할 때까지 완료되지 않습니다. TrailingEdgeStreamPointer 및 KsStreamPointerAdvanceXxx 또는 KsStreamPointerUnlock 함수 중 하나입니다. 이 플래그를 지정하지 않는 핀에는 후행 에지 스트림 포인터가 없습니다.
KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY
AVStream은 핀이 KSSTATE_RUN 있을 때만 이 핀을 호출하여 처리해야 임을 나타냅니다. 최소 처리 상태를 일시 중지에서 실행으로 변경합니다. AVStream은 프레임이 도착하는 경우에도 실행 상태로 이동하라고 후 이 핀을 호출하여
KSPIN_FLAG_SPLITTER
이 핀(출력 핀)이 분할자임을 나타냅니다. 이 플래그를 지정하는 핀은 가능한 인스턴스 수가 1보다 큰 수를 나타내야 합니다. 이 핀의 두 번째 인스턴스를 만들면 AVStream은 원래 핀으로 전송된 프레임이 새 핀에 복사되도록 분할자를 자동으로 설정합니다. 이 복사는 AVStream에서 자동으로 수행됩니다. 클라이언트
KSPIN_FLAG_USE_STANDARD_TRANSPORT
이 플래그는 핀이 표준 전송 메커니즘을 사용하도록 강제합니다. 핀의 다른 모든 검사(통신 유형, 중간 형식, 인터페이스 형식 등)를 재정의합니다. 이 플래그와 KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT 모두 지정하면 표준 전송이 사용됩니다. 이 플래그는 다른 모든 검사를 재정의합니다.
KSPIN_FLAG_DO_NOT_USE_STANDARD_TRANSPORT
핀이 표준 전송 메커니즘을 사용하지 않음을 나타냅니다. 표준 전송 메커니즘을 사용하지 않는 핀은 파이프 섹션에 속하지 않으며 연결된 큐가 없습니다.
KSPIN_FLAG_FIXED_FORMAT
이 핀이 고정 데이터 형식을 사용한다는 것을 나타냅니다. 데이터 형식을 설정하려고 시도하면 STATUS_INVALID_DEVICE_REQUEST 반환됩니다.
KSPIN_FLAG_GENERATE_EOS_EVENTS
이 핀이 연결 이벤트 지원 요청을 처리한다는 것을 나타냅니다.
KSPIN_FLAG_RENDERER
이 핀이 프레임을 렌더링할 수 있도록 지정합니다.
KSPIN_FLAG_SOME_FRAMES_REQUIRED_FOR_PROCESSING
필터 중심 필터 핀에 지정된 경우 해당 핀 유형의 하나 이상의 인스턴스에 데이터를 처리하기 위해 사용할 수 있는 프레임이 있어야 임을 나타냅니다. KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING 함께 사용할 수 없습니다.
이 동작은 KsPinAttachOrGate 통해 수동으로 OR 게이트를 핀의 모든 인스턴스에 대한 프레임 게이트로 설정하고 이 OR 게이트를 필터의 AND 게이트에 연결하여 얻을 수 있습니다.
이 플래그를 사용하는 경우 미니 드라이버는 연결된 핀 인스턴스에서 KsPinAttachAndGate 또는 KsPinAttachOrGate 호출할 수 없습니다. (플래그는 단순 OR 사례에 대해 효과적으로 이 작업을 수행합니다.) Filter-Centric 처리참조하세요.
KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE
필터 중심 핀에 지정된 경우 플래그가 지정된 하나 이상의 핀 인스턴스가 실행 상태에 있을 때 처리가 발생할 수 있음을 나타냅니다. 중지되지 않은 모든 핀은 데이터를 처리하려면 최소한 일시 중지되어 있어야 합니다. 해당 핀이 출력 핀이고 이 핀이 현재 위치 변환과 관련된 경우 이 플래그를 사용하지 마세요.
KSPIN_FLAG_DENY_USERMODE_ACCESS
이 플래그는 이 특정 핀에 대한 사용자 모드 액세스를 차단합니다.
KSPIN_FLAG_IMPLEMENT_CLOCK
이 핀은 그래프 관리자가 마스터 클록으로 선택할 수 있는 시계를 노출한다는 것을 나타냅니다. AVStream 클록
InstancesPossible
이 핀의 가능한 최대 인스턴스 수를 포함하는 ULONG 형식의 값을 지정합니다. 지정된 형식의 이 수 이상의 핀을 인스턴스화하려는 시도는 실패합니다. 인스턴스화된 핀 수에 제한이 없도록 KSINSTANCE_INDETERMINATE 설정합니다.
InstancesNecessary
필터의 적절한 작동을 위해 최소 처리 수준 이상의 상태에 있어야 하는 지정된 핀 유형의 최소 핀 수를 포함하는 ULONG 형식의 값을 지정합니다. 미니 드라이버는 이 구조체의 Flags 멤버를 KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY 또는 KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE 설정하여 기본 동작을 수정할 수 있지만 기본적으로 최소 처리 수준은 KSSTATE_PAUSE. 이 유형의 핀 인스턴스 수가 없는 필터의 상태를 변경하려는 시도는 실패합니다. 설명 섹션에서 추가 정보를 참조하세요.
AllocatorFraming
이 핀 형식에 대한 할당자 프레이밍 요구 사항이 포함된 KSALLOCATOR_FRAMING_EX 구조체에 대한 포인터입니다. 할당자 프레이밍은 메모리 맞춤 요구 사항, 최대 프레임 크기 및 최소 프레임 크기와 같은 항목을 지정합니다. 이 멤버는 NULL
IntersectHandler
데이터 교차를 처리하는 드라이버 정의 KStrIntersectHandlerEx 함수에 대한 포인터입니다. 이 멤버가 NULL
발언
아날로그 비디오 입력 핀에 대해 KSPIN_DESCRIPTOR_EX InstancesNecessary 멤버가 0으로 설정된 경우 AMCap 및 Blink가 AVStream 드라이버에서 튜너 및 크로스바 인터페이스를 찾을 수 없을 수 있습니다. 이 문제를 해결하려면 이 핀에 대한 InstancesNecessary 1로 설정합니다.
할당자 프레이밍이 맞춤 또는 크기가 특정 값이어야 한다고 지정한다는 사실에도 불구하고 핀의 할당자 프레이밍 요구 사항은 무시될 수 있습니다. 커널 모드 드라이버가 이를 할당하는 업스트림 사용자 모드 필터에 연결되어 있고 특정 업스트림 필터의 할당자가 프레이밍 요구 사항을 이해하지 못하는 경우 이 작업이 발생할 수 있습니다(현재 특정 예제에는 MPEG-2 분할자가 포함됨).
또한 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 지정하고 핀이 표준 전송 메커니즘을 사용하는 경우 처리 개체가 있어야 합니다. 즉, 필터 수준 또는 핀 수준에서 제공된 프로세스 디스패치가 있어야 합니다. 이 함수는 호출되지 않더라도 이 상황에서 제공해야 합니다.
AVStream 및
요구 사항
요구 | 값 |
---|---|
헤더 | ks.h(Ks.h 포함) |