Что означает код HRESULT 0xC00D1B58 (NS_E_BAD_MARKIN)?

 
Предыдущий Следующий
NS_E_AUTHORIZATION_FILE_NOT_FOUND NS_E_BAD_MARKOUT

NS_E_BAD_MARKIN

Как интерпретировать код в реальном сеансе кодирования

0xC00D1B58 имеет имя NS_E_BAD_MARKIN. Его практическая область — проверка IWMEncSource.MarkIn до фиксации временной шкалы источника; она относится к временной шкале и обрезке источника, а не ко всем компонентам воспроизведения Windows Media или Windows.

Механизм и точка сбоя

До поступления образцов в кодек Windows Media Encoder строит временную шкалу каждого выбранного источника в сеансе, возвращающем NS_E_BAD_MARKIN. Поэтому перед запуском кодирования Encoder сопоставляет MarkIn, MarkOut, Repeat и параметры сжатия времени с длительностью источника и между собой.

Файл может успешно открываться и сообщать длительность, но всё равно завершиться здесь ошибкой, поскольку проверка временной шкалы выполняется после обнаружения источника, но до получения первого закодированного образца в сеансе, который возвращает NS_E_BAD_MARKIN, поскольку временная шкала проверяется после обнаружения источника и до первого закодированного образца. Типичный сценарий: интерфейс сохраняет секунды, тогда как уровень автоматизации ожидает миллисекунды, из-за чего MarkIn оказывается за пределами клипа. Для NS_E_BAD_MARKIN первый результат Encoder поэтому важнее более позднего общего сообщения.

Матрица воспроизведения

ПолеЧто сохранить
Определяющие значенияMarkIn, MarkOut и обнаруженную длительность источника в миллисекундах, включая сведения о преобразовании отрицательного служебного значения в беззнаковое
Объект-владелецИмя группы источников, URL источника или моникер устройства, MarkIn и MarkOut в миллисекундах, обнаруженную длительность, флаг Repeat, режим предварительной обработки и состояние Encoder
Связь с сеансомТо же поколение группы источников, индекс аудитории, идентичность объекта и последовательность обратных вызовов, при которых возник NS_E_BAD_MARKIN
Данные нижнего уровняПервый HRESULT COM, драйвера, файловой системы или кодека, появившийся до сопоставления условия с NS_E_BAD_MARKIN
Контролируемое сравнениеЗаведомо исправный сеанс, в котором изменён только параметр, названный границей недопустимого MarkIn

Матрица доказательств

НаблюдениеИнтерпретация
Наблюдение подтверждает этот результатОпределяющими данными являются MarkIn, MarkOut и обнаруженная длительность источника в миллисекундах, включая возможное преобразование отрицательного служебного значения в беззнаковое. Они подтверждают проверку IWMEncSource.MarkIn до фиксации временной шкалы в том же поколении объекта.
Наблюдение указывает на более ранний сбойЗаписанные значения удовлетворяют правилу MarkIn, но источник, драйвер, активация COM или файловая операция раньше возвращают другой HRESULT.
Наблюдение указывает на более поздний сбойEncoder проходит эту границу, однако на следующем этапе завершается ошибкой кодек, архивный приёмник или приёмник трансляции.
Проверка после исправленияВнесите одно изменение: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности. Затем повторите исходный вызов и убедитесь, что он проходит проверку MarkIn.

Влияние NS_E_BAD_MARKIN ограничено переходом временной шкалы и обрезки источника, который выполняет проверку IWMEncSource.MarkIn до фиксации временной шкалы. Для NS_E_BAD_MARKIN сам по себе код не доказывает повреждение всех входных файлов, отсутствие всех кодеков или непригодность всей установки Windows Media. В типичном случае, когда интерфейс сохраняет секунды вместо ожидаемых миллисекунд и MarkIn оказывается за пределами клипа, сохраните первый неуспешный вызов и идентичность объекта, чтобы более поздняя обёртка не заменила эти данные.

Минимальный эксперимент

  1. Запишите 0xC00D1B58, NS_E_BAD_MARKIN, версию Encoder и точный вызов API или обращение к свойству, вернувшее результат.
  2. Экспортируйте текущую конфигурацию .wme или .prx, затем сохраните MarkIn, MarkOut и обнаруженную длительность источника в миллисекундах, включая сведения о преобразовании отрицательного служебного значения в беззнаковое.
  3. Для NS_E_BAD_MARKIN проверяйте предварительное условие временной шкалы и обрезки, не меняя одновременно источник, профиль и выходной приёмник.
  4. Выполните одно контролируемое сравнение, изменив только это условие: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности.
  5. После изменения пересоздайте затронутый объект Encoder, не предполагая, что существующий граф отбросил прежнее состояние недопустимого MarkIn.

Не объединяйте эти результаты

РезультатПочему это другая граница
NS_E_BAD_MARKOUTпроверка IWMEncSource.MarkOut относительно MarkIn и конца источника
NS_E_SOURCE_CANNOT_LOOPRepeat включён для типа источника, который нельзя воспроизводить повторно
NS_E_MARKIN_UNSUPPORTEDобрезка по MarkIn или MarkOut запрошена для источника, не поддерживающего позиционирование по меткам

Что изменить, а что оставить неизменным

Измените минимальное ответственное предварительное условие: установите MarkIn в неотрицательное смещение, строго предшествующее MarkOut и находящееся в пределах обнаруженной длительности. При повторной проверке NS_E_BAD_MARKIN оставьте неизменными все несвязанные параметры источника, аудитории и выхода до повторения того же вызова.

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

Официальная документация для NS_E_BAD_MARKIN


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