IMFTransform::P rocessInput 方法 (mftransform.h)
將數據傳遞到此媒體基礎轉換上的輸入數據流, (MFT) 。
語法
HRESULT ProcessInput(
[in] DWORD dwInputStreamID,
[in] IMFSample *pSample,
[in] DWORD dwFlags
);
參數
[in] dwInputStreamID
輸入數據流識別碼。 若要取得串流標識符的清單,請呼叫 IMFTransform::GetStreamIDs。
[in] pSample
輸入範例之 IMFSample 介面的指標。 此範例至少必須包含一個包含有效輸入數據的媒體緩衝區。
[in] dwFlags
保留的。 必須為零。
傳回值
方法會傳回 HRESULT。 可能的值包括 (但不限於) 下表中的這些值。
傳回碼 | 描述 |
---|---|
|
此方法已成功。 |
|
無效引數。 |
|
無效的數據流標識碼。 |
|
輸入範例需要有效的樣本持續時間。 若要設定持續時間,請呼叫 IMFSample::SetSampleDuration。
某些 MFT 需要輸入樣本具有有效的持續時間。 某些 MFT 不需要範例持續時間。 |
|
輸入範例需要時間戳。 若要設定時間戳,請呼叫 IMFSample::SetSampleTime。
某些 MFT 要求輸入範例具有有效的時間戳。 某些 MFT 不需要時間戳。 |
|
轉換目前無法處理更多輸入。 |
|
媒體類型未在一或多個數據流上設定。 |
|
DirectX 視訊加速 (DXVA) 不支援媒體類型。 啟用 DXVA 的譯碼器可能會傳回此錯誤碼。 |
備註
在大部分情況下,如果方法成功,MFT 會儲存樣本,並在 IMFSample 指標上保留參考計數。 在 MFT 釋放範例之前,請勿重複使用範例。 不過,MFT 可能會將範例數據複製到新的緩衝區,而不是儲存範例。 在此情況下,MFT 應該在IMFTransform::GetInputStreamInfo 方法中設定MFT_INPUT_STREAM_DOES_NOT_ADDREF旗標。
如果 MFT 已經有足夠的輸入數據可產生輸出範例,則它不接受新的輸入數據, 而 ProcessInput 會 傳回MF_E_NOTACCEPTING。 此時,客戶端應該執行下列其中一項來清除擱置的輸入數據:
- 呼叫 IMFTransform::P rocessOutput來產生新的輸出。
- 使用MFT_MESSAGE_COMMAND_FLUSH訊息呼叫 IMFTransform::P rocessMessage 來排清輸入數據。
MFT 可以處理 ProcessInput 方法中的輸入數據。 不過,大部分的 MFT 會等到用戶端呼叫 ProcessOutput 為止。
在用戶端在所有數據流上設定有效的媒體類型之後,MFT 應該一律處於兩種狀態之一:能夠接受更多輸入,或能夠產生更多輸出。 它不應該同時處於兩種狀態或兩種狀態。 MFT 應該只接受至少一個輸出範例所需的輸入,此時 ProcessInput 會傳回MF_E_NOTACCEPTING。 當 ProcessInput 傳回MF_E_NOTACCEPTING時,用戶端可以假設 MFT 已準備好產生輸出。
如果 MFT 在輸入數據中遇到非嚴重錯誤,它可以直接卸載數據,並在取得更多輸入數據時嘗試復原。 若要要求更多輸入數據,MFT 會從IMFTransform::P rocessOutput 方法傳回MF_E_TRANSFORM_NEED_MORE_INPUT。 如果 MFT 卸除任何數據,它應該在下一個輸出範例上設定 MFSampleExtension_Discontinuity 屬性屬性,以通知呼叫端數據流中有間距。
如果在包含 mftransform.h 之前定義 MFT_UNIQUE_METHOD_NAMES ,這個方法會重新命名 為 MFTProcessInput。 請參閱 建立混合式 DMO/MFT 物件。
異步處理
先前的備註描述 同步 處理模型。 若要支援異步處理,請參閱 異步 MFT。規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [傳統型應用程式 |UWP 應用程式] |
最低支援的伺服器 | Windows Server 2008 [傳統型應用程式 |UWP 應用程式] |
目標平台 | Windows |
標頭 | mftransform.h |
程式庫 | Mfuuid.lib |