Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dane wejściowe są przekazywane do obiektów kodekowych DMO przy użyciu buforów multimedialnych. Bufor multimedialny to obiekt implementujący interfejs IMediaBuffer. Możesz zaimplementować klasę w tym celu lub, jeśli używasz zestawu SDK formatu Windows Media w aplikacji, możesz użyć obiektów buforu zdefiniowanych w tym zestawie SDK.
W przypadku zaimplementowania własnej klasy buforu należy zachować ostrożność w zakresie obsługi pamięci buforu. Po przekazaniu próbki wejściowej, DMO utrzymuje referencję do bufora, dopóki nie zakończy pracy z próbką. Możesz natychmiast zwolnić odwołanie do interfejsu IMediaBuffer, ale nie masz możliwości poznania, kiedy kodek nie potrzebuje już jego odwołania. Aby mieć pewność, że pamięć zostanie zwolniona po usunięciu obiektu, należy zaimplementować klasę tak, aby przydzielała i zwalniała pamięć dla buforu wewnętrznie.
Ponieważ obiekty DMO przechowują odwołania do buforów na nieznany czas, nie jest to trywialna sprawa używania ograniczonej puli buforów. Najprostszym rozwiązaniem jest przydzielenie nowego buforu dla każdej próbki, chociaż jest to nieefektywne.
Lepszym rozwiązaniem jest zaimplementowanie obiektu do zarządzania pulą buforów. Aby to zrobić, napisz kod w metodzie Release swojej implementacji IMediaBuffer, który wywoła metodę zarządzania buforami, gdy liczba odwołań spadnie do zera, zamiast usuwać obiekt. Menedżer buforu może następnie utrzymywać listę wskaźników do przydzielonych obiektów buforu. Utwórz metodę w menedżerze buforów, aby sprawdzić listę wolnych buforów i zwrócić wskaźnik, dzięki czemu aplikacja będzie mogła uzyskiwać do nich dostęp w razie potrzeby. Ta metoda powinna utworzyć nowe bufory w miarę potrzeb i dodać je do listy.
Tematy pokrewne