Что означает код HRESULT 0xC00D36DF (MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS)?

 
Предыдущий Следующий
MF_E_UNRECOVERABLE_ERROR_OCCURRED MF_E_SAMPLE_NOT_WRITABLE

MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS

Что означает MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS

MF_E_SAMPLE_HAS_TOO_MANY_BUFFERS (0xC00D36DF) — Предоставленный образец содержит слишком много буферов.

Медиасэмпл IMFSample хранит упорядоченный список буферов IMFMediaBuffer. HRESULT означает, что принимающий компонент не принимает такое количество буферов в одном медиасэмпле; это ограничение структуры медиасэмпла, а не общий лимит оперативной памяти.

Что проверить и как подтвердить исправление

Перед ошибочным вызовом получите число буферов через GetBufferCount и проследите, где каждый из них добавляется. Повторное использование медиасэмпла без RemoveAllBuffers легко приводит к накоплению буферов между итерациями.

Если принимающему API нужен один непрерывный буфер, ConvertToContiguousBuffer может объединить данные и заменить список одним буфером. Делайте это только когда контракт потребителя действительно допускает такое представление.

Не удаляйте произвольные буферы ради уменьшения счётчика: их границы могут иметь смысл для производителя, а полезные данные должны сохраниться полностью и в исходном порядке.

Документация для результата 0xC00D36DF: IMFSample::AddBuffer · ConvertToContiguousBuffer · Wine: IMFSample buffer-list contract.


Нужно найти другой код? Найти другой код состояния или ошибки.