從媒體來源讀取下一個範例。
語法
HRESULT ReadSample(
[in] DWORD dwStreamIndex,
[in] DWORD dwControlFlags,
[out] DWORD *pdwActualStreamIndex,
[out] DWORD *pdwStreamFlags,
[out] LONGLONG *pllTimestamp,
[out] IMFSample **ppSample
);
參數
[in] dwStreamIndex
要從哪個串流中擷取資料。 其價值可以是以下任一。
[in] dwControlFlags
一個位元 或 OR ,從 MF_SOURCE_READER_CONTROL_FLAG 枚舉中標示為零個或以上。
[out] pdwActualStreamIndex
接收該串流的零基索引。
[out] pdwStreamFlags
從MF_SOURCE_READER_FLAG枚舉中接收零個或多個旗標的位元或值。
[out] pllTimestamp
接收取樣的時間戳記,或 pdwStreamFlags 中指示的串流事件時間。 時間以100奈秒單位表示。
[out] ppSample
接收指向 IMFSample 介面的指標或 NULL 值(詳見備註)。 若此參數接收非 NULL 指標,呼叫者必須釋放介面。
返回值
這個方法會傳回 HRESULT。 可能的值包括但不限於下表中的值。
| 回傳碼 | Description |
|---|---|
|
此方法已成功。 |
|
要求無效。 |
|
dwStreamIndex 參數無效。 |
|
沖洗手術正在進行中。 請參見 IMFSourceReader::Flush。 |
|
論點無效。 請參閱<備註>。 |
備註
若未選擇請求的串流,返回代碼將 MF_E_INVALIDREQUEST。 請參見 IMFSourceReader::SetStreamSelection。
此方法可同步或非同步完成。 如果你在建立原始碼讀取器時提供回調指標,該方法就是非同步的。 否則,該方法為同步式。 關於設定回調指標的更多資訊,請參見 MF_SOURCE_READER_ASYNC_CALLBACK。
非同步模式
非同步模式下:- 所有
[out]參數必須為 NULL。 否則,方法會回傳 E_INVALIDARG。 - 該方法會立即回傳。
- 當操作完成後,應用程式的 IMFSourceReaderCallback::OnReadSample 方法會被呼叫。
- 若發生錯誤,方法可能會同步或非同步失敗。 檢查 ReadSample 的回傳值,也檢查 IMFSourceReaderCallback::OnReadSample 的 hrStatus 參數。
同步模式
同步模式下:- pdwStreamFlags 和 ppSample 參數不能是 NULL。 否則,方法會回傳 E_POINTER。
- pdwActualStreamIndex 與 pllTimestamp 參數可以為 NULL。
- 此方法會阻塞,直到下一個樣本可用。
此方法可在 pdwStreamFlags 參數中回傳旗標,而不回傳 ppSample 中的媒體樣本。 因此, ppSample 參數即使方法成功,仍可接收 NULL 指標。 例如,當原始碼讀取器到達串流末端時,會回傳 pdwStreamFlags 中的 MF_SOURCE_READERF_ENDOFSTREAM 標誌,並將 ppSample 設為 NULL。
若串流中有中斷,pdwStreamFlags 會接收 MF_SOURCE_READERF_STREAMTICK 標誌,ppSample 為 NULL,pllTimestamp 表示中斷發生的時間。
若安裝了 Windows Vista 平台更新補充包,則可使用此介面。
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows 7、Windows Vista 及 Windows Vista 平台更新補充 [桌面應用程式 |UWP 應用程式] |
| 支援的最低伺服器 | Windows Server 2008 R2 [傳統型應用程式 |UWP 應用程式] |
| 目標平臺 | 窗戶 |
| Header | mfreadwrite.h |