EO|RU|EN

GenReS 0.9

Плагин для Mozilla/Firefox

Для компиляции необходимо

gcc
gxx
gmake
mozilla-dev

Для полной функциональности необходимо

perl
gtk2-perl
MPlayer
ElphelOgm

Сборка

make genres.so

Установка

В системные каталоги:
make install
В домашний каталог:
make local-install
После чего для активизации плагина перезапустите браузер или введите адрес "about:plugins" (документы использующие плагин должны быть закрыты).

Для архитектуры i386 доступны скомпилированные пакеты для Дебиана в разделе файлов.

Технические подробности

Плагин использует XEmbed окно и никак не обрабатывает события от клавиатуры и мыши, они просто идут напрямую в браузер, всё что нужно можно делать через javascript, используя стандартные возможности, которые уже есть в mozilla для элементов html документов.
Использование NPObject позволяет иметь неограниченное число переменных и функций объекта EMBED не сообщая о них заранее.
В зависимости от mime-type запускается скрипт "~/.mozilla/genres/<mime-type>".
Плагин передаёт данные от браузера в управляющий скрипт, скрипт их интерпретирует, запускает проигрыватель и передаёт ему данные.
Данные от проигрывателя через скрипт передаются обратно плагину.
Данные между плагином и скриптом передаются в формате: переменная=значение\n .
На текущий момент во внешнюю программу передаются все параметры тега embed, идентификатор окна для встраивания и URL документа для преобразования относительных ссылок в абсолютные.
Когда всё готово для отображения в скрипт посылается run=1.
По команде run=0 скрипт должен остановить проигрыватель и завершиться .
Управляющий скрипт для mplayer написан на perl и как альтернатива на shell (урезанный вариант).
Perl-скрипт требует threads(нити) (могут быть выключены в некоторых дистрибутивах linux).
До run=1 скрипт получает значения всех параметров тега embed
сейчас он понимает:
Cтатические параметры
href - url файла или потока
lowres - параметр прореживания для ускоренного DCT (0-3)
width - ширина окна
loop - повтор проигрывания (0 или не указано - бесконечно)
frameskip - пропуск n кадров из каждых n+1
fps - частота кадров
rotate=0|90|180|270 - угол поворота изображения по часовой стрелке в градусах
mirror=true|false - зеркальносимметричное отображение относительно вертикальной оси
flip=true|false - то же относительно горизонтали; установка flip и mirror одновременно эквивалентна rotate=180
Динамически изменяемые переменные
pause=1 или play=0 - приостановить проигрывание
pause=0 или play=1 - продолжить проигрывание
run=1 - запустить плеер если он прекратил работу (по ошибке или концу файла)
run=0 - завершить плеер
save - запустить mencoder вместо mplayer
save=ask - всегда спрашивать имя файла для записи
save=auto - не спрашивать если пользователь укажет в первый раз
href|src - смена файла для проигрывания
По приходу данных от плеера они передаются в переменные объекта и становятся доступны из javascript. При этом если задана соответствующая функция с именем "on<имя переменной>", она будет вызвана.


В каталоге example есть html-документ, демонстрирующий возможности плагина, показывающий видео 2048х1536 с прокруткой скроллбарами и тасканием за саму картинку.
К нему надо файл с видео 'default.avi' или заменить URL на какой нибудь другой.

Список принимаемых mime-типов браузер запрашивает только в первый запуск после установки плагина, поэтому при изменении состава каталога управляющих скриптов нужно переустановить скрипт (удалить genres.so, перезапустить браузер, восстановить genres.so, снова перезапустить браузер).

TODO

Определение JS-функций из управляющего скрипта