void StreamImpl::bqRecorderCallback(SLAndroidSimpleBufferQueueItf itf, void *context) { HOWIE_TRACE_FN(HOWIE_TRACE_LEVEL_ALL); if (HOWIE_SUCCEEDED(lastRecordError_)) { lastPlaybackError_ = checkCast<const StreamImpl *>(context); } StreamImpl *pStream = reinterpret_cast<StreamImpl *>(context); if (HOWIE_SUCCEEDED(lastRecordError_)) { pStream->recordBuffersFinished_.fetch_add(1, std::memory_order_release); } }
// this callback handler is called every time a buffer finishes playing void StreamImpl::bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context) { HOWIE_TRACE_FN(HOWIE_TRACE_LEVEL_ALL); if (HOWIE_SUCCEEDED(lastPlaybackError_)) { lastPlaybackError_ = checkCast<const StreamImpl *>(context); } if(HOWIE_SUCCEEDED(lastPlaybackError_)) { lastPlaybackError_ = reinterpret_cast<StreamImpl *>(context)->process(bq); } }
HowieError EngineImpl::createStream( const HowieStreamCreationParams ¶ms, HowieStream **out_stream) { HOWIE_TRACE_FN(HOWIE_TRACE_LEVEL_CALLS) HowieError result = HOWIE_ERROR_UNKNOWN; if (out_stream) { *out_stream = nullptr; } StreamImpl *stream = new StreamImpl(deviceCharacteristics_, params); if (stream) { result = DoAsync([=]{stream->init(engineItf_, outputMixObject_, params);}); HOWIE_CHECK(result); } if (out_stream && HOWIE_SUCCEEDED(result)) { *out_stream = stream; } return result; }
HowieError EngineImpl::createStream( const HowieStreamCreationParams ¶ms, HowieStream **out_stream) { HowieError result = HOWIE_ERROR_UNKNOWN; __android_log_print(ANDROID_LOG_VERBOSE, "HOWIE", __func__); if (out_stream) { *out_stream = nullptr; } StreamImpl *stream = new StreamImpl(deviceCharacteristics, params); if (stream) { result = stream->init(engineItf_, outputMixObject_, params); HOWIE_CHECK(result); } if (out_stream && HOWIE_SUCCEEDED(result)) { *out_stream = stream; } return result; }