AVCSTRM_OPEN
AVCSTRM_OPEN 関数コードは、特定のストリーム形式でストリームを開きます。
I/O ステータス ブロック
成功した場合、avcstrm.sys は Irp->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 を含めます。