共用方式為


IMFSourceReaderEx::AddTransformForStream 方法 (mfreadwrite.h)

將音訊或視訊效果等轉換新增至數據流。

語法

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

參數

[in] dwStreamIndex

要設定的數據流。 此值可以是下列任一項。

意義
0–0xFFFFFFFB
數據流以零起始的索引。
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
第一個視訊串流。
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
第一個音訊數據流。

[in] pTransformOrActivate

下列其中一項的指標:

傳回值

這個方法可以傳回其中一個值。

傳回碼 描述
S_OK
成功。
MF_E_INVALIDMEDIATYPE
轉換不支援目前的數據流格式,而且無法進行轉換。 如需詳細資訊,請參閱「備註」。
MF_E_INVALIDREQUEST
無效的要求
MF_E_INVALIDSTREAMNUMBER
dwStreamIndex 參數無效。

備註

這個方法會嘗試在目前處理鏈結的結尾新增轉換。

若要使用此方法,請進行下列一連串的呼叫:

  1. 呼叫 IMFSourceReader::SetCurrentMediaType 來設定您想要用於數據流的輸出類型。 在此步驟中,您可以指定只包含主要類型和子類型 GUID 的媒體類型。 例如,若要取得 32 位 RGB 輸出,請設定 主要類型的MFMediaType_VideoMFVideoFormat_RGB32子類型。 (如需詳細資訊,請參閱 媒體類型 GUIDs.)
  2. 呼叫 AddTransformForStream。 如果來源讀取器成功連接轉換,它會在轉換上設定輸出類型。
  3. 呼叫 IMFSourceReader::GetCurrentMediaType 以從轉換取得輸出類型。 這個方法會傳回具有完整格式描述的媒體類型。
  4. 或者,如果您想要修改輸出類型,請再次呼叫 IMFSourceReader::SetCurrentMediaType ,在轉換上設定完整的媒體類型。
AddTransformForStream 方法不會將譯碼器插入處理鏈結中。 如果原生數據流格式經過編碼,而且轉換需要未壓縮的格式,請呼叫 SetCurrentMediaType ,在上一個清單中設定未壓縮的格式 (步驟 1) 。 不過,方法會視需要插入視訊處理器,以在 RGB 和 YUV 格式之間轉換。

如果來源讀取器已設定 MF_READWRITE_DISABLE_CONVERTERSMF_SOURCE_READER_ENABLE_VIDEO_PROCESSING 屬性,則方法會失敗。

在異步模式中,如果範例要求擱置,方法也會失敗。 在此情況下,請先等候 OnReadSample 回呼叫用,再呼叫 方法。 如需在異步模式中使用來源讀取器的詳細資訊,請參閱 IMFSourceReader::ReadSample

您可以在串流期間隨時新增轉換。 不過,方法不會在插入轉換之前排清或清空管線。 因此,如果數據已經在管線中,則不保證下一個範例會套用轉換。

規格需求

需求
最低支援的用戶端 Windows 8 [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2012 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 mfreadwrite.h

另請參閱

IMFSourceReaderEx

來源讀取器