10.2. Видео вывод для традиционных видео карт

10.2.1. Xv

Под XFree86 4.0.2 или новее, вы можете использовать функции работы с YUV[YUV routines] вашей видеокарты, используя расширение XVideo, то, которое используется при указании опциии -vo xv. К тому же этот драйвер поддерживает управление яркостью/контрастностью/цветностью/и т.д. (кроме случая использования старого ,медленного DivX кодека DirectShow, который везде это поддерживает), смотрите страницу man.

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

  1. Требуется использовать XFree86 4.0.2 или новее (предыдущие версии не меют XVideo)

  2. Ваша карта действительно поддерживает аппаратное ускорение (современные - да)

  3. X загружают расширение XVideo, это похоже на:

    (II) Loading extension XVideo

    в /var/log/XFree86.0.log

    Замечание

    Это всего лишь загружается расширение XVideo. При нормальной установке оно грузится всегда, это не означает, что загружена аппаратная поддержка XVideo.

  4. Ваша карта имеет поддержку Xv для Linux. Чтобы это проверить, запустите xvinfo, являющуюся частью дистрибутива XFree86. Она должна выдать на экран длинный текст, похожий на этот:

    X-Video Extension version 2.2
    screen #0
      Adaptor #0: "Savage Streams Engine"
        number of ports: 1
        port base: 43
        operations supported: PutImage
        supported visuals:
          depth 16, visualID 0x22
          depth 16, visualID 0x23
        number of attributes: 5
    (...)
        Number of image formats: 7
          id: 0x32595559 (YUY2)
            guid: 59555932-0000-0010-8000-00aa00389b71
            bits per pixel: 16
            number of planes: 1
            type: YUV (packed)
          id: 0x32315659 (YV12)
            guid: 59563132-0000-0010-8000-00aa00389b71
            bits per pixel: 12
            number of planes: 3
            type: YUV (planar)
    (...и т.д....)

    Карта должна поддерживать YUY2 пакованные и YUV12 планарные[planar] форматы пикселов, чтобы быть полезной в MPlayer.

  5. И, наконец, проверьте, что MPlayer собран с поддержкой 'xv'. Выполните mplayer -vo help | grep xv . Если поддержка 'xv' включена, то увидите похожую строку:

      xv      X11/Xv

10.2.1.1. 3dfx карты

Хорошо известно, что старые 3dfx драйвера имеют проблемы с ускорением XVideo, они не поддерживают ни YUY2 ни YV12, ни т.п. Проверьте, что у вас XFree86 версии 4.2.0 или новее, он может работать с YV12 и YUY2, в то время как предыдущие версии, включая 4.1.0, с YV12 приводят к краху. Если вы столкнулись со странными эффектами при использовании -vo xv, попробуйте SDL (он тоже имеет поддержку XVideo), и посмотрите поможет ли это. Обратитесь к разделу SDL за подробностями.

ИЛИ, попробуйте НОВЫЙ -vo tdfxfb драйвер! Смотрите раздел tdfxfb.

10.2.1.2. S3 карты

S3 Savage3D, должны прекрасно работать, но для Savage4 используйте XFree86 версии 4.0.3 или выше (в случае проблем с изображением попробуйте 16bpp). По поводу S3 Virge: она поддерживает xv, но карта сама по себе слишком медленная, так что лучше будет ее продать.

Существует родной драйвер фреймбуфера для карт S3 Virge, аналогичный tdfxfb. Настройте ваш фреймбуфер (например, укажите ядру "vga=792 video=vesa:mtrr") и воспользуйтесь -vo s3fb (-vf yuy2 и -dr тоже помогут).

Замечание

Пока не ясно в каких моделях Savage отсутствует поддержка YV12, и преобразование осуществляется драйвером (медленно). Если вы грешите на свою карту, возьмите свежий драйвер иди вежливо спросите в списке рассылки MPlayer-users о драйвере с поддержкой MMX/3DNow!.

10.2.1.3. nVidia карты

nVidia под Linux - не всегда хороший выбор ... Открытые драйвера XFree86 поддерживают большинство этих карт, но в некоторых случаях придется использовать закрытый бинарный драйвер от nVidia, доступный на сайте nVidia. Этот драйвер также всегда необходим для задействования 3D ускорения.

Карты Riva128 не имеют поддержки XVideo с драйвером nVidia от XFree86 :( Подайте жалобу nVidia.

Тем не менее, MPlayer имеет VIDIX драйвер для большинства карт nVidia. Сейчас он в стадии беты и имеет некоторые недостатки. За подробостями обращайтесь к разделу nVidia VIDIX.

10.2.1.4. ATI карты

Драйвер GATOS (который стоит использовать, если у вас не Rage128 или Radeon) по-умолчанию имеет включенную опцию VSYNC. Это значит, что скорость декодирования (!) синхронизирована с частотой обновления монитора. Если воспроизведение кажется медленным, попробуйте как-нибудь отключить VSYNC или установите частоту обновления в n*(fps[кадров/с] фильма) Гц.

Radeon VE - если нужен X, используйте XFree86 4.2.0 или новее. Нет поддержки TV-выхода. Конечно, с MPlayer вы можете успешно получить ускоренное отображение, с или без TV-выхода, без каких-либо библиотек X. Читайте раздел VIDIX.

10.2.1.5. NeoMagic карты

Эти карты можно найти во многих ноутбуках. Вы должны использовать XFree86 4.3.0 или более новый, или использовать Xv-совместимые драйвера. от Stefan Seyfried. Просто выберите подходящий для вашей версии XFree86.

XFree86 4.3.0 включает поддержку Xv, недавно Bohdan Horst отослал небольшой патч для исходников XFree86, ускоряющий операции с фреймбуфером (и XVideo) в четыре раза. Патч был включен в XFree86 CVS и должен быть в следующем релизе после 4.3.0.

Чтобы сделать возможным воспроизведение фильмов DVD разрешения поправьте ваш XF86Config как указано здесь:

Section "Device"
    [...]
    Driver "neomagic"
    Option "OverlayMem" "829440"
    [...]
EndSection

10.2.1.6. Trident карты

Если хотите использовать Xv с картой Trident, учитывая, что они не работают с 4.1.0, установите XFree 4.2.0. 4.2.0 добавляет поддержку полноэкранного Xv с картой Cyberblade XP.

Другой вариант: MPlayer имеет VIDIX драйвер для карт Cyberblade/i1.

10.2.1.7. Kyro/PowerVR карты

Если хотите использовать Xv с картами на базе Kyro (например, Hercules Prophet 4000XT), следует скачать драйверы с сайта PowerVR

10.2.2. DGA

ПРЕАМБУЛА.  Этот документ пытается сказать несколько слов о том, что такое DGA в целом и что можт сделать DGA драйвер для MPlayer (а что нет).

ЧТО ТАКОЕ DGA.  DGA это сокращение от Direct Graphics Access[Прямой Доступ к Графике] и означает обход программами X сервера и прямое изменение ими памяти фреймбуфера. Говоря техническим языком, это происходит при помощи отображения[mapping] памяти фреймбуфера в адресное пространство вашего процесса. Это позволяется ядром, только если у вас есть привилегии суперпользователя. Вы можете получить их либо войдя в систему под именем root, либо установив SUID бит на исполняемый файл MPlayer (не рекомендуется).

Есть две версии DGA: DGA1 используется XFree 3.x.x и DGA2, появившийся в XFree 4.0.1.

DGA1 предоставляет только прямой доступ в фреймбуферу, как описано выше. Для переключения видеорежимов придется обратиться в расширению XVidMode.

DGA2 объединяет возможности расширения XVidMode и, к тому же, позволяет изменять глубину цвета отображения. Таким образом, вы можете,работая, в основном, в X с 32-х битной глубиной цвета, переключиться на глубину 15 бит и наоборот.

Однако DGA имеет некоторые недостатки. Похоже, оно каким-то образом зависит от используемого графического чипа и реализации видеодрайвера сервера X, управляющего этим чипом. Так что он работает не на всех системах.

УСТАНОВКА ПОДДЕРЖКИ DGA ДЛЯ MPLAYER.  Во-первых, убедитесь, что X загружает расширение DGA, смотрите в /var/log/XFree86.0.log:

(II) Loading extension XFree86-DGA

Смотрите, крайне рекомендуется XFree86 4.0.x или старше! DGA драйвер программы MPlayer определяется автоматически скриптом ./configure, или можете принудительно указать его использование опцией --enable-dga.

Если драйвер не смог переключиться на меньшее разрешение, поэкспериментируйте с опциями -vm (только для X 3.3.x), -fs, -bpp, -zoom чтобы найти видеорежим в который поместиться фильм. Конвертера Пока что нет :(

Получите права root. DGA требует права root для прямой записи в видеопамять. Если хотите запускать от имени обычного пользователя, установите бит SUID на MPlayer:

chown root /usr/local/bin/mplayer
chmod 750 /usr/local/bin/mplayer
chmod +s /usr/local/bin/mplayer

Теперь это работает и под обычным пользователем.

Риск безопасности

В этом заключается большой риск безопасности! Никогда не делайте этого на сервере или комппьютере, к которому имеют доступ другие люди, т.к. они могут получить права root через MPlayer с битом SUID.

Теперь используйте опцию -vo dga, и вперед! (мы надеемся :) Можете попробовать, работает ли у вас опция -vo sdl:driver=dga! Это намного быстрее!

ПЕРЕКЛЮЧЕНИЕ РЕЖИМОВ.  DGA драйвер позволяет переключать режимы (менять разрешение) выходного сигнала. Это позволяет избежать (медленного) программного масштабирования и в то же время предоставить полноэкранное изображение. В идеале следует переключаться в режим с таким же (необязательно с сохранением пропорций) как у видеоданных разрешением, но X сервер позволяет переключаться в режимы, предопределенные в /etc/X11/XF86Config (/etc/X11/XF86Config-4 для XFree 4.X.X соответственно). Они определяются так называемыми моделайнами[modelines] и зависят возможностей вашей видеокарты. X сервер читает этот файл при старте и отключает режимы, недопустимые для вашего оборудования. Вы можете определить какие режимы остались, посмотрев лог файл X11. Он может быть найден в: /var/log/XFree86.0.log.

Вот значения, про которые известно, что они работают с чипом Riva128 при использовании X драйвера nv.o.

Section "Modes"
  Identifier "Modes[0]"
  Modeline "800x600"  40     800 840 968 1056  600 601 605 628
  Modeline "712x600"  35.0   712 740 850 900   400 410 412 425
  Modeline "640x480"  25.175 640 664 760 800   480 491 493 525
  Modeline "400x300"  20     400 416 480 528   300 301 303 314 Doublescan
  Modeline "352x288"  25.10  352 368 416 432   288 296 290 310
  Modeline "352x240"  15.750 352 368 416 432   240 244 246 262 Doublescan
  Modeline "320x240"  12.588 320 336 384 400   240 245 246 262 Doublescan
EndSection

DGA & MPLAYER.  DGA используется программой MPlayer двумя способами: можно указать SDL использовать его (-vo sdl:driver=dga) и с помощью DGA драйвера (-vo dga). Все сказанное выше верно для обоих; в следующих разделах будет рассказано как работает DGA драйвер для MPlayer.

ВОЗМОЖНОСТИ.  DGA запускается указанием -vo dga в командной строке. По-умолчанию, он пытается переключить режим с ближайшим к оригинальному видео разрешением. Он преднамеренно игнорирует опции -vm и -fs (переключение видеорежимов и полноэкранный режим) - он всегда старается занять как можно большую площадь экрана переключением видеорежима, избегая таким образом использования дополнительных тактов CPU для масштабирования изображения. Если выбранный режим вам не нравится, можете принудительно указать использовать разрешение ближайшее к указанному вами опциями -x и -y. При указании опции -v, DGA драйвер выведет, кроме множества других вещей, список всех поддерживаемых режимов, указанных в XF86Config. Имея DGA2 вы также можете указать использование определенной глубины цвета при помощи опции -bpp. Допустимыми значениями являются 15, 16, 24 и 32. Зависит от оборудования, какие значения поддерживаются аппаратно, а для каких необходимо производить (возможно медленное) преобразование.

Если вам повезло иметь достаточно свободной памяти[offscreen memory], чтобы поместить туда изображение целиком, DGA драйвер будет использовать двойную буферизацию, что приведет к более плавному воспроизведению фильма. Он сообщит вам включена ли двойная буферизация или нет.

Двойная буферизация означает, что каждый следующий кадр вашего фильма рисуется в некоторую память[offscreen memory], пока отображается текущий кадр. Когда следующий кадр готов, графическому чипу сообщается его расположение в памяти, и чип просто выбирает оттуда данные для отображения. В это время новыми видео данными заполняется другой участок буфера.

Двойная буферизация может быть задействована опцией -double и отключена при помощи -nodouble. В данный момент двойной буфер по-умолчанию отключен. При использовании DGA драйвера, экранное отображение (OSD) работает только с двойной буферизацией. Однако, включение двойной буферизации может привести к существенному снижению скорости (на моем K6-II+ 525 оно использует дополнительные 20% времени CPU!) в зависимости от реализации DGA для вашего оборудования.

ПРОБЛЕМЫ БЫСТРОДЕЙСТВИЯ.  Проще говоря, DGA доступ к фреймбуферу должен быть настолько быстр, насколько быстр используемый X11 драйвер c дополнительной выгодой[benefit] получения полноэкранного изображения. Процентные значения скорости, выводимые MPlayer, должны интерпретироваться с некоторой осторожностью, например, с драйвером X11 они не включают время, используемое сервером X11 непосредственно для прорисовки. Подключите терминал к последовательному порту и запустите top, чтобы увидеть, что на самом деле происходит.

Проще говоря, ускорение, полученное от использования DGA относительно 'обычного' использования X11, сильно зависит от видео карты и того, насколько хорошо оптимизирован модуль X11 для него.

Если у вас медленная система, лучше использовать глубину 15 или 16 бит, поскольку это потребует половину пропускной способности памяти 32-х битного дисплея.

Использование глубины 24 бита - хорошая идея, даже если ваша карта аппаратно поддерживает только 32 бита, поскольку передается на 25% меньше данных по сравнению с режимом 32/32.

Приходилось видеть, как некоторые AVI файлы воспроизводились на Pentium MMX 266. AMD K6-2 CPU может работать начиная с 400 МГц и выше.

ИЗВЕСТНЫЕ ОШИБКИ.  Ну, по мнению некоторых разработчиков XFree, DGA - это немного монстр. Они говорят, что лучше его не использовать. Его реализация не безупречна для любого существующего драйвера XFree. изъянов.

  • С XFree 4.0.3 и nv.o существует ошибка приводящая к странным цветам.

  • ATI драйвер требует неоднократного переключения режима после завершения использования DGA.

  • Некоторые драйвера просто не в состоянии переключиться обратно в нормальный режим (используйте Ctrl-Alt-Keypad + и Ctrl-Alt-Keypad - для нормального переключения).

  • Некоторые драйвера просто отображают странные цвета.

  • Некоторые драйвера неверно сообщают о количестве памяти, которое они отобразили в адресное пространство процесса, так что vo_dga не будет использовать двойную буферизацию (SIS?).

  • Некоторые драйвера, похоже, не могут сообщить даже об одном верном режиме. В этом случае DGA рухнет, сообщая о невероятном режиме 100000x100000 или о чем-нибудь похожем.

  • OSD работает только с задействованным двойным буфером (иначе он моргает).

10.2.3. SDL

SDL (Simple Directmedia Layer) - это, в основном, унифицированный видео/аудио интерфейс. Программы, его использующие, знают только про SDL, а не про то, какой видео или аудио драйвер реально используется. Например, порт игры Doom, используя SDL, может запуститься на svgalib, aalib, X, fbdev и других, вам придется только указать (для примера) используемый видеодрайвер при помощи переменной окружения SDL_VIDEODRIVER. Ну, в теории.

Для карт/драйверов, не поддерживающих XVideo, мы использовали в MPlayer собственные возможности программного масштабирования SDL'вских X11 драйверов, пока не написали наш собственный (более быстрый и изящный) программный модуль масштабирования. Также мы использовали его aalib вывод, но теперь у нас есть свой, более удобный. До некоторых пор его DGA режим был лучше нашего. Хотите получить его прямо сейчас ? :)

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

SDL видео вывод поддерживает отображения субтитров внизу, на черной полосе (если она есть).

10.2.4. SVGAlib

УСТАНОВКА.  потребуется установить svgalib и ее пакет разработки, чтобы MPlayer собрал свой SVGAlib драйвер (определяется автоматически, но можко включить принудительно), и отредактировать /etc/vga/libvga.config в соответствии с вашией картой и монитором.

Замечание

Убедитесь, что не используете опцию -fs, поскольку она включает использование программного масштабирования и работает медленно. Если вам действительно это необходимо, используйте опцию -sws 4, которая будет давать плохое качество, но несколько быстрее.

ПОДДЕРЖКА EGA (4BPP).  SVGAlib включает в себя EGAlib, и MPlayer имеет возможность выводить любой фильм в 16-ти цветах. Используется в таких вариантах:

  • EGA карта с EGA монитором: 320x200x4bpp, 640x200x4bpp, 640x350x4bpp

  • EGA карта с CGA монитором: 320x200x4bpp, 640x200x4bpp

Значение bpp (бит на пиксел) должно быть вручную установлено в 4: -bpp 4

Возможно потребуется отмасштабировать фильм, чтобы уместить в размеры EGA режима:

-vf scale=640:350

or

-vf scale=320:200

Для масштабирования требуется быстрый алгоритм с плохим качеством:

-sws 4

Возможно надо отключить автоматическую коррекцию пропорций:

-noaspect

Замечание

Как показывает мой опыт, лучшее качество на EGA экране получается при небольшом уменьшении яркости: -vf eq=-20:0. Мне также пришлось уменьшить частоту дискретизации [samplerate] на моей машине, поскольку звук не работал на 44kГц. -srate 22050.

ВЫ можете включить OSD и субтитры только с плагином expand, смотрите страницу руководства man для точных параметров.

10.2.5. Вывод во фреймбуфер (FBdev)

Надо ли собирать FBdev автоматически определяется скриптом ./configure. Прочтите документацию на фреймбуйер в исходниках ядра (Documentation/fb/*) для более подробной информации.

Если ваша карта не поддерживает стандарт VBE 2.0 (старые ISA/PCI карты, такие как S3 Trio64), а только VBE 1.2 (или еще старее?): ну, VESAfb все же будет доступна, но вам потребуется загрузить SciTech Display Doctor (она же UniVBE) до загрузки Linux. Используйте загрузочный диск DOS или что либо другое. И не забудьте зарегистрировать ваш UniVBE ;))

Драйвер FBdev вместе с прочими принимает несколько дополнительных параметров:

-fb

указывает какой устройство фреймбуфера использовать (по-умолчанию: /dev/fb0)

-fbmode

название используемого режима (в соответствии с /etc/fb.modes)

-fbmodeconfig

конфигурационный файл с режимами (по-умолчанию: /etc/fb.modes)

-monitor-hfreq, -monitor-vfreq, -monitor-dotclock,

важные знаячения, смотрите example.conf

При желании переключиться в особый режим используйте:

mplayer -vm -fbmode название_режима имя_файла

  • -vm в одиночку выберет наиболее подходящий режим из /etc/fb.modes. Также может использоваться совместно с -x и -y. Опция -flip поддерживается, только если формат точки фильма совпадает с форматом точки видеорежима. Обратите внимание на значение bpp, fbdev пытается использовать текущий или указанный вами опцией -bpp.

  • Опция -zoom не поддерживается (используйте -vf scale). Вы не можете использовать режимы с 8bpp (или меньше).

  • Вы, возможно, захотите отключить курсор:

    echo -e '\033[?25l'

    или

    setterm -cursor off

    и хранитель экрана:

    setterm -blank 0

    Чтобы снова включить курсор:

    echo -e '\033[?25h'

    или

    setterm -cursor on

Замечание

Смена режимов FBdev не работает с VESA фреймбуфером. Не просите об этом, т.к. это не ограничения MPlayer.

10.2.6. Matrox фреймбуфер (mga_vid)

Это комбинация драйвера вывода и модуля ядра Linux для Matrox G200/G400/G450/G550 BES (Back-End Scaler). Он имеет поддержку VSYNC с тройной буферизацией. Работает как во фреймбуфер консоли, так и под X, но только с Linux 2.4.x.

Установка:

  1. чтобы использовать его, придется, во-первых, скомпилировать mga_vid.o:

    cd drivers
    make

  2. Затем создайте устройство /dev/mga_vid:

    mknod /dev/mga_vid c 178 0

    и загрузите драйвер:

    insmod mga_vid.o

  3. Вам следует проверить определение размера памяти, используя команду dmesg. Если он неверен, укажите опцию mga_ram_size (но сначала rmmod mga_vid), указав размер памяти в Мб:

    insmod mga_vid.o mga_ram_size=16

  4. чтобы в случае необходимости загружать его автоматической, сначала добавьте следующую строку в конец файла /etc/modules.conf:

    alias char-major-178 mga_vid

    Затем скопируйте модуль mga_vid.o в соответствующее место в каталоге /lib/modules/версия_ядра/где_то_тут.

    Затем запустите

    depmod -a

  5. Теперь надо (пере)скомпилировать MPlayer, ./configure определит /dev/mga_vid и соберет драйвер 'mga'. Использование его в MPlayer осуществляется опцией -vo mga, если используете консоль matroxfb, или опцией -vo xmga из-под XFree86 3.x.x или 4.x.x.

Драйвер mga_vid работает совместно с Xv.

Из файла устройства /dev/mga_vid можно получать некоторую информацию, например, командой

cat /dev/mga_vid

В него можно писать для изменения яркости:

echo "brightness=120" > /dev/mga_vid

10.2.7. Поддержка 3Dfx YUV

Этот драйвер использует ядерный драйвер фреймбуфера tdfx для воспроизведения фильмой с YUV ускорением. Вам потребуется ядро с поддержкой tdfxfb и перекомпиляция с

./configure --enable-tdfxfb

10.2.8. tdfx_vid

Это комбинация модуля Linux ядра и драйвера вывода видео, аналогичный mga_vid. Вам потребуется 2.4.x ядро с драйвером agpgart, поскольку tdfx_vid использует AGP. Укажите configure опцию --enable-tdfxfb для сборки драйвера вывода видео и соберите модуль ядра, как указано далее.

Установка tdfx_vid.o модуля ядра:

  1. Скомпилируйте tdfx_vid.o

    cd drivers
    make tdfx_vid.o

  2. Создайте файл устройства /dev/tdfx_vid:

    mknod /dev/tdfx_vid c 178 0

    и загрузите драйвер командой

    insmod tdfx_vid.o

  3. Чтобы сделать его загружающимся/выгружающимся автоматически, сначала вставьте следующую строку в конец /etc/modules.conf:

    alias char-major-178 tdfx_vid

    Затем скопируйте модуль tdfx_vid.o в подходящее место в /lib/modules/версия ядра/путь и запустите

    depmod -a

10.2.9. OpenGL вывод

MPlayer поддерживает воспроизведение фильмов через OpenGL, но если ваша платформа/драйвер поддерживает xv, как в случае PC с Linux, лучше используйте xv, производительность OpenGL значительно ниже. Если у вас реализация X11 без поддержки xv, OpenGL жизнеспособная замена.

К сожалению, не все драйвера поддерживают эту возможность. Драйвера Utah-GLX (для XFree86 3.3.6) имеют ее для всех карт. Подробности установки смотрите http://utah-glx.sf.net.

XFree86(DRI) 4.0.3 или новее поддерживает OpenGL с картами Matrox и Radeon, 4.2.0 или более поздние поддерживают и Rage128. Инструкции по закачиванию и установке смотрите на http://dri.sf.net .

Подсказка от одного из наших пользователей: видео вывод GL может использоваться для получения синхронизированного по вертикали TV вывода. Необходимо установить переменную окружения (как минимум для nVidia):

export __GL_SYNC_TO_VBLANK=1

10.2.10. AAlib - отображение в текстовом режиме

AAlib - это библиотека для отображения графики в текстовом режиме, используя мощный ASCII рендерер[renderer]. Существует множество программ уже поддерживающих ее, такие как Doom, Quake, и т.д. MPlayer содержит очень удобный драйвер для нее. Если ./configure обнаруживает установленную aalib, будет собран libvo драйвер для aalib.

В AA Window можно использовать некоторые клавиши для изменения настроек рендеринга:

КлавишаДействие
1 уменьшить контрастность
2 увеличить контрастность
3 уменьшить яркость
4 увеличить яркость
5 включение/отключение быстрого рендеринга
6 установка режима зашумления[dithering] (отсутствие, распределение ошибки[error distribution], Floyd Steinberg)
7 инвертировать изображение
8 переключение между управлением aa и MPlayer

Могут быть использованы следующие опции командной строки:

-aaosdcolor=V

Смена цвета OSD

-aasubcolor=V

Смена цвета субтитров

где V может быть: 0 (нормальный), 1 (темный), 2 (жирный), 3 (жирный шрифт), 4 (реверсный[reverse]), 5 (специальный).

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

-aadriver

Установить рекомендуемый aa драйвер (X11, curses, Linux).

-aaextended

Использовать все 256 символов.

-aaeight

Использовать восьмибитную ASCII.

-aahelp

Выводит все опции aalib.

Замечание

Рандеринг очень сильно загружает CPU, особенно при использовании AA-on-X (использование aalib под X), и меньше при использовании стандартной не-фреймбуфер консоли. Используйте SVGATextMode, чтобы настроить большой текстовый режим и наслаждайтесь! (второй выход карт Hercules рулит[secondary head Hercules cards rock] :) ), но, IMHO, вы можете использовать опцию -vf 1bpp, чтобы получить графику на hgafb :)

Используйте опцию -framedrop, если ваш компьютер недостаточно быстр для отрисовки всех кадров!

При воспроизведении на терминале, вы получите лучшую скорость и качество при использовании драйвера Linux, а не curses(-aadriver linux). Но при этом вы долны иметь право записи в /dev/vcsa<терминал>! Это не определяется aalib автоматически, но vo_aa вместо нее пытается определить лучший режим. Смотрите http://aa-project.sf.net/tune для дальнейших задач тюнинга.

10.2.11. libcaca - Цветная ASCII Art библиотека

Библиотека libcaca - это графическая библиотека, выводящая чекст вместо пикселов, так что она может работать на старых видео картах или текстовых терминалах. Она не такая, как знаменитая AAlib. libcaca требует терминал для своей работы, так что она будет работать на всех unix системах (включая Max OS X), используя библиотеку slang или ncurses, под DOS используя библиотеку conio.h, и под windows, используя либо slang, либо ncurses (через Cygwin эмуляцию), либо conio.h. Если скрипт ./configure определяет libcaca, то caca libvo драйвер будет собран.

Отличия от AAlib следующие:

  • 16 доступных цветов для вывода символов (256 цветовых пар)

  • зашумление[dithering] цветного изображения

Но libcaca также имеет следующие ограничения:

  • нет поддержки яркости, контрастности, гаммы

ВЫ можете использовать следующие клавиши в окне caca для изменения опций рендеринга:

КлавишаДействие
d Перключение методов зашумления[dithering] libcaca.
a Перекллючение сглаживания[antialiasing] libcaca.
b Переключение фона libcaca.

libcaca также анализирует следующие переменные окружения:

CACA_DRIVER

Установить рекомендуемый caca драйвер, например ncurses, slang, x11.

CACA_GEOMETRY (только X11)

Указывает количество строк и столбцов, например, 128x50.

CACA_FONT (только X11)

Указывает используемый шрифт, например, fixed, nexus.

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

10.2.12. VESA - вывод в VESA BIOS

Этот драйвер был разработатн и представлен как универсальный драйвер для любых карт с VESA VBE 2.0 совместимым BIOS. Другое преимущество этого драйвера заключается в том ,что он пытается принудительно включить TV вывод. VESA BIOS EXTENSION (VBE) Версия 3.0 Дата: 16 сентября, 1998 (Страница 70) гласит:

Dual-Controller Designs.  VBE 3.0 поддерживает дизайн с двумя контроллерами, предполагая, что поскольку оба контроллера обычно имеют одного производителя, и управляются единственной BIOS ROM на той же карте, то возможно скрыть от приложения факт наличия на самом деле двух контроллеров. Это ограничивает их независимое одновременное использование, но позволяет приложениям, выпущенным до VBE 3.0 нормально работать. VBE функция 00h (Вернуть информацию о контроллере) возвращает комбинированную информацию двух контроллеров, включая объединенный список доступных режимов. Когда приложение выбирает режим, активируется соответствующий контроллер. Каждая из остальных VBE функций затем работает с активным контроллером.

Так что у вас ест шанс получить работающий TV выход, используя этот драйвер. (Предполагается, что TV-выход - отдельный контроллер[standalone head] или отдельный выход как минимум.)

ПРЕИМУЩЕСТВА

  • У вас есть шанс смотреть фильмы, даже если Linux не знает ваше видео оборудование.

  • Вам не требуется устанавливать в Linux ничего, относящегося к графике (вроде X11 (он же XFree86), fbdev и т.п.). Этот драйвер может запускаться из текстового режима.

  • У вас есть шанс получить работающий TV-выход. (Это известно как минимум для ATI карт).

  • Этот драйвер вызывает обработчик int 10h, так что это не эмуляция - он вызывает реальные вещи реального BIOS в реальном режиме (на самом деле vm86 режим).

  • С ним вы можете использовать VIDIX, получая ускоренное отображение видео, и TV вывод одновременно! (Рекомендуется для ATI карт.)

  • Если у вас есть VESA VBE 3.0+, и вы где-то указали monitor-hfreq, monitor-vfreq, monitor-dotclock (в файле конфигурации или в командной строке), то получите наибольшую возможную частоту обновления. (Используя General Timing Formula). Чтобы задействовать эту возможность, вы должны указать все опции вашего монитора.

НЕДОСТАТКИ

  • Это работает только на x86 системах.

  • Может использоваться только пользователем root.

  • В данный момент доступно только для Linux.

Важно

Не используйте этот драйвер с GCC 2.96! Он не будет работать!

ОПЦИИ КОМАНДНОЙ СТРОКИ, ДОСТУПНЫЕ ДЛЯ VESA

-vo vesa:опции

данный момент распознаются: dga для включения режима dga и nodga для его отключения. В dga режиме вы можете включить двойную буферизацию опцией -double. Замечание: вы можете опустить эти параметры для автоопределения режима dga.

ИЗВЕСТНЫЕ ПРОБЛЕМЫ И СПОСОБЫ ИХ РЕШЕНИЯ

  • Если вы установили NLS шрифт на вашем Linux и запускаете VESA драйвер из текстового режима, то после завершения MPlayer у вас окажется загруженным ROM шрифт вместо национального. Вы можете загрузить национальный шрифт снова, воспользовавшись утилитой setsysfont из дистрибутива Mandrake/Mandriva, например. (Подсказка: Та же утилита используется для локализации fbdev).

  • Некоторые графические драйверы Linux не обновляют активный BIOS режим в DOS памяти. Таким образом, если у вас подобная проблема - всегда используете VESA драйвер только из текстового режима. Иначе в любом случае будет активирован текстовый режим (#03) и вам придется перезагружать компьютер..

  • Часто после завершения работы VESA драйвера вы получаете черный экран. Чтобы вернуться в обычный режим просто переключитесь на другую консоль (нажав Alt-F<x>) затем переключитесь обратно тем же способом.

  • Для получения работающего TV выхода необходимо, чтобы TV разъем был подключен до включения вашего PC, т.к. видео BIOS инициализирует себя только один раз во время POST процедуры.

10.2.13. X11

Избегайте, если возможно. Вывод в X11 (используя расширение разделяемой памяти) - без какого-либо ускорения.Поддерживается (MMX/3DNow/SSE ускоренное, но все равно медленное) программное масштабирование, используйте опции -fs -zoom. Большинство карт имеют поддержку масштабирования, для этого используйте вывод -vo xv, или -vo xmga для карт Matrox.

Проблема в том, что большинство драйверов карт не поддерживают аппаратное ускорение на втором мониторе/TV. В этом случае вы увидите окно зеленого/синего цвета вместо изображения, и этот драйвер будет полезным, но требуется мощный CPU для программного масштабирования. Не используйте программный вывод+масштабирование SDL драйвера, он имеет худшее качество картинки!

Программное масштабирование очень медленное, лучше попробуйте вместо этого изменить видео режим. Это очень просто. Смотрите раздел DGA режимы и вставьте соответствующие строки в ваш XF86Config.

  • Если у вас XFree86 4.x.x: используйте -vm опцию. Она переключится в режим с подходящим разрешением. Если нет:

  • C XFree86 3.x.x: циклически переключайтесь между разными разрешениями с помощью клавиш Ctrl-Alt-Доп. клавиша плюс и Ctrl-Alt-Доп. клавиша минус.

Если не находите вставленные видео режимамы, просмотрите вывод Xfree86. Некоторые драйверы не могут использовать низкие частоты пикселизации (количество отрисовываемых пикселей в секунду), необходимые для видео режимов с низким разрешением.

10.2.14. VIDIX

ПРЕАМБУЛА.  VIDIX - это аббревиатура для VIDeo Interface for *niX (Видео интерфейс для Unix). VIDIX разработан и введен как интерфейс для быстрых драйверов пространства пользователя[user-space], обеспечивающих такую же производительность, как mga_vid для карт Matrox. Они к тому же хорошо переносимы.

Этот интерфейс был разработан, чтобы уместить существующие интерфейсы ускорения видео (известные как mga_vid, rage128_vid, radeon_vid, pm3_vid) в единую схему. Он предоставляет высокоуровневый интерфейс к чипам, известным как BES (BackEnd scalers) или OV (Video Overlays). Он не предоставляет низкоуровневого интерфейса к вещам, известным как графические серверы (Я не хочу соревноваться с командой X11 в переключении режимов.) Т.е. основная цель интерфейса - ускорить до максимума скорость воспроизведения видео.

ИСПОЛЬЗОВАНИЕ

  • Вы можете использовать отдельный видеодрайвер: -vo xvidix. Этот драйвер был разработан как X11 фронтенд к VIDIX технологии. Он требует X сервер и может работать только под ним. Имейте ввиду, что поскольку этот драйвер напрямую обращается к оборудованию в обход драйвера X, то могут быть повреждены растровые изображения, кешированные в памяти видеокарты. Вы можете предотвратить это, ограничив размер видеопамяти, используемой X, XF86Config опцией "VideoRam" в разделе устройств. Вам следует установить этот параметр в количество установленной видеопамяти минус 4Мб. Если у вас меньше 8Мб видеопамяти, вместо этого можно использовать опцию "XaaNoPixmapCache" в разделе экранов.

  • Существует консольный VIDIX драйвер: -vo cvidix. Для большинства карт требуется работающий и инициализированный фреймбуфер (в противном случае просто испортите изображение на экране), и вы будете иметь тот же эффект, что и с -vo mga или -vo fbdev. Карты nVidia, тем не менее, способны выводить полностью графическое видео в настоящей текстовой консоли. Смотрите раздел nvidia_vid для более подробной информации. Чтобы избавиться от такста на полях и мерцающего курсора попробуйте нечто подобное

    setterm -cursor off > /dev/tty9

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

  • Вы можете использовать подустройство VIDIX, примененное к различным драйверам видео вывода, например: -vo vesa:vidix (только Linux) и -vo fbdev:vidix.

Это действительно неважно, какой драйвер вывода видео используется с VIDIX.

ТРЕБОВАНИЯ

  • Видеокарта должна находиться в графическом режиме (кроме карт nVidia с драйвером -vo cvidix).

  • Драйвер вывода видео MPlayer должен знать текущий видеорежим и быть способным сообщить VIDIX некоторые видео характеристики сервера.

СПОСОБЫ ИСПОЛЬЗОВАНИЯ.  Когда VIDIX используется в качестве подустройства (-vo vesa:vidix), настройка видеорежима производится драйвером вывода видео (короче говоря vo_server). Следовательно, вы можете передать в командную строку MPlayer те же ключи, что и для vo_server. Дополнительно он понимает ключ -double как глобально видимый параметр. (Я рекомендую использовать этот ключ с VIDIX как минимум для карт ATI). -vo xvidix дополнительно понимает следующие опции: -fs -zoom -x -y -double.

Вы можете напрямую указать VIDIX драйвер третьим параметром к командной строке:

mplayer -vo xvidix:mga_vid.so -fs -zoom -double file.avi

или

mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 file.avi

Но это опасно, и вам не следует этого делать. В этом случае принудительно запускается указанный драйвер и результат может быть непредсказуемым (он может подвесить ваш компьютер). Вам следует это делать ТОЛЬКО если вы абсолютно уверены, что он работает и MPlayer не использует его автоматически. Пожалуйста, сообщите об этом разработчикам. Правильный путь - использование VIDIX без аргументов для задействования автоопределения драйвера.

Поскольку VIDIX требует прямой доступ к оборудованию, вы можете либо запускать его от имени root, либо установить SUID бит на исполняемый файл MPlayer ((Внимание: Это большой риск безопасности). Как вариант, вы можете использовать специальный модуль ядра, как этот:

  1. Скачайте разрабатываемую версию svgalib (например 1.9.17), ИЛИ версию, созданную Alex специально для использования с MPlayer (она не требует наличия исходников svgalib для компиляции) отсюда.

  2. Скомпилируйте модуль в каталоге svgalib_helper (он может быть найден внутри каталога svgalib-1.9.17/kernel/, если вы скачали исходники с сайта svgalib) и выполните insmod для него.

  3. Для создания необходимых устройств в каталоге /dev, выполните от имени root команду

    make device

    в svgalib_helper.

  4. Переместите каталог svgalib_helper в mplayer/main/libdha/svgalib_helper.

  5. Требуется, если вы скачали исходники с сайта svgalib: Удалите комментарий перед строкой CFLAGS, содержащий строку "svgalib_helper" в файле libdha/Makefile.

  6. Перекомпилируйте и установите libdha.

10.2.14.1. ATI карты

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

Существует два скомпилрованных бинарных файла: radeon_vid для Radeon и rage128_vid для карт Rage 128. Вы можете принудительно использовать один из них или позволить VIDIX автоматически опробовать все доступные драйверы.

10.2.14.2. Matrox карты

Сообщалось, что работают Matrox G200, G400, G450 и G550.

Драйвер поддерживает видео эквалайзеры и должем быть столь же быстр, как и Matrox фреймбуфер

10.2.14.3. Trident карты

Существует драйвер для чипсета Trident Cyberblade/i1, который можно найти на материнских платах VIA Epia.

Драйвер написан и поддерживается Alastair M. Robinson.

10.2.14.4. 3DLabs карты

Хотя драйвер для чипов 3DLabs GLINT R3 и Permedia3 существует, никто его не тестировал, так что отчеты приветствуются.

10.2.14.5. nVidia карты

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

mplayer -vo cvidix example.avi

10.2.14.6. SiS карты

Это, как и nvidia_vid, весьма экспериментальный код.

Он тестировался на SiS 650/651/740 (наиболее распространный чипсет, используемый в SiS версиях байрбонов[barebones] "Shuttle XPC")

Отчеты ожидаются!

10.2.15. DirectFB

"DirectFB - это графическая библиотека, которая была разработана с учетом особенностей встроенных систем. Она предоставляет максимум производительности при минимуме используемых ресурсов и накладных расходов." - процитировано с http://www.directfb.org

Я исключу описание возможностей DirectFB из этого раздела.

Несмотря на то, что MPlayer не поддерживается в DirectFB как "video провайдер", этот драйвер вывода видео задействует воспроизведение видео через DirectFB. Он будет - конечно - работать с ускорением, на моей Matrox G400 скорость DirectFB такая же как у XVideo.

Всегда старайтесь использовать последнюю версию DirectFB. Вы можете использовать опции DirectFB в командной строке, при помощи -dfbopts. Выбор слоя производится методом подустройства, например.: -vo directfb:2 (по-умолчанию -1: автоопределение)

10.2.16. DirectFB/Matrox (dfbmga)

Прочтите основной DirectFB раздел для общей информации.

Этот драйвер вывода видео задействует CRTC2 (на втором мониторе[second head]) на картах Matrox G400/G450/G550, отображающий видео независимо от первого монитора[first head].

Ville Syrjala имеет README и HOWTO на своей странице, описывающие как задействовать вывод DirectFB TV на картах Matrox.

Замечание

Первая версия DirectFB, на которой удалось это сделать, была 0.9.17 (имеющая ошибки, требует surfacemanager патч с указанного выше URL). Портирование кода CRTC2 в mga_vid планируется уже несколько лет, патчи приветствуются.