В Android / OpenSL можно ли освобождать и ставить в очередь отдельные буферы в bufferQueue вместо очистки всего этого?

Я работаю над приложением в Android с чисто C/C++ и приложение должно записывать звук непрерывно и обрабатывать данные синхронно, поэтому мне интересно, когда я использую буферную очередь в openSL для записи звука, могу ли я освободить заполненные и поставить в очередь новые пустые в буфер-очереди?

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

0

Решение

Я не уверен, что именно ваш вопрос. Буферную очередь следует рассматривать как кольцевую / кольцевую очередь, то есть: вы записываете содержимое нового буфера в следующий буфер, находящийся в очереди (таким образом, «свободный»), когда текущий буфер заканчивает воспроизведение, буфер в очереди становится текущим, и ранее текущий буфер новый буфер в очереди, в основном меняя их статус. Вам не нужно беспокоиться об этом при записи и обработке звука, а сосредоточьтесь на одном временном буфере, в который вы записываете, и записываете это содержимое в буфер в очереди. Затем кольцевой буфер для вывода может продолжать делать свое дело, и при следующем обратном вызове (т.е. когда буферы в очереди меняются местами) вы очищаете содержимое временного буфера и заполняете его всей магией, которую хотите удержать. В основном это сводится к тому, что вся ваша запись и рендеринг будут выполняться после каждого обратного вызова, и у вас будет очередь как для вывода, так и для ввода, что исключит возможность потери данных.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]