Класс-обертка для mplayer под MSE и XELPLAYER

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Стоит ли предложить сие чудо программерской мысли Мартину для включения в MSE?

Опрос закончился 04.12.2010 10:56:32

1.Да
9
82%
2.Нет
2
18%
 
Всего голосов : 11

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 12.03.2011 21:47:21

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

Код: Выделить всё
// =======================================================
//               resize video out
// =======================================================
procedure tmainfo.resizevideo(screenwidth, screenheight : integer);
var r : real;
    t : integer;
begin
  if screenheight = 0 then exit;
   
  ww_videoout.top := 0;
  ww_videoout.left := 0;
  ww_videoout.height := s_video.height;
  ww_videoout.width:=s_video.width;
  if ber_1.value = true then  r := screenwidth / screenheight;
  if ber_2.value = true then  r := 4 / 3;
  if ber_3.value = true then  r := 16 / 9;

  ww_videoout.width  := round(ww_videoout.height * r);

  if ww_videoout.width < s_video.width
     then ww_videoout.left := (s_video.width - ww_videoout.width) div 2
     else begin
           ww_videoout.width := s_video.width;
           ww_videoout.height := round(ww_videoout.width / r);
           ww_videoout.top := (s_video.height - ww_videoout.height) div 2;
        end;
end;


Mplayer Aspecthttp://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2001-September/001431.html
Here's how I've implemented aspect ratio processing.

First off - if you use the -x and -y options to mplayer then the sizes
that you give are used with no further adjustment. This ensures that
you can always get exactly the size that you want.

The -x and -y options are now honoured with -fs too. The image will
set to the size you request and centred on the screen.

Some examples:

mplayer -x 640 -y 480 filename.mpg - 640x480 pixel window used
mplayer -x 640 -y 480 -fs filename.mpg - 640x480 image centred fullscreen
mplayer -x 1 -y 1 filename.mpg - shown pixel-for-pixel same size

If you do not specify the -x or -y options, then aspect ratio
processing is done to determine the correct size.

To do this, the code needs to know the physical aspect ratio of the
source video, together with the physical aspect ratio of your output
display. That is: the width:height ratio represented by the x and y
pixels in the input file or on the output display.

By default both are set to 4:3, except for MPEG input files in "aspect
3" - where 16:9 is used.

The -aspect and -displayaspect parameters can be used to explictly
pass the aspect ratio of the source video and output display. You
might use these if you have a non-MPEG widescreen file, or an unusual
display mode in X.

In full-screen mode, the code will maximize the image size whilst
maintaining the physical aspect ratio. In non-full-screen mode, the x
size will be scaled to correct the aspect ratio.

The -xy option may be used to scale the overall picture size.
Fractional scaling can be used to reduce the picture size.

Some examples:

mplayer file.mpg - assumes source and destination aspect is 4:3,
mplayer -aspect 16:9 file.mpg - assumes source is 16:9, destination 4:3.
mplayer -aspect 16:9 -fs file.mpg - scales x to be full display width, y is worked
out to provide the right 16:9 image size
mplayer -displayaspect 16:9 file.mpg - you've got a widescreen monitor... <jealous>


Теперь вопрос зачем изобретать велосипед в виде собственной процедуры маштабирования и tspacer Еще раз повторюсь из-за tspacer возникают артефакты :!: + дополнительная нагрузка на процессор
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение minoshi » 12.03.2011 23:20:58

видел я этот текст, но в том то и дело, что это не работает (по крайней мере у меня в линуксе) - при попытке изменить размер окна соотношение сторон все-равно нарушается. Поэтому я все-таки остановился на "велосипеде в виде собственной процедуры маштабирования" :)

Код: Выделить всё
To do this, the code needs to know the physical aspect ratio of the
source video, together with the physical aspect ratio of your output
display. That is: the width:height ratio represented by the x and y
pixels in the input file or on the output display.


при изменении соотношение сторон twindowwidget нарушается, так ведь :)

p.s.
Вообще при написании я периодически сталкиваюсь с непонятками, особенно в windows. На основном месте работы есть три машины с виндой. Ставили их с одного диска, обновляются с одного сервера обновлений, так вот на одной из них xelplayer 10 серии наглухо вис при переходе на следующий видео-клип, Как позже оказалось глюк возникал при попытке выполнить twindowwidget.visible := false. Пришлось частично переписать код.

