zelez (zelez) wrote,
zelez
zelez

Как я смотрел кино на компе. (Аппаратное ускорение H264/AVC и VC-1).


                                          Из всех искусств для нас важнейшим является кино
                                         (С) Ленин+Луначарский


Мой комп (XP SP2, NVIDIA GF8600GT и Athlon 64 3000+ с разгоном в 1,5 раза) легко справлялся с показом видео стандартного качества (SD) практически любым плеером: Media Player Classic, BS.Player, LightAlloy, и другими.  Бесплатный KMPlayer мне нравился больше всех – отличная вещь для ленивых! Установил, и ничего не настраивая – смотри все подряд (ну, почти все).  Что такое контейнеры, кодеки, фильтры, и прочая хрень – я не знал и знать не хотел.
Но после подключения 40” ЖК телевизора вторым монитором к компу -  захотелось видео покачественней.

А чем смотреть видео высокого качества (HD)? 
Ведь большинство фильмов хорошего качества в сети это Blu-Ray или HD диски, ремуксы  или рипы с них в контейнере MKV, разрешением 720p или 1080p, закодированные кодеками H.264/AVC, VC-1 или MPEG-2. И многие HD фильмы при просмотре стали жутко тормозить и загружать процессор под 100%.

DVD и Blu-Ray диски
Для просмотра DVD и Blu-Ray дисков установил Cyberlink PowerDVD 7.3 Ultra 3319a (чего только нет на  рапидшаре ). Это последняя версия плеера Cyberlink PowerDVD, которая официально поддерживает воспроизведение Blu-Ray с жесткого диска, а не только с Blu-Ray привода или его образа. A главное - декодер этого плеера умеет частично или полностью переключать декодирование видео с центрального процессора на видеопроцессор видекарты, если видеокарта и ее драйвер это умеют.
Моя карта NVIDIA GF8600GT должна поддерживать аппаратное ускорение, поэтому в плеере поставил галку Configuration > Video > «Enable hardware acceleration (NVIDIA PureVideo)».  
Вау! При просмотре и Blu-Ray дисков с H264 этим плеером все "полетело"! Например Blu-ray диск с фильмом Близость / Closer (файл 00094.m2ts, Н264, 1920х1080):
cлева - без аппаратного ускорения, справа - с аппаратным ускорением

- теперь процессор нагружается только при запуске плеера. А потом - отдыхает, работает видеокарта.
Я ожидал, что аппаратное ускорение видеокартой снизит нагрузку на процессор. Но что практически разгрузит его – это приятная неожиданность.
При воспроизведении на моей видеокарте Blu-Ray дисков с видео, закодированном кодеком VC-1 ускорение послабее - загрузка процессора падает до 50%, но и этого достаточно для комфортного просмотра.

"Матроски"
А как быть с "матросками" - фильмами в контейнере MKV? Матроска никак не станет стандартом, и ее поддержки в плеере Cyberlink PDVD 7.3 нет - нет сплиттера для расщепления данных в контейнере MKV на отдельные потоки видео/аудио/субтитры. И переименование .mkv файла в .avi помогает не всегда.
На HD TRACKER FORUM нашел тему: «Просмотр Blu-Ray и HD-DVD с H.264 и VC-1». Там предлагают  использовать плееры  KMPlayer или MPC HC, к которым подключить сплиттер для матроски Нааli Media Splitter, который многие считают лучшим, и подключить H.264/AVC декодер из плеера Cyberlink PowerDVD и VС-1 декодер WMVideo Decoder DMO из Windows Media Player 11. Предупреждают: "Данная настройка актуальна только при использовании x86 ОС!!!"

Настроил систему заново по мотивам этих инструкций, для начала - без использования аппаратного ускорения:
 - обновил драйвера видеокарты GF8600GT до последней официальной версии NVIDIA ForceWare  (на тот момент - 169.21) ;
 - установил сплиттер для матроски Нааli Media Splitter;
 - установил плееры Cyberlink PowerDVD Ultra 7.3 (3319a), Windows Media Player 11;
 - yстановил плееры KMPlayer и MPC HC;
 - указал рендер «VMR9 Renderless» в режиме 3D c параметрами Bicubic A=-0,6 (PS=2.0) [для плеера MPC НС - раздел Вывод/Output; для KMPlayer - Обработка видео > Обработчик];
 - приоритетными внешними фильтрами в KMPlayer и MPC HC назначил Cyberlink H.264/AVC Decoder (PDVD7.x) для H264 и WMVideo Decoder DMO для VC-1.

