Skip to content
Snippets Groups Projects
Commit 2d8e0799 authored by Adrien Béraud's avatar Adrien Béraud Committed by Sébastien Blin
Browse files

audio/opensl: handle exception during initialization

Change-Id: Id6f3f10819c7b8092d66a51ad11307097d0e00af
parent 97f64b7d
Branches
No related tags found
No related merge requests found
...@@ -48,7 +48,7 @@ inline SLDataFormat_PCM convertToSLSampleFormat(const ring::AudioFormat& infos) ...@@ -48,7 +48,7 @@ inline SLDataFormat_PCM convertToSLSampleFormat(const ring::AudioFormat& infos)
#define SLASSERT(x) { \ #define SLASSERT(x) { \
if(SL_RESULT_SUCCESS != (x))\ if(SL_RESULT_SUCCESS != (x))\
throw std::runtime_error("OpenSLES error");\ throw std::runtime_error("OpenSLES error " + std::to_string(x));\
} }
/* /*
......
...@@ -252,13 +252,22 @@ OpenSLLayer::initAudioPlayback() ...@@ -252,13 +252,22 @@ OpenSLLayer::initAudioPlayback()
{ {
using namespace std::placeholders; using namespace std::placeholders;
std::lock_guard<std::mutex> lck(playMtx); std::lock_guard<std::mutex> lck(playMtx);
try {
player_.reset(new opensl::AudioPlayer(hardwareFormat_, engineInterface_, SL_ANDROID_STREAM_VOICE)); player_.reset(new opensl::AudioPlayer(hardwareFormat_, engineInterface_, SL_ANDROID_STREAM_VOICE));
player_->setBufQueue(&playBufQueue_, &freePlayBufQueue_); player_->setBufQueue(&playBufQueue_, &freePlayBufQueue_);
player_->registerCallback(std::bind(&OpenSLLayer::engineServicePlay, this, _1)); player_->registerCallback(std::bind(&OpenSLLayer::engineServicePlay, this, _1));
} catch (const std::exception& e) {
RING_ERR("Error initializing audio playback: %s", e.what());
return;
}
try {
ringtone_.reset(new opensl::AudioPlayer(hardwareFormat_, engineInterface_, SL_ANDROID_STREAM_VOICE)); ringtone_.reset(new opensl::AudioPlayer(hardwareFormat_, engineInterface_, SL_ANDROID_STREAM_VOICE));
ringtone_->setBufQueue(&ringBufQueue_, &freeRingBufQueue_); ringtone_->setBufQueue(&ringBufQueue_, &freeRingBufQueue_);
ringtone_->registerCallback(std::bind(&OpenSLLayer::engineServiceRing, this, _1)); ringtone_->registerCallback(std::bind(&OpenSLLayer::engineServiceRing, this, _1));
} catch (const std::exception& e) {
RING_ERR("Error initializing ringtone playback: %s", e.what());
}
} }
void void
...@@ -266,17 +275,25 @@ OpenSLLayer::initAudioCapture() ...@@ -266,17 +275,25 @@ OpenSLLayer::initAudioCapture()
{ {
using namespace std::placeholders; using namespace std::placeholders;
std::lock_guard<std::mutex> lck(recMtx); std::lock_guard<std::mutex> lck(recMtx);
try {
recorder_.reset(new opensl::AudioRecorder(hardwareFormat_, engineInterface_)); recorder_.reset(new opensl::AudioRecorder(hardwareFormat_, engineInterface_));
recorder_->setBufQueues(&freeRecBufQueue_, &recBufQueue_); recorder_->setBufQueues(&freeRecBufQueue_, &recBufQueue_);
recorder_->registerCallback(std::bind(&OpenSLLayer::engineServiceRec, this, _1)); recorder_->registerCallback(std::bind(&OpenSLLayer::engineServiceRec, this, _1));
} catch (const std::exception& e) {
RING_ERR("Error initializing audio capture: %s", e.what());
}
} }
void void
OpenSLLayer::startAudioPlayback() OpenSLLayer::startAudioPlayback()
{ {
if (not player_ and not ringtone_)
return;
RING_WARN("Start audio playback"); RING_WARN("Start audio playback");
if (player_)
player_->start(); player_->start();
if (ringtone_)
ringtone_->start(); ringtone_->start();
playThread = std::thread([&]() { playThread = std::thread([&]() {
std::unique_lock<std::mutex> lck(playMtx); std::unique_lock<std::mutex> lck(playMtx);
...@@ -304,6 +321,8 @@ OpenSLLayer::startAudioPlayback() ...@@ -304,6 +321,8 @@ OpenSLLayer::startAudioPlayback()
void void
OpenSLLayer::startAudioCapture() OpenSLLayer::startAudioCapture()
{ {
if (not recorder_)
return;
RING_DBG("Start audio capture"); RING_DBG("Start audio capture");
recorder_->start(); recorder_->start();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment