Sophie

Sophie

distrib > Mandriva > current > i586 > media > main-updates > by-pkgid > a42e22ddf1d70fb02e9f62289d71cafa > files > 724

mplayer-doc-1.0-1.rc4.0.r31086.3.1mdv2010.2.i586.rpm

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>7.3. DGA</title><link rel="stylesheet" href="default.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"><link rel="home" href="index.html" title="MPlayer - Медиа Проигрыватель"><link rel="up" href="video.html" title="Глава 7. Устройства вывода видео"><link rel="prev" href="xv.html" title="7.2. Xv"><link rel="next" href="sdl.html" title="7.4. SDL"><link rel="preface" href="howtoread.html" title="Как читать эту документацию"><link rel="chapter" href="intro.html" title="Глава 1. Введение"><link rel="chapter" href="install.html" title="Глава 2. Установка"><link rel="chapter" href="usage.html" title="Глава 3. Использование"><link rel="chapter" href="cd-dvd.html" title="Глава 4. Использование CD/DVD"><link rel="chapter" href="tv.html" title="Глава 5. TV"><link rel="chapter" href="radio.html" title="Глава 6. Радио"><link rel="chapter" href="video.html" title="Глава 7. Устройства вывода видео"><link rel="chapter" href="ports.html" title="Глава 8. Портинг"><link rel="chapter" href="mencoder.html" title="Глава 9. Основы использования MEncoder"><link rel="chapter" href="encoding-guide.html" title="Глава 10. Кодирование с MEncoder"><link rel="chapter" href="faq.html" title="Глава 11. Часто Задаваемые вопросы"><link rel="appendix" href="bugreports.html" title="Приложение A. Как сообщать об ошибках"><link rel="appendix" href="skin.html" title="Приложение B. Формат скинов MPlayer"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">7.3. DGA</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="xv.html">Пред.</a> </td><th width="60%" align="center">Глава 7. Устройства вывода видео</th><td width="20%" align="right"> <a accesskey="n" href="sdl.html">След.</a></td></tr></table><hr></div><div class="sect1" title="7.3. DGA"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dga"></a>7.3. DGA</h2></div></div></div><p title="ПРЕАМБУЛА"><b>ПРЕАМБУЛА. </b>
Этот документ пытается сказать несколько слов о том, что такое DGA в целом и
что можт сделать DGA драйвер  для <span class="application">MPlayer</span>
(а что нет).
</p><p title="ЧТО ТАКОЕ DGA"><b>ЧТО ТАКОЕ DGA. </b>
<acronym class="acronym">DGA</acronym> это сокращение от <span class="emphasis"><em>Direct Graphics
Access[Прямой Доступ к Графике]</em></span>  и означает обход
программами X сервера и прямое изменение ими памяти фреймбуфера.
Говоря техническим языком, это происходит при помощи отображения[mapping]
памяти фреймбуфера в адресное пространство вашего процесса. Это позволяется
ядром, только если у вас есть привилегии суперпользователя. Вы можете
получить их либо войдя в систему под именем
<code class="systemitem">root</code>, либо установив SUID бит на
исполняемый файл <span class="application">MPlayer</span> (<span class="bold"><strong>не
рекомендуется</strong></span>).
</p><p>
Есть две версии DGA: DGA1 используется XFree 3.x.x и DGA2, появившийся в XFree 4.0.1.
</p><p>
DGA1 предоставляет только прямой доступ в фреймбуферу, как описано выше.
Для переключения видеорежимов придется обратиться в расширению XVidMode.
</p><p>
DGA2 объединяет возможности расширения XVidMode и, к тому же, позволяет изменять
глубину цвета отображения. Таким образом, вы можете,работая, в основном,
в X с 32-х битной глубиной цвета, переключиться на глубину 15 бит и наоборот.
</p><p>
Однако DGA имеет некоторые недостатки. Похоже, оно каким-то образом зависит от
используемого графического чипа и реализации видеодрайвера сервера X,
управляющего этим чипом. Так что он работает не на всех системах.
</p><p title="УСТАНОВКА ПОДДЕРЖКИ DGA ДЛЯ MPLAYER"><b>УСТАНОВКА ПОДДЕРЖКИ DGA ДЛЯ MPLAYER. </b>
Во-первых, убедитесь, что X загружает расширение DGA, смотрите в
<tt class="filename">/var/log/XFree86.0.log</tt>:

</p><pre class="programlisting">(II) Loading extension XFree86-DGA</pre><p title="УСТАНОВКА ПОДДЕРЖКИ DGA ДЛЯ MPLAYER">

