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


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

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

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

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

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

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

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

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

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

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

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

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

  1. Настройте видеопоток в профиле для использования расширения единиц данных типа контента, вызвав метод IWMStreamConfig2::AddDataUnitExtension . Пример GUID расширения для расширения типа контента WM_SampleExtensionsGUID_ContentType.
  2. Задайте поток в профиле и настройте модуль записи с профилем в обычном режиме.
  3. Перед передачей чередующихся примеров в модуль записи вызовите метод IWMWriterAdvanced2::SetInputSetting , чтобы задать для параметра ввода g_wszInterlacedCoding значение TRUE.
  4. Для каждого примера с чередованием, передаваемого в модуль записи, вызовите метод INSSBuffer3::SetProperty , чтобы задать тип контента. Значения типов контента представляют собой сочетания флагов в следующей таблице.
Flag Описание
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_REPEAT_FIRST_FIELD Указывает, что первое поле в образце должно повторяться при воспроизведении. Этот флаг используется для видео, созданного из пленки процессом телесины. Если в сочетании с этим флагом не задан флаг порядка полей, предполагается, что верхнее поле возникает впервые во времени.

Примечание

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

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

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

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

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