Вот и приходится изобретать такие велосипеды, дабы сохранить побольше кросплатформенного кода

Добавлено спустя 1 минуту 31 секунду:
в 11 серии от tspaser отказался (посмотрим , что получится)
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 12.03.2011 23:35:08

To do this, the code needs to know the physical aspect ratio of the
source video, together with the physical aspect ratio of your output
display. That is: the width:height ratio represented by the x and y
pixels in the input file or on the output display.

2001-September
наверняка исправили
Недавно нашел форк mplayer http://ru.gentoo-wiki.com/wiki/HOWTO_Mplayer
media-video/mplayer-uau (multimedia overlay)
Слепки git://repo.or.cz/mplayer.git Этот форк обладает рядом полезных возможностей:
1. Многопоточный ffmpeg.
2. Возможность изменить настройки без продолжения воспроизведения.
3. Поддержка внешних глав матрёшки.
4. Поддержка изданий (-edition) матрёшки, commit.
5. Возможность сборки с разделяемыми библиотеками ffmpeg.
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение debi12345 » 12.03.2011 23:47:36

в 11 серии от tspaser отказался (посмотрим , что получится)

Мартин активно дописывает OpenGL GUI-бэкэнд ( наряду с "X" и "GDI" ) - отчасти чтобы отрисовка не тормозила в принципе. Другое дело, что OpenGL в Выни нередко требует напильника.

ПС:
Обо всех тормозах и прочих нежелательных явлениях,требующих всяких хитрых маневров, желательно активно "стучать" Мартину - всегда есть место для оптимизации :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 12.03.2011 23:50:07

в 11 серии от tspaser отказался (посмотрим , что получится)

У меня осталась старая ревизия без tspaser всё работает на ура :wink: соотношение сторон не меняет :!: :!: :!:
PS: MPlayer SVN-r32967-snapshot-4.4.3 (C) 2000-2011 MPlayer Team

Добавлено спустя 2 минуты 50 секунд:
Другое дело, что OpenGL в Выни нередко требует напильника.

MS вреде даже пыталась открестится от поддержки этого стандарта?
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение minoshi » 14.03.2011 11:25:57

текущий срез программы (версия 11.23)

Из нового:
-сохранение настроек
-windows-версия уже содержит mplayer. Пока что, при первом запуске нужно прописать путь к файлу mplayer_portable/MPlayer.exe в "Настройках" - "Общие". По линукс-версии - ждем результаты от Coyot.Rush
-все открываем в одном окне (работы продолжаются)

Из нового в класс-обертке :
- веб-камера
- начальные работы по DVD
- возможность снимать скриншоты
- автопауза при просмотре онлайн-ресурсов в случае нехватки кеша (пока без libc.kill)

Интерфейс:
- в отдельные окна вынесены окно сообщений и окно справки
- всплывающее меню
- возможность добавлять веб-камеру в плей-лист
- появились значки на кнопках.

Добавлено спустя 2 минуты 47 секунд:
Уважаемый coyot.rush !

По новой перенес Ваш код по ТВ-тюнеру, прошу отписаться - заработал он или нет (своего пока по-прежнему нет).

Добавлено спустя 1 минуту 28 секунд:
coyot.rush писал(а):
в 11 серии от tspaser отказался (посмотрим , что получится)

У меня осталась старая ревизия без tspaser всё работает на ура :wink: соотношение сторон не меняет :!: :!: :!:
PS: MPlayer SVN-r32967-snapshot-4.4.3 (C) 2000-2011 MPlayer Team

если не трудно скиньте, пожалуйста, эту версию сюда или на мой е-майл
Вложения
screenshot.jpg
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 14.03.2011 16:07:31

По новой перенес Ваш код по ТВ-тюнеру, прошу отписаться - заработал он или нет (своего пока по-прежнему нет).

Под Linux работает :)

если не трудно скиньте, пожалуйста, эту версию сюда или на мой е-майл

Хочу сначала поэкспериментировать с разными дистрибутивами Lunux. 8)