Смотрите, <span class="bold"><strong>крайне рекомендуется</strong></span> XFree86 4.0.x или старше!
DGA драйвер программы <span class="application">MPlayer</span> определяется автоматически скриптом
<tt class="filename">./configure</tt>, или можете принудительно указать его использование
опцией <tt class="option">--enable-dga</tt>.
</p><p>
Если драйвер не смог переключиться на меньшее разрешение, поэкспериментируйте с
опциями <tt class="option">-vm</tt> (только для X 3.3.x), <tt class="option">-fs</tt>,
<tt class="option">-bpp</tt>, <tt class="option">-zoom</tt> чтобы найти видеорежим
в который поместиться фильм. Конвертера Пока что нет :(
</p><p>
Получите права <code class="systemitem">root</code>. DGA требует
права root для прямой записи в видеопамять. Если хотите запускать от имени обычного
пользователя, установите бит SUID на <span class="application">MPlayer</span>:

</p><pre class="screen">
chown root <em class="replaceable"><code>/usr/local/bin/mplayer</code></em>
chmod 750 <em class="replaceable"><code>/usr/local/bin/mplayer</code></em>
chmod +s <em class="replaceable"><code>/usr/local/bin/mplayer</code></em>
</pre><p>

Теперь это работает и под обычным пользователем.
</p><div class="caution" title="Риск безопасности" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Риск безопасности</h3><p>
В этом заключается <span class="bold"><strong>большой</strong></span> риск безопасности!
<span class="bold"><strong>Никогда</strong></span> не делайте этого на сервере или комппьютере,
к которому имеют доступ другие люди, т.к. они могут получить права root через
<span class="application">MPlayer</span> с битом SUID.
</p></div><p>
Теперь используйте опцию <tt class="option">-vo dga</tt>, и вперед! (мы надеемся :)
Можете попробовать, работает ли у вас опция <tt class="option">-vo sdl:driver=dga</tt>!
Это намного быстрее!
</p><p title="ПЕРЕКЛЮЧЕНИЕ РЕЖИМОВ"><a name="dga-modelines"></a><b>ПЕРЕКЛЮЧЕНИЕ РЕЖИМОВ. </b>
DGA драйвер позволяет переключать режимы (менять разрешение) выходного сигнала.
Это позволяет избежать (медленного) программного масштабирования и в то же
время предоставить полноэкранное изображение. В идеале следует переключаться в
режим с таким же (необязательно с сохранением пропорций) как у видеоданных разрешением,
но X сервер позволяет переключаться в режимы, предопределенные в
<tt class="filename">/etc/X11/XF86Config</tt>
(<tt class="filename">/etc/X11/XF86Config-4</tt> для XFree 4.X.X соответственно).
Они определяются так называемыми моделайнами[modelines] и зависят
возможностей вашей видеокарты. X сервер читает этот файл при старте и
отключает режимы, недопустимые для вашего оборудования. Вы можете определить
какие режимы остались, посмотрев лог файл X11. Он может быть найден в:
<tt class="filename">/var/log/XFree86.0.log</tt>.
</p><p>
Вот значения, про которые известно, что они работают с чипом Riva128 при
использовании X драйвера nv.o.
</p><pre class="programlisting">
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
</pre><p title="DGA &amp; MPLAYER"><b>DGA &amp; MPLAYER. </b>
DGA используется программой <span class="application">MPlayer</span> двумя способами:
можно указать SDL использовать его (<tt class="option">-vo sdl:driver=dga</tt>) и
с помощью DGA драйвера (<tt class="option">-vo dga</tt>). Все сказанное выше верно для обоих;
в следующих разделах будет рассказано как работает DGA драйвер для
<span class="application">MPlayer</span>.
</p><p title="ВОЗМОЖНОСТИ"><b>ВОЗМОЖНОСТИ. </b>
DGA запускается указанием <tt class="option">-vo dga</tt> в командной строке. По-умолчанию,
он пытается переключить режим с ближайшим к оригинальному видео разрешением.
Он преднамеренно игнорирует опции  <tt class="option">-vm</tt> и <tt class="option">-fs</tt>
(переключение видеорежимов и полноэкранный режим) - он всегда старается
занять как можно большую площадь экрана переключением видеорежима,
избегая таким образом использования дополнительных тактов CPU для
масштабирования изображения. Если выбранный режим вам не нравится, можете
принудительно указать использовать разрешение ближайшее к указанному вами опциями
<tt class="option">-x</tt> и <tt class="option">-y</tt>. При указании опции
<tt class="option">-v</tt>, DGA драйвер выведет, кроме множества других вещей, список
всех поддерживаемых режимов, указанных в <tt class="filename">XF86Config</tt>.
Имея DGA2 вы также можете указать использование определенной глубины цвета
при помощи опции <tt class="option">-bpp</tt>. Допустимыми значениями являются 15, 16, 24 и 32.
Зависит от оборудования, какие значения поддерживаются  аппаратно, а для каких необходимо
производить (возможно медленное) преобразование.
</p><p>

Если вам повезло иметь достаточно свободной памяти[offscreen memory], чтобы поместить
туда изображение целиком, DGA драйвер будет использовать двойную буферизацию,
что приведет к более плавному воспроизведению фильма. Он сообщит вам включена ли
двойная буферизация или нет.
</p><p>
Двойная буферизация означает, что каждый следующий кадр вашего фильма рисуется
в некоторую память[offscreen memory], пока отображается текущий кадр.
Когда следующий кадр готов, графическому чипу сообщается его расположение
в памяти, и чип просто выбирает оттуда данные для отображения.
В это время новыми видео данными заполняется другой участок буфера.
</p><p>
Двойная буферизация может быть задействована опцией
<tt class="option">-double</tt> и отключена при помощи
<tt class="option">-nodouble</tt>. В данный момент двойной буфер по-умолчанию отключен.
При использовании DGA драйвера, экранное отображение (OSD) работает только
с двойной буферизацией. Однако, включение двойной буферизации  может привести
к существенному снижению скорости (на моем K6-II+ 525 оно использует дополнительные
20% времени CPU!) в зависимости от реализации DGA для вашего оборудования.
</p><p title="ПРОБЛЕМЫ БЫСТРОДЕЙСТВИЯ"><b>ПРОБЛЕМЫ БЫСТРОДЕЙСТВИЯ. </b>

Проще говоря, DGA доступ к фреймбуферу должен быть настолько быстр, насколько
быстр используемый X11 драйвер c дополнительной выгодой[benefit] получения
полноэкранного изображения. Процентные значения скорости, выводимые
<span class="application">MPlayer</span>, должны интерпретироваться с некоторой
осторожностью, например, с драйвером X11 они не включают время, используемое
сервером X11 непосредственно для прорисовки. Подключите терминал к
последовательному порту и запустите <span class="command"><strong>top</strong></span>, чтобы
увидеть, что на самом деле происходит.
</p><p>
Проще говоря, ускорение, полученное от использования DGA относительно
'обычного' использования X11, сильно зависит от видео карты и того,
насколько хорошо оптимизирован модуль X11 для него.
</p><p>
Если у вас медленная система, лучше использовать глубину 15 или 16 бит,
поскольку это потребует половину пропускной способности памяти 32-х
битного дисплея.
</p><p>
Использование глубины 24 бита - хорошая идея, даже если ваша карта
аппаратно поддерживает только 32 бита, поскольку передается на 25%
меньше данных по сравнению с режимом 32/32.
</p><p>
Приходилось видеть, как некоторые AVI файлы воспроизводились на Pentium MMX 266.
AMD K6-2 CPU может работать начиная с 400 МГц и выше.
</p><p title="ИЗВЕСТНЫЕ ОШИБКИ"><b>ИЗВЕСТНЫЕ ОШИБКИ. </b>
Ну, по мнению некоторых разработчиков XFree, DGA - это немного монстр.
Они говорят, что лучше его не использовать. Его реализация не
безупречна для любого существующего драйвера XFree.
изъянов.
</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
  С XFree 4.0.3 и <tt class="filename">nv.o</tt> существует ошибка приводящая
  к странным цветам.
</p></li><li class="listitem"><p>
  ATI драйвер требует  неоднократного переключения режима после
  завершения использования DGA.
</p></li><li class="listitem"><p>
  Некоторые драйвера просто не в состоянии переключиться обратно в
  нормальный режим (используйте
  <span class="keycap"><b>Ctrl</b></span>+<span class="keycap"><b>Alt</b></span>+<span class="keycap"><b>Keypad +</b></span>
  и
  <span class="keycap"><b>Ctrl</b></span>+<span class="keycap"><b>Alt</b></span>+<span class="keycap"><b>Keypad -</b></span>
  для нормального переключения).
</p></li><li class="listitem"><p>
  Некоторые драйвера просто отображают странные цвета.
</p></li><li class="listitem"><p>
  Некоторые драйвера неверно сообщают о количестве памяти, которое они отобразили в
  адресное пространство процесса, так что vo_dga не будет использовать
  двойную буферизацию (SIS?).
</p></li><li class="listitem"><p>
  Некоторые драйвера, похоже, не могут сообщить  даже об одном верном режиме.
  В этом случае DGA рухнет, сообщая о невероятном режиме
  100000x100000 или о чем-нибудь похожем.
</p></li><li class="listitem"><p>
  OSD работает только с задействованным двойным буфером (иначе он моргает).
</p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="xv.html">Пред.</a> </td><td width="20%" align="center"><a accesskey="u" href="video.html">Уровень выше</a></td><td width="40%" align="right"> <a accesskey="n" href="sdl.html">След.</a></td></tr><tr><td width="40%" align="left" valign="top">7.2. Xv </td><td width="20%" align="center"><a accesskey="h" href="index.html">Начало</a></td><td width="40%" align="right" valign="top"> 7.4. SDL</td></tr></table></div></body></html>