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은 미니드라이버가 Ks XxxAttemptProcessing 명시적으로 호출하는 경우에만 처리 디스패치를 호출합니다. 큐를 직접 폴링하려는 클라이언트(예: DPC 시간)에서 데이터를 하드웨어로 전송하는 데 유용합니다.

KSPIN_FLAG_INITIATE_PROCESSING_ON_EVERY_ARRIVAL

데이터 프레임이 큐에 도착할 때마다 처리가 발생해야 했음을 나타냅니다. 이 플래그를 지정하지 않으면 데이터가 이전에 비어 있는 큐에 도착할 때만 프로세스 디스패치가 호출됩니다.

KSPIN_FLAG_FRAMES_NOT_REQUIRED_FOR_PROCESSING

처리를 시작하기 위해 이 핀에 프레임이 필요하지 않음을 나타냅니다. 큐에 프레임이 없더라도 이제 상태 변경으로 인해 AVStream에서 처리 디스패치를 호출하는 것으로 충분합니다. 이 플래그는 필터 중심 필터에만 유용합니다. 사용 가능한 프레임이 없는 경우 필터에서 이 플래그 지연 처리를 지정하지 않는 핀입니다. 이 플래그를 지정하는 핀은 이러한 방식으로 처리를 지연시키지 않습니다. 핀이 이 플래그를 지정하면 사용 가능한 프레임에 대한 검사 프로세스 디스패치의 책임이 됩니다.

KSPIN_FLAG_ENFORCE_FIFO

이 플래그를 지정하면 큐에서 IRP를 첫 번째 방식으로 강제로 처리합니다. 이전에 전송된 IRP 이전에 미니드라이버에서 하나의 IRP를 완료한 경우 이전 IRP가 미니 드라이버에서 완료될 때까지 이후 IRP는 AVStream에서 완료되지 않습니다.

KSPIN_FLAG_GENERATE_MAPPINGS

이 플래그를 지정하면 미니드라이버가 해당 프레임을 참조하는 스트림 포인터를 잠그면 AVStream이 큐에 대기 중인 프레임에 대한 분산/수집 매핑을 자동으로 생성합니다. 이 기능을 사용하려는 클라이언트는 KsDeviceRegisterAdapterObject 함수를 통해 DMA 어댑터 개체를 AVStream에 등록해야 합니다. 이 플래그가 KSSTREAM_HEADER 구조에 미치는 영향은 KSSTREAM_HEADERDataUsed 멤버를 참조하세요. 또한 KSSTREAM_POINTER_OFFSET 참조하세요.

KSPIN_FLAG_DISTINCT_TRAILING_EDGE

핀과 연결된 큐에 후행 에지 스트림 포인터가 있어야 했음을 나타냅니다. 후행 에지 포인터는 이전 데이터에 복제 포인터가 없는 한 큐에서 가장 오래된 데이터를 가리키는 특수 스트림 포인터입니다. 선행 및 후행 에지 스트림 포인터 사이의 창에 있는 모든 데이터 프레임에는 하나 이상의 참조 수가 있는 것으로 간주되며 KsPinGetTrailingEdgeStreamPointerKsStreamPointerAdvanceXxx 또는 KsStreamPointerUnlock 함수 중 하나를 사용하여 후행 가장자리를 진행하여 창 밖으로 이동할 때까지 완료되지 않습니다. 이 플래그를 지정하지 않는 핀에는 후행 에지 스트림 포인터가 없습니다.

KSPIN_FLAG_PROCESS_IN_RUN_STATE_ONLY

AVStream은 핀이 KSSTATE_RUN 있을 때만 이 핀을 호출하여 처리해야 임을 나타냅니다. 최소 처리 상태를 일시 중지에서 실행으로 변경합니다. AVStream은 프레임이 도착하는 경우에도 실행 상태로 이동하라고 말한 이 핀을 처리하도록 호출합니다. 이 플래그를 지정하고 필터 중심 필터의 일부인 핀은 지정된 핀이 KSSTATE_RUN 없는 경우 필터가 처리되지 않습니다.

KSPIN_FLAG_SPLITTER

