編碼器實作和支援
在 Windows XP Service Pack 1 中,Microsoft 定義了三個核心串流屬性集,並在 ksmedia.h 中定義一個列舉,以支援僅限視訊的編碼器裝置。 每個屬性集都包含單一屬性。 換句話說,每個屬性都會接收自己的屬性集。 如果您的驅動程式進行get-property或Set-property呼叫,則當您設定呼叫時,請將屬性集的 GUID (指定為ksmedia.h) 中KSPROPERTY結構的Set成員,並在Id 成員中指定零:
屬性 Set | 描述 |
---|---|
ENCAPIPARAM_BITRATE | 實作此屬性集以指定編碼器裝置支援的編碼位元速率。 如需詳細資訊 ,請參閱編碼器程式碼範例 。 |
ENCAPIPARAM_BITRATE_MODE | 實作此屬性集以指定裝置支援的編碼模式。 此屬性集使用 VIDEOENCODER_BITRATE_MODE 列舉來指定支援的模式。 如需詳細資訊 ,請參閱編碼器程式碼範例 。 |
ENCAPIPARAM_PEAK_BITRATE | 實作此屬性集以指定裝置的編碼位元速率上限。 |
用戶端可從 Windows 軟體發展工具組 ( (SDK 中所述的IEncoderAPI COM 介面衍生IVideoEncoder COM 介面,以存取這些屬性) 檔) 。
minidriver 必須為每個 ENCAPIPARAM_Xxx 屬性指定預設值。 編碼器程式碼範例主題示範如何指定預設屬性值。 在編碼器篩選的開發和偵錯期間,可以從支援ENCAPIPARAM_BITRATE屬性集的迷你驅動程式觸發目前的屬性頁。
在 DirectX 9.0 中, ksmedia.h 中定義了六個額外的屬性集和一個事件集,以提供更廣泛的編碼器支援,包括僅限音訊的編碼器。 如同 ENCAPIPARAM_Xxx 屬性,每個屬性都會接收自己的屬性集:
屬性 Set | 描述 |
---|---|
CODECAPI_VIDEO_ENCODER | 如果您的裝置支援編碼視訊串流 (包括電視音訊等輔助音訊) 則實作此屬性集的支援。 |
CODECAPI_AUDIO_ENCODER | 如果您的裝置是僅限音訊的編碼器,請實作此屬性集的支援,而不是CODECAPI_VIDEO_ENCODER。 |
CODECAPI_SETALLDEFAULTS | 實作此屬性設定以重設所有編碼器裝置的內部設定,例如編碼位元速率和編碼模式為其預設值。 |
CODECAPI_ALLSETTINGS | 實作此屬性集以傳達編碼器裝置的目前設定。 此屬性集用於與用戶端通訊。 |
CODECAPI_SUPPORTSEVENTS | 如果您的裝置支援來自使用者模式的事件,例如變更編碼模式、位元速率或其他設定,請實作此屬性集。 如果您實作此屬性集,則也必須實作CODECAPI_CHANGELISTS事件的支援。 |
CODECAPI_CURRENTCHANGELIST | 實作此屬性集,以判斷先前呼叫中變更了哪些編碼器參數,以設定一或多個編碼器屬性。 |
事件集 | 描述 |
---|---|
如果裝置支援透過CODECAPI_SUPPORTSEVENTS屬性集回應使用者模式事件,請實作此事件集,以傳回用戶端先前的 Set屬性呼叫變更為CODECAPI_SETALLDEFAULTS或CODECAPI_ALLSETTINGS的編碼器設定清單。 |
用戶端會透過 Windows SDK 檔) 中所述的 ICodecAPI COM 介面存取這些屬性 (。 如需 COM 介面的詳細資訊,請參閱 編碼器安裝和註冊 ,包括如何指定應該公開哪些介面 KsProxy。
minidriver 應該實作基本 get-property查詢的支援。 編碼器程式碼範例主題示範如何支援get-property查詢。
開發編碼器篩選時,將編碼功能移至與視訊擷取篩選的個別篩選。 定義您自己的私人媒體,讓圖形產生器可以正確連接編碼器和擷取篩選器。 如果您的硬體能夠主控非編碼內容,則您也可以公開公用媒體。 如果您同時實作公用和私人媒體,請先列出私人媒體,因為它可減少圖形建置時間;以在建置篩選圖形時尋找正確的篩選。
如需在個別篩選圖表中使用媒體和多個篩選 (實例的詳細資訊) ,請參閱 中型和類別。