Split libaaudio.so to internal and NDK part

This change moves almost everything from libaadio.so to
separate libaaudio_internal.so library. This is done to
avoid exporting symbols which apps are not allowed to use
but have them available for platform libraries by exporting
them from libaaudio_internal.so

Bug: http://b/69603741
Test: make
Merged-In: If93118ed2c266faf2964abf21e17b0b13df493d2
Change-Id: If93118ed2c266faf2964abf21e17b0b13df493d2
gugelfrei
dimitry 5 years ago
parent 10b5ef5d18
commit d81a84a886

@ -9,14 +9,70 @@ cc_library {
"legacy",
"utility",
],
header_libs: ["libaaudio_headers"],
export_header_lib_headers: ["libaaudio_headers"],
srcs: [
"core/AAudioAudio.cpp",
],
cflags: [
"-Wno-unused-parameter",
"-Wall",
"-Werror",
// By default, all symbols are hidden.
// "-fvisibility=hidden",
// AAUDIO_API is used to explicitly export a function or a variable as a visible symbol.
"-DAAUDIO_API=__attribute__((visibility(\"default\")))",
],
shared_libs: [
"libaaudio_internal",
"libaudioclient",
"libaudioutils",
"liblog",
"libcutils",
"libutils",
"libbinder",
],
}
cc_library {
name: "libaaudio_internal",
local_include_dirs: [
"binding",
"client",
"core",
"fifo",
"legacy",
"utility",
],
export_include_dirs: ["."],
header_libs: ["libaaudio_headers"],
export_header_lib_headers: ["libaaudio_headers"],
shared_libs: [
"libaudioclient",
"libaudioutils",
"liblog",
"libcutils",
"libutils",
"libbinder",
],
cflags: [
"-Wno-unused-parameter",
"-Wall",
"-Werror",
],
srcs: [
"core/AudioGlobal.cpp",
"core/AudioStream.cpp",
"core/AudioStreamBuilder.cpp",
"core/AAudioAudio.cpp",
"core/AAudioStreamParameters.cpp",
"legacy/AudioStreamLegacy.cpp",
"legacy/AudioStreamRecord.cpp",
@ -43,24 +99,4 @@ cc_library {
"binding/SharedMemoryParcelable.cpp",
"binding/SharedRegionParcelable.cpp",
],
cflags: [
"-Wno-unused-parameter",
"-Wall",
"-Werror",
// By default, all symbols are hidden.
// "-fvisibility=hidden",
// AAUDIO_API is used to explicitly export a function or a variable as a visible symbol.
"-DAAUDIO_API=__attribute__((visibility(\"default\")))",
],
shared_libs: [
"libaudioclient",
"libaudioutils",
"liblog",
"libcutils",
"libutils",
"libbinder",
],
}

@ -36,6 +36,7 @@
#include "binding/AAudioStreamConfiguration.h"
#include "binding/IAAudioService.h"
#include "binding/AAudioServiceMessage.h"
#include "core/AudioGlobal.h"
#include "core/AudioStreamBuilder.h"
#include "fifo/FifoBuffer.h"
#include "utility/AudioClock.h"
@ -241,7 +242,7 @@ aaudio_result_t AudioStreamInternal::close() {
timeoutNanoseconds);
if (result != AAUDIO_OK) {
ALOGE("%s() waitForStateChange() returned %d %s",
__func__, result, AAudio_convertResultToText(result));
__func__, result, AudioGlobal_convertResultToText(result));
}
}
setState(AAUDIO_STREAM_STATE_CLOSING);

