MPC-BE forum

MPC-BE => Баг Репорт / The bug report => Архив / Archive => Тема начата: Evgeniy1990 от 11 января 2016, 23:38:22

Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 11 января 2016, 23:38:22
При воспроизведении видео файла, мы можем увеличить скорость только до 2х, вместо 4х, как раньше.
Аналогично и при воспроизведении аудио файлов - только до 2х.

Вывод: сейчас выше 2х скорость не увеличивается.

Идем дальше...

1. Открываем любой аудио файл, например . mp3
2. Увеличиваем скорость до 2х
3. после 2х еще только один раз увеличиваем скорость

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

Идем дальше... (обратное действие) - уменьшение скорости воспроизведения

1. Открываем любой аудио файл, например . mp3
2. Увеличиваем скорость до 2х
3. Уменьшаем скорость до 1х

В результате, плеер говорит нам, что скорость = 1х, но на самом деле это не так, это даже слышно и заметно

4. Уменьшаем скорость до 0.5х

В результате, скорость 0.5 = скорости 1.0х

5. Снова увеличиваем с 0.5х до 1.0х

В результате, скорость воспроизведения 1.0х = скорости 0.5х

И так далее...

Общий вывод: фактически, у нас поломка настолько сильная, что скорости воспроизведения не соответствуют тем, что показывает нам плеер + вдобавок еще и выше 2х скорость не увеличивается, а точнее увеличивается, но плеер это не показывает, так и оставляет 2.х
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 12 января 2016, 02:26:53
1 - с WASAPI выводом все отлично.
2 - с DS у меня проблемы только с понижением, после понижения если вернуть обратно на 1.0х то она медленнее, с повышением все нормально, у меня до 4.0х увеличивается. И - если оно и поломано, то тут вопросы к драйверам своей звуковушки возможно(тем более что если скорость меняется а проигрыватель не отображает - это значит что вызов функции задания скорости вернула ошибку - но в самом DS выводе скорость изменилась).
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: V0lt от 12 января 2016, 06:26:13
Это когда успело сломаться? У меня ускоряет до 4x (билд 1093).
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 12 января 2016, 10:19:11
Цитата: Aleksoid19781 - с WASAPI выводом все отлично.
2 - с DS у меня проблемы только с понижением, после понижения если вернуть обратно на 1.0х то она медленнее, с повышением все нормально, у меня до 4.0х увеличивается. И - если оно и поломано, то тут вопросы к драйверам своей звуковушки возможно(тем более что если скорость меняется а проигрыватель не отображает - это значит что вызов функции задания скорости вернула ошибку - но в самом DS выводе скорость изменилась).
Aleksoid1978:
1. С WASAPI - согласен, все в порядке, как при увеличении, так и при уменьшении и обратном увеличении
2. С DirectSound - беда и дело здесь вовсе не в драйверах к аудио картам.

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

Для сравнения:

WASAPI - при 4х, частота кадров видео = 119.87 FPS ~ 120 FPS
DirectSound - при 4х, частота кадров видео = 27, 43, 66 FPS, т.е. скачет, как сумасшедшая. аналогично и при 2х.

Б) Драйверы последних версий, тестировал на всех системах с XP по Windows 10 на разных аудио картах.

Если взять только новые системы с Win7 по Win10, то увеличение работает до 4х на любой аудиокарте, как при WASAPI, так и при DirectSound -аудио-рендерерах.

А вот на XP - странность, DirectSound может больше, плеер показывает только 2х, тот же ReClock без проблем выжимает аж до 8х.

В общем, согласен с тем, что проблема - именно с понижением скорости воспроизведения, если вернуть обратно на 1.0х, то это явно не 1.0х скорость воспроизведения.

Также проблемы с плавностью воспроизведения (с частотой кадров FPS) на DirectSound при скоростях 2х и 4х.
Она скачет, как безумная, то с 66 до 27, то с 27 на 44 и т.д. Такое чувство что вообще не работает синхронизация видео с аудио.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 12 января 2016, 10:26:19
1 - проверь в других проигрывателях. Если везде хорошо а у нас плохо - есть о чем призадуматься. Но что-то я в это не верю :)
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 12 января 2016, 10:43:17
Цитата: Aleksoid19781 - проверь в других проигрывателях. Если везде хорошо а у нас плохо - есть о чем призадуматься. Но что-то я в это не верю :)
У нас явно - нехорошо, особенно если использовать увеличенные скорости воспроизведения на DirectSound-аудио-рендерере.

Тут как бы, фактически, - два неприятных бага:

1. Некорректность воспроизведения, при уменьшении скоростей воспроизведения (например с 4х на 1х и т.д.)
2. Потеря плавности воспроизведения на 2х и 4х, при использовании DirectSound-аудио-рендерера.
[merge_posts_bbcode]Добавлено: 2016-01-12 10:43:17[/merge_posts_bbcode]

Цитата: V0ltЭто когда успело сломаться? У меня ускоряет до 4x (билд 1093).
Скажу сразу - достаточно давно уже.

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

Ведь я еще летом 2015 года заметил его.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 12 января 2016, 11:19:50
Так - проблему идентифицировал. Дело во встроенном аудио-декодере. Замена на LAV избавляет от проблемы.

Мы в нашем декодере не учитываем показатель dRate при расчете временных меток. Завтра уже гляну и думаю подправлю.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 12 января 2016, 11:25:50
Цитата: Aleksoid1978Так - проблему идентифицировал. Дело во встроенном аудио-декодере. Замена на LAV избавляет от проблемы.

Мы в нашем декодере не учитываем показатель dRate при расчете временных меток.
Аналогично и я заменил на LAV Audio и проблемы не стало.

Дело в фильтрах, а точнее все зависит от используемых аудио декодеров.

В разных плеерах они разные, следовательно в них проблемы может и не быть вовсе.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 12 января 2016, 15:34:43
Частично исправил в 1097.
Осталось понять почему при повышении скорости от значения меньше 1.0 до 1.0 скорость не восстанавливается полностью - это на DS выводе.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: V0lt от 12 января 2016, 18:22:11
Цитата: Aleksoid1978Частично исправил в 1097.
Абсолютно неправильное изменение.
(С) Evgeniy1990
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 12 января 2016, 21:02:55
Цитата: V0ltАбсолютно неправильное изменение.
(С) Evgeniy1990

V0lt, я собрал и проверил SVN-билд 1098 - в нем вообще нет никакой разницы, при использовании DirectSound-аудио-рендерера.

Алгоритм воспроизведения такой:

Условие: используется DirectSound Audio Renderer.

1. Запустил видео файл
2. Увеличил скорость с 1.0х до 1.2х

В результате, скорость так и осталась 1.0х

3. Еще раз увеличил скорость с 1.2х до 1.5х

В результате, плеер показывает 1.5х, но на самом деле - это 1.2.х, т.е. 24х1.2= 28.8

И так далее...

По сути, скорость воспроизведение начинает меняться только через 1 раз (один шаг).
Это естественно - неправильно, т.е. баг.

Прямое действие - скорость воспроизведения увеличивается через 1 раз, т.е.:

1 раз - увеличить скорость

Фактически: 1.0х -> 1.0x
Ожидал: 1.0х -> 1.2х

2 раз - увеличить скорость

Фактически: 1.0х -> 1.2x
Ожидал: 1.2х -> 1.5х

3 раз - увеличить скорость

Фактически: 1.2х -> 1.5x
Ожидал: 1.5х -> 2.0х

4 раз - увеличить скорость

Фактически: 1.5х -> 2.0x
Ожидал: 2.0х -> 4.0х

Обратное действие - полностью аналогично прямому, т.е. скорость воспроизведения уменьшается через 1 раз:

1 раз - уменьшить скорость

Фактически: 4.0х -> 4.0x
Ожидал: 4.0х -> 2.0х

2 раз - уменьшить скорость

Фактически: 4.0х -> 2.0x
Ожидал: 2.0х -> 1.5х

3 раз - уменьшить скорость

Фактически: 2.0х -> 1.5x
Ожидал: 1.5х -> 1.2х

4 раз - уменьшить скорость

Фактически: 1.5х -> 1.2x
Ожидал: 1.2х -> 1.0х

И так далее...

Если увеличить скорость до максимума, т.е. до 4.0х, а потом нажать "Сбросить скорость", то скорость воспроизведения так и остается 4.0х, вместо 1.0х, как предполагалось и ожидалось.

Сбросить скорость:

Фактически: 4.0х -> 4.0x
Ожидал: 4.0х -> 1.0x
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: V0lt от 12 января 2016, 21:13:11
Цитата: Evgeniy1990Что значит "неправильное"?
Может ты хотел спросить почему неправильное?
Имхо, если и делать такие грубые хаки, то точно не в аудиодекодере. Надо откатывать.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 12 января 2016, 21:24:49
Цитата: V0ltМожет ты хотел спросить почему неправильное?
Да, я так и хотел спросить, просто меня удивил ваш ответ.
Цитата: V0ltИмхо, если и делать такие грубые хаки, то точно не в аудиодекодере. Надо откатывать.
Я уже написал в посте выше, что я собрал и проверил SVN-билд 1098, в нем по сравнению с 1092, вообще ничего не изменилось, как было так и осталось.

По сути, я согласен с вами, изменение не работает вообще, совершенно нет никакой разницы, при использовании DirectSound Audio Renderer.

В посте выше я расписал что у нас сейчас происходит, при использовании DirectSound Audio Renderer, а также, как правильно должно быть, т.е. то, что предполагается и то, чего ожидает пользователь.

То же самое и для скоростей воспроизведения ниже 1.0х:

1 раз - увеличить скорость

Фактически: 1.0х -> 1.0x
Ожидал: 1.0х -> 0.5х

2 раз - увеличить скорость

Фактически: 1.0х -> 0.5x
Ожидал: 0.5х -> 0.25х

3 раз - увеличить скорость

Фактически: 0.5х -> 0.25x
Ожидал: 0.25х -> 0.125х

И аналогично, обратное действие - с 0.125х до 1.0х.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 13 января 2016, 03:50:43
С чего это моё решение неправильное и неработающее??  Аргументы??  И впредь - я уже не раз говорил чтобы мои изменения не откатывать.  По крайней мере без обсуждения со мной. Или я просто закрываю доступ на запись в svn. Ибо достало такое отношение.

Почему то у меня стало работать
[merge_posts_bbcode]Добавлено: 2016-01-13 09:05:09[/merge_posts_bbcode]

А вот по поводу того что изменение скорости делается "с запозданием" - согласен, есть такой косяк - буду смотреть. Но самое главное что мое изменение избавило от рывков и косяков проигрывания.

P.S. Нашел причину изменения скорости "с запозданием" - буду думать как побороть :)
[merge_posts_bbcode]Добавлено: 2016-01-13 10:50:43[/merge_posts_bbcode]

Так - предлагаю тестовый билд https://yadi.sk/d/cs5F8N5VmrMkW
Так же просьба проверить его и на WinXP.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: V0lt от 13 января 2016, 06:07:30
Цитата: Aleksoid1978С чего это моё решение неправильное и неработающее??  Аргументы??
Неправильное потому что хак, если и работающий, то лишь в определенных случаях. Если такое есть в LAV, то это вовсе не значит, что его надо тащить в наш код.
Про неработающее Evgeniy1990 расписал.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 13 января 2016, 07:00:13
Цитата: Aleksoid1978Так - предлагаю тестовый билд https://yadi.sk/d/cs5F8N5VmrMkW
Так же просьба проверить его и на WinXP.
Проверил тестовый билд на Windows XP и Windows 10.

Теперь скорость воспроизведения увеличивается и уменьшается вовремя, т.е. сразу, после одного нажатия действия - увеличить, или уменьшить скорость.

1 раз - увеличить скорость 1.0х -> 1.2х

2 раз - увеличить скорость 1.2х -> 1.5х

3 раз - увеличить скорость 1.5х -> 2.0х

4 раз - увеличить скорость 2.0х -> 4.0х

Аналогично работает и обратное действие - уменьшить скорость:

1 раз - уменьшить скорость 4.0х -> 2.0х

2 раз - уменьшить скорость 2.0х -> 1.5х

3 раз - уменьшить скорость 1.5х -> 1.2х

4 раз - уменьшить скорость 1.2х -> 1.0х

Также, теперь сброс скорости воспроизведения работает сразу, например: 4.0x -> 1.0x

Скорости меньше 1.0х меняются сразу, т.е. при первом нажатии действия:

1 раз - уменьшить скорость 1.0х -> 0.5х

2 раз - уменьшить скорость 0.5х -> 0.25х

3 раз - уменьшить скорость 0.25х -> 0.125х

И аналогично, теперь сразу, с первого раза, работает и обратное действие - с 0.125х до 1.0х.

В общем:

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

2. Исправлен выбор скоростей воспроизведения, теперь они меняются с первого раза, а не через один раз, т.е. со второго раза, как это было раньше.

3. Теперь, при изменении скоростей, всегда присутствует плавность, исправлена проблема, когда сами скорости воспроизведения работали некорректно, как попало, то медленнее, то быстрее и т.д.

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

В целом, основная проблема полностью устранена, исправлена, также исправлены дополнительные проблемы (баги).
Ваши изменения/исправления полностью готовы к работе. Можете спокойно заливать их в SVN.
Сейчас абсолютно все и полностью работает корректно на все 100%. :)
[merge_posts_bbcode]Добавлено: 2016-01-13 07:00:13[/merge_posts_bbcode]

Цитата: V0lt
Цитата: Aleksoid1978С чего это моё решение неправильное и неработающее??  Аргументы??
Неправильное потому что хак, если и работающий, то лишь в определенных случаях. Если такое есть в LAV, то это вовсе не значит, что его надо тащить в наш код.
Про неработающее Evgeniy1990 расписал.
V0lt, хоть это, как вы говорите - хак, но Aleksoid1978 сделал (добавил) его не случайно.
Он устраняет проблему с рывками изображения во время воспроизведения видео файлов, при измененных скоростях, т.е. при увеличенных, или наоборот - уменьшенных скоростях.

По сути, этот "хак" дает нам плавное воспроизведение видео файлов, при увеличенных, или уменьшенных скоростях.

Да, я сказал, что он работал некорректно, не увидел разницы, только лишь потому, что скорости менялись не сразу, а через один раз, т.е. со второго раза.

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

Разница в том, что после этого "хака" появилась плавность, которой нам не хватало.
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Aleksoid1978 от 13 января 2016, 07:08:22
Цитата: V0ltПро неработающее Evgeniy1990 расписал.

Так к слову - у этого неработающего ноги из другого места растут, ну и если что, так для информации. :)
Название: Поломка изменения скорости воспроизведения [Исправлено]
Отправлено: Evgeniy1990 от 13 января 2016, 07:23:53
Цитата: Aleksoid1978Так к слову - у этого неработающего ноги из другого места растут, ну и если что, так для информации. :)

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

Отсюда и делаю соответствующие выводы.

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

Вот, например, такой был у меня случай:

1. Открыл видео файл с частотой кадров 23.976 ~ 24 FPS
2. 1 раз нажал - увеличить скорость

Ожидал, что скорость должна быть 1.2х, но по факту - так и осталась 1.0х

Что дальше мне сделал плеер, он понял, ага, пользователь выполнил некую команду, надо бы выполнить определенный алгоритм, согласно данной команде, но вместо того, чтобы частоту кадров увеличить до 28.87, он ее наоборот уменьшил до 26.37, в результате возникли рывки, во время воспроизведения, так как частота кадров стала прыгать с 26 до 28, потом до 27 и т.д.

24 х 1.2х = 28.8 FPS
24 х 1.5х = 36 FPS