使用 MFT 媒體緩衝區和範例
編解碼器 MFT 會使用媒體緩衝區和範例來回傳遞媒體資料。
媒體緩衝區是管理記憶體區塊的 COM 物件,通常用來保存媒體資料。 將資料傳遞至 MFT 或從 MFT 傳遞時,一律會以媒體緩衝區的形式傳遞。
所有媒體緩衝區都會公開 IMFMediaBuffer 介面。 此介面是針對任何類型的資料所設計。 包含視訊資料的緩衝區通常也會公開 IMF2DBuffer。
媒體緩衝區的大小上限,這是為緩衝區配置的記憶體數量。 若要尋找大小上限,請呼叫 IMFMediaBuffer::GetMaxLength。 在任何時間點,媒體緩衝區也有目前的長度,這是緩衝區中有效資料的數量,範圍從零位元組到大小上限。 若要取得目前的長度,請呼叫 IMFMediaBuffer::GetCurrentLength。 建立緩衝區時,目前的長度為零。 如果您將資料寫入緩衝區,請呼叫 IMFMediaBuffer::SetCurrentLength 以更新目前的長度。
若要存取緩衝區中的記憶體,請呼叫 IMFMediaBuffer::Lock。 這個方法會傳回記憶體區塊開頭的指標。 當您使用指標完成時,請呼叫 IMFMediaBuffer::Unlock。 Lock方法不是執行緒同步處理機制;它不保證其他執行緒無法存取緩衝區。 Lock方法可用來確保存取的記憶體會維持有效狀態,直到您呼叫Unlock方法為止。
媒體基礎 SDK 內容中的媒體範例物件 () 是包含零個或多個緩衝區排序清單的物件。 媒體範例會公開 IMFSample 介面。
若要建立新的範例,請呼叫 MFCreateSample 函 式。 一開始,範例的緩衝區清單是空的。 若要將緩衝區新增至清單結尾,請呼叫 IMFSample::AddBuffer。
相關主題