Поделиться через


Использование чередуемого видео

[Функция, связанная с этой страницей, Windows Media Format 11 SDK, является устаревшей функцией. Он был заменен Читателем источника и Записывателем приемника. средства чтения источников и записи приемника оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код средства чтения исходного кода и записи приемников вместо пакета SDK для Windows Media 11, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие API, будет перезаписан для использования новых API, если это возможно.]

Существует два основных типа кодирования видео: прогрессивный и чередуемый. В прогрессивной кодировке каждый кадр представляет собой закодированное представление одного кадра видео. В чересстрочной кодировке каждый кадр представляет собой кодированное представление либо всех чётных строк пикселей в видео, либо всех нечётных строк. Каждый чересстрочный кадр называется полем, поэтому есть нечетные поля и четные поля. Перекрестный дисплей (например, телевизор) отображает поля по очереди, чередуя их. Прогрессивное отображение отображает кадры одновременно.

Кодек расширенного профиля Windows Media Video 9 обеспечивает поддержку поддержания взаимодействия в сжатых потоках.

Когда следует использовать чередуемое видео

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

Чтобы кодировать переплетированное видео в виде прогрессивного видео, необходимо настроить входные параметры. Дополнительные сведения см. в разделе «Деинтерлейсинг видео».

Порядок полей

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

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

Кодирование чередуемого видео

Чтобы использовать чередованную кодировку, выполните следующие действия.

  1. Настройте видеопоток в профиле, чтобы использовать расширение единицы данных типа контента, вызвав метод IWMStreamConfig2::AddDataUnitExtension. Пример GUID расширения типа контента — WM_SampleExtensionsGUID_ContentType.
  2. Установите поток в профиле и настройте модуль записи с профилем как обычно.
  3. Перед передачей чередующихся примеров в модуль записи вызовите метод IWMWriterAdvanced2::SetInputSetting, чтобы задать для параметра ввода g_wszInterlacedCoding значение true .
  4. Для каждого переплетированного примера, передаваемого в модуль записи, вызовите метод INSSBuffer3::SetProperty, чтобы задать тип контента. Значения типов контента — это сочетания флагов в следующей таблице.
Флаг Описание
WM_CT_INTERLACED Всегда устанавливайте этот флаг при кодировке переплетаемого содержимого. Если вы используете этот флаг без задания флага порядка полей (WM_CT_BOTTOM_FIELD_FIRST или WM_CT_TOP_FIELD_FIRST), кодек будет считать, что сначала идет верхнее поле. Если кодек использует неправильный порядок полей, то не должно быть влияния на качество изображения, но эффективность кодирования будет затронута.
WM_CT_BOTTOM_FIELD_FIRST При сочетании с флагом WM_CT_INTERLACED этот флаг указывает, что нижнее поле (поле, начинающееся со второй строки в образце) появляется первым по времени.
WM_CT_TOP_FIELD_FIRST В сочетании с флагом WM_CT_INTERLACED этот флаг указывает, что верхнее поле (поле, начинающееся с первой строки в данном примере) является первым по времени.
РЕЖИМ_ПОВТОРЕНИЯ_ПЕРВОГО_ПОЛЯ Указывает, что первое поле в примере должно повторяться при воспроизведении. Этот флаг используется для видео, созданного из пленки с помощью процесса телецинии. Если флаг порядка полей не указан в сочетании с этим флагом, предполагается, что сначала идет верхнее поле.

Заметка

Если флаг WM_CT_INTERLACED не задан, предполагается, что образец содержит прогрессивный видеокадр.

Декодирование чередующегося видео

При декодировании чересстрочного видео необходимо задать для параметра g_wszAllowInterlacedOutput значение TRUE с помощью метода IWMReaderAdvanced2::SetOutputSetting. В противном случае кодек будет доставлять прогрессивные кадры.

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

дополнительные разделы