Матроски заиграли! Но, как и раньше, загрузка процессора на многих подскакивает до 100% и видео идет с тормозами.
При софтовом декодировании для минимальной загрузки процессора можно отключить всю постобработку и установить самый быстрый декодер. Постобработка у меня и так отключена, а самым быстрым "софтовым" декодером H264/AVC многие считают CoreAVC. Да и сами разработчики скромно написали у себя на сайте: The World’s Fastest H.264 Software Video Decoder!
Установил декодер CoreAVC Н264 последней (на тот момент) версии 1.6. Указал его как приоритетный. Результат – если и снизилась загрузка процессора - то не слишком заметно. Где были тормоза при воспроизведении - там и остались. Без использования аппаратного ускорения декодирования видеокартой мой процессор справляется далеко не со всеми фильмами.

H264/AVC
Пора включать аппаратное ускорение. Начну с H264/AVC:
 - в плеере Cyberlink PowerDVD снова поставил галку Configuration > Video > «Enable hardware acceleration (NVIDIA PureVideo)» - теперь декодер Cyberlink должен включать аппаратное ускорение при его использовании в других плеерах;
 - в KMPlayer-е для включения аппаратного ускорения отключил "Фильтр трансформации видео КМР" (Настройки > Конфигурация >  Обработка видео > Общие).

Теперь и при просмотре рипов в контейнере MKV видео "полетело". Например,
MPC, рип Blu-ray диска фильма «Призрак оперы / The Phantom of the Opera» с какого-то торрента (файл The.Phantom.of.the.Opera.2004.Blu-ray.1080p.RusAC3.EngDTS.mkv, Н264, 1920х1080);
cлева - декодер CoreAVC Video Decoder 1.6 (не поддерживает аппаратное ускорение),  справа - декодер Cyberlink H.264/AVC Decoder (PDVD7.x) (с включенным аппаратным ускорением)

Приблизительно такое же ускорение получается и на KMPlayer-е, и на других. 

Проделал ту же процедуру на компе с XP, Athlon 3000+ и встроенным видео GF6150. Эффект аппаратного ускорения не заметен. Почему? И что это такое, аппаратное ускорение?

DXVA
Аппаратное ускорение - HWA (HardWare Acceleration) - это использование графического процессора видеокарты для выполнения части операций по декодированию видео. Ведь уже сегодня вычислительная мощность графических процессоров на видеокарте в 5-10 раз превышает мощность центрального процессора, и этот отрыв увеличивается.
Для обеспечения HWA и доступа  программ к "железу" видеокарты в операционных системах Windows, начиная с 2000, имеется специальный интерфейс, или по- умному «Application Programming Interface (API) and a corresponding Device Driver Interface (DDI)» -  DXVA (DirectX Video Acceleration). Кроме самого DXVA программисты Мicrosoft разработали и спецификации по кодированию DXVA и обозначения стандартных входных/выходных пинов (Приложение).

Процедура декодирования стандартно разбита на четыре этапа, выполняющихся в следующем порядке:
1) VLD - Variable-Lenth Decode [CAVLC/CABAC] [Entropy Decode] [Bitsream decode];
2) IDCT - Inverse Discrete Cosine Transform [Frequency Transform];
3) MoComp - Motion Compensation [Pixel Prediction];
4) PostProc - Post Processing.

Наиболее трудоемкими при декодировании HD видео обычно является первый этап VLD - до 50% вычислений и второй этап  IDCT - до 40% вычислений. Финальные операции по декодированию - MoComp и PostProc - менее трудоемкие, не более 10-15% вычислительных операций декодирования видео. 

Для того, чтобы заработало аппаратное ускорение через DXVA, нужно, чтобы:
 - железо видеокарты позволяло выполнять операции по декодированию;
 - драйвер видеокарты умел принимать видеопоток через DXVA и декодировать его силами видеокарты;
 - плеер и декодер умели использовать DXVA;
 - декодер и драйвер видеокарты умели договориться, какие этапы декодирования будут выполняться силами центрального процессора, а какие - графического процессора.

ATI-AMD и NVIDIA уже давно выпускают видеокарты с поддержкой аппаратного ускорения.
У NVIDIA эта поддержка получила рекламное название PureVideo HD, у ATI-AMD - Avivo. ("High Definition сегодня: технологии ATI Avivo HD")
Вначале это была частичная поддержка. PureVideo HD на видеокартах серии GF7xxx и GF8800 на G80 - позволяло два последних этапа декодирования передать видеокарте (MoComp и PostProc); Avivo на Radeon-ах X1000 позволяло передать три последних (IDCT, MoComp и PostProc).
Затем у ATI-AMD появились видеокарты с полной поддержкой аппаратного ускорения - Avivo HD.


