ASUSCAP - Video Capture using NVIDIA's RIVA chipsets

Video capture по NVIDIA или что же все-таки c этим делать ?

Давным-давно (в 1998 году) решил я проапгрейдить свой видак на что-нибудь новое и клевое и увидел в одной конторе видеокарту ASUS 3DPV3000TV . И так она мне понравилась - крутая гайка RIVA-128, память 4 Mb и ,главное - видео вход ! У меня тогда стояло S3 Trio 64V+ 2 Mb и улучшение было значительным. Однако что делать с видео входом я тогда еще не знал (не было источника сигналов).

Все поменялось через пару месяцев когда я приобрел видеомагнитофон, а телевизора у меня конечно не было и покупать его совсем не хотелось. Вот тут то и возникла идея - надо видик смотреть через этот видеовход !

На сидюке с картой давалась программа просмотра видео LIVE3000 v 1.20. После ознакомления с "возможностями" программы возникло легкое разочарование. Изображение было почему-то приплюснутым (как я понял позднее оно состояло из 240 строк вместо 288), SECAM конечно отсутствовал и ни про какое capture конечно не могло быть и речи. Все в общем как с обычными советскими вещами - ты покупаешь в магазине вещь, сразу ее разбираешь, собираешь и после этого она работает долго , хорошо и качественно (главное конечно чтобы при этом не осталось лишних деталей...).