@ -27,6 +27,7 @@
#include <aaudio/AAudioTesting.h>
#include "AudioClock.h"
#include "AudioGlobal.h"
#include "AudioStreamBuilder.h"
#include "AudioStream.h"
#include "binding/AAudioCommon.h"
@ -45,63 +46,14 @@ using namespace aaudio;
return AAUDIO_ERROR_NULL; \
}
#define AAUDIO_CASE_ENUM(name) case name: return #name
AAUDIO_API const char * AAudio_convertResultToText(aaudio_result_t returnCode) {
switch (returnCode) {
AAUDIO_CASE_ENUM(AAUDIO_OK);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_DISCONNECTED);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_ILLEGAL_ARGUMENT);
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INTERNAL);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_STATE);
// reserved
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_HANDLE);
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_UNIMPLEMENTED);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_UNAVAILABLE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_FREE_HANDLES);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_MEMORY);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NULL);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_TIMEOUT);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_WOULD_BLOCK);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_FORMAT);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_OUT_OF_RANGE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_SERVICE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_RATE);
}
return "Unrecognized AAudio error.";
return AudioGlobal_convertResultToText(returnCode);
}
AAUDIO_API const char * AAudio_convertStreamStateToText(aaudio_stream_state_t state) {
switch (state) {
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_UNINITIALIZED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_UNKNOWN);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_OPEN);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STARTING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STARTED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_PAUSING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_PAUSED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_FLUSHING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_FLUSHED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STOPPING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STOPPED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_DISCONNECTED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_CLOSING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_CLOSED);
}
return "Unrecognized AAudio state.";
return AudioGlobal_convertStreamStateToText(state);
}
#undef AAUDIO_CASE_ENUM
/******************************************
* Static globals.
*/
static aaudio_policy_t s_MMapPolicy = AAUDIO_UNSPECIFIED;
static AudioStream *convertAAudioStreamToAudioStream(AAudioStream* stream)
{
return (AudioStream*) stream;
@ -526,23 +478,11 @@ AAUDIO_API aaudio_result_t AAudioStream_getTimestamp(AAudioStream* stream,
}
AAUDIO_API aaudio_policy_t AAudio_getMMapPolicy() {
return s_MMapPolicy;
return AudioGlobal_getMMapPolicy();
}
AAUDIO_API aaudio_result_t AAudio_setMMapPolicy(aaudio_policy_t policy) {
aaudio_result_t result = AAUDIO_OK;
switch(policy) {
case AAUDIO_UNSPECIFIED:
case AAUDIO_POLICY_NEVER:
case AAUDIO_POLICY_AUTO:
case AAUDIO_POLICY_ALWAYS:
s_MMapPolicy = policy;
break;
default:
result = AAUDIO_ERROR_ILLEGAL_ARGUMENT;
break;
}
return result;
return AudioGlobal_setMMapPolicy(policy);
}
AAUDIO_API bool AAudioStream_isMMapUsed(AAudioStream* stream)

@ -0,0 +1,99 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <aaudio/AAudio.h>
#include <aaudio/AAudioTesting.h>
#include "AudioGlobal.h"
/******************************************
* Static globals.
*/
namespace aaudio {
static aaudio_policy_t g_MMapPolicy = AAUDIO_UNSPECIFIED;
aaudio_policy_t AudioGlobal_getMMapPolicy() {
return g_MMapPolicy;
}
aaudio_result_t AudioGlobal_setMMapPolicy(aaudio_policy_t policy) {
aaudio_result_t result = AAUDIO_OK;
switch(policy) {
case AAUDIO_UNSPECIFIED:
case AAUDIO_POLICY_NEVER:
case AAUDIO_POLICY_AUTO:
case AAUDIO_POLICY_ALWAYS:
g_MMapPolicy = policy;
break;
default:
result = AAUDIO_ERROR_ILLEGAL_ARGUMENT;
break;
}
return result;
}
#define AAUDIO_CASE_ENUM(name) case name: return #name
const char* AudioGlobal_convertResultToText(aaudio_result_t returnCode) {
switch (returnCode) {
AAUDIO_CASE_ENUM(AAUDIO_OK);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_DISCONNECTED);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_ILLEGAL_ARGUMENT);
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INTERNAL);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_STATE);
// reserved
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_HANDLE);
// reserved
AAUDIO_CASE_ENUM(AAUDIO_ERROR_UNIMPLEMENTED);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_UNAVAILABLE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_FREE_HANDLES);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_MEMORY);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NULL);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_TIMEOUT);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_WOULD_BLOCK);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_FORMAT);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_OUT_OF_RANGE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_NO_SERVICE);
AAUDIO_CASE_ENUM(AAUDIO_ERROR_INVALID_RATE);
}
return "Unrecognized AAudio error.";
}
const char* AudioGlobal_convertStreamStateToText(aaudio_stream_state_t state) {
switch (state) {
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_UNINITIALIZED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_UNKNOWN);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_OPEN);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STARTING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STARTED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_PAUSING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_PAUSED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_FLUSHING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_FLUSHED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STOPPING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_STOPPED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_DISCONNECTED);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_CLOSING);
AAUDIO_CASE_ENUM(AAUDIO_STREAM_STATE_CLOSED);
}
return "Unrecognized AAudio state.";
}
#undef AAUDIO_CASE_ENUM
} // namespace aaudio