У NVIDIA ситуация чуть иная. Начиная с видеокарт серии GF8xxx (кроме 8800 на G80) появилась полная поддержка ускорения H264, но для VC-1  поддержка только последних трех этапов декодирования, без VLD. Это неофициально называют PureVideo HD VP2.


И только последние интегрированные графические чипы NVIDIA C78, C7A (8200/8300/9300/9400 IGP, платформа ION) и новые  чипы для дискретных видеокарт  G98 (8400GS rev2, 9300GS/GE, G100), G218 (G210), G216 (GT220) имеют полную поддержку и H264, и VC-1 . Так называемое PureVideo HD VP3. Пример: Zotac IONITX-A (Nvidia Ion) 



Сводную таблицу возможностей разных видеокарт по аппаратному декодированию можно найти на Missing Remote.
Теперь понятно, что видеочип GF6150 не поддерживает аппаратное ускорение. Декодирование выполняется только силами процессора. И как это я умудрился когда-то купить «правильную» видеокарту GF8600GT? Просто повезло! :)

Самостоятельно проверить возможности видеокарты и установленных в систему декодеров по аппаратному декодированию через интерфейс DXVA можно с помощью программы DXVAChecker. (Для работы DXVAChecker-а в системе должны обязательно стоять .NET 2.0, что указано на сайте разработчиков.  Visual С++ 2005 Runtime нужен для старых версий, для последних - не нужен.) 

Вот что программа DXVAChecker говорит про мою GF8600GT:

8600GT
Как и положено, у нее есть полная поддержка H264 (есть пин H264_VLD). А для VC-1 у нее нет поддержки VLD. Только IDCT, MoComp и PostProc.

Драйвера NVIDIA и ATI поддерживают DXVA с момента появления поддержки DXVA видеокартами. Они постоянно обновляются, и обычно рекомендуют использовать самые последние (хотя иногда в новых версиях драйверов бывают глюки - так для владельцев видеокарт ATI некоторое время советовали пользоваться драйверами 8.12 для XP и всегда иметь их в запасе на случай отказа новых).

А какие декодеры поддерживают аппаратное ускорение через DXVA?
До недавнего времени это были только декодеры из коммерческих продуктов - Cyberlink PowerDVD Ultra, Arcsoft TMT, Nero ShowTime. Декодер VC-1 из Windows Media Player 11 - WMVideo DMO - частично поддерживает DXVA (без VLD). Сейчас появляются новые - в Windows 7 декодеры от WMP поддерживают не только VC-1 но и H264/AVC. Появилась поддержка DXVA и у декодера бесплатного плеера MPC HC. Бесплатный KMPlayer пока отстает.

Возможности установленных в системе декодеров можно проверить той же программой DXVAChecker: перетащить мышкой файл с видео на поле DXVAChecker-а, или открыть этот файл нажав Check DirectShow Filters в DXVAChecker-е и он покажет возможности зарегистрированных в системе декодеров, необходимых этому файлу (и выбрав соответствующий декодер можно изменить его параметры и проверить качество воспроизведения).
Так, например, DXVAChecker распознает возможности установленных у меня декодеров для H264/AVC:
H264/AVC + 8600GT

При желании эти декодеры можно подключить к любимому плееру (KMPlayer, MPC HC и пр.) и настроить в них использование аппаратного ускорения через DXVA. 
В Сети можно найти кучу инструкций. как это сделать. Например эта: Watching h.264 videos using DirectX Video Acceleration (DXVA). Или эта: MPC-HC DXVA (ru-board).
А ленивые могут воспользоваться готовыми самодельными сборками плееров с поддержкой DXVA, собираемыми энтузиастами. Например сборки KMPLayer от 7sh3 с прикрученными декодерами, поддерживающими DXVA.

Пришло время взять стакан попкорна и наслаждаться просмотром киношедевров в высоком качестве.
Но как только расслабишся, сразу что-то да испортит настроение.
Некоторые рипы H264 в контейнере MKV не запускаются с аппаратным ускорением, либо запускаются, но видео ужасное - либо слайдшоу, либо артефакты, либо еще чего. Рипы кривые, или еще что?

