AVCSTRM_OPEN

AVCSTRM_OPEN函式程式碼會開啟具有特定資料流程格式的資料流程。

I/o 狀態欄塊

如果成功, avcstrm.sys 會將 IoStatus 的狀態設定 > 為 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、Version 和 Function
使用 INIT_AVCSTRM_HEADER 宏來初始化這些成員。 在宏的 Request 引數中傳遞 AVCSTRM_OPEN

AVCStreamCoNtext
指定 (處理) 的資料流程內容。 輸入上應為 Null ,而且如果 AVCSTRM_OPEN 成功傳回,此成員會包含後續 avcstrm.sys 作業的有效資料流程內容。

OpenStruct
指定要建立之 AV/C 資料流程的描述。

AVCSTRM_FORMAT列舉會提供支援的 AV/C 串流格式清單, (自avcstrm.sys支援的 IEC 61883 規格) ,例如 SDDV (61883-2) 和 MPEG2TS (61883-4) 。

為了進行同步連接,CJP 標頭和子單位相依的參數是必要的,而且是在 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 傳遞為宏的要求引數。

接下來,次級的驅動程式會將 AVCStreamCoNtext 成員設定為 Null

當作業成功時,這個成員應該包含有效的資料流程內容 (用於後續 avcstrm.sys 作業的控制碼) 。 在透過 AVCSTRM_CLOSE關閉資料流程之前,不應該修改這個成員。 最後,次級的驅動程式會設定CommandData聯集的OpenStruct成員,以描述要開啟的資料流程。

若要傳送此要求,子單位會將 IRP 設定為IoControlCode成員的IRP_MJ_INTERNAL_DEVICE_CONTROL irp 提交至IOCTL_AVCSTRM_CLASS ,並將 irp 的引數 1成員設定為描述所要執行之開啟作業的 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中宣告。 包含avcstrm。

另請參閱

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