@ -0,0 +1,34 @@
/*
* Copyright 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef AAUDIO_AUDIOGLOBAL_H
#define AAUDIO_AUDIOGLOBAL_H
#include <aaudio/AAudio.h>
#include <aaudio/AAudioTesting.h>
namespace aaudio {
aaudio_policy_t AudioGlobal_getMMapPolicy();
aaudio_result_t AudioGlobal_setMMapPolicy(aaudio_policy_t policy);
const char* AudioGlobal_convertResultToText(aaudio_result_t returnCode);
const char* AudioGlobal_convertStreamStateToText(aaudio_stream_state_t state);
}
#endif // AAUDIO_AUDIOGLOBAL_H

@ -25,8 +25,9 @@
#include "AudioStreamBuilder.h"
#include "AudioStream.h"
#include "AudioClock.h"
#include "AudioGlobal.h"
using namespace aaudio;
namespace aaudio {
AudioStream::AudioStream()
: mPlayerBase(new MyPlayerBase(this))
@ -37,14 +38,14 @@ AudioStream::AudioStream()
}
AudioStream::~AudioStream() {
ALOGD("destroying %p, state = %s", this, AAudio_convertStreamStateToText(getState()));
ALOGD("destroying %p, state = %s", this, AudioGlobal_convertStreamStateToText(getState()));
// If the stream is deleted when OPEN or in use then audio resources will leak.
// This would indicate an internal error. So we want to find this ASAP.
LOG_ALWAYS_FATAL_IF(!(getState() == AAUDIO_STREAM_STATE_CLOSED
|| getState() == AAUDIO_STREAM_STATE_UNINITIALIZED
|| getState() == AAUDIO_STREAM_STATE_DISCONNECTED),
"~AudioStream() - still in use, state = %s",
AAudio_convertStreamStateToText(getState()));
AudioGlobal_convertStreamStateToText(getState()));
mPlayerBase->clearParentReference(); // remove reference to this AudioStream
}
@ -166,7 +167,7 @@ aaudio_result_t AudioStream::safePause() {
case AAUDIO_STREAM_STATE_CLOSED:
default:
ALOGW("safePause() stream not running, state = %s",
AAudio_convertStreamStateToText(getState()));
AudioGlobal_convertStreamStateToText(getState()));
return AAUDIO_ERROR_INVALID_STATE;
}
@ -226,7 +227,7 @@ aaudio_result_t AudioStream::safeStop() {
case AAUDIO_STREAM_STATE_CLOSED:
default:
ALOGW("requestStop() stream not running, state = %s",
AAudio_convertStreamStateToText(getState()));
AudioGlobal_convertStreamStateToText(getState()));
return AAUDIO_ERROR_INVALID_STATE;
}
@ -458,3 +459,5 @@ void AudioStream::MyPlayerBase::unregisterWithAudioManager() {
void AudioStream::MyPlayerBase::destroy() {
unregisterWithAudioManager();
}
} // namespace aaudio

@ -27,6 +27,7 @@
#include "binding/AAudioBinderClient.h"
#include "client/AudioStreamInternalCapture.h"
#include "client/AudioStreamInternalPlay.h"
#include "core/AudioGlobal.h"
#include "core/AudioStream.h"
#include "core/AudioStreamBuilder.h"
#include "legacy/AudioStreamRecord.h"
@ -110,7 +111,7 @@ aaudio_result_t AudioStreamBuilder::build(AudioStream** streamPtr) {
}
// The API setting is the highest priority.
aaudio_policy_t mmapPolicy = AAudio_getMMapPolicy();
aaudio_policy_t mmapPolicy = AudioGlobal_getMMapPolicy();
// If not specified then get from a system property.
if (mmapPolicy == AAUDIO_UNSPECIFIED) {
mmapPolicy = AAudioProperty_getMMapPolicy();

@ -24,6 +24,7 @@
#include <utils/Errors.h>
#include "aaudio/AAudio.h"
#include "core/AudioGlobal.h"
#include <aaudio/AAudioTesting.h>
#include <math.h>
#include <system/audio-base.h>
@ -721,7 +722,7 @@ aaudio_result_t AAudio_isFlushAllowed(aaudio_stream_state_t state) {
case AAUDIO_STREAM_STATE_DISCONNECTED:
default:
ALOGE("can only flush stream when PAUSED, OPEN or STOPPED, state = %s",
AAudio_convertStreamStateToText(state));
aaudio::AudioGlobal_convertStreamStateToText(state));
result = AAUDIO_ERROR_INVALID_STATE;
break;
}

@ -12,6 +12,7 @@ cc_test {
srcs: ["test_marshalling.cpp"],
shared_libs: [
"libaaudio",
"libaaudio_internal",
"libbinder",
"libcutils",
"libutils",
@ -22,7 +23,7 @@ cc_test {
name: "test_block_adapter",
defaults: ["libaaudio_tests_defaults"],
srcs: ["test_block_adapter.cpp"],
shared_libs: ["libaaudio"],
shared_libs: ["libaaudio_internal"],
}
cc_test {
@ -37,7 +38,7 @@ cc_test {
name: "test_linear_ramp",
defaults: ["libaaudio_tests_defaults"],
srcs: ["test_linear_ramp.cpp"],
shared_libs: ["libaaudio"],
shared_libs: ["libaaudio_internal"],
}
cc_test {
@ -165,5 +166,5 @@ cc_test {
name: "test_atomic_fifo",
defaults: ["libaaudio_tests_defaults"],
srcs: ["test_atomic_fifo.cpp"],
shared_libs: ["libaaudio"],
shared_libs: ["libaaudio_internal"],
}

@ -33,6 +33,7 @@
#include "AAudioServiceStreamMMAP.h"
#include "AAudioServiceStreamShared.h"
#include "binding/IAAudioService.h"
#include "core/AudioGlobal.h"
#include "ServiceUtilities.h"
using namespace android;
@ -128,7 +129,7 @@ aaudio_handle_t AAudioService::openStream(const aaudio::AAudioStreamRequest &req
if (result != AAUDIO_OK) {
serviceStream.clear();
ALOGE("openStream(): failed, return %d = %s",
result, AAudio_convertResultToText(result));
result, AudioGlobal_convertResultToText(result));
return result;
} else {
aaudio_handle_t handle = mStreamTracker.addStreamForHandle(serviceStream.get());

@ -46,7 +46,7 @@ LOCAL_CFLAGS += -Wno-unused-parameter
LOCAL_CFLAGS += -Wall -Werror
LOCAL_SHARED_LIBRARIES := \
libaaudio \
libaaudio_internal \
libaudioflinger \
libaudioclient \
libbinder \

Loading…
Cancel
Save