# Устройства вывода видео

## Настройка MTRR

ОЧЕНЬ важно проверить, правильно ли установлены MTRR регистры, поскольку они могут дать большой прирост производительности.

Выполните `cat /proc/mtrr`:

    --($:~)-- cat /proc/mtrr
    reg00: base=0xe4000000 (3648MB), size=  16MB: write-combining, count=9
    reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1

Здесь все верно, показана моя Matrox G400 с 16Мб памяти. Я выполнил это из-под XFree 4.x.x, который автоматически устанавливает регистры MTRR.

Если ничего не сработало, вам придется сделать это вручную. Во-первых, вы должны определить базовый адрес. Существует три способа выяснить его:

1. из сообщений запуска X11, например:

       (--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
       (--) SVGA: Linear framebuffer at 0xD8000000

2. из `/proc/pci` (используйте команду `lspci -v`):

       01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525
       Memory at d8000000 (32-bit, prefetchable)

3. из сообщений драйвера ядра mga_vid (используйте `dmesg`):

       mga_mem_base = d8000000

Теперь давайте найдем объем памяти. Это очень просто, просто преобразуйте размер видео памяти в шестнадцатеричный формат, или используйте таблицу:

1 MB | 0x100000
2 MB | 0x200000
4 MB | 0x400000
8 MB | 0x800000
16 MB | 0x1000000
32 MB | 0x2000000

Вы знаете базовый адрес и размер памяти, так давайте настроим регистры MTRR! Например, для вышеуказанной карты Matrox (`base=0xd8000000`) с 32Мб памяти (`size=0x2000000`) просто выполните:

    echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr

Не все CPU имеют MTRR. Например, старый K6-2 (около 266MHz, степпинг 0) не имеет MTRR, но у степпинга 12 они уже есть (запустите `cat /proc/cpuinfo` чтобы это проверить).

## 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

### 3dfx карты

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

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

### 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!.

### nVidia карты

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

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

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

### ATI карты

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

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

### 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

### Trident карты

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

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

### Kyro/PowerVR карты

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

### Карты Intel

Эти карты можно обнаружить во многих ноутбуках. Рекомендуется Xorg последней версии.

Для воспроизведения контента размера DVD (и более) поправьте ваш XF86Config/xorg.conf как указано здесь:

    Section "Device"
        [...]
        Driver "intel"
        Option "LinearAlloc" "6144"
        [...]
    EndSection

Отсутствие этой опции скорее всего приведет к появлению ошибки

    X11 error: BadAlloc (insufficient resources for operation)

при попытке использовать `-vo xv`.

## 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 работает только с задействованным двойным буфером (иначе он моргает).

## SDL

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

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

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

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

## 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 для точных параметров.

## Вывод во фреймбуфер (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.

## Matrox фреймбуфер (mga_vid)

mga_vid - это комбинация драйвера вывода и модуля ядра Linux, использующая модуль видео масштабирования/оверлея Matrox G200/G400/G450/G550 для выполнения YUV->RGB преобразования цветового пространства и произвольного масштабирования. mga_vid имеет аппаратную поддержку VSYNC с тройной буферизацией. Работает как во фреймбуфер консоли, так и под X, но только с Linux 2.4.x.

Версию этого драйверя для Linux 2.6.x ищите на .

Установка:

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

      cd drivers
      make

- Затем запустите (под root)

      make install

  что должно установить модуль и создать для Вас файл устройства. Загрузите драйвер:

      insmod mga_vid.o

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

      insmod mga_vid.o mga_ram_size=16

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

      alias char-major-178 mga_vid

- Теперь надо (пере)скомпилировать 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

В том же каталоге есть тестовая программа, называющаяся `mga_vid_test`. Если все работает нормально, она должна рисовать на экране изображения 256x256.

## Поддержка 3Dfx YUV

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

    ./configure --enable-tdfxfb

## tdfx_vid

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

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

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

      cd drivers
      make

- Запустите (от root):

      make install

  что должно установить модуль и создать для Вас файл устройства. Загрузите драйвер:

      insmod tdfx_vid.o

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

      alias char-major-178 tdfx_vid

В том же каталоге есть тестовая программа, называющаяся `tdfx_vid_test`. Она должна вывести некоторую полезную информацию, если все работает нормально.

## OpenGL вывод

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

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

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

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

`export __GL_SYNC_TO_VBLANK=1`

## 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 вместо нее пытается определить лучший режим. Смотрите для дальнейших задач тюнинга.

## 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`, если ваш компьютер недостаточно быстр для рендеринга всех кадров.

## 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 процедуры.

## 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. Некоторые драйверы не могут использовать низкие частоты пикселизации (количество отрисовываемых пикселей в секунду), необходимые для видео режимов с низким разрешением.

## 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 ((Внимание: Это большой риск безопасности). Как вариант, вы можете использовать специальный модуль ядра, как этот:

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

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

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

      make device

  в `svgalib_helper`.

- Переместите каталог `svgalib_helper` в подкаталог `vidix` дерева исходных текстов MPlayer.

- Удалите комментарий перед строкой CFLAGS, содержащий строку "svgalib_helper" в файле `vidix/Makefile`.

- Перекомпилируйте.

### ATI карты

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

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

### Matrox карты

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

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

### Trident карты

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

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

### 3DLabs карты

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

### nVidia карты

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

    mplayer -vo cvidix example.avi

### SiS карты

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

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

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

## DirectFB

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

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

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

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

## 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 планируется уже несколько лет, патчи приветствуются.

## MPEG декодеры

### DVB ввод и вывод

MPlayer поддерживает карты с чипсетом Siemens DVB и таких производителей, как Siemens, Technotrend, Galaxis или Hauppauge. Последние DVB драйверы доступны с сайта Linux TV. Если вы собираетесь делать программное транскодирование, у вас должен быть как минимум 1ГГц CPU.

Скрипт configure должен определить вашу DVB карту. Если нет, принудительно укажите определение с помошью

    ./configure --enable-dvb

Если заголовочные файлы ost находятся не в стандартных каталогах, укажите путь с

    ./configure --extra-cflags=каталог исходников DVB/ost/include

Затем компилируйте и устанавливайте как обычно.

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

Аппаратное декодирование потоков, содержащих MPEG-1/2 видео и/или MPEG аудио, может быть выполнено следующей командой:

    mplayer -ao mpegpes -vo mpegpes file.mpg|vob

Декодирование любых других видео потоков требует транскодирования в MPEG-1, поэтому оно медленно и, возможно, не стоит неприятностей, особенно если ваш компьютер медленный. Его можно добиться, используя команду:

    mplayer -ao mpegpes -vo mpegpes yourfile.ext
    mplayer -ao mpegpes -vo mpegpes -vf expand yourfile.ext

Имейте в виду, что DVB карты поддерживают высоту изображения только 288 и 576 для PAL и 240 и 480 для NTSC. Для других значений высоты вы должны отмасштабировать изображение, добавив `scale=ширина:высота` к опции `-vf` с желаемыми значениями ширины и высоты. DVB карты допускают различные значения ширины: 720, 704, 640, 512, 480, 352 и т.д. и производят аппаратное масштабирование по горизонтали, так что в большинстве случаев масштабировать по горизонтали не нужно. Для 512x384 (пропорции 4:3) MPEG-4 (DivX) попробуйте:

Если у вас есть широкоформатный фильм и вы не хотите растягивать его на полную высоту, используйте плагин `expand=w:h` для добавления черных полос. Чтобы посмотреть 640x384 MPEG-4 (DivX), попробуйте:

    mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 file.avi

Если ваш CPU слишком слаб для полноразмерного 720x576 MPEG-4 (DivX), попробуйте уменьшить размер:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 file.avi

Если скорость не увеличилась, попробуйте уменьшить размер по вертикали тоже:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 file.avi

Для OSD и субтитров используйте возможности OSD плагина expand. Так, вместо `expand=w:h` или `expand=w:h:x:y`, используйте `expand=w:h:x:y:1` (5-й параметр `:1` в конце для включения OSD рендеринга). Вы можете слегка подвинуть изображение вверх, чтобы получить большую черную область для субтитров. Вы также можете переместить субтитры вверх, если они выходят за пределы TV экрана, используйте для этого `-subpos <0-100>` (`-subpos 80` - хороший выбор).

Чтобы воспроизвести не-25fps фильмы на PAL TV или на машине со слабым CPU, добавьте опцию `-framedrop`.

Для сохранения пропорций MPEG-4 (DivX) файлов и получения оптимальных параметров масштабирования (аппаратное горизонтальное и программное вертикальное масштабирование с сохранением пропорций), используйте плагин dvbscale:

    for a  4:3 TV: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1
    for a 16:9 TV: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1

Цифровое TV (DVB драйвер ввода )

Вы можете использовать DVB карту для просмотра Цифрового TV.

Вы должны иметь установленные программы `scan` и `szap/tzap/czap/azap`; все они входят в пакет драйверов.

Проверьте, что ваши драйверы правильно работают с такими программами, как `dvbstream` (это основа DVB драйвера ввода).

Теперь вам следует создать файл `~/.mplayer/channels.conf`, с понятным `szap/tzap/czap/azap` синтаксисом, или позволить `scan` сделать это для вас.

Если у вас несколько разнотипных карт (например, для спутникового TV, наземного , кабельного и ATSC), можете сохранить файлы как `~/.mplayer/channels.conf.sat`, `~/.mplayer/channels.conf.ter`, `~/.mplayer/channels.conf.cbl`, и `~/.mplayer/channels.conf.atsc`, соответственно, с тем, чтобы можно было явно указать MPlayer какой файл использовать вместо стандартного `~/.mplayer/channels.conf`, и какую карту с ним использовать.

Убедитесь, что в `channels.conf` находятся каналы !-- FIXME Free to Air --> только для обычного телевидения[Free to Air], иначе MPlayer будет ожидать передачи незашифрованных данных.

В полях аудио и видео вы можете использовать расширенный синтаксис: `...:pid[+pid]:...` (в каждом максимум 6 pid'ов); в этом случае MPlayer включит в поток все указанные pid плюс pid 0 (содержащий PAT). В каждую строку всегда следует включать PMT и PCR pid'ы для соответствующего канала (если вы их знаете). Также можно указать 8192, при этом будут выбраны все pid на этой частоте, и Вы сможете потом переключаться между программами при помощи TAB. Это может потребовать большей пропускной способности, однако дешевые карты всегда пересылают все каналы как минимум до ядра, так что в этом случае разница будет небольшой. Другие возможные применения: телетекст pid, второая аудио дорожка, и т.д.

Если MPlayer часто жалуется на

    Too many video/audio packets in the buffer

или если вы заметили растущую рассинхронизацию между звуком и видео проверьте наличие PCR pid'а в вашем потоке (требующегося для соблюдения модели буферизации передатчика) и/или попробуйте воспользоваться libavformat MPEG-TS декодером, добавив `-demuxer lavf -lavfdopts probesize=128` в командную строку.

Для показа первого из доступных каналов, запустите

    mplayer dvb://

Если вы хотите посмотреть определенный канал, например R1, запустите

    mplayer dvb://R1

Если у вас больше одной карты, также надо указать номер той, с которой доступен канал:

    mplayer dvb://2@R1

Для смены канала, нажимайте клавиши h (следующий) и k (предыдущий), или используйте OSD меню.

Для временного отключения аудио или видео потока скопируйте следующие строки в `~/.mplayer/input.conf`:

    % set_property  switch_video -2
    & step_property switch_video
    ? set_property  switch_audio -2
    ^ step_property switch_audio

(Заменяя горячие клавиши по своему усмотрению.) При нажатии на клавишу, соответствующую switch_x -2, поток будет закрыт; при нажатии на клавишу, соответствующую step_x, поток будет открыт снова. Имейте в виду, что этот механизм переключения не будет работать как следует, когда в мультиплексоре присутствует несколько аудио или видео потоков.

Во время воспроизведения (не во время записи) для предотвращения заикания и таких ошибок, как 'Your system is too slow', имеет смысл добавить

    -mc 10 -speed 0.97 -af scaletempo

к опциям командной строки, исправив параметры scaletempo по своему усмотрению.

Если ваш `~/.mplayer/menu.conf` содержит запись `<dvbsel>`, как в файле с примерами `etc/dvb-menu.conf` (можете использовать его чтобы перезаписать `~/.mplayer/menu.conf`), главное меню будет отображать подменю, позволяющее вам выбрать один из присутствующих в `channels.conf` каналов, возможно, с предшествующим ему подменю с DVB выбором карт, доступных MPlayer.

Если хотите записать какую-то программу на диск, используйте

    mplayer -dumpfile r1.ts -dumpstream dvb://R1

Если хотите вместо этого записать ее в другом формате (перекодировать), следует использовать такую команду:

    mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 \
        -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1

Полный список опций для DVB драйвера ввода можно найти на странице руководства man.

БУДУЩЕЕ

Если у вас есть вопросы, или вы хотите получать сообщения о новых возможностях и принять участие в дискуссиях на эту тему, подпишитесь на список рассылки MPlayer-DVB. Помните, что язык рассылки - Английский.

В будущем вы можете рассчитывать на возможность отображения OSD и субтитров, используя встроенные OSD возможности DVB карт.

### DXR2

MPlayer поддерживает аппаратное ускорение воспроизведения с картами Creative DXR2.

Прежде всего вам потребуется правильно установленные DXR2 драйверы. Их и руководство по установке можно найти на сайте Ресурсного Центра DXR2.

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

`-vo dxr2`

  Включить TV выход.

`-vo dxr2:x11` or `-vo dxr2:xv`

  Включить вывод через оверлей в X11.

`-dxr2 <option1:option2:...>`

  Эта опция используется для управления драйвером DXR2.

Чипсет оверлея, использовавшийся на DXR2 довольно плохого качества, но с настройками по-умолчанию будет работать у всех. OSD может работать с оверлеем (не на TV), отрисовывая себя в ключевом цвете[colorkey]. С настройками ключевого цвета[colorkey] по-умолчанию, вы можете получить разные результаты, скорее всего увидите ключевой цвет[colorkey] вокруг символов или другие забавные эффекты. Но при правильных настройках, можно получить вполне приемлемый результат.

Смотрите страницу man руководства для списка доступных опций.

### DXR3/Hollywood+

MPlayer поддерживает аппаратно ускоренное воспроизведение картами Creative DXR3 и Sigma Designs Hollywood Plus. Обе эти карты используют MPEG декодер на чипе em8300 от Sigma Designs

Прежде всего вам потребуются правильно установленные драйвера DXR3/H+, версии 0.12.0 или выше. Драйверы и инструкции по установке могут быть найдены на сайте DXR3 & Hollywood Plus для Linux `configure` должен автоматически определить вашу карту, компиляция должна пройти без проблем.

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

`-vo dxr3:prebuf:sync:norm=x:device`

  Опция `overlay` активирует оверлей вместо TV-out. Для корректной работы она требует его правильной настройки. Самый простой способ правильно его настроить - сначала запустить autocal, затем запустить mplayer с драйвером dxr3 и выключенным оверлеем, потом запустить dxr3view. В dxr3view вы можете менять настройки оверлея и видеть результат в реальном времени, может быть, в будущем эта возможность будет поддерживаться в MPlayer GUI. После того как оверлей правильно настроен, надобность в dxr3view отпадает. Опция `prebuf` включает пребуферинг. Пребуферинг - это возможность чипа em8300, позволяющая ему хранить более одного кадра видео в каждый момент времени. Это значит, что при включенном пребуферинге MPlayer будет пытаться всегда держать буфер заполненным данными. Если у вас медленная машина, то MPlayer будет забирать практически 100% CPU. Это особенно часто случается, если вы воспроизводите чистые MPEG потоки (DVD, SVCD и т.д.), т.к., поскольку MPlayer не должен перекодировать их в MPEG, то он заполняет буфер очень быстро. С пребуферингом воспроизведение видео значительно меньше зависит от остальных программ, прибирающих к рукам CPU, он не будет терять кадры, кроме случая, когда приложения захватит CPU на довольно длительное время. При запуске без пребуферинга, em8300 намного более чувствителен к загрузке CPU, так что настоятельно рекомендуется включить `-framedrop` опцию MPlayer для избежания потери синхронизации. `sync` включит алгоритм синхронизации. Пока что это еще экспериментальная возможность. С включенной sync возможностью будут постоянно проверяться встроенные часы em8300, и если начинается отклонение от часов MPlayer чип будет сброшен, что приведет к пропуску всех запаздывающих кадров.

  `norm=x` установит TV стандарт DXR3 карты без необходимости использования внешних утилит вроде em8300setup. Допустимые стандарты: 5 = NTSC, 4 = PAL-60, 3 = PAL. Специальные стандарты 2 (автонастройка, используя PAL/PAL-60) и 1 (автонастройка используя PAL/NTSC) решают какой стандарт использовать на основе частоты кадров. because they decide which norm to use by looking at the frame rate of the movie. norm = 0 (по-умолчанию) не изменяет текущий стандарт.

  `device` = номер устройства, если их у вас несколько em8300 карт. Любые из этих опций могут быть опущены.

  `:prebuf:sync`, похоже, отлично работает при воспроизведении фильмов MPEG-4 (DivX). Пользователи сообщали о проблемах при использования prebuf опции при воспроизведении файлов MPEG-1/2. Вы можете попробовать запустить программу сначала вообще без указания опций, если же имеете проблемы с синхронизацией или с DVD субтитрами, попытайтесь с `:sync`.

`-ao oss:/dev/em8300_ma-X`

  Для вывода звука, где X - номер устройства (0, если карта одна).

`-af resample=xxxxx`

  em8300 не может воспроизводить частоты дискретизации ниже 44100Hz. Если частота ниже 44100Hz, выберите либо 44100Hz, либо 48000Hz в зависимости от того, какая частота ближайшая. Т.е. если фильм использует 22050Hz укажите 44100Hz, т.к. 44100 / 2 = 22050, если 24000Hz, используйте 48000Hz, т.к. 48000 / 2 = 24000 и т.д. Это не работает с цифровым выводом звука (`-ac hwac3`).

`-vf lavc`

  Для просмотра не-MPEG контента на em8300 (напрмер MPEG-4 (DivX) или RealVideo) вы должны указать MPEG-1 видеоплагин, такой как libavcodec (lavc). Дополнительную информацию о `-vf lavc` смотрите на странице руководства man. На данный момент неизвестно способа установить значение fps для em8300, что означает фиксированную величину, равную 30000/1001 fps, поэтому крайне рекомендуется использовать `-vf lavc=quality:25`, особенно, если используете пребуферинг. Почему 25, а не 30000/1001? Ну, причина в том, что при использовании 30000/1001 изображение начинает слегка дрожать. Причина нам неизвестна. Если вы ставите это значение где-то между 25 и 27 картинка стабилизируется. Пока что мы можем только принять это как факт

`-vf expand=-1:-1:-1:-1:1`

  Хотя драйвер DXR3 может помещать некоторый OSD в MPEG-1/2/4 видео, он имеет намного более плохое качество, чем традиционный OSD MPlayer, и имеет несколько проблем при обновлении к тому же. Команда, указанная выше, сначала отконвертирует входное видео в MPEG-4 (это обязательно, извините), затем применит плагин expand, который не будет ничего расширять (-1: по-умоляанию), но наложит нормальное OSD на картинку (это все, что делает "1" в конце строки).

`-ac hwac3`

  em8300 поддерживает воспроизведение звука AC-3 (окружающий звук) через цифровой аудио выход карты.Смотрите опцию `-ao oss` выше, она должна использоваться для указания вывода через DXR3 вместо звуковой карты.

## Другое оборудование вывода видео

### Zr

Это видеодрайвер (`-vo zr`) для некоторого количества MJPEG карт захвата/воспроизведения (тестировался на DC10+ и Buz, но также должен работать для LML33, DC10). Драйвер работает, кодируя кадр в JPEG, и отправляя его карте. Для кодирования JPEG используется и требуется библиотека libavcodec. Со специальным режимом cinerama, вы можете смотреть фильмы на действительно широком экране, который можно получить, иемя два проектора и две MJPEG карты. В зависимости от разрешения и настроек качества, этот драйвер может потребовать существенной мощности CPU, не забывайте указывать `-framedrop`, если маша машина слишком медленная. Замечание: Мой AMD K6-2 350МГц является (с `-framedrop`) вполне подходящим для просмотра материала размера VCD, и фильмов с уменьшенным разрешением.

Этот драйвер общается с драйвером ядра, доступном на , так что сначала должен корректно заработать второй. Наличие MJPEG карты автоматически определяется скриптом `configure`, если этого не происходит, включите принудительное определение при помощи

    ./configure --enable-zr

Вывод может управляться несколькими опциями, подробные описания можно найти на странице руководства man, короткий список опций получите, выполнив

    mplayer -zrhelp

Такие вещи как масштабирование и OSD не осуществляются этим драйвером, но могут быть сделаны, используя видеоплагины. Например, предположим, что вы имеете фильм с разрешением 512x272 и хотите просмотреть эго в полноэкранном режиме на DC10+. Есть три главные возможности: вы можете отмасштабировать фильм до ширины 768, 384 или 192. По причинам производительности и качества я бы выбрал масштабирование до 384x204, используя быстрый билинейный программный модуль. Командная строка:

    mplayer -vo zr -sws 0 -vf scale=384:204 movie.avi

Обрезка может быть выполнена плагином `crop` и самим драйвером. Предполагая, что фильм слишком широк для отображения на Buz, и вы хотите использовать `-zrcrop` для уменьшения ширины, то необходимо применить следующую команду:

    mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi

Если вы хотите использовать плагин `crop`, выполните

    mplayer -vo zr -vf crop=720:320:80:0 benhur.avi

Дополнительное указание `-zrcrop` активизирует режим cinerama, т.е. вы можете распределить фильм на несколько TV или проекторов для создания большего экрана. Предположим у вас два проектора. Левый подключен к Buz на `/dev/video1`,а правый подключен к DC10+ на `/dev/video0`. Фильм имеет разрешение 704x288. Также предположим, что вы хотите выводить на правый проектор в черно-белом цвете, а левый должен иметь JPEG кадры качества 10. в этом случае вы должны указать:

    mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
        -zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
            movie.avi

Можно видеть, что опции, встречающиеся до второго `-zrcrop`, применяются только к DC10+, а опции после второго применяются только к Buz. Максимальное количество карт для режима cinerama равно четырем, так что вы можете построить 2x2 видеостену.

Наконец важное замечание: Не запускайте и не останавливайте XawTV на устройстве воспроизведения, это может подвесить ваш компьютер. Тем не менее, можно прекрасно СНАЧАЛА запустить XawTV, ЗАТЕМ запустить MPlayer, подождать, пока MPlayer завершит работу и ЗАТЕМ остановить XawTV.

### Blinkenlights[Мерцающие огни?]

Этот драйвер способен воспроизводить, используя Blinkenlights UDP протокол. Если не знаете, что такое Blinkenlights или его преемник Arcade, выясните это. Хотя это, возможно, реже всего используемый драйвер, без сомнения, это самая клевая вещь, предлагаемая MPlayer. Просто посмотрите некоторые из видеороликов документации Blinkenlights. На видео Arcade вы можете видеть драйвер видеовывода Blinkenlights в действии в 00:07:50.

## Поддержка TV-выхода

### Matrox G400 карты

Под Linux есть два способа получить работающий TV выход на G400:

инструкции по TV-выходу для Matrox G450/G550, смотрите в следующем разделе!

XFree86

  Используя драйвер и HAL модуль, доступный с сайта Matrox. Это даст вам X на TV.

  Этот метод на дает ускоренного воспроизведения как под Windows! Второй выход имеет только YUV фреймбуфер, BES (Back End Scaler, модуль YUV масштабирования на картах G200/G400/G450/G550) на нем не работает! Драйвер windows как-то это обходит, возможно используя 3D движок для масштабирования, а YUV фреймбуфер - для вывода отмасштабированного изображения. Если вы действительно хотите использовать X, используйте опции `-vo x11 -fs -zoom`, но это будет МЕДЛЕННО, и будет иметь включенную защиту от копирования Macrovision (можно "обойти" Macrovision используя этот скрипт на perl).

Framebuffer

  Используя модули matroxfb в 2.4 ядрах. 2.2 ядра не имеют в этих модулях возможности работы с TV-out, так что для нашего дела непригодны. Вы должны включить ВСЕ matroxfb-относящиеся возможности во время компиляции (кроме MultiHead), и скомпилировать их в модули! Вам также необходима задействованная I2C.

  - Войдите в `TVout` и наберите `./compile.sh`. Установите `TVout/matroxset/matroxset` куда-нидудь в ваши `PATH`.

  - Если вы еще не имеете установленного `fbset`, поместите `TVout/fbset/fbset` куда-нибуть в ваши `PATH`.

  - Еслы `con2fb` у вас еще не установлен, поместите `TVout/con2fb/con2fb` куда-нибуть в ваши `PATH`.

  - Затем войдите в каталог `TVout/` в исходниках MPlayer, и запустите `./modules` от имени root. Ваша консоль из текстового режима переключится в режим фреймбуфера (обратно не получится!).

  - Затем, ОТРЕДАКТИРУЙТЕ и запустите скрипт `./matroxtv`. Он покажет вам очень простое меню. Нажмите 2 и Enter. Теперь вы должны иметь одинаковую картинку на мониторе и TV. Если картинка на TV (PAL по-умолчанию) имеет некоторые странные полосы, значит скрипт не смог корректно установить разрешение (на 640x512 по-умолчанию). Попробуйте другие разрешения из меню и/или поэкспериментируйте с fbset.

  - Йоу. Следующая задача - убрать курсор с tty1 (или где он есть), и выключить гашение экрана. Запустите следующие команды:

        echo -e '\033[?25l'
        setterm -blank 0

    or

        setterm -cursor off
        setterm -blank 0

    Возможно вы захотите поместить вышеуказанное в скрипт, добавив очистку экрана. Чтобы вернуть курсор назад

        echo -e '\033[?25h'

    или

        setterm -cursor on

  - Готово. Запускайте воспроизведение

        mplayer -vo mga -fs -screenw 640 -screenh 512 filename

    (Если используете X, переключитесь теперь в matroxfb при помощи, например Ctrl Alt F1.) Замените `640` и `512`, если установили другое разрешение...

  - Наслаждайтесь супер-быстрым, супер-навороченным выводом Matrox TV (лучше чем Xv)!

Создание кабеля Matrox TV-out

Никто не дает никаких гарантий и не несет никакой ответственности за возможное нанесение ущерба, вызванное выполнением инструкций, указанныех в этой документации.

Кабель для G400

Четвертый контакт CRTC2 коннектора - это композитный видео сигнал. Земля - шестой, седьмой и восьмой контакты. (информация получена от Balázs Rácz)

Кабель для G450

Первый контакт CRTC2 коннектора - это композитный видео сигнал. Земля - пятый, шестой, седьмой и пятнадцатый (5, 6, 7, 15) контакты. (информация получена от Balázs Kerekes)

### Matrox G450/G550 карты

Поддержка TV выхода для этих карт была добавлена недавно, и пока отсутствует в основном ядре. В данный момент mga_vid не может быть использован AFAIK, поскольку дрйвер G450/G550 работает только в одной конфигурации: первый чип CRTC (с наибольшим количеством возможностей) на первом экране (мониторе), и второй чип CRTC (без BES - для объяснения, что такое BES, смотрите раздел о G400 выше) на TV. Так что в настоящий момент вы можете использовать только драйвер вывода fbdev программы MPlayer.

Первый CRTC не может быть перенаправлен на второй выход на текущий момент. Автор драйвера ядра matroxfb - Petr Vandrovec - возможно добавит поддержку для этого, отображая вывод первого CRTC одновременно на два выхода, как в данный момент и рекомендуется для G400, смотрите раздел выше.

Необходимый патч для ядра и детальное HOWTO можно скачать с

### ATI карты

ПРЕАМБУЛА

Сейчас ATI не хочет поддерживать ни один из ее TV-out чипов под Linux, по причине технологии лицензированной ими у Macrovision.

СТАТУС ПОДДЕРЖКИ TV-OUT ДЛЯ КАРТ ATI ПОД LINUX

- ATI Mach64: поддерживается GATOS.

- ASIC Radeon VIVO: поддерживается GATOS.

- Radeon и Rage128: поддерживается MPlayer! Смотрите разделы VESA драйвер и VIDIX.

- Rage Mobility P/M, Radeon, Rage 128, Mobility M3/M4: поддерживается atitvout.

Для других карт просто используйте VESA драйвер, без VIDIX. Конечно, требуется мощный CPU.

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

### nVidia

Во-первых, вы ДОЛЖНЫ скачать закрытые драйверы с . Я не буду описывать процесс установки и настройки, поскольку это выходит за рамки данной документации.

После того, как XFree86, XVideo, и 3D ускорение заработает правильно, отредактируйте раздел Device для вашей карты в файле `XF86Config`, в соответствии с указанным ниже примером (адаптируйте к вашей карте/TV):

    Section "Device"
            Identifier      "GeForce"
            VendorName      "ASUS"
            BoardName       "nVidia GeForce2/MX 400"
            Driver          "nvidia"
            #Option         "NvAGP" "1"
            Option          "NoLogo"
            Option          "CursorShadow"  "on"

            Option          "TwinView"
            Option          "TwinViewOrientation" "Clone"
            Option          "MetaModes" "1024x768,640x480"
            Option          "ConnectedMonitor" "CRT, TV"
            Option          "TVStandard" "PAL-B"
            Option          "TVOutFormat" "Composite"
    EndSection

Конечно же важная часть - это TwinView.

### NeoMagic

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

- Чип аналогового кодера: Сообщалось, что надежный TV выход можно получить, используя `-vo fbdev` или `-vo fbdev2`. Вам требуется иметь vesafb скомпилированный в вашем ядре и передать следующие параметры в командной строке ядра: `append="video=vesafb:ywrap,mtrr" vga=791`. Вам следует запустить X, затем переключитесь в консольный режим при помощи, например, Ctrl Alt F1. Если вы не запустите X до запуска MPlayer в консоли, видео станет медленным и дрожащим[choppy] (объяснения приветствуются). Залогиньтесь в консоли и запустите следующую команду:

      clear; mplayer -vo fbdev -zoom -cache 8192 dvd://

  Теперь вы должны увидеть фильм, запущенный в консольном режиме, заполняющий примерно половину LCD экрана вашего ноутбука. Для переключения в TV нажмите Fn F5 три раза. Тестировался на Tecra 8000, 2.6.15 ядре с vesafb, ALSA v1.0.10.

- Chrontel 70xx чип кодирования: Найден на IBM Thinkpad 390E и, возможно, других Thinkpad или ноутбуках.

  Необходимо использовать `-vo vesa:neotv_pal` для PAL или `-vo vesa:neotv_ntsc` для NTSC. Это даст TV выход, работающий в следующих 16 bpp и 8 bpp режимах:

  - NTSC 320x240, 640x480 and maybe 800x600 too.

  - PAL 320x240, 400x300, 640x480, 800x600.

  Режим 512x384 не поддерживается в BIOS. Вы должны масштабировать изображение в другое разрешение для задействования TV выхода. Если вы видите изображение на экране в разрешении 640x480 или 800x600, но не 320x240 или другом меньшем разрешении, вам требуется заменить две таблицы в `vbelib.c`. Смотрите функцию vbeSetTV для подробностей. Пожалуйста, свяжитесь автором в этом случае.

  Известные проблемы: только VESA, не реализованы различные настройки, такие как яркость, контрастность, уровень черного, фильтр дрожания[flickfilter].