Arbeta med MFT Media Buffers och exempel
Codec MFT skickar mediedata fram och tillbaka med hjälp av mediebuffertar och exempel.
En mediebuffert är ett COM-objekt som hanterar ett minnesblock, vanligtvis för att lagra mediedata. När data skickas till eller från en MFT skickas de alltid i form av en mediebuffert.
Alla mediebuffertar exponerar IMFMediaBuffer-gränssnittet. Det här gränssnittet är utformat för alla typer av data. Buffertar som innehåller videodata exponerar ofta också IMF2DBuffer.
En mediebuffert har en maximal storlek, vilket är mängden minne som allokeras för bufferten. Om du vill hitta den maximala storleken anropar du IMFMediaBuffer::GetMaxLength. När som helst har en mediebuffert också en aktuell längd, vilket är mängden giltiga data i bufferten, från noll byte upp till den maximala storleken. Om du vill hämta den aktuella längden anropar du IMFMediaBuffer::GetCurrentLength. När bufferten skapas är den aktuella längden noll. Om du skriver data till bufferten anropar du IMFMediaBuffer::SetCurrentLength för att uppdatera den aktuella längden.
Om du vill komma åt minnet i bufferten anropar du IMFMediaBuffer::Lås. Den här metoden returnerar en pekare till början av minnesblocket. När du är klar med pekaren anropar du IMFMediaBuffer::Unlock. Metoden Lock är inte en mekanism för trådsynkronisering. det garanterar inte att andra trådar inte kan komma åt bufferten. Metoden Lock används för att säkerställa att det minne som används förblir giltigt tills du anropar metoden Unlock.
Ett medieexempelobjekt (i kontexten för Media Foundation SDK) är ett objekt som innehåller en ordnad lista med noll eller fler buffertar. Medieexempel exponerar IMFSample--gränssnittet.
Om du vill skapa ett nytt exempel anropar du funktionen MFCreateSample. Till en början är exemplets buffertlista tom. Om du vill lägga till en buffert i slutet av listan anropar du IMFSample::AddBuffer.
Relaterade ämnen