Что означает код HRESULT 0x000D0BC9 (NS_S_DEGRADING_QUALITY)?

 
Предыдущий Следующий
NS_S_REBUFFERING NS_S_TRANSCRYPTOR_EOF

NS_S_DEGRADING_QUALITY

Источник Windows Media снизил качество кодека

NS_S_DEGRADING_QUALITY — HRESULT 854985 (0x000D0BC9) из Windows Media. AllStat описывает его как «Запрошенная операция заставила источник снизить качество кодека». Бит severity не указывает на сбой, однако значение сообщает конкретное состояние и не должно сводиться к обычному S_OK.

В устаревшем конвейере Windows Media или состоянии Player этот статус означает, что запрошенная операция заставила источник снизить качество кодека. Перед тем как считать NS_S_DEGRADING_QUALITYзавершённым, вызывающий код должен согласовать специфичный для этого кода переход состояния и все пригодные выходные данные.

Что должно быть истинно перед принятием результата

Для этого статуса операцию завершённой, убедитесь, что снижение качества является намеренной адаптацией и укладывается в политику приложения. Без такого доказательства Этот статус может скрыть ошибку вызывающего кода, хотя бит severity этого HRESULT не указывает на сбой.

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

Где встречается этот статус

  • Этот статус может возвращаться в callbacks источника, reader, writer или renderer Windows Media; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
  • Этот статус может возвращаться при автоматизации через Windows Media Player SDK; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.
  • Этот статус может возвращаться в состояниях media graph, playlist, image, rights или buffering; фиксируйте точный метод и состояние объекта, а не интерпретируйте константу вне контракта этого вызова.

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

Последовательность диагностики

  • Зафиксируйте исходное значение 0x000D0BC9 до того, как оболочки, знаковое десятичное форматирование, исключения или общая обработка успеха заменят исходный статус.
  • Определите операцию, вернувшую этот статус, включая интерфейс или callback, сборку компонента, поток, процесс и фазу машины состояний.
  • Для этого статуса докажите решающее условие: снижение качества является намеренной адаптацией и укладывается в политику приложения.
  • Проверьте каждый выходной параметр, счётчик, массив статусов, буфер, callback, состояние задачи, временную метку медиа, голос транзакции или security token, остающийся частью контракта этого статуса.
  • Сравните состояние непосредственно до и после этого статуса; success severity не гарантирует завершения необязательной работы или высокоуровневого действия, которого ожидал вызывающий код.
  • Воспроизведите этот статус на минимальном входе, сохраняющем то же условие, затем измените только зафиксированную причину и повторите операцию.

Данные и телеметрия

  • Для этого статуса сохраните прежнее и новое качество кодека.
  • Для этого статуса сохраните сведения о нагрузке CPU или ограничении пропускной способности.
  • Для этого статуса сохраните профиль потока.
  • Для этого статуса сохраните момент перехода на другой режим.
  • Для этого статуса сохраните порог, при котором восстанавливается прежнее качество.

Также зафиксируйте ns_s_degrading_quality_operation, ns_s_degrading_quality_state_before, ns_s_degrading_quality_state_afterвремя UTC, идентификаторы процесса и потока, версию компонента и correlation ID. Телеметрия для этого статуса не должна содержать учётные данные, но должна сохранять несекретные идентификаторы объектов и сведения о версиях.

Правильная обработка и восстановление

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

Повторяйте операцию только после изменения документированного входа или состояния. Неизменный повтор после этого статуса полезен только если API документированно продвигается по состояниям при повторных вызовах.

Практический сценарий

Кодировщик в реальном времени обнаруживает нехватку ресурсов CPU и снижает сложность обработки. Мониторинг фиксирует смену профиля и возвращает предпочтительное качество после того, как нагрузка устойчиво нормализуется.

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

Отличие от соседних результатов

Этот статус нужно отличать от обычного S_OK и от значений того же семейства API, у которых бит severity указывает на сбой; документированное состояние определяет следующее действие.

Правильное отделение этого статуса от соседних значений выбирает корректный путь продолжения и cleanup.

Рекомендации разработчикам и администраторам

Когда этот статус проходит через границы COM, RPC, managed code, scripting или logging, сохраняйте беззнаковое 32-битное значение. Тесты должны проверять постусловие этого статуса, а не только то, что бит severity означает успех.

Для этого статуса документируйте владельца повторов, отмены, cleanup и пользовательских сообщений. Для этого статуса меняйте конфигурацию или состояние ответственного компонента только после того, как собранные данные подтвердят причинную связь.

Ссылки


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