Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Dec 06, 2019 9:44 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 981 posts ]  Go to page Previous 1 2 3 4 5 666 Next
Author Message
 Post subject:
PostPosted: Mon Apr 03, 2006 7:29 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Serge тебе намылил ответ кратенько пока, смотри.
Всем! Всем! Всем!
Желающим хоть чем нибудь помочь упрямому фанатику-дровосеку :) прошу потестить и прислать отчетики и возможные баги по ДОС плееру на AC97 кодеках(несколько десятков наименований) и различных платформ южного моста VIA и Intel(ICH)
http://atom-os.narod.ru/edit_versions/ac97_501.zip
там есть README что, как, чем...


Top
   
 Post subject:
PostPosted: Fri Apr 07, 2006 3:44 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Видимо никому ничего не интересно в данном направлении. Ну что же, отрицательный результат - тоже результат. Возможно кто то, когда то, все же "наступит" на эти строки и хотя бы реально попробует. А между тем, на сегодня, существенные изменения в редакции 502(ac97_502.zip). Теперь это точно готовый тестовый этап кода.


Top
   
 Post subject:
PostPosted: Fri Apr 07, 2006 4:21 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
У меня к сожалению, мертвый кодек AC97 на nforce2 (убил, когда злоупотреблял использованием его в качестве осциллографа) :). А так обязательно бы потестил... :)


Top
   
 Post subject:
PostPosted: Fri Apr 07, 2006 5:25 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
В драйверном деле никакая "мелочь" не лишняя... поэтому твои данные тоже полезны мне(!), т.к. любопытно посмортеть что мать, мост, кодек тестятся, находятся, сопоставляются со справочником + номера функции, девайса как PCI, линия прерывания какова и та ли, что пишет биос на этапе загрузки.... TXT ЛОГ экрана, который генерит прожка, дала бы мне статистику и вообще еще один практический результат на месте...
А ты видимо подпалил Вход/Выход перенебрегая некоторыми осторожностями? :) У каждого практикующего, свой счет подобных "побед" :) у меня свой конечно имеется ;))) А вот "паленость", думаю, до самого AC-LINK обмена кодека с чипом южного моста матери вряд ли добралась, посему лог картинка это может показать, как в прочем и то, что если скажем, в винде он есть и драйвер лепится, но не работает как звуковуха, то я прав. Но это мои рассуждения, тебе виднее, как там на самом деле.


Top
   
 Post subject:
PostPosted: Fri Apr 07, 2006 6:28 pm 
Offline
User avatar

Joined: Fri Jan 27, 2006 3:06 pm
Posts: 1071
Отправил тебе на мыло лог-файл. А насчет пренебрежения осторожностями, ты прав: видимо ткнул случайно щупом в цепи питания ипытуемого устройства :)


Top
   
 Post subject:
PostPosted: Fri Apr 07, 2006 10:02 pm 
Offline

Joined: Sat Jan 07, 2006 4:07 am
Posts: 47
Serge
Я тоже готов сотрудничать, только в инет выхожу редко, по этому наше сотрудничество будет в некоторой инерцией. Если у тебя есть доступ к FIDO, то можешь писать на 2:5066/160.25, так будет оперативнее с моей стороны.

Quote:
Как подфункции сделаны ММХ микшеры на 2, 3, 4 потока в 1. ММХ конвертеры моно 44.1 в стерео 44.1, стерео 22.05 в стерео 44.1, моно 22.05 в стерео 44.1 и примитивный ресемплер 44.1 в 48.0

Но MMX есть не на всех х86 процах. Например, на старых 486 ноутах это недопустимо, но я говорю про подсистему а не про драйвер. По этому в подсистеме я не буду использовать MMX, по крайней мере пока.
Quote:
Когда заканчивается проигрывание очередного 16 кб сегмента АС97 генерирует прерывание
и драйвер микширует в первичный буфер очередные 16 кб из звуковых буферов. Само микширование
происходит блоками по 512 байт
...
Недостаток - задержка с началом воспроизведения статического буфера.
При 16 кб сегменте и частоте 44100 масимальная задержка будет приблизительно 0.185 с.
если уменьшить размер сегмента до 8 или 4 кб задержка уменьшится до 0.092 и 0.046 с, что должно
быть приемлемым.

Этого недостатка можно избежать, если загружать (преобразовывать/микшировать) новую порцию звука после того, как запустил воспроизведение очередного блока (у тебя их 4 по 16 кб.). А вообще звуковые данные лучше измерять в выборках, а не в килобайтах.
Quote:
Для экономии памяти звук в буферах хранится в исходном формате и приводится к основному
(стерео 44100 или 48000) перед микшированием также блоками по 256 или 512 байт.

Ну, это сотря для какого количества процессов, а так же смотря какая частота звукового устройства, хотя я опять говорю только про подсистему.
Quote:
Для кратных частот 11025 -> 22050 -> 44100 это очень просто. Для преобразования дробных частот
44100 -> 48000 лучше конвертировать сразу весь буфер, моно в моно, стерео в стерео.

А у меня конвертирование будет в произвольную частоту. Особенно это пригодится для трекерной музыки, где тональность звучания задаётся изменением частоты дискретизации.

если что, пиши на hater05<ухо>mail.ru


Top
   
 Post subject:
PostPosted: Sat Apr 08, 2006 8:32 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Но MMX есть не на всех х86 процах. Например, на старых 486 ноутах это недопустимо, но я говорю про подсистему а не про драйвер. По этому в подсистеме я не буду использовать MMX, по крайней мере пока.


