共用方式為


視訊功能

[與此頁面相關聯的功能,DirectShow是舊版功能。 它已被 MediaPlayer、imfMediaEngine 取代,並在媒體基金會 音訊/視訊擷取。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能在媒體 基礎中使用 MediaPlayerIMFMediaEngine 音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

IAMStreamConfig::GetStreamCaps 方法會在一組 AM_MEDIA_TYPEVIDEO_STREAM_CONFIG_CAPS 結構中呈現視訊功能。 您可以使用此選項來公開針腳上支援的所有格式和解析度,如下所述。

如需 getStreamCaps 音訊相關範例,請參閱 音訊功能

假設您的擷取卡支援 160 x 120 像素和 320 x 240 像素之間所有解析度的 JPEG 格式,包含 320 x 240 像素。 在此案例中,支援解析度之間的差異在於您新增或減去每個支援解析度的一個圖元,以取得下一個支援的解析度。 在支援的解析度中,這種差異稱為粒度。

假設您的卡片也支援大小 640 x 480。 以下說明這個單一解析度和上述解析度範圍(大小介於 160 x 120 像素和 320 x 240 像素之間)。

解析度從 160 x 120 到 320 x 240 像素,加上 640 x 480

此外,假設它在解析度介於160 x 120到320 x 240之間支援24位色彩 RGB 格式,但粒度為8。 下圖顯示此案例中的一些有效大小。

解析度從 160 x 120 到 320 到 240,數據粒度 = 8

若要以另一種方式,並列出更多解析度,下列全都是有效解析度清單。

  • 160 x 120
  • 168 x 120
  • 168 x 128
  • 176 x 128
  • 176 x 136
  • ...其他解析度...
  • 312 x 232
  • 320 x 240

使用 GetStreamCaps 來公開這些色彩格式和維度功能,方法是提供 320 x 240 JPEG 的媒體類型(如果這是預設值或慣用大小),以及最小功能 160 x 120、最大功能 320 x 240,且粒度為 1。 您使用 GetStreamCaps 公開的下一組是 640 x 480 JPEG 的媒體類型,且至少為 640 x 480,且最大為 640 x 480 且粒度為 0。 第三組包含 320 x 240、24 位 RGB 的媒體類型,最小功能為 160 x 120、最大功能 320 x 240,粒度為 8。 如此一來,您幾乎可以發佈卡片可能支援的每個格式和功能。 必須知道您提供哪些壓縮格式的應用程式可以取得所有配對,並列出媒體類型的所有唯一子類型。

篩選條件會分別從 VIDEOINFOHEADER 結構的 rcSourcercTarget 成員取得其媒體類型來源和目標矩形。 篩選不需要支援來源和目標矩形。

IAMStreamConfig 檔中描述的裁剪矩形,與 VIDEOINFOHEADER 結構的 rcSource 矩形相同。

整個 IAMStreamConfig 檔中所述的輸出矩形,與輸出針腳 BITMAPINFOHEADER 結構 成員 biWidth biHeight 相同(請參閱 AVI 檔案格式中的 DV 數據。]。

如果篩選的輸出釘選連接到無空來源和目標矩形的媒體類型,則需要您的篩選,才能將輸入格式的來源子物件延伸至輸出格式的目標子矩形。 source subrectangle 會儲存在 VIDEO_STREAM_CONFIG_CAPS 結構的 InputSize 成員中。

例如,請考慮下列影片壓縮程式案例:輸入影像採用 RGB 格式,大小為 160 x 120 圖元。 來源矩形的左上角是座標(20,20),其右下角位於 (30,30)。 輸出影像採用 MPEG 格式,大小為 320 x 240。 目標矩形的左上角位於 (0,0),其右下角位於 (100,100)。 在此情況下,篩選條件應採用160 x120 RGB來源位陣圖的10 x 10片段,並填滿320 x240位圖的前100 x100個區域,讓320 x 240位圖的其餘部分保持不變。 下圖顯示此案例。

子範圍延展

篩選可能不支援此專案,而且無法連線到媒體類型,其中 rcSourcercTarget 不是空的。

VIDEOINFOHEADER 結構會公開篩選數據速率功能的相關信息。 例如,假設您已將輸出釘選連接到具有特定媒體類型的下一個篩選(直接使用 CMediaType::SetFormat函式所傳遞的媒體類型)。 查看該媒體類型 VIDEOINFOHEADER 格式結構的 dwBitRate 成員,以查看您應該壓縮視訊的數據速率。 如果您將 VIDEOINFOHEADER 中每個畫面的時間單位數乘以 結構的 AvgTimePerFrame 成員,dwBitRate 成員中的數據速率,並除以 10,000,000(每秒單位數),您可以找出每個畫面應該有多少位元組。 您可以產生較小的框架,但永遠不會產生較大的框架。 若要判斷視訊壓縮器或擷取篩選器的幀速率,請使用輸出針腳媒體類型的 AvgTimePerFrame