"Кривые" рипы
Именно, "кривые".
Ведь на легально выпускаемые фильмы существуют стандарты. По стандарту выпускаемые лицензионные Blu-Ray-диски могут содержать видео, закодированные тремя разными кодеками - MPEG-2, MPEG-4 AVC, VC-1, при кодировании которыми должны быть соблюдены некие правила - ограничения на параметры кодирования, называемые Profile / Level: (eMediaLive.com)
MPEG-2 (MP@HL, MP@ML),
MPEG-4 AVC (HP@L4.1, MP@L4.1),
VC-1 (AP@L3) .
Аналогично для HD-дисков были требования:
MPEG-2 (MP@HL, MP@ML, SP@ML),
MPEG-4 AVC (HP@L4.1, HP@L3.2),
VC-1 (AP@L3, AP@L2).
И современные железные BD- и мультимедиа- проигрователи делаются так, чтобы железо+прошивка сумели воспроизводить в первую очередь именно такой легальный контент - соответствующий перечисленным Profile / Level: не выше @L4.1 для AVC и не выше @L3 для VC-1. Нафига им больше?
И производители современных видеокарт, начинали с этого же. В первых видеокартах и драйверах с поддержкой аппаратного декодирования HD видеопотока она ограничивалась перечисленными стандартами.

Для гарантированного воспроизведения железными плеерами и для возможности аппаратного декодирования High-definition-рипов силами видеокарты, эти HD-рипы должны соответствовать перечисленным стандартным Profile / Level для каждого из 3-х кодеков. 
Так, например, для кодирования H264/AVC-рипов с сохранением совместимости с High Profile @L4.1 допустимые параметры приведены на одном из форумов:  AV Science Forum . (Упрощенно идея в том, что количество пикселов изображения в кадре ( X * Y) умноженное на  количество референсных кадров кодирования (ref frames) не должно превышать некого максимального значения DPB (Decoded Picture Buffer)).
Если же при создании рипа были нарушены эти требования - аппаратное декодирование не гарантируется.
Жаль, что многие рипы x264, доступные в Сети, были созданы без соблюдения этих требований (да кто же о них знал!), а для более сильного сжатия - с использованием шаблонов или ограничений, соответствующих @L5.1.
(Узнать, каким именно профилем закодирован рип можно с помощью программы MediaInfo.)

Но время не стоит на месте. Драйвера видеокарт постоянно дорабатывают, и постепенно все большее количество нестандартных рипов чисто воспроизводятся через DXVA.

Немного истории.
03.09.2008:
На
Doom9's Forum появилось сообщение: "Forceware 177.41 supports H.264 720p L5.1. Now you can play most of H.264 720p files with DxVA. So you don't need to IDC Changer !"
Т.е. драйвера 177.41  поддерживают декодирование Level 5.1 для видео 720p.( Хотя непонятно, это относится только к видеочипам новой серии G2xx или к моей 8600GT тоже?)
А затем
еще круче: "Someone mentioned that the NVidia Cuda 2.0 beta drivers (177.xx) do enable support for level 5.1 encodes, but I haven't tried it myself on my 8800GT (sticking to official drivers)."
Т.е. драйвера 177.41  поддерживают еще и кодирование Level 5.1 для любого разрешения?
Проблемма "кривых рипов" на ПК решена?!!
Не выдержал. Скачал бета-драйвера 177.92. Буду пробовать.
18.09.2008: 
Попобовал GeForce 177.92 BETA для моей GF8600GT. Рипы, превышающие @L4.1 стали запускаться с DXVA!
Например с torrents.ru - Черная книга (1280х544 16ref), Король Нью-Йорка (1920х1072 6ref). Правда, все в артефактах, но это же Бета! (А на версии 169.21 WHQL был черный экран при при включении DXVA на этих фильмах). Проверял на KMPlayer-e с использованием декодера Cyberlink H.264/AVC Decoder (PDVD7.x)
Буду ждать WHQL.
23.10.2008: 
Попробовал 178.13 WHQL. Результат такой же, как на BETA.
Некоторые рипы, закодированные с нарушением профиля @L4.1 стали вместо черного экрана показывать картинку, но артефактов куча. Базовые кадры вырисовываются отлично, но затем на экране накапливаются ошибки за движущимися предметами, и так до следующего базового кадра.
Чуда не произошло.
14.01.2009: 
Попробовал 181.20 WHQL. Результат такой же, как на 178.13.
Провеорчный рип, закодированный с профилем @L5.1 (с torrents.ru - Черная книга (1280х544 16ref) в режиме DXVA показывает картинку, но c артефактами. Базовые кадры вырисовываются отлично, но затем на экране накапливаются квадраты  за движущимися объектами, и так до следующего базового кадра.

Мне впервые удалось добиться нормального воспроизведения через DXVA любых рипов с профилем @L5.1 без каких-либо проблем с изображением - артефактов и пр. на драйверах 181.20 WHQL.
И самого злобного рипа из моей коллекции с профилем @L5.1 (с torrents.ru - Черная книга 1280х544 16ref), и всех остальных из моей коллекции, и всех "кривых" рипов, которых участники форума  iXBT "Аппаратная поддержка декодирования видео..." , предлагали как проверочные.
Теперь называть эти рипы "кривыми" - язык не поворачивается :).
Но только добиться этого удалось не с декодером от Cyberlink H.264/AVC Decoder (PDVD7.x), а c декодером от Nero и с другим рендером.
По совету участников форума на iXBT:
 - установил последнюю версию плеера MPC HC;
 - установил декодер из пакета Nero Suite MPEG decoder v6.3.0.9.  (В нем DXVA включается/выключается параметром реестра [HKEY_CURRENT_USER\Software\Ahead\Nero ShowTime\Settings] "HardwareAcceleration"=dword:00000001).
  - в плеере указал "Системный" рендер и декодер от Nero подключил в качестве приоритетного.