Я ориентировался на ММХ потому, что если на компе есть АС97 кодек то и процессор с ММХ тоже есть. Позже я хочу написать версии для SSE и SSE2. Версии для ALU тоже можно сделать.

Quote:
Этого недостатка можно избежать, если загружать (преобразовывать/микшировать) новую порцию звука после того, как запустил воспроизведение очередного блока (у тебя их 4 по 16 кб.). А вообще звуковые данные лучше измерять в выборках, а не в килобайтах.


Небольщая задержка будет в любом случае. Когда программа посылает драйверу команду play_buffer звук уже смикширован и воспроизводится, значит его можно смикшировать только в сегмент следующий за текущим. Возможна ситуация когда начнется воспроизводится сегмент, в который мы только что начали микшировать звук и будет щелчок.


Top
   
 Post subject:
PostPosted: Mon Apr 10, 2006 6:32 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Serge,я вот всё думаю,что значит драйвер AC'97 будет ввиде отдельного модуля ?
Всмысле он будет работать из Колибри как обычная программа ?
А как тогда он будет обрабатывать запрос от нескольких программ ?
Если обмен сообщениями с драйвером будет происходить через IPC, то понадобиться выделять физический блок памяти.


Top
   
 Post subject:
PostPosted: Mon Apr 10, 2006 7:34 pm 
VaStaNi
Сожалею, я не мог тебе ответить, так как болел гриппом целую неделю.
Сейчас ссылка уже не работает, вероятно, ты удалил файл. Если выложишь снова, могу протестировать.

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


Top
   
 Post subject:
PostPosted: Mon Apr 10, 2006 7:41 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Я про IPC сказал на тот случай,если драйвер будет ввиде программы.


Top
   
 Post subject:
PostPosted: Mon Apr 10, 2006 9:18 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Можно сделать драйвер в виде отдельной программы, но нужна функция для установки пользовательского обработчика прерывания. Пока такой функции в системе нет


Top
   
 Post subject:
PostPosted: Tue Apr 11, 2006 2:53 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Mario79 wrote:
VaStaNi
Сожалею, я не мог тебе ответить, так как болел гриппом целую неделю.
Сейчас ссылка уже не работает, вероятно, ты удалил файл. Если выложишь снова, могу протестировать.

Дык чуть ниже писал, что 502я теперь... т.е. глючное и старое удалил, оставил только более "уверенный" :) вариант + мелкая доводка.
http://atom-os.narod.ru/edit_versions/ac97_502.zip


Top
   
 Post subject:
PostPosted: Tue Apr 11, 2006 5:23 pm 
Offline

Joined: Fri Nov 12, 2004 3:20 pm
Posts: 90
Пользовательское прерывание установить можно. Пример - программа PPP. Однако это реализовано в системе ужасно криво. Программа может получить сигнал о прерывании с опозданием более двух секунд (это зависит от количества процессов).


Top
   
 Post subject:
PostPosted: Tue Apr 11, 2006 5:58 pm 
Offline
Just Flooding
User avatar

Joined: Wed May 18, 2005 10:27 am
Posts: 430
Иван Поддубный wrote:
Пользовательское прерывание установить можно. Пример - программа PPP. Однако это реализовано в системе ужасно криво. Программа может получить сигнал о прерывании с опозданием более двух секунд (это зависит от количества процессов).

Так в том то и оно, что криво и кто и когда это хотя бы НАЧНЕТ менять в системе!??? Для драйверов, именно для драйверов этот механизм что есть сейчас - не приемлем и надо менять ядро... Со стороны взглянуть - получается, что либо не хотят ребята, либо не видят зачем это нужно или не могут, но хуже всего, что просто молчание наблюдается! Т.е., как будто проблемы и нет. Не понимаю эту позицию. Лично я не раз говорил еще на старом форуме про эти вещи (IRQ,DMA,железо...), но это было столько раз, что я не хочу быть занудой (или перестал им быть)...
На счет прерываний по сути и сейчас. Надо (так думаю) хотябы завести такое понятие, как резервирование системой некоторых прерываний, как ИМЕННО СИСТЕМНОЕ! Т.е. если уж известно или оттестировано, вычитано, что IRQ5, скажем не что иное, как AC97, то обработчик ставится системой в IDT именно на IRQ5 позицию и никакой "гад" не может запросить иного, т.к. считается, что система "лучше знает"! А поскольку у Вас все монолит и драйвер в одном кольце с ядерным кодом, то не вижу проблем вообще!
Мало того! Обработчик НАДО ставить кака можно "прямее и короче", минуя тормоза, присущие вызову int 0x40, да собственно мышонок так, кажется по умолчанию то стоит (вкраплен). Вот те и реактивность работы драйвера.
Имеющие уши - да услышат! :0)


Top
   
 Post subject:
PostPosted: Tue Apr 11, 2006 6:27 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Не надо ничего специально резервировать. Нужен массив куда можно будет записывать адрес пользовательского обработчика прерываний. Номер IRQ - индекс в массиве. Если сделать двумерный массив, можно будет установить несколько обработчиков на один IRQ и вызывать их последовательно.
Системный обработчик должен считывать из массива адрес пользовательского обработчика и передавать на него управление.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 981 posts ]  Go to page Previous 1 2 3 4 5 666 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited