У меня есть встроенный аудиорекордер, использующий openSLES в Android. Рекордер работает, но при вызове метода остановки он, кажется, продолжает писать буферы, так как я продолжаю получать логи:
...
08-07 01:36:43.229: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
08-07 01:36:43.239: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
08-07 01:36:43.249: V/AudioRecord(6194): Overrun user: 61400, server: 61c00, flags 0001
...
Я использую метод блокировки потока для записи буферов, но почему я получаю эти журналы после остановки рекордера следующим образом:
typedef struct opensl_stream {
...
SLObjectItf recorderObject;
SLRecordItf recorderRecord;
SLAndroidSimpleBufferQueueItf recorderBufferQueue;
...
} OPENSL_STREAM;
OPENSL_STREAM *p;
//starting recorder
...
//stopping recorder
if (p->recorderObject != NULL) {
(*p->recorderObject)->Destroy(p->recorderObject);
p->recorderObject = NULL;
p->recorderRecord = NULL;
p->recorderBufferQueue = NULL;
}
После попытки остановить рекордер, как указано выше, я все еще получаю журнал AudioRecord(6194): Overrun user
, что означает, что буфер читается, но не используется. Как правильно остановить запись?