Przydzielanie buforów do odczytu plików
[Funkcja skojarzona z tą stroną, windows Media Format 11 SDK, jest starszą funkcją. Został zastąpiony przez Source Reader i Sink Writer. czytnika źródeł i składników zapisywania ujścia zostały zoptymalizowane pod kątem systemów Windows 10 i Windows 11. Microsoft zdecydowanie zaleca, aby nowy kod używał odczytu źródeł i zapisu ujścia zamiast Windows Media Format 11 SDK , jeśli jest to możliwe. Firma Microsoft sugeruje, że istniejący kod, który używa starszych interfejsów API, należy przepisać go do korzystania z nowych interfejsów API, jeśli to możliwe.]
W najbardziej podstawowym scenariuszu odczytu plików bufory używane do przekazywania danych są przydzielane przez obiekt odczytu (obiekt czytnika lub obiekt synchronicznego czytnika). Możesz jednak samodzielnie przydzielić bufory. Aby uzyskać więcej informacji na temat zalet przydzielania własnych buforów, zobacz Obsługa przykładów przydzielanych przez użytkownika.
Aby użyć własnych buforów do odczytywania plików, wykonaj następujące kroki.
- Zaimplementuj jedno lub więcej wywołań zwrotnych, które czytnik może użyć, gdy potrzebuje buforu. Jeśli czytasz przykłady danych wyjściowych, użyj IWMReaderAllocatorEx::AllocateForOutputEx. Jeśli czytasz próbki strumienia, użyj IWMReaderAllocatorEx::AllocateForStreamEx. Uwzględnij dowolną logikę do zarządzania buforami, która pasuje do Twojej aplikacji.
- Przydziel pulę buforów, którą będziesz używać do odczytywania plików.
- Znajdź rozmiar wymagany dla swoich buforów, poprzez wywołanie IWMReaderAdvanced::GetMaxOutputSampleSize lub IWMReaderAdvanced::GetMaxStreamSampleSize dla każdego wyjścia i/lub strumienia, w którym bufor jest używany. W przypadku korzystania z czytnika synchronicznego użyj IWMSyncReader::GetMaxOutputSampleSize lub IWMSyncReader::GetMaxStreamSampleSize.
- Opracuj każdy bufor dla puli.
- Konfigurowanie czytnika lub czytnika synchronicznego do czytania. Aby uzyskać więcej informacji, zobacz Czytanie plików przy użyciu asynchronicznego czytnika lub Czytanie plików przy użyciu synchronicznego czytnika.
- Przed rozpoczęciem pisania wywołaj metodę IWMReaderAdvanced::SetAllocateForOutput lub IWMReaderAdvanced::SetAllocateForStream dla każdego wyjścia i strumienia, dla których przydzielasz bufory używając obiektu czytnika. W przypadku czytnika synchronicznego wywołaj metodę IWMSyncReader2::SetAllocateForOutput lub IWMSyncReader2::SetAllocateForStream.
- Rozpocznij odczytywanie pliku.
Obiekt odczytu będzie wywoływał odpowiedni callback alokatora i pobierał próbki z aplikacji. Logika zarządzania buforem musi zawierać sposób sygnalizowania, że bufor jest wolny do ponownego użycia. Zazwyczaj bufor jest umieszczany z powrotem w puli, gdy jego zawartość jest renderowana. W zależności od aplikacji, możesz potrzebować tylko kilku buforów w puli lub wielu.