Zuweisung von Puffern für das Lesen von Dateien
Im einfachsten Szenario zum Lesen von Dateien werden die Puffer, die zum Übermitteln von Beispielen verwendet werden, vom Leseobjekt (dem Leserobjekt oder dem synchronen Leserobjekt) zugeordnet. Puffer können Sie jedoch selbst zuordnen. Weitere Informationen zu den Vorteilen der Zuweisung eigener Puffer finden Sie unter Benutzerzuweisungsbeispielunterstützung.
Führen Sie die folgenden Schritte aus, um Eigene Puffer für das Lesen von Dateien zu verwenden.
- Implementieren Sie einen Rückruf oder Rückrufe, damit der Leser aufrufen kann, wenn er einen Puffer benötigt. Wenn Sie Ausgabebeispiele lesen, verwenden Sie IWMReaderAllocatorEx::AllocateForOutputEx. Wenn Sie Streambeispiele lesen, verwenden Sie IWMReaderAllocatorEx::AllocateForStreamEx. Schließen Sie die Logik für die Verwaltung von Puffern ein, die für Ihre Anwendung geeignet ist.
- Ordnen Sie einen Pool von Puffern zu, den Sie zum Lesen von Dateien verwenden.
- Suchen Sie die für Ihre Puffer erforderliche Größe, indem Sie IWMReaderAdvanced::GetMaxOutputSampleSize oder IWMReaderAdvanced::GetMaxStreamSampleSize für jede Ausgabe und/oder einen Stream aufrufen, für die der Puffer verwendet wird. Wenn Sie den synchronen Reader verwenden, verwenden Sie stattdessen IWMSyncReader::GetMaxOutputSampleSize oder IWMSyncReader::GetMaxStreamSampleSize .
- Erstellen Sie jeden Puffer für den Pool.
- Richten Sie den Lese- oder Synchronleser für das Lesen ein. Weitere Informationen finden Sie unter Lesen von Dateien mit dem asynchronen Reader oder Lesen von Dateien mit dem synchronen Reader.
- Rufen Sie vor dem Schreiben IWMReaderAdvanced::SetAllocateForOutput oder IWMReaderAdvanced::SetAllocateForStream für jede Ausgabe und jeden Stream auf, für die Sie Puffer mithilfe des Reader-Objekts zuweisen. Rufen Sie für den synchronen Leser stattdessen IWMSyncReader2::SetAllocateForOutput oder IWMSyncReader2::SetAllocateForStream auf.
- Beginnen Sie mit dem Lesen der Datei.
Das Leseobjekt ruft den entsprechenden Zuordnungsrückruf auf und ruft Beispiele aus Ihrer Anwendung ab. Ihre Pufferverwaltungslogik muss eine Möglichkeit enthalten, um zu signalisieren, dass ein Puffer wieder verwendet werden kann. In der Regel wird ein Puffer wieder in den Pool eingefügt, wenn sein Inhalt gerendert wird. Je nach Anwendung benötigen Sie möglicherweise nur wenige Puffer im Pool oder viele.
Zugehörige Themen