AVCSTRM_OPEN
AVCSTRM_OPEN函式程式碼會開啟具有特定資料流程格式的資料流程。
I/O 狀態欄塊
如果成功, avcstrm.sys將 Irp-IoStatus.Status > 設定為 STATUS_SUCCESS。
如果成功,STATUS_SUCCESS會連同AVC_STREAM_REQUEST_BLOCK結構的AVCStreamCoNtext成員中的資料流程內容一起傳回。 此內容後續會用於其他 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列舉提供 IEC 61883) 規格 (avcstrm.sys支援的 AV/C 串流格式清單,例如 SDDV (61883-2) 和 MPEG2TS (61883-4) 。
若要建立連續連線,需要 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成員,描述要開啟的資料流程。
若要傳送此要求,子單位會提交 IRP 的 IRP_MJ_INTERNAL_DEVICE_CONTROL IRP,並將 IRP 的 IoControlCode 成員設為 IOCTL_AVCSTRM_CLASS ,而 IRP 的 Argument1 成員會設定為描述要執行的開啟作業AVC_STREAM_REQUEST_BLOCK結構。
子單位驅動程式可以預期此命令會同步完成。 結果會在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。