Страница 4 из 6
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 12.03.2011 20:47:21
coyot.rush
дык , я его под размер потока и не подгоняю, а только сохраняю соотношение сторон и масштабирую относительно области вывода. Не люблю, когда размер программы скачет от файла к файлу.
Код: Выделить всё
// =======================================================
// 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 Aspect
http://lists.mplayerhq.hu/pipermail/mplayer-dev-eng/2001-September/001431.htmlHere'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 возникают артефакты

+ дополнительная нагрузка на процессор
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 12.03.2011 22:22:29
minoshi
видел я этот текст, но в том то и дело, что это не работает (по крайней мере у меня в линуксе) - при попытке изменить размер окна соотношение сторон все-равно нарушается. Поэтому я все-таки остановился на "велосипеде в виде собственной процедуры маштабирования"

Код: Выделить всё
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 отказался (посмотрим , что получится)
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 12.03.2011 22:35:08
coyot.rush
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_Mplayermedia-video/mplayer-uau (multimedia overlay)
Слепки
git://repo.or.cz/mplayer.git Этот форк обладает рядом полезных возможностей:
1. Многопоточный ffmpeg.
2. Возможность изменить настройки без продолжения воспроизведения.
3. Поддержка внешних глав матрёшки.
4. Поддержка изданий (-edition) матрёшки, commit.
5. Возможность сборки с разделяемыми библиотеками ffmpeg.
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 12.03.2011 22:47:36
debi12345
в 11 серии от tspaser отказался (посмотрим , что получится)
Мартин активно дописывает OpenGL GUI-бэкэнд ( наряду с "X" и "GDI" ) - отчасти чтобы отрисовка не тормозила в принципе. Другое дело, что OpenGL в Выни нередко требует напильника.
ПС:
Обо всех тормозах и прочих нежелательных явлениях,требующих всяких хитрых маневров, желательно активно "стучать" Мартину - всегда есть место для оптимизации

Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 12.03.2011 22:52:57
coyot.rush
в 11 серии от tspaser отказался (посмотрим , что получится)
У меня осталась старая ревизия без tspaser всё работает на ура

соотношение сторон не меняет
PS: MPlayer SVN-r32967-snapshot-4.4.3 (C) 2000-2011 MPlayer Team
Добавлено спустя 2 минуты 50 секунд:Другое дело, что OpenGL в Выни нередко требует напильника.
MS вреде даже пыталась открестится от поддержки этого стандарта?
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 10:30:12
minoshi
текущий срез программы
(версия 11.23)Из нового:
-сохранение настроек
-windows-версия уже содержит mplayer. Пока что, при первом запуске нужно прописать путь к файлу mplayer_portable/MPlayer.exe в "Настройках" - "Общие". По линукс-версии - ждем результаты от Coyot.Rush
-все открываем в одном окне (работы продолжаются)
Из нового в класс-обертке :
- веб-камера
- начальные работы по DVD
- возможность снимать скриншоты
- автопауза при просмотре онлайн-ресурсов в случае нехватки кеша (пока без libc.kill)
Интерфейс:
- в отдельные окна вынесены окно сообщений и окно справки
- всплывающее меню
- возможность добавлять веб-камеру в плей-лист
- появились значки на кнопках.
Добавлено спустя 2 минуты 47 секунд:Уважаемый coyot.rush !По новой перенес Ваш код по ТВ-тюнеру, прошу отписаться - заработал он или нет (своего пока по-прежнему нет).
Добавлено спустя 1 минуту 28 секунд:coyot.rush писал(а):в 11 серии от tspaser отказался (посмотрим , что получится)
У меня осталась старая ревизия без tspaser всё работает на ура

соотношение сторон не меняет
PS: MPlayer SVN-r32967-snapshot-4.4.3 (C) 2000-2011 MPlayer Team
если не трудно скиньте, пожалуйста, эту версию сюда или на мой е-майл
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 15:07:31
coyot.rush
По новой перенес Ваш код по ТВ-тюнеру, прошу отписаться - заработал он или нет (своего пока по-прежнему нет).
Под Linux работает
если не трудно скиньте, пожалуйста, эту версию сюда или на мой е-майл
Хочу сначала поэкспериментировать с разными дистрибутивами Lunux.
Бегло посмотрел код пока у меня такое предложение использовать 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, раньше им не пользовался

Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 18:57:03
minoshi
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, раньше им не пользовался

это да

кстати, значки, представленные в программе отправил Мартину, тот вроде пообещал включить в транк 4407
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 20:13:00
coyot.rush
Логотип для xelplayer, для замены стандартного MSEIDE
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 20:26:24
debi12345
Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно MPlayer-а ?
Спрашиваю, чтобы понять - сможет ли в текущем состоянии быть релаизовано упрвление от инфракрасного пульта.
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 21:04:31
coyot.rush
Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно 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;
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 21:32:31
minoshi
debi12345 писал(а):Вопрос: сабжевый фронтэнд перенапрявляет ли нажатия клавиатуры при фокусе основного окна в окно MPlayer-а ?
Спрашиваю, чтобы понять - сможет ли в текущем состоянии быть релаизовано упрвление от инфракрасного пульта.
Пока нет

Самому хочется понять как это сделать т.к. навигация в меню ДВД пока не реализовано
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 22:15:18
coyot.rush
Пока нет

Самому хочется понять как это сделать т.к. навигация в меню ДВД пока не реализовано
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
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 22:54:40
debi12345
В принципе, генерировать субкоманды 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;
Re: Класс-обертка для mplayer под MSE и XELPLAYER
Добавлено: 14.03.2011 23:22:36
minoshi
руки все не дойдут
пока больше классу внимания уделяю - чего-то он стал много pipebroken выдавать и вот dvd-меню кумекаю
Добавлено спустя 9 минут 35 секунд:а вот по навигации решил :
из документации mplayer
Код: Выделить всё
dvdnav <button_name>
Press the given dvdnav button.
up
down
left
right
menu
select
prev
mouse
тут другой прикол

при выборе определенных видеовыходов (параметр -vo), например gl2, результаты навигации не видны

хотя все работает