Всё стало отлично!
Всё, да не всё.
Все рипы - "полетели". Но при "Системном" рендере стало невозможно вывести субтитры. И видео на второй монитор (телевизор) в режиме Dual View на этом рендере не выводится ни в оконном, ни в полноэкранном режиме. И невозможно сделать скриншоты видео. Хотя ни то, ни другое ни третье для меня не является серьезной проблемой: субтитры я обычно и так не включаю, а приоритет мониторов легко поменять через Панель управления мониторами.

Наигравшись с MPC HC, решил попробовать те же фокусы проделать с KMPlayer-ом - он мне больше нравится (тем более, что недавно установил последнюю бета-версию KMPlayer 2.9.1434) - подключил к нему декодер от Nero в качестве приоритетного.
Попробовал разные рендеры. Оказалось, что чистое воспроизведение рипов с профилем @L5.1 через DXVA обеспечивается рендером "Прежний" ("Old"). При этом и субтитры выводятся нормально. Хотя вывод видео на второй монитор так же не доступен, и ннельзя сделать скриншоты - на них черный экран.

Попробовал другие декодеры: от Cyberlink (и 7, и 8), от ArcSoft - результаты хуже. Либо рассыпание картинки, либо лаги, либо "Малевич".

Вот теперь можно и отдохнуть. Любое HD видео с H264 теперь "по плечу" моему компу.
Что получилось в итоге:
Для просмотра DVD и BD с кодеком Н264 через DXVA использую Cyberlink PDVD 7.3 3319a или ArcSoft TMT. Первый для меня удобнее, второй - всеяднее.
А для рипов H264 через DXVA - последние версии KMPlayer или MPC HC. Для рипов до @L4.1 любой декодер (Cyberlink, ArcSoft, Nero) и рендер VMR9 renderless. A для рипов  > @L4.1 - KMPlayer c декодером Nero и рендер "Прежний" ("Old"), либо MPC-HC c декодером Nero и рендер "Системный" (если без субтитров).

(В системе еще установлены .NET Framework 2.0; 3.0; 3.5; Visual C++ 2005 SP1 Runtime; DirectX от июля 2008. Это не обязательно для DXVA. Что-то было нужно для работы DXVAChecker, что-то -  еще для чего-то - уже и не вспомню  :) ).

Судя по отзывам владельцев видеокарт ATI, у них тоже есть прогресс в воспроизведении нестандартного видео. Но вроде бы некоторые рипы видеокартам ATI по-прежнему не по зубам. Так это, или нет - не знаю.

VC-1
Теперь аппаратное ускорение видео VC-1.
В принципе тут все точно так же, как и с ускорением H264/AVC.
Хотя есть небольшие отличия.

Как уже говорилось, дискретные видеокарты NVIDIA, в отличие от ATI, не поддерживают полного ускорения VC-1.
У них начиная с GF8xxx есть только входные пины VC1_IDCT, VC1_MoComp, VC1_PostProc (на приведенном выше скрине DXVAChecker-a для моей 8600 они все видны).

Коммерческие декодеры тоже имеют не один, а несколько выходных пинов. У декодера Nero есть полная поддержка и набор пинов VC1_VLD, VC1_IDCT, VC1_MoComp. У декодера WMVideo DMO из WMP – частичная поддержка и пины VC1_IDCT, VC1_MoComp, VC1_PostProc (нет VLD).
VC-1 + 8600GT
(Хотя, надо отметить, DXVAChecker показывает не все возможности декодеров. Например, в списке декодеров VC-1 не показывает Cyberlink и Arcsoft, на которых гарантировано декодируются оригинальные Blu-Ray с VC-1. Это связано с тем, что эти декодеры для извлечения видеопотока из контейнера требуют наличия специальных "родных" сплитеров/демуксеров, которые имеются в плеерах Cyberlink и Arcsoft, и без них не работают (без специального шаманства). За это  DXVAChecker их не показывает.)

При запуске воспроизведения декодер и драйвер видеокарты проверяют наличие совпадающих пинов и ищут наилучший вариант. Так видеокарте NVIDIA своим пином _IDCT удается “сцепиться” с выходным _IDCT пином декодера Nero или WMVideo DMO и включить частичное аппаратное ускорение. Эти декодеры позволят видеокарте показать все, что она умеет с VC-1 - операция VLD будет выполнена центральным процессором, а остальные операции через пин _IDCT переданы видеокарте. Эти «остальные» операции в сумме составляют почти 50% вычислений декодирования, так что процессор разгрузится в 2 раза, по сравнению с чисто софтовым декодированием. До 0 загрузка процессора не упадет, но на многих процессорах, даже не самых мощных, можно комфортно смотреть VC-1.

В отличие от коммерческих декодеров, у MPC HC декодера есть только полная поддержка DXVA и только один выходной пин VC1_VLD. Т.е. MPC-HC либо все этапы декодирования отдает видеокарте, либо все делает центральным процессором. Так что на нем аппаратное ускорение с дискретными видеокартами NVIDIA не включится - нет совпадения пинов. Но MPC-HC – бесплатный продукт, развиваемый энтузиастами. Спасибо что хоть это сделали. Захотят обеспечить поддержку дискретных NVIDIA - сделают и промежуточные пины.

В свою очередь, видеокарты от ATI поддерживают полное аппаратное ускорение VC-1 и имеют входной пин VC1_VLD. Ho при этом не имеют промежуточного пина VC1_IDCT. В результате на них должно включаться полное аппаратное ускорение с декодерами Nero и MPC HC. A с WMVideo DMO – не должно. (В этом смысле последние интегрированные видеочипы от NVIDIA интереснее - у них есть не только пин полной поддержки VC1_VLD, но и оставлен пин частичной поддержки VC1_IDCT. Так что они совместимы с любыми декодерами.)

Я проверил, как работает ускорение VC-1 на моей карте.
Подключил к KMPlayer-у сначала декодер WMVideo DMO, потом Nerо.
У Nero включение DXVA для VC-1, производится тем же параметром, что и для H264/AVC в ветке реестра 
[HKEY_CURRENT_USER\Software\Ahead\Nero ShowTime\Settings] "HardwareAcceleration"=dword:00000001;
а у WMVideo DMO – в ветке реестра
[HKEY_CURRENT_USER\Software\Microsoft\Scrunch\WMVideo], "DXVA"=dword:00000001.
Это для ХР. А для Windows7 параметр называется "DXVA1" в этой же ветке.
А для х64 систем, ветка реестрв называется.
[HKEY_CURRENT_USER\Software\Microsoft\Wow6432Node\Scrunch\WMVideo].
При установке WMP11 эта ветка изначально пустая  и создается вручную или внешними программами, например галкой в программе DXVAChecker.
(Дополнено: в Windows7 параметр "DXVA1"=dword:00000001 включает VC-1 DXVA у WMVideo DMO только если в плеере выбран рендер VMR9 renderless и ему подобные. А вот с рендером EVR у меня пока не получается.)



Запустил несколько фильмов с VC-1.
Декодер WMVideo DMO:
"Совокупность лжи" (hns-body.re.mkv, VC-1, 24.3 Mbps), слева - DXVA выключено, загрузка ~90%; справа включено - загрузка ~55%;
 

"Гарри Поттер" (Harry.Potter.and.the.Sorcerer_s.Stone.2001.HD.DVD.1080p.VC-1.Rus-Sample.mkv, VC-1, 19.8 Mbps), слева - DXVA выключено, загрузка ~90%; справа включено - загрузка ~55%.
 

Теперь декодер Nero:
 "Гарри Поттер", cлева - DXVA выключено, загрузка ~70%; справа включено - загрузка ~35%.
 

А на "Совокупности лжи" (и некоторых других VC-1) декодер Nero не работает корректно - опускает загрузку до 10%, но выдает «слайдшоу».
Что именно не нравится Нере в этих файлах – не знаю. На просторах Интернета не встречаются рипы с кодеком VC-1, только оригинальные BD диски и ремуксы из них. Так что «кривых» рипов VC-1 не бывает. Но что-то в них, или в Нере не так.

Что получилось в итоге для VC-1?
1) Корректное включение частичной поддержки DXVA на VC-1 на GF8600GT снижает нагрузку на процессор ~ в 2 раза.
2) Декодер WMVideo DMO четко включает/выключает DXVA и корректно использует это частичное ускорение обеспечивая комфортный просмотр VC-1 с процессором средней мощности.
3) Декодер Nero на VC-1 работает немного быстрее чем WMVideo DMO, но не всегда корректно.

В настройках KMPlayer указал WMVideo DMO как приоритетный декодер. Теперь у меня все видео с VC-1 идет через него.

NVIDIA CUDA и CoreAVC
DXVA - не единственный способ интерфейс для использования аппаратного ускорнения HWA.
NVIDIA для своих видеокарт разработала собственный интерфес - CUDA, и предложила всем желающим писать приложения, которые будут через CUDA использовать мощности графических процессоров. (У ATI вроде бы появилась аналогичная технология ATI Stream).
По мере обновления новые версии CUDA включаются в новые драйвера ForceWare:
CUDA 2.3 - 190.38
CUDA 2.2 - 185.85
CUDA 2.1 - 181.20
CUDA 2.0 - 178.28
CUDA 1.1 - 169.21
CUDA 1.0 - 162.01

Одна из программ, использующих технологию CUDA - декодер CoreAVC H264/AVC. Разработчики из CoreAVC до сих пор делали чисто софтовый декодер. Аппаратное декодирование через интерфейс DXVA их не вдохновляло. Но с появлением технологии CUDA, разработчики из CoreAVC взялись за дело, и для видеокарт на чипах от nVidia включили в декодере CoreAVC 1.9 аппаратное ускорение  видео H264 через интерфейс CUDA. И если первая версия декодера CoreAVC 1.9.0.0 была достаточно сырая – при воспроизведении даже лицензионных BluRay дисков с аппаратным ускорением CUDA лезли разные артефакты, например квадратики на полутонах, то в версии CoreAVC 1.9.5.0 эти дефекты устранены. А с драйверами nVidia GeForce/ION 185.85 аппаратное ускорение CUDA работает на видео с любыми профилями включая L5.1 кроме ref16.
Все рипы из моей коллекции с L5.1 включая ref 12 чисто декодируются через CUDA. На рипах L5.1 с ref16 декодер переключается в софтовый режим. Не пробовал ref13-15 – у меня нет таких.  Загрузка процессора на несколько процентов выше, чем у DXVA, но не превышает 5-10% на моем Athlon 64 3000+ даже на самом тяжелом видео. 
Отличный получился декодер. Как его подключать к плееру и настраивать написано в продолжение одной из вышеупомянутых ссылок - Watching H.264 videos using Compute Unified Device Architecture (CUDA).
Декодером от Nero я закрыл  для себя проблемму аппаратного декодирования проблемных «кривых» рипов Н264 через DXVA, но с "потерей" второго монитора. С декодером CoreAVC количество таких проблемных рипов сузилось до "ref16".
Возможно в будущем получится декодировать через CUDA и ref16. Во всяком случае на форуме  CoreCodec пишут, что ограничение не у декодера CoreAVC, а у самой технологии nVidia CUDA, и вроде nVidia работает над новой версией CUDA которая сможет работать с ref 16. Будем ждать новых драйверов от nVidia.

Теперь для просмотра HD-видео KMPlayer-ом сделал две конфигурации:
"основная" - декодер CoreAVC 1.9.5 с CUDA для H264/AVC и рендер VMR9 renderless;
"резервная" - вместо декодера CoreAVC включается декодер от Nero с DXVA, рендер "Old" - для видео с ref16.
В обеих конфигурациях для VC-1 использую VMVideo DMO из WMP11. 

