使用 DMO 媒體緩衝區
輸入資料會使用媒體緩衝區傳遞至編解碼器 DMO。 媒體緩衝區是實作 IMediaBuffer 介面的物件。 您可以針對此目的實作類別,或者,如果您在應用程式中使用 Windows Media Format SDK,您可以使用該 SDK 中定義的緩衝區物件。
如果您實作自己的緩衝區類別,請小心處理緩衝區記憶體的方式。 當您傳遞輸入範例時,DMO 會保留緩衝區的參考,直到完成範例為止。 您可以立即釋放 IMediaBuffer 介面的參考,但您無法知道編解碼器何時不再需要其參考。 若要確定物件刪除本身時釋放記憶體,您應該實作 類別,讓它在內部配置和釋放緩衝區的記憶體。
由於 DMO 會保留對緩衝區的參考,所以使用有限的緩衝區集區並不簡單。 最簡單的解決方案是為每個範例配置新的緩衝區,雖然這樣做沒有效率。
更好的解決方案是實作 物件來管理緩衝區集區。 若要這樣做,請在IMediaBuffer實作的Release方法中撰寫程式碼,以呼叫緩衝區管理員的方法 (,而不是在參考計數捨棄為零時刪除本身) 。 接著,緩衝區管理員可以維護配置之緩衝區物件的指標清單。 在緩衝區管理員中建立方法來檢查可用緩衝區清單,並傳回指標,以便您的應用程式在需要時存取緩衝區。 此方法應該視需要建立新的緩衝區,並將其新增至清單。
相關主題