AVCSTRM_OPEN

AVCSTRM_OPEN 함수 코드는 특정 스트림 형식의 스트림을 엽니다.

I/O 상태 블록

성공하면 avcstrm.sysIrp-IoStatus.Status>를 STATUS_SUCCESS 설정합니다.

성공하면 AVC_STREAM_REQUEST_BLOCK 구조체의 AVCStreamContext 멤버에서 스트림 컨텍스트와 함께 STATUS_SUCCESS 반환됩니다. 이 컨텍스트는 이후에 다른 avcstrm.sys 요청에 사용됩니다.

가능한 오류 반환 값은 다음과 같습니다.

오류 상태 Description
STATUS_DEVICE_REMOVED AVCSTRM_READ 작업에 해당하는 디바이스가 더 이상 존재하지 않습니다.
STATUS_CANCELLED 요청을 완료할 수 없습니다.
STATUS_INVALID_PARAMETER IRP에 지정된 매개 변수가 올바르지 않습니다.
STATUS_INSUFFICIENT_RESOURCES 요청을 완료하기에 충분한 시스템 리소스가 없습니다.
STATUS_PENDING 요청이 수신되었지만 추가 처리가 필요합니다. I/O 완료 루틴은 최종 응답을 처리합니다.

AVC_STREAM_REQUEST_BLOCK 입력

SizeOfThisBlock, 버전 및 함수
INIT_AVCSTRM_HEADER 매크로를 사용하여 이러한 멤버를 초기화합니다. 매크로의 Request 인수에 AVCSTRM_OPEN 전달합니다.

AVCStreamContext
스트림 컨텍스트(핸들)를 지정합니다. 입력에서 NULL 이어야 하며 , AVCSTRM_OPEN 성공적으로 반환되면 이 멤버는 후속 avcstrm.sys 작업에 유효한 스트림 컨텍스트를 포함합니다.

OpenStruct
만들 AV/C 스트림에 대한 설명을 지정합니다.

AVCSTRM_FORMAT 열거형은 SDDV(61883-2) 및 MPEG2TS(61883-4)와 같이 avcstrm.sys 지원하는 지원되는 AV/C 스트리밍 형식(IEC 61883 사양)의 목록을 제공합니다.

등시 연결을 만들려면 CIP 헤더 및 하위 단위 종속 매개 변수가 필요하며 AVCSTRM_FORMAT_INFO 구조에 정의됩니다.

다음은 데이터를 수신하기 위한 MPEG2TS 형식 정보의 예입니다.

//
// MPEG2TS
//
    { 
        sizeof(AVCSTRM_FORMAT_INFO),
        AVCSTRM_FORMAT_MPEG2TS,
        {
            0,0,
            CIP_SPH_MPEG, 
            CIP_QPC_MPEG,
            CIP_FN_MPEG,
            IP_DBS_MPEG,
            0,0
        }, // CIP header[0]
        {
            0,0,0,
            CIP_TSF_OFF,
            CIP_FMT_MPEG,
            2,
        },  // CIP header[1]
        SRC_PACKETS_PER_MPEG2TS_FRAME,   // varies depending on number of source packets
        BUFFER_SIZE_MPEG2TS_NO_SPH,   // Remove source packet header
        NUM_OF_XMT_BUFFERS_MPEG2TS,   // Subunit defined
        0,
        FALSE, // not striping SPH is the default
        0,  
        BLOCK_PERIOD_MPEG2TS, // 192, / number of 1394 cycle offset to send one block
        0,0,0,0,
    },

하위 단위 드라이버는 먼저 IRP 및 AVC_STREAM_REQUEST_BLOCK 구조를 할당해야 합니다.

다음으로 INIT_AVCSTRM_HEADER 매크로를 사용하여 AVC_STREAM_REQUEST_BLOCK 구조를 초기화하고 AVCSTRM_OPEN 매크로에 Request 인수로 전달해야 합니다.

다음으로 하위 단위 드라이버는 AVCStreamContext 멤버를 NULL로 설정합니다.

작업이 성공하면 이 멤버는 후속avcstrm.sys작업에 사용되는 유효한 스트림 컨텍스트(핸들) 포함해야 합니다. 스트림이 AVCSTRM_CLOSE 통해 닫혀질 때까지 이 멤버를 수정하면 안 됩니다. 마지막으로 하위 단위 드라이버는 열 스트림을 설명하는 CommandData 공용 구조체의 OpenStruct 멤버를 설정합니다.

이 요청을 보내기 위해 하위 단위는 IRPIoControlCode 멤버가 IOCTL_AVCSTRM_CLASS 로 설정되고 IRPArgument1 멤버가 열려 있는 작업을 설명하는 AVC_STREAM_REQUEST_BLOCK 구조로 설정된 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP를 제출합니다.

하위 단위 드라이버는 이 명령이 동기적으로 완료되도록 예상할 수 있습니다. 결과는 avcstrm.sys에서 보류 중인 작업 없이 즉시 반환됩니다.

이 함수 코드는 IRQL = PASSIVE_LEVEL 호출해야 합니다.

의견

이 함수는 아래와 같이 AVC_STREAM_REQUEST_BLOCK 구조체에서 CommandData 공용 구조체의 OpenStruct 멤버를 사용합니다.

typedef struct _AVC_STREAM_REQUEST_BLOCK {
  ULONG  SizeOfThisBlock;
  ULONG  Version;
  AVCSTRM_FUNCTION  Function;
  .
  .
  PVOID AVCStreamContext;
  .
  .
  union _tagCommandData {
    .
    .
    AVCSTRM_OPEN_STRUCT  OpenStruct;
    .
    .
  } CommandData;
} AVC_STREAM_REQUEST_BLOCK, *PAVC_STREAM_REQUEST_BLOCK;

요구 사항

헤더:avcstrm.h에 선언되었습니다. avcstrm.h를 포함합니다.

참고 항목

AVC_STREAM_REQUEST_BLOCK

INIT_AVCSTRM_HEADER

IRP_MJ_INTERNAL_DEVICE_CONTROL

IOCTL_AVCSTRM_CLASS

AVCSTRM_OPEN_STRUCT

AVCSTRM_FUNCTION

AVCSTRM_FORMAT

AVCSTRM_FORMAT_INFO