이 핀(출력 핀)이 분할자임을 나타냅니다. 이 플래그를 지정하는 핀은 하나 이상의 가능한 인스턴스 수를 나타내야 합니다. 이 핀의 두 번째 instance 만들어지면 AVStream은 원래 핀으로 전송된 프레임이 새 핀에 복사되도록 분할기를 자동으로 설정합니다. 이 복사는 AVStream에서 자동으로 수행됩니다. 클라이언트는 일반적으로NULL이 아닌 DelegateBranchCopySource 포인터가 있는 프로세스 핀을 무시할 수 있습니다. 이러한 멤버는 핀이 분할기 분기의 일부이며 AVStream에서 자동으로 처리됨을 나타냅니다. DirectX 8.0 이후 릴리스에서 이 플래그는 필터 중심 필터와 핀 중심 필터 모두에서 핀에 대해 작동합니다. 이전 릴리스는 필터 중심 필터의 핀에 대해서만 이 플래그를 지원합니다.

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 함께 사용할 수 없습니다.

이 동작은 핀의 모든 instance 대한 프레임 게이트로 OR 게이트를 수동으로 설정하고 이 OR 게이트를 필터의 AND 게이트에 연결하여 KsPinAttachOrGate를 통해 얻을 수 있습니다.

이 플래그를 사용하는 경우 미니 드라이버는 연결된 핀 인스턴스에서 KsPinAttachAndGate 또는 KsPinAttachOrGate 를 호출할 수 없습니다. (플래그는 간단한 OR 사례에 대해 이를 효과적으로 수행합니다.) 필터 중심 처리도 참조하세요.

KSPIN_FLAG_PROCESS_IF_ANY_IN_RUN_STATE

필터 중심 핀에 지정된 경우 플래그가 지정된 하나 이상의 핀 인스턴스가 실행 상태에 있을 때 처리가 발생할 수 있음을 나타냅니다. 중지되지 않은 모든 핀은 데이터를 처리하려면 최소한 일시 중지 상태여야 합니다. 해당 핀이 출력 핀이고 이 핀이 현재 위치 변환에 관련된 경우 이 플래그를 사용하지 마세요.

KSPIN_FLAG_DENY_USERMODE_ACCESS

이 플래그는 이 특정 핀에 대한 사용자 모드 액세스를 방지합니다.

KSPIN_FLAG_IMPLEMENT_CLOCK

이 핀은 그래프 관리자가 master 클록으로 선택할 수 있는 시계를 노출한다는 것을 나타냅니다. 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인 경우 핀은 지정자 KSDATAFORMAT_SPECIFIER_NONE 데이터 범위에 대한 데이터 교차 쿼리를 처리합니다. 교차 처리기 함수는 쿼리에서 단일 데이터 범위와 핀 데이터 범위 목록에서 단일 데이터 범위를 수신합니다. 이러한 범위의 형식, 하위 형식 및 지정자 GUID는 일치하도록 보장되지만 일부는 와일드카드일 수 있습니다. 함수는 데이터 범위가 일치하지 않음을 나타내거나 두 데이터 범위의 교차점에서 최상의 데이터 형식을 생성합니다. 자세한 내용은 AVStream의 데이터 범위 교집합 을 참조하세요.

설명

KSPIN_DESCRIPTOR_EX InstancesNecessary 멤버가 아날로그 비디오 입력 핀에 대해 0으로 설정된 경우 AMCap 및 Blink가 AVStream 드라이버에서 튜너 및 크로스바 인터페이스를 찾을 수 없을 수 있습니다. 이 문제를 해결하려면 이 핀 에 대한 InstancesNecessary 를 1로 설정합니다.

할당자 프레이밍이 맞춤 또는 크기가 특정 값으로 절대적으로 필요함을 지정한다는 사실에도 불구하고 핀의 할당자 프레이밍 요구 사항은 무시될 수 있습니다. 커널 모드 드라이버가 할당하는 업스트림 사용자 모드 필터에 연결되어 있고 특정 업스트림 필터의 할당자가 프레이밍 요구 사항을 이해하지 못하는 경우 이 문제가 발생할 수 있습니다(현재 특정 예제에는 MPEG-2 분할기가 포함됨).

또한 KSPIN_FLAG_DO_NOT_INITIATE_PROCESSING 지정하고 핀이 표준 전송 메커니즘을 사용하는 경우 처리 개체가 있어야 합니다. 즉, 필터 수준 또는 핀 수준에서 일부 프로세스 디스패치가 제공되어야 합니다. 이 함수가 호출되지 않더라도 이 상황에서 제공해야 합니다.

AVStream 및 AVStream 분할기에서 데이터 범위 교집합.

요구 사항

요구 사항
헤더 ks.h(Ks.h 포함)

추가 정보

KSALLOCATOR_FRAMING_EX

KSPIN_DESCRIPTOR

KSPIN_DISPATCH

KsDeviceRegisterAdapterObject