Здравствуйте, Click, Вы писали:
C>Здравствуйте, OpenGL, Вы писали:
OGL>>>>Дело в том что вызов write(audio_dev,...) является блокирующим, нужно чтобы он был асинхронным, то есть ждать события, или мютекса после того как все тыграется. Как это сделать собстенно , если вообще OSS и RH 9.1 это позволяют?
А>>>А если так: А>>> Два потока и защищённая от одновременного доступа очередь буфферов данных. А>>> Перевый готовит данные и ставит их в очередь. А>>> Второй поток пишет их в устройство (write). А>>> Очередь можно защитить обычными семафорами.
OGL>>Я так и сделал, Все просто. Надо чтобы не один буффер ни улетел куда-нить. А то он где то через 1-2 минуты начинает пропускать блоки, идут щелчки. Нужен метод на подобие write только без блокировки, чтобы можно было точно дождаться конца проигрывания.
C>Я чего-то не понял. C>Куда буфферы улетают? C>OpenGL> чтобы можно было точно дождаться конца проигрывания. C>Это и есть write. C>Эта функция ждёт конца закачки (проигрывания) буффера в устройство (блокируется до конца проигрования). C>Вы сами драйвер устройства писали? C>Сдаётся мне что у вас либо с драйвером что-то либо с алгоритмом. C>Если очередь реализована верно то в цыкле write потока (поток закачки) из очереди будут C>извлекаться буффер за буффером в нужном порядке и с минимальной задержкой отправлятся в устройство. C>Возможно так же, что данные просто не успевают закачиваться в устройство в нужном темпе. C>Может устройство не правильно работает. C>Устройство и драйвер вашей разработки или?
Да звук берется с моего устройства(ну нашего, не я его делал). Драйвер для него я писал,
Write передает управление мне чуть раньше чем блок отыграет или после того как отыграет?