Бегло посмотрел код пока у меня такое предложение использовать Tag для определения какая кнопка нажата
Код: Выделить всё
procedure tmenufo.on_choose_source(const sender: TObject);
begin
  if not mainfo.s_playlist.visible
          then begin
               mainfo.s_playlist.visible := true;
                  mainfo.l_video.width := mainfo.width - mainfo.s_playlist.width;
               mainfo.on_resize(sender);
               end;
  mainfo.tw_playlist.activepageindex := (sender as trichstockglyphbutton).tag;
end;


На счет передачи плейлиста через временный файл, думаю это не лучшая идея для пользователей SSD дисков, они будут не рады, я предлагал вариант когда данные передаются в оперативной памяти

появились значки на кнопках

Интересный виджет trichstockglyphbutton, раньше им не пользовался :roll:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение minoshi » 14.03.2011 19:57:03

coyot.rush писал(а):Под Linux работает :)


отлично

coyot.rush писал(а):Бегло посмотрел код пока у меня такое предложение использовать Tag для определения какая кнопка нажата
Код: Выделить всё
procedure tmenufo.on_choose_source(const sender: TObject);
begin
  if not mainfo.s_playlist.visible
          then begin
               mainfo.s_playlist.visible := true;
                  mainfo.l_video.width := mainfo.width - mainfo.s_playlist.width;
               mainfo.on_resize(sender);
               end;
  mainfo.tw_playlist.activepageindex := (sender as trichstockglyphbutton).tag;
end;


принято

coyot.rush писал(а):На счет передачи плейлиста через временный файл, думаю это не лучшая идея для пользователей SSD дисков, они будут не рады, я предлагал вариант когда данные передаются в оперативной памяти


с пайпами пока еще знакомлюсь, толком не въехал в тему

coyot.rush писал(а):Интересный виджет trichstockglyphbutton, раньше им не пользовался :roll:


это да :) кстати, значки, представленные в программе отправил Мартину, тот вроде пообещал включить в транк 4407
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 14.03.2011 21:13:00

Логотип для xelplayer, для замены стандартного MSEIDE
xelplayer_logo.zip
логотип xelplayer
(64.28 КБ) Скачиваний: 854
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение debi12345 » 14.03.2011 21:26:24

Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно MPlayer-а ?
Спрашиваю, чтобы понять - сможет ли в текущем состоянии быть релаизовано упрвление от инфракрасного пульта.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 14.03.2011 22:04:31

Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно MPlayer-а ?
Спрашиваю, чтобы понять - сможет ли в текущем состоянии быть релаизовано упрвление от инфракрасного пульта


Код: Выделить всё
// =======================================================
//               key events
// =======================================================
procedure tmainfo.on_keyup(const sender: twidget; var ainfo: keyeventinfoty);
begin
  if (ainfo.key = key_F10) then close;
  if ainfo.key = key_Escape then
     if fullscreen then on_fullscreen(sender);
  if (ainfo.key = key_Slash)  then on_showvideosettings(sender);   
  if (ainfo.key = key_Delete) then on_deleteformplaylist(sender);
  if (ainfo.key = key_Return) then begin
                                     player.tracknum := sg_playlist.row;
                            player.volume := round(mainfo.sl_volume.value * 100);
                              player.play;
                           end;         
  if (ainfo.key = key_F) then on_fullscreen(sender);
  if (ainfo.key = key_Z) then on_prev(sender);
  if (ainfo.key = key_X) or (ainfo.key = key_Space) then on_play(sender);
  if (ainfo.key = key_C) then on_stop(sender);
  if (ainfo.key = key_V) then on_next(sender);
  if (ainfo.key = key_R) then begin
                             be_repeatplaylist.value := not be_repeatplaylist.value;
                             player.repeatplaylist := be_repeatplaylist.value;
                         end;
  if (ainfo.key = key_S) then begin
                             be_shufle.value := not be_shufle.value;
                             player.shuffleplaylist := be_shufle.value;
                         end;
  if (ainfo.key = key_D) then begin
                             be_nexttrackallow.value := not be_nexttrackallow.value;
                             player.PlayNextTrackAllow := be_nexttrackallow.value;
                         end;
  if (ainfo.key = key_P) then on_show_hide_sources(sender);      
  if (ainfo.key = key_M) then on_mute(sender);
  if (ainfo.key = key_Left)  then player.position := player.position - 5;
  if (ainfo.key = key_Right) then player.position := player.position + 5;
  if (ainfo.key = key_Up) then
                            if sl_volume.value < 1 then
                               begin
                          sl_volume.value := sl_volume.value + 0.05;
                          player.volume := round(sl_volume.value * 100);
                        end;
  if (ainfo.key = key_Down) then
                            if sl_volume.value > 0 then
                               begin
                          sl_volume.value := sl_volume.value - 0.05;
                          player.volume := round(sl_volume.value * 100);
                        end;
end;
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение minoshi » 14.03.2011 22:32:31

debi12345 писал(а):Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно MPlayer-а ?
Спрашиваю, чтобы понять - сможет ли в текущем состоянии быть релаизовано упрвление от инфракрасного пульта.


Пока нет :( Самому хочется понять как это сделать т.к. навигация в меню ДВД пока не реализовано
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение coyot.rush » 14.03.2011 23:02:05

Пока нет :( Самому хочется понять как это сделать т.к. навигация в меню ДВД пока не реализовано


Код: Выделить всё
fterm.writestrln
c кодом клавиши полученной в on_keyup :?:

Добавлено спустя 13 минут 13 секунд:
Из DC
Код: Выделить всё
//key // xterm default bindings
  CINTR    = 003; // ^C
  CQUIT    = 034; // ^\
  CERASE   = 177; // ^?
  CKILL    = 025; // ^U
  CEOF     = 004; // ^D
  CSTART   = 021; // ^Q
  CSTOP    = 023; // ^S
  CSUSP    = 032; // ^Z
  CREPRINT = 022; // ^R
  CWERASE  = 027; // ^W
  CLNEXT   = 026; // ^V
  CDISCARD = 017; // ^O
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение debi12345 » 14.03.2011 23:44:59

В принципе, генерировать субкоманды MPlayer-а (player.position,.. ) - вариант ничуть не хуже, чем передавать ему коды клавиш. Даже лучше (гибче) - потому что можно сосздпть страницу настройки привязок "клавиатурный шоткат=субкоманда", с умолчаниями, взятыми из текущей реализации MPlayer-а. А настроить LIRC на посылку клавиш в окно фронтэнда по нажатиям клавиш на пульте - минутное дело.

Добавлено спустя 9 минут 41 секунду:
А почему код не оптимизируете ?

Код: Выделить всё
procedure tmainfo.on_keyup(const sender: twidget; var ainfo: keyeventinfoty);
begin
  if (ainfo.key = key_F10) then close;
  if ainfo.key = key_Escape then
     if fullscreen then on_fullscreen(sender);
  if (ainfo.key = key_Slash)  then on_showvideosettings(sender);   
  if (ainfo.key = key_Delete) then on_deleteformplaylist(sender);
  if (ainfo.key = key_Return) then begin
                                     player.tracknum := sg_playlist.row;
                            player.volume := round(mainfo.sl_volume.value * 100);
                              player.play;


можно упростить с WITH & CASE

Код: Выделить всё
with ainfo,player,mainfo do begin
  case key of
    key_F10: close;
    key_Escape: if fullscreen then on_fullscreen(sender);
    key = key_Slash: on_showvideosettings(sender);
    key_Delete: on_deleteformplaylist(sender);
    key_Return:  begin
       tracknum := sg_playlist.row;
       volume := round(sl_volume.value * 100);
       play;
      [..]
    end;
  [..]
end;
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Класс-обертка для mplayer под MSE и XELPLAYER

Сообщение minoshi » 15.03.2011 00:13:01

руки все не дойдут :)

пока больше классу внимания уделяю - чего-то он стал много pipebroken выдавать и вот dvd-меню кумекаю

Добавлено спустя 9 минут 35 секунд:
а вот по навигации решил :

из документации mplayer
Код: Выделить всё
dvdnav <button_name>
    Press the given dvdnav button.
        up
        down
        left
        right
        menu
        select
        prev
        mouse


тут другой прикол :) при выборе определенных видеовыходов (параметр -vo), например gl2, результаты навигации не видны :) хотя все работает :)
Аватара пользователя
minoshi
постоялец
 
Сообщения: 279
Зарегистрирован: 17.05.2008 21:23:38

Пред.След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru