AVCSTRM_OPEN

AVCSTRM_OPEN 関数コードは、特定のストリーム形式でストリームを開きます。

I/O ステータス ブロック

成功した場合、avcstrm.sysIrp->IoStatus.Status を STATUS_SUCCESSに設定します。

成功した場合、AVC_STREAM_REQUEST_BLOCK 構造体の AVCStreamContext メンバーのストリーム コンテキストと共に STATUS_SUCCESS が返されます。 このコンテキストは、その後、他の avcstrm.sys 要求に使用されます。

指定できる値は以下の通りです。

エラーの状態 説明
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 メンバーを設定します。

この要求を送信するには、サブユニットは、IOCTL_AVCSTRM_CLASS に設定された IRP の IoControlCode メンバーと、実行する開き操作を記述する AVC_STREAM_REQUEST_BLOCK 構造体に設定された IRP の Argument1 メンバーを持つ IRP_MJ_INTERNAL_DEVICE_CONTROL IRP を送信します。

サブユニット ドライバーは、このコマンドが同期的に完了することを期待できます。 結果は、avcstrm.sys で保留中の操作なしで直ちに返されます。

この関数コードは、IRQL = PASSIVE_LEVEL で呼び出す必要があります。

Comments

この関数は、次に示すように、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