Добавлено 2009.12.28:
Вышла новая версия декодера Н.264 CoreAVC 2.0.0.
Для аппаратного декодирования использует последнюю на этот момент CUDA 2.3 (драйвера NVIDIA начиная с 190.38).
В отличие от предыдущей версии 1.9.5, новый CoreAVC декодер не переключается в софтовый режим при ref=16 а декодирует их тоже с помощью HWA через CUDA. И еще куча улучшений.
Правда у меня (GF8600GT, XP SP2) на на новом декодере на драйверах 190.38 и 190.62 при @L5.1 с ref=16 проскакивали артефакты декодирования CUDA в верхнейчасти экрана.
Но после установки последних драйверов 195.81 все стало отлично на любых рипах, включая @L5.1 и ref=16.
Так что теперь для владельцев видеокарт NVIDIA понятие "кривые рипы Н.264" больше не существует.

Теперь для просмотра HD-видео KMPlayer-ом под XP осталась одна конфигурация:
для H264/AVC  - декодер CoreAVC 2.0.0;
для VC-1 - VMVideo DMO из WMP11;
рендеры - любые.
(Добавлено: для просмотра HD-видео KMPlayer-ом под Windows 7
для H264/AVC  - декодер CoreAVC 2.0.0, рендеры - любые, использую  VMR9 renderless.
для VC-1 - VMVideo DMO из WMP11, рендер -  VMR9 renderless.)

Всё.
Если бы я сейчас собирал HTPC, взял бы ION - материнку с интегрированным видео NVIDIA 9400 (или 9300). Интегрированные чипы С79 (и C78 на GF8100-8200-8300), судя по обзорам, пока единственные в линейке nVidia c полной поддержкой аппаратного ускорения и H264, и VC-1.
Получил бы и полную аппаратную поддержку всех форматов, и всеядность по отношению к кривым рипам, и поддержку любыми декодерами.


Приложение
Спецификации DXVA:
DirectX Video Acceleration Specification for H.264/AVC Decoding  
DirectX® Video Acceleration Specification for Windows Media Video® v8, v9 and vA Decoding (Including SMPTE 421M "VC-1")

Список стандартных пинов DXVA ( http://forum.slysoft.com/showthread.php?t=19931&page=156 ):

Dxva mpeg2_A:                   {1B81BE0A-A0C7-11D3-B984-00C04F2E73C5}
Dxva mpeg2_B:                   {1B81BE0B-A0C7-11D3-B984-00C04F2E73C5}
Dxva mpeg2_C:                   {1B81BE0C-A0C7-11D3-B984-00C04F2E73C5}
Dxva mpeg2_D:                   {1B81BE0D-A0C7-11D3-B984-00C04F2E73C5}

Dxva WMV8_A (WMV8_PostProc):    {1B81BE80-A0C7-11D3-B984-00C04F2E73C5}
Dxva WMV8_B (WMV8_MoComp):      {1B81BE81-A0C7-11D3-B984-00C04F2E73C5}

Dxva WMV9_A (WMV9_PostProc):    {1B81BE90-A0C7-11D3-B984-00C04F2E73C5}
Dxva WMV9_B (WMV9_MoComp):      {1B81BE91-A0C7-11D3-B984-00C04F2E73C5}
Dxva WMV9_C (WMV8_IDCT):        {1B81BE94-A0C7-11D3-B984-00C04F2E73C5}  (please note, 94, not 92 as we'd expect)

Dxva VC1_A (VC1_PostProc):      {1B81BEA0-A0C7-11D3-B984-00C04F2E73C5}
Dxva VC1_B (VC1_MoComp):        {1B81BEA1-A0C7-11D3-B984-00C04F2E73C5}
Dxva VC1_C (VC1_IDCT):          {1B81BEA2-A0C7-11D3-B984-00C04F2E73C5}
Dxva VC1_D (VC1_VLD):           {1B81BEA3-A0C7-11D3-B984-00C04F2E73C5}

Dxva h264_A (h264_MoComp_NoFGT):{?}
Dxva h264_B (h264_MoComp_FGT):  {?}
Dxva h264_C (h264_IDCT_NoFGT):  {?}
Dxva h264_D (h264_IDCT_FGT):    {?}
Dxva h264_E (h264_VLD_NoFGT):   {1B81BE68-A0C7-11D3-B984-00C04F2E73C5}
Dxva h264_F (h264_VLD_FGT):     {1B81BE69-A0C7-11D3-B984-00C04F2E73C5}

Оглавление zelez

Последний раз редактировано: 2009.12.28

Comments for this post were disabled by the author