Сначала конечно пришлось сделать SECAM - после ознакомления со спецификацией чипа PHILIPS SAA7111A которую раздавали прямо на сайте производителя это оказалось совсем не трудно (использовался только HIEW). Однако со строками все оказалось чуть сложнее. Пришло пожождать пока ASUS разродился следующей версией Живья 3000 2.20. Эта версия была существенно лучше первой. В ней стало правильное количество строк в полукадре и после аналогичной доработки (SECAM'a конечно опять не было) изображение стало вполне смотрябельным. Однако присмотревшись к нему повнимательнее удалось увидеть что, к сожалению, на экране отображалось только одно поле видеосигнала. В то время как в версии 1.20 были оба (правда сплющенные). С этим поделать ничего также не удалось и пришлось ждать следующей версии.

И тут случилась беда. Эти уродцы не доделав одну гайку выпустили новую - RIVA TNT . Понятно конечно что людям хотелось кушать (а еще наверно по кабакам ходить) и лучшим способом убедить пользователей заплатить деньги за новую клевую гайку конечно было бросить поддерживать старую. Следующая версия программы уже была переименована в LIVE3400 v 3.00 потому, что новая клевая видеокарта называлась ASUS V3400-TV . После некоторой доработки (при помощи замены 7Xh на EBh) а также ставшей уже традиционной доделкой SECAM данная версия стала лучшей во всех отношениях т.е. не месте были оба поля и в них были все строки ("Наконец-то Шеф !"). Потом ASUSTEK выпустил много последующих версий этого живья (сейчас последняя версия называется ASUSLIVE 4.6) при этом в них периодически возникали то улучшения, то ухудшения (периодически (от версии к версии) пропадало второе поле, потом появлялось , начиная с кокой-то версии появился наконец официально SECAM, а также появилась вроде поддержка V3000, однако только на просмотр), но я оставил эту доработанную LIVE3400 V 3.00 отчасти потому что от добра добра не ищут. Как нетрудно догадаться речь тут шла о работе только из-под WIN-9X (конкретно Windows98/SE) - в NT-образных ОС ситуация значительно хуже (реально там вообще ничего не работает). Среди великого множества разнообразных драйверов фактически имеется выбор только между двумя вариантами:

  • Версия 2.07

  • Версия 3.41b2

    При этом версия 3.41 вроде бы быстрее в смысле 3D (однако это спорно) , но если вам нужен нормальный просмотр видео и при этом также и возможность использовать прямойХ 8:, то выбора нет вовсе - это версия 2.07. Поэтому все дальнейшие программы подразумевают у вас наличие именно этой версии драйверов.

    После удачной организации просмотра некоторое время я был вполне доволен результатом, но потом захотелось большего - каптурить. С драйверами 2.07 поставлялся capture driver v 1.1.0.0. Через него живье могло записывать файлы с разрешением 352х288 (были и еще более мелкие разрешения, но какой от них толк ?) в форматах 8,16 и 24 бит. Также можно было использовать системные кодеки. Были предприняты многочисленные попытки что-нибудь скаптурить, но реально ничего не получилось. Лучшее достижение это 20 кадров в сек 16 бит (hi-color). Сказать, что это отстой - значит ничего не сказать. Я тогда подумал, что дело в компьютере - 208 Мгц K6 и 64 М памяти не были последним писком для 2000 года. И вот в январе 2001 года компьютер был улучшен - DURON-700 (@763) 128 M и видак ASUS V3000ZX-TV - таже RIVA-128 , 8 Мб и AGP 2x вместо PCI. Я нажал кноку "Cpture" и ... 352*288 25 кадров 16 бит HiColor. Вот тут-то мне и стало грустно. Поколебавшившись некоторое время я произвел полный REVERSE Ingeneering этого каптуре драйвера. Что я там увидел описать словами очень трудно (на ум приходят одни междометья). Я сразу понял что этот драйвер всего лишь навеска на объект VIDEOPORT из Прямого Х. Он (драйвер) запускал ПрямойХ, получал адрес оверлея с видео изображением и по море поступления кадров распихивал их в пользовательские буфера. Причем в буфере изображение хранилось в формате UYVY, а затем программно (да еще и с ошибками) преобразовывалось драйвером в RGB (8,16 или 24 бит). Таким образом основное, что он делал - это висел на прерывании от видеокарты, проверял а не пришел ли следующий кадр и перегонял его в буфер и все. Меня конечно удивило почему это занимает так много времени, что даже на таком быстром (для начала 2001 года )компьютере это все так тормозит. Поэтому я решил улучшить драйвер (попутно встроив в него уже сколько раз делавшуюся поддержку SECAM). Сначала я выкинул ненужный мне HICOLOR16 и заменил его на простую пересылку (REPZ MOVSD) - получилась поддержка формата UYVY. Кстати сказать с более новыми картами ASUSTEK стал поставлять очень хорошие программные кодеки ASUSASV1 и ASUSASV2, но они работают только если входной поток в формате UYVY. После этой переделки кодек ASV1 заработал и 352*288*25 TRue Color - VideoCD quality стало доступно правда на грани производительности. После этого я решил выяснить, что же занимает основное время и оказалось - ПЕРЕСЫЛ из памяти видеокарты в основную память. Был написан маленький тест и вот его результаты:

       Measuring for 640x480x16 Frame Buffer...
       Reading Speed (MOVSD):   +7.5900
       Writing Speed (MOVSD): +176.0486
       Reading Speed (MMX-MOVQ):  +13.8191
       Writing Speed (MMX-MOVQ): +212.3061
       Measuring for 640x480x32 Frame Buffer...
       Reading Speed (MOVSD):   +7.3207
       Writing Speed (MOVSD): +176.0571
       Reading Speed (MMX-MOVQ):  +13.2067
       Writing Speed (MMX-MOVQ): +212.3085
       Measuring for 800x600x16 Frame Buffer...
       Reading Speed (MOVSD):   +7.3862
       Writing Speed (MOVSD): +176.2608
       Reading Speed (MMX-MOVQ):  +13.5299
       Writing Speed (MMX-MOVQ): +212.3031
       Measuring for 800x600x32 Frame Buffer...
       Reading Speed (MOVSD):   +6.9686
       Writing Speed (MOVSD): +176.2605
       Reading Speed (MMX-MOVQ):  +12.5814
       Writing Speed (MMX-MOVQ): +212.3087
       Measuring for 1024x768x16 Frame Buffer...
       Reading Speed (MOVSD):   +7.1438
       Writing Speed (MOVSD): +175.9130
       Reading Speed (MMX-MOVQ):  +12.9114
       Writing Speed (MMX-MOVQ): +212.3093
       Measuring for 1024x768x32 Frame Buffer...
       Reading Speed (MOVSD):   +6.7881
       Writing Speed (MOVSD): +173.9056
       Reading Speed (MMX-MOVQ):  +12.2923
       Writing Speed (MMX-MOVQ): +212.3085	       
     

    Циферки справа это скорость пересыла в мегабайтах в секунду. При этом были включены и AGP 2X и WRITE COMBINING - без них скорости пересыла в видеокарту примерно в два раза хуже, но нас то интересует пересыл оттуда !. А там цифры просто смехотворные ! Вот он и тормоз да еще какой. Ведь если сосчитать скажем для разрешения 352*288, то получается что пересыл занимает около 70% всего времени работы. А за оставшиеся 30% надо это упаковать и записать на винт. Работа с большими разрешениями вообще невозможна в принципе. Ну рецепт ясен - надо делать пересыл через MMX инструкции. После перехода на такой пересыл даже на машине с процем Cyrix M2 200 Mhz стало без потерь кадров каптурится 352*288*25*ASV2. Однако захотелось еще больше. Ведь видно, что в принципе на быстром процессоре можно попробовать увеличить размеры изображения. Каптуре драйвер был еще раз переделан - из него были выброшены идиотские мелкие разрешения, а оставлены самые нужные: 352*288,704*288,352*576,704*576. В последнем из них невозможно получить 25 кадров потому, что как ни крути 14 мб/c меньше чем 20. Но в обоих промежуточных разрешениях достигнуты прекрасные результаты (25 кадров без потерь ) на грани проиводительности процессора AMD DURON-763. Кроме того пришлось еще и подправить кодек ASUSASV2 , потому что он зачем-то проверял производителя видеокарты и драйверов для нее. Попытки дальнейшего увеличения скорости пересыла (путем перемещения оверлея в нелокальную видеопамять )успехом не увенчались - видимо основной видеодрайвер не поддерживает видеооверлей в нелокальной видеопамяти.

    Следует заметить, что пока происходили описанные выше события у меня был только эпизодический доступ в интернет, поэтому я не знал о существовании такой продвинутой программы как Video Live . Программа в целом очень хорошая однако для владельцев V3000 она не дает практически ничего. Сначала я было подумал, что этот Лукин все сломал и все может, но потом понял, что он просто прямо вызывает ПрямойХ вместо каптуре драйвера. Также его программа не работает (с V3000) под NT образными ОС. Но под 98 она отличная альтернатива живью (по крайней мере в смысле показа).

    На этом исчерпывается для горемычных владельцев видеокарт на базе RIVA128 и RIVA128ZX набор программного обеспечения в сфере видео. Это тем более обидно, что по качеству собственно оцифровки видео они ничем не уступают более новым и дорогим картам. Более того для NT-образных ОС вы не найдете и нормального драйвера для 3D - хороший тест для этого известный всем скрин-савер-аквариум. Под 98 и HICOLOR рыбы еще будут плавать как надо но вот под 2000 или в TRUE COLOR ... А ведь причина этого видимо просто в том, что чипы NV3 делались NVIDIA совместно с STmicroelictronics в те времена, когда NVIDIA еще не была безусловным монополистом на рынке видеокарт. И ST microelectronics до сих пор видимо является владельцем каких-то прав на эти гайки, а кто же будет поддерживать конкурента ? И если на NV3 есть хоть какая-то документация, то найти хотя бы даже такое описание на RIVA TNT/TNT2 или GFX практически невозможно.

    Ну не будем о грустном. Совсем недавно мне удалось снова проапгрейдить видеокарту - теперь уже на следующую модель того же ряда: ASUS V3400TV она имеет 16 М видеопамяти и базируется на первой гайке NVIDIA без ST - RIVA TNT. Что можно сказать об этой карте ? Ну рыбы конечно плавают везде. Имеется большое количество драйверов - все самые последние драйверы от NVIDIA поддерживают ее (однако сильно сомневаюсь, что замена драйверов на новые ведет к каким-то улучшениям ) однако было замечено, что под 98 только драйвера версии 2.25 (самые древние) работают с видеовходом правильно. Все остальные попросту путают поля ! Т.е. иногда мне кажется , что в них совсем нет никакой синхронизации с полями входного видеосигнала. Так что делайте выводы сами. Под 2000 вообще песня. Имеется ASUS каптуре драйвер ACAP2000, представляющий собой просто перекомпилированный драйвер ACAPNT. Работает он так что лучше бы не работал - 352*288*25*ASV2 еще удается скаптурить (но не всегда !). Единственное спасение - программа Лукина - показывает неплохо, но каптурит надежно только одно поле т.е. 704*288. При попытке скаптурить два поля результат не определен и зависит от фазы Луны и всего такого. Вообще в конференциях много говорилось о том что два поля - это изначально криво - будут зазубрины на краях движущихся объектов и т.д. Но это далеко не всегда так. Если каптурить ПРАВИЛЬНЫЙ МАТЕРИАЛ, то никаких артефактов движения при правильном драйвере видеокарты и правильном каптуре драйвере не будет. Правильный материал - это в первую очередь кинофильм. Пусть даже и принятый с ТВ. В таком материале изначально нет разницы во времени между полями т.к. фильм снимали КИНОКАМЕРОЙ НА ПЛЕНКУ на 24 кадра и по телику он обычно идет просто чуть-чуть быстрее (на 1/24 секунды). Кроме того сейчас пошла мода показывать фильмы с DVD а там если кинофильм оцифровывают то тоже с пленки высокого разрешения и 24 кадра. Конечно если кто-то захочет скаптурить сериал про дона Педро, то ему не повезло - придется использовать только одно поле - их снимают ТЕЛЕВИЗИОННОЙ камерой. Отсюда видно что для теста всей системы каптурения достаточно иметь записанный на видеокассете проверенный кинофильм.

    С точки зрения скоростных характеристик под ДОС (да кому-то это еще интересно) карта разочаровала, т.к. оказалась медленнее чем RIVA ZX:

       Vendor ID:10DE, Device ID:0020
       Takt=762981223
       Base=D4000000
       Measuring for 640x480x16 Frame Buffer...
       Reading Speed (MOVSD):   +6.5130
       Writing Speed (MOVSD): +131.7222
       Reading Speed (MMX-MOVQ):  +11.9194
       Writing Speed (MMX-MOVQ): +217.0478
       Measuring for 640x480x32 Frame Buffer...
       Reading Speed (MOVSD):   +6.1917
       Writing Speed (MOVSD): +127.4590
       Reading Speed (MMX-MOVQ):  +11.8844
       Writing Speed (MMX-MOVQ): +217.2696
       Measuring for 800x600x16 Frame Buffer...
       Reading Speed (MOVSD):   +6.4580
       Writing Speed (MOVSD): +129.7694
       Reading Speed (MMX-MOVQ):  +11.8351
       Writing Speed (MMX-MOVQ): +217.0844
       Measuring for 800x600x32 Frame Buffer...
       Reading Speed (MOVSD):   +6.3603
       Writing Speed (MOVSD): +122.7132
       Reading Speed (MMX-MOVQ):  +11.0459
       Writing Speed (MMX-MOVQ): +216.9790
       Measuring for 1024x768x16 Frame Buffer...
       Reading Speed (MOVSD):   +6.4047
       Writing Speed (MOVSD): +123.2777
       Reading Speed (MMX-MOVQ):  +11.6452
       Writing Speed (MMX-MOVQ): +216.9419
       Measuring for 1024x768x32 Frame Buffer...
       Reading Speed (MOVSD):   +6.2731
       Writing Speed (MOVSD): +109.3529
       Reading Speed (MMX-MOVQ):  +11.4672
       Writing Speed (MMX-MOVQ): +210.5374
     

    Для большинства ДОС приложений имеет значение запись через MOVSD (ну не знают они MMX) а она почти в полтора раза медленнее ! И даже разгоном памяти до 150 Mhz ( что правда начисто вырубило все 3D функции) ее удалось довести только до 160 Mb/s ( а RIVA ZX без всякого разгона - 178 !) Я например смотрю под ДОС DIVx фильмы и на этой TNT стало ощутимо медленнее.

    опубликовано 21 апреля 2002 г. (c) by Alex HiNT


    После публикации статьи прошло время - многие пишут что не могут достать драйвер версии 2.07 - хоть мне это и странно- но видимо это так, поэтому ВОТ ОН - ASUS driver for V3000/ZX V 2.07

    Ну и конечно вышла промашка с разрекламированным каптуре драйвером А ВОТ И ОН - fast ASUSCAP.DRV with 704x576 UYVY

    Некоторые люди пишут, что не могут достать драйвер версии 2.25 для V3400/V3800 - единственный драйвер из виденных мною, который правильно каптурит в формате 704х576 (т.е. имеет синхронизацию полей), поэтому ВОТ ОН - ASUS driver for V3400/3800 TV V 2.25 for WIN9X

    If you have any suggestions, questions, money, work etc, please E-MAIL me:

    KLIKSOU@NAROD.RU

    На главную страницу


    Hosted by uCoz