Нужно ли освобождать готовый буфер из аудиоплеера OpenSL ES? - PullRequest
3 голосов
/ 17 мая 2011

Только для подтверждения.Когда аудиопроигрыватель, созданный с помощью OpenSL ES для Android, завершает воспроизведение буфера, этот буфер автоматически освобождается сборщиком мусора?Или мне нужно освободить буфер самостоятельно?

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

Ответы [ 2 ]

5 голосов
/ 19 мая 2011

Буферная очередь фактически не выделяет саму буферную память (или не нуждается в ее освобождении), вы передаете указатели на память, выделенную с помощью функции 'enqueue'.Вам нужно будет освободить память, выделенную вам по окончании воспроизведения буферов.

Поскольку OpenSL ES является нативной библиотекой в ​​C ++, она ничего не знает о сборке мусора, любая память, которую вы выделяете для API, должна быть освобождена.вами и созданными вами объектами должен быть вызван метод уничтожения для очистки внутренней памяти.

3 голосов
/ 15 сентября 2011

Как сказал предыдущий автор, вы вызываете Enqueue с буфером, который вы создали ранее. Однако я хотел бы отметить, что если вы не воспроизводите только одно звуковое событие один раз в своем приложении, вам, вероятно, следует продолжать повторно использовать ваши звуковые буферы, чтобы вообще избежать GC - прелесть C!

Также ознакомьтесь с документацией по Android OpenSL ES, касающейся уничтожения ваших интерфейсов после того, как вы покончили с ними, что нужно сделать вручную.

...