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

0

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

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

Теги:
opensl

1 ответ

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню