Торренты   
 
 


Стереоплеер: Free 3d player by Kostasoft

Выдалось немного свободного времени. Внес некоторые изменения в работе моего стереоплеера, основанного на технологии 3D Vision от Nvidia.
Просьба, протестировать его на разном железе (В режиме анаглифа или QuadBuffers должно работать и на видеокарточках от ATI/AMD).
Скачать с официальной страницы проекта
Что изменено:
1. Сделал ручное переключение исходных режимов стереоролика (цифровыми клавишами). Поддержка форматов: Over/Under, Side-by-Side (обычные и анаморфные режимы)
2. Сделал декодирование видео только в UV12 (для ускорения декодирования на слабых машинах, в связи с уменьшением потока в 2.6 раза по сравнению с RGBA) и вывод на экран этого цветового подпространства за счет использования Pixel Shader 2.0 (опять же для ускорения распаковки кадров, т.к. вся работа ведется в GPU видеокарты).
Что ухудшилось:
1. Не включается режим стерео на встроенных видеокартах (у меня ноутбук Dell XPS 13 с двумя видеокартами. На встроенной не включается, на дискретной - работает). Неизбежное зло при переходе на новый способ вывода видео через шейдеры.
Просьба, по возможности, отписаться о работе данного сабжа в сравнении с другими плеерами (скорость работы, баги). Особенно интересует мнение владельцев компьютеров со слабым процессором (и более-менее шустрой видеокартой), у которых наблюдались тормоза при воспроизведении "тяжелого" видео.
Комментарии:

Пред.  1, 2, 3, 4, 5, 6 ... 15, 16, 17  След.






