mirror of
https://github.com/danog/libtgvoip.git
synced 2024-12-11 16:49:52 +01:00
697e250727
Replaced condition variables with semaphores Audio device enumeration & selection on OS X and Windows
49 lines
1.4 KiB
C++
49 lines
1.4 KiB
C++
//
|
|
// libtgvoip is free and unencumbered public domain software.
|
|
// For more information, see http://unlicense.org or the UNLICENSE file
|
|
// you should have received with this source code distribution.
|
|
//
|
|
|
|
#include <cstddef>
|
|
#include "OpenSLEngineWrapper.h"
|
|
#include "../../logging.h"
|
|
|
|
#define CHECK_SL_ERROR(res, msg) if(res!=SL_RESULT_SUCCESS){ LOGE(msg); return NULL; }
|
|
|
|
using namespace tgvoip;
|
|
using namespace tgvoip::audio;
|
|
|
|
|
|
SLObjectItf OpenSLEngineWrapper::sharedEngineObj=NULL;
|
|
SLEngineItf OpenSLEngineWrapper::sharedEngine=NULL;
|
|
int OpenSLEngineWrapper::count=0;
|
|
|
|
void OpenSLEngineWrapper::DestroyEngine(){
|
|
count--;
|
|
LOGI("release: engine instance count %d", count);
|
|
if(count==0){
|
|
(*sharedEngineObj)->Destroy(sharedEngineObj);
|
|
sharedEngineObj=NULL;
|
|
sharedEngine=NULL;
|
|
}
|
|
LOGI("after release");
|
|
}
|
|
|
|
SLEngineItf OpenSLEngineWrapper::CreateEngine(){
|
|
count++;
|
|
if(sharedEngine)
|
|
return sharedEngine;
|
|
const SLInterfaceID pIDs[1] = {SL_IID_ENGINE};
|
|
const SLboolean pIDsRequired[1] = {SL_BOOLEAN_TRUE};
|
|
SLresult result = slCreateEngine(&sharedEngineObj, 0, NULL, 1, pIDs, pIDsRequired);
|
|
CHECK_SL_ERROR(result, "Error creating engine");
|
|
|
|
result=(*sharedEngineObj)->Realize(sharedEngineObj, SL_BOOLEAN_FALSE);
|
|
CHECK_SL_ERROR(result, "Error realizing engine");
|
|
|
|
result = (*sharedEngineObj)->GetInterface(sharedEngineObj, SL_IID_ENGINE, &sharedEngine);
|
|
CHECK_SL_ERROR(result, "Error getting engine interface");
|
|
return sharedEngine;
|
|
}
|
|
|