2 Academic
Сейчас скачаю Галапагосы, посмотрю, что там у меня. Кстати, новая версия (уже почти готова) будет поддерживать переключение звуковых дорожек и прочие опции через контекстное меню. Потерпи, почти все готово, сейчас в анаглифе сделаю поддержку адаптивной коррекции и выложу новую версию.
Только что проверил галапагосы, все отлично воспроизводится. Думаю, у Вас в системе слишком много "мусорных" кодеков, но это только предположение.
Ну, может они и "мусорные", но без них жить тяжело, MPC-HC работать не будет. В новой версии стало хуже, теперь перестали открываться некоторые фильмы с одной звуковой дорожкой :(
Чёрный экран...
Если открыть обычным Media Player classic - home cinema, то для воспроизведения всех фильмов используются ffdshow video и ffdshow audio декодеры, так же запускается Haali media splitter. Если перетащить фильм, на уже открытый проигрыватель, то в трее появляется значок ffdshow audio декодера, после чего проигрыватель зависает.
Там где ничего не зависает, дорожки переключаются нормально. При старте таких фильмов ffdshow audio декодер не загружается, не смотря на то, что при проигрывании в MPC-HC он используется.
Приятно удивило, что проигрыватель иногда сам правильно складывает ракурсы, даже ничего нажимать не надо, однако, это может выйти боком как например с этой раздачей http://torrents3d.ru/viewtopic.php?t=1178 ,в ней он сам складывает ракурсы, но с искажением, и исправить это не удаётся, клип либо вытянут по горизонтали, либо по вертикали.
Нет, контекстного меню для открытия файлов с расширением .ts, хорошо что есть возможность Drag'n'drop'а. Перетаскиванием такие файлы открываются без проблем, правда после закрытия может вывалить такая фигня: http://clip2net.com/s/1Mgjl
P.S. нужно немного увеличить размер стартового окна, поскольку последняя строчка "хелпа" не влезает.
 

kostasoft
Вот почему чистый красный в серый не превращается при положении регулятора в 0%. Сваял программку посмотреть на числа в разных цветовых пространствах по используемым нами формулам, вот что для чисто красного получилось:

Таким образом, насыщенность в HSV не равна насыщенности в HSL !!!
Причем, сколько я не крутил движки RGB - насыщенности больше 0.632 никогда не было! Т.е. цветов с насыщенностью = 1 в цветовом пространстве RGB нет! (по крайней мере по нашим формулам)
Вывод такой, что надо использовать формулу: S = ((1-KSS)*(0.7-S)+KSS)*S
 

photoreal3d
все правильно, потому что в формуле HSV S - это не чистая насыщенность, а смешанная со светлостью от нормальной до белой, поэтому при уменьшении насыщенности - повышается светлость.
Т.е. цветов с насыщенностью = 1 в цветовом пространстве RGB нет!
абсолютно не верно, юзай формулу HSL и увидишь, что такое настоящая насыщенность равная 1
 

boss-master
Я имел ввиду, что по тем формулам, которые мы используем насыщенность больше 0,63 не получается ни для какого цвета из RGB. Мне в конечном счете не важно, максимальная насыщенность будет выражена числом 1 или 0.63, просто это надо учитывать в формулах и всего лишь.
 

Версия 12.4.6.1
- Добавлена поддержка типов файлов *.ts из контекстного меню
- Добавлен регулятор яркости в окне настройки адаптивной коррекции цвета.
- Изменена формула, согласно рекомендации photoreal3d
Итоговая формула получилась такая:
Код:
//Коррекция входного YUV
y = 1.1643 * (y - 0.0625);
v -= 0.5;
u -= 0.5;
//Преобразование YUV -> HSV
   float hue,sat,val;
   hue = atan(v,u);
   sat = sqrt(u*u + v*v);
//адаптивная цветокоррекция
   int h = int((hue+3.1415926539)*180/3.1415926539);
   if (h>=360) h -=360;
   int j = int(h/30);
   float kss = adapt[j]+(adapt[j+1]-adapt[j])*(h/30-j);
   sat = ((1.0-kss)*(0.7-sat)+kss)*sat;
   y += brightness;
//Преобразование HSV -> YUV
   u = cos( hue ) * sat;
   v = sin( hue ) * sat;
//Преобразование YUV -> RGB
resultColor.r = y + 1.5958 * v;
resultColor.g = y - 0.39173 * u - 0.81290 * v;
resultColor.b = y + 2.017 * u;
resultColor.a = 1.0;
Из-за того, что hue лежит в диапазоне -Pi..Pi, пришлось сдвинуть порядок коэффициентов в массиве (в 0-вой и в 12-й элемент массива заносится позиция TrackBar4, дальше по-порядку и по кругу)
 

kostasoft
Версия 12.4.6.1
Похоже на ATi-AMD не работает (ASUS EAH3870).
Изображение есть только при выводе nVidia 3D Vision (DirectX).
В остальных режимах серый экран, который сменяется на зеленый (с полоской навигации), если курсор подвести.
 

2 Pinnhate
Спасибо за ответ!
Серый экран означает, что амд не цепляет шейдер (находит в нем невыполнимую операцию)
Попробую отловить несовместимость!
Добавлено:
2 Pinnhate
Запустите Check Update (F9) в плеере и скачайте новую версию 12.4.6.2
Запустите ее и сделайте скриншот ошибки (если шейдер не компилируется, то ошибка обязательно будет при запуске плеера).
Если не трудно, приложите этот скриншот в своему сообщению в этой ветке форума.
Спасибо!
 

kostasoft
Проверил новую версию. Адаптивная коррекция цвета в режиме анаглифа работает на ура! Только вот при смене режима на анаглиф демка по прежнему не воспроизводиться, после перезапуска воспроизводиться но в режиме 3d vision, хотя когда кидаешь в плеер файл с видео - воспроизводит в режиме анаглиф. Как бы это пофиксить? Да, еще один момент: пробовал 4 фильма разных воспроизвести - 3 из них воспроизводятся в анаглифе, а вот четвертый - так же как и демка в режиме 3d vision идет (аватар кстати). Формат особо не отличается: mkv mpeg4 (AVC), вертикальная стереопара 1280х1440. Если перекодировать в avi с кодеком х264 - идет в анаглифе. Что бы это могло быть? (да, у него 3 звуковых дорожки, но разве это будет влиять?).
 

Вот обещанные значения коэффициентов адаптивной коррекции:

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

Почему все получилось!
Реализованный в плеере алгоритм адаптивной коррекции цвета на самом деле оказался полностью идентичным тому, что используется в момей программе. Вот доказательства.
Допустим, что мы используем универсальный профиль с коэффициентом коррекции K=0,5.
Тогда формулы в моей программе:
KSS = 1-(1-K)*V
Sn = ((1-KSS)*(1-S)+KSS)*S
после преобразований примут вид:
Sn = (1-0,5*V*S)*S

Формулы в плеере:
KSS = K;
Sn = ((1-KSS)*(1-S)+KSS)*S
после преобразований примут вид:
Sn = (1-0,5*S)*S
Несмотря на то, что формулы разные, изменение насыщенности будет одинаковым! Вот подтверждение:

По горизонтали - интенсивность любого из цветов, например, красного от абсолютно черного до белого (в середине будет цвет с максимальной насыщенностью).
Синий график - это VAL в пространстве HSV
Красный график - это насыщенность в пространстве HSV
Желтый график - это насыщенность в пространстве HSY (у нас L = Y)
Именно по причине того, что насыщенность в пространстве HSV "не настоящая" в моей программе при расчете коррекции используется и S и V. Из графиков видно, что S_hsy = 0.63*V_hsv*S_hsv. Соответственно, если используется пространство HSV - в формуле коррекции должно быть произведение V*S, если используется пространство HSY - в формуле коррекции вместо V*S будет только S. Что и требовалось доказать :)
 

kostasoft
Может займемся постобработкой (коррекцией гхостов)? Когда будет время, пиши. За поддержку анаглифа огромное спасибо. Великолепно получилось! И код получился изящный.
 

kostasoft
Вот, что на графике intel выдает:
 

Спасибо, photoreal3d
Вот версия 12.4.7.0. Можно обновиться из самого плеера.
Изменения:
- Поправил (наверное, первую) ошибку в шейдере, вызывающую несовместимость с не Нвидиа видеокартами. Жду следующих ;-)
- Ввел рекомендованные photoreal3d коэффициенты по-умолчанию. Для установки их в автоматическом режиме, удалите из папки с программы 3 файла с расширением KAP и запустите плеер заново. В меню адаптивной коррекции цвета (F3) установите галочку "Разрешить".
- Вроде бы исправил проблему с запуском плеера.
2 photoreal3d
Готов приступисть к посткоррекции.
 

kostasoft
Вот, еще на счет яркости: можешь сделать пробную версию с этим: y = y+(1-kss)*sat*brightness ?
По ошибкам на intel, теперь появляется это:
 

2 photoreal3d
Еще раз про формулу. Что такое brightness? Это y?
Блин, туплю, это же значение из трекбара регулировки яркости, которая меняется от -0.2 до 0.2
Версия 12.4.7.1 (Обновляйтесь по F9 в плеере)
- Исправлена вторая ошибка в шейдере
- Введена формула коррекции яркости
- Трекбар яркости имеет крайние значения -100...100 (значение brightness в шейдере лежит в диапазоне -1.0 .. 1.0
 

kostasoft
Да, только мне надо brightness 0..1
 

Да, только мне надо brightness 0..1
Я уже сам понял. Изменил.
 

kostasoft
Компенсация гхоста делается уже в анаглифе. Рассмотрим саму идею (на примере red-cyan):
- возьмем любую точку из анаглифического изображения, ее цвет определяется как:
R = RL
G = GR
B = BR
где RL - составляющая из левого канала, GR,BR - составляющие из правого канала.
В идеальных очках через левый фильтр мы увидим:
Color_L = (RL,0,0), а через правый
Color_R = (0,GR,BR)
Таких очей не бывает, в реальных очках через красный фильтр обязательно пролезет часть зеленого а может и синего, а через циановый - часть красного. В результате, через очки мы увидим:
Color_L = (RL,GR*k1,BR*k2)
Color_R = (RL*k3,GR,BR)
где k1,k2,k3 коэффициенты существенно меньше единицы.
При этом, результирующая яркость точки, через левый фильтр становиться больше. Увеличение яркости красного будет зависить от яркости зеленого и синего - а это уже другой ракурс, отсюда и появляются гхосты. Аналогичная ситуация с правым фильтром.
Идея коррекции в том, что мы должны уменьшить величину красного в зависимости от интенсивности зеленого и синего, так, чтобы результирующая яркость осталась неизменной.
Color_L = (RL*a,GR*k1,BR*k2)
где а - корректирующий коэффициент для левого канала, подобранный таким образом, что
RL*0.29 = RL*a*0.29+GR*k1*0.59+BR*k2*0.12
тогда гхоста не будет (по крайней мере, он будет практически не различим)
Аналогичным образом поступаем с правым каналом:
Color_R = (RL*k3,GR*b,BR*b)
где b - корректирующий коэффициент для правого канала, подобранный таким образом, что
GR*0.59+BR*0.12 = RL*k3*0.29+GR*b*0.59+BR*b*0.12
Основная проблема в том, что корректирующие коэффициенты a и b не постоянны, зависят от характеристик фильтров очков, характеристик фильтров в самой ЖК матрице, гамма кривых монитора и т.д. Поэтому, я сделал программу, которая с помощью мастера позволяет получить табличную зависимость вида:
Rn = f(G,R)
где:
R - исходная интенсивность красного канала в анаглифе (левый ракурс - полезный сигнал),
G - интенсивность зеленого канала в анаглифе (правый ракурс - помеха),
Rn - новое (уменьшенное) значение интенсивности красного канала
Понятно, что если в правом ракурсе будет чернота, интенсивность зеленого канала равна нулю, и Rn = R
Чем ярче правый ракурс, тем меньше выходное значение Rn по сравнению с R (зависимость не линейная)
Аналогично с правым ракурсом:
Gn = f(R,G)
Bn = f(R,B)
в котором помехой является красный канал R.
Таким образом, весь алгоритм сводится к замене исходных значений R G B анаглифа на другие, выбранные из двух таблиц по исходным значениям R G B:
RN = ML[G,R]
GN = MR[R,G]
BN = MR[R,B]
где:
R,G,B - исходный цвет точки в анаглифе (входное значение)
RN,GN,BN - скорректированный цвет точки (выходное значение)
Про массивы ML и MR я уже писал на стр.2
Единственное что, массивы разные для каждого типа анаглифа (ну это и так понятно). Ну и от типа анаглифа зависит как эти массивы использовать.
Для green-magenta будет так:
RN = MR[G,R]
GN = ML[R,G]
BN = MR[G,B]
Для amber-blue вот так:
RN = ML[B,R]
GN = ML[B,G]
BN = MR[G,B]
 

2 photoreal3d
А что говорит плеер на Интеле? Какие еще ошибки вылазят?
Добавлено:
Вот в чем трабл при использовании массивов: его в шейдер можно загрузить только в качестве текстуры. А и так при декодировании YUV (к примеру, YV12) каждый компонент приходится заливать в отдельную текстуру. Вместе с массивами будет 5 текстур. Не каждая видеокарта такое потянет. Или будет тормозить (софтово обрабатывать шейдер). Поэтому я любитель использовать формулы. Массив с коэффициентами закинуть гораздо проще.
 

kostasoft
Версия 12.4.7.1 на ATI_3870 под Win7 (32-bit) в режиме amber-blue

А еще теперь NOD32 на инсталлятор ругается, что это
"потенциально нежелательная программа Win32/Packed.Themida"
Win32/Packed.Themida - вредоносная программа, упакованная с помощью упаковщика - Themida; семейство троянов-кейлогеров Win32/PSW.OnLineGames.NMY, используемых злоумышленниками для кражи учетных данных...
 

Страница 5 из 17

Пред.  1, 2, 3, 4, 5, 6 ... 15, 16, 17  След.