summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-06-19 12:05:17 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-06-19 12:05:17 +0000
commit397a52b462b4a9046cafc9a80c8d70b91f4e127c (patch)
tree46a6d340c53d08a5ce6a98e852357936044ea561
parent4b182d70a8fbbd7e8d0405bfe0c0f1c8885bbf14 (diff)
parent9295ee9399de493260d441038efedcf7c18b8dae (diff)
downloadwilhelm-android12-mainline-media-release.tar.gz
Change-Id: Id2c34d1785a062ab205d20a42d3f51c85db77977
-rw-r--r--Android.bp28
-rw-r--r--OWNERS1
-rw-r--r--src/Android.bp19
-rw-r--r--src/android/AudioPlayer_to_android.cpp59
-rw-r--r--src/android/AudioRecorder_to_android.cpp46
-rw-r--r--src/android/android_Effect.cpp26
-rw-r--r--src/android/channels.cpp3
-rw-r--r--src/itf/IPlay.cpp2
-rw-r--r--src/itfstruct.h2
-rw-r--r--tests/Android.bp10
-rw-r--r--tests/automated/Android.bp4
-rw-r--r--tests/automated/README.md5
-rw-r--r--tests/examples/Android.bp10
-rw-r--r--tests/listening/Android.bp4
-rw-r--r--tests/mimeUri/Android.bp10
-rw-r--r--tests/native-media/Android.bp4
-rw-r--r--tests/native-media/jni/Android.bp4
-rw-r--r--tests/sandbox/Android.bp4
-rw-r--r--tests/sandbox/streamSource/Android.bp4
19 files changed, 191 insertions, 54 deletions
diff --git a/Android.bp b/Android.bp
index a0baea7..e003d69 100644
--- a/Android.bp
+++ b/Android.bp
@@ -12,6 +12,34 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+package {
+ default_applicable_licenses: ["frameworks_wilhelm_license"],
+}
+
+// Added automatically by a large-scale-change that took the approach of
+// 'apply every license found to every target'. While this makes sure we respect
+// every license restriction, it may not be entirely correct.
+//
+// e.g. GPL in an MIT project might only apply to the contrib/ directory.
+//
+// Please consider splitting the single license below into multiple licenses,
+// taking care not to lose any license_kind information, and overriding the
+// default license using the 'licenses: [...]' property on targets as needed.
+//
+// For unused files, consider creating a 'fileGroup' with "//visibility:private"
+// to attach the license to, and including a comment whether the files may be
+// used in the current project.
+// See: http://go/android-license-faq
+license {
+ name: "frameworks_wilhelm_license",
+ visibility: [":__subpackages__"],
+ license_kinds: [
+ "SPDX-license-identifier-Apache-2.0",
+ "SPDX-license-identifier-MIT",
+ ],
+ // large-scale-change unable to identify any license_text files
+}
+
ndk_headers {
name: "libOpenMAXAL_headers",
from: "include",
diff --git a/OWNERS b/OWNERS
index b90ae5a..8e61fa7 100644
--- a/OWNERS
+++ b/OWNERS
@@ -1,3 +1,4 @@
# TODO: add more owners
gkasten@google.com
elaurent@google.com
+philburk@google.com
diff --git a/src/Android.bp b/src/Android.bp
index dedd809..827b4a4 100644
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -1,3 +1,13 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_wilhelm_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["frameworks_wilhelm_license"],
+}
+
cc_library_static {
name: "libOpenSLESUT",
@@ -7,7 +17,10 @@ cc_library_static {
"ut/slesutResult.c",
],
- header_libs: ["libOpenSLES_headers"],
+ header_libs: [
+ "jni_headers",
+ "libOpenSLES_headers",
+ ],
export_header_lib_headers: ["libOpenSLES_headers"],
export_include_dirs: ["ut"],
@@ -195,12 +208,14 @@ cc_library_shared {
],
header_libs: [
+ "jni_headers",
"libmediametrics_headers",
"libOpenSLES_headers",
"media_plugin_headers",
],
export_header_lib_headers: [
+ "jni_headers",
"libOpenSLES_headers",
"media_plugin_headers",
],
@@ -212,11 +227,13 @@ cc_library_shared {
],
shared_libs: [
+ "framework-permission-aidl-cpp",
"liblog",
"libutils",
"libmedia",
"libmedia_codeclist",
"libaudioclient",
+ "libaudioclient_aidl_conversion",
"libaudiofoundation",
"libaudiomanager",
"libbinder",
diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index 9dc0a8a..a324b4a 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -49,9 +49,10 @@ template class android::KeyedVector<SLuint32,
//-----------------------------------------------------------------------------
// Inline functions to communicate with AudioService through the native AudioManager interface
-inline void audioManagerPlayerEvent(CAudioPlayer* ap, android::player_state_t event) {
+inline void audioManagerPlayerEvent(CAudioPlayer* ap, android::player_state_t event,
+ audio_port_handle_t deviceId) {
if (ap->mObject.mEngine->mAudioManager != 0) {
- ap->mObject.mEngine->mAudioManager->playerEvent(ap->mPIId, event);
+ ap->mObject.mEngine->mAudioManager->playerEvent(ap->mPIId, event, deviceId);
}
}
@@ -878,7 +879,7 @@ static void sfplayer_handlePrefetchEvent(int event, int data1, int data2, void*
if ((ap->mTrackPlayer->mAudioTrack != 0) && (!ap->mSeek.mLoopEnabled)) {
ap->mTrackPlayer->mAudioTrack->stop();
}
- ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STOPPED);
+ ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STOPPED, AUDIO_PORT_HANDLE_NONE);
}
break;
@@ -1514,15 +1515,15 @@ static void checkAndSetPerformanceModePre(CAudioPlayer *pAudioPlayer)
// no need to check the buffer queue size, application side
// double-buffering (and more) is not a requirement for using fast tracks
- // Check a blacklist of interfaces that are incompatible with fast tracks.
- // The alternative, to check a whitelist of compatible interfaces, is
+ // Check a denylist of interfaces that are incompatible with fast tracks.
+ // The alternative, to check a allowlist of compatible interfaces, is
// more maintainable but is too slow. As a compromise, in a debug build
// we use both methods and warn if they produce different results.
- // In release builds, we only use the blacklist method.
- // If a blacklisted interface is added after realization using
+ // In release builds, we only use the denylist method.
+ // If a denylisted interface is added after realization using
// DynamicInterfaceManagement::AddInterface,
// then this won't be detected but the interface will be ineffective.
- static const unsigned blacklist[] = {
+ static const unsigned denylist[] = {
MPH_BASSBOOST,
MPH_EFFECTSEND,
MPH_ENVIRONMENTALREVERB,
@@ -1532,10 +1533,10 @@ static void checkAndSetPerformanceModePre(CAudioPlayer *pAudioPlayer)
MPH_VIRTUALIZER,
MPH_ANDROIDEFFECT,
MPH_ANDROIDEFFECTSEND,
- // FIXME The problem with a blacklist is remembering to add new interfaces here
+ // FIXME The problem with a denylist is remembering to add new interfaces here
};
- for (unsigned i = 0; i < sizeof(blacklist)/sizeof(blacklist[0]); ++i) {
- if (IsInterfaceInitialized(&pAudioPlayer->mObject, blacklist[i])) {
+ for (unsigned i = 0; i < sizeof(denylist)/sizeof(denylist[0]); ++i) {
+ if (IsInterfaceInitialized(&pAudioPlayer->mObject, denylist[i])) {
//TODO: query effect for EFFECT_FLAG_HW_ACC_xx flag to refine mode
allowedModes &=
~(ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS);
@@ -1543,11 +1544,11 @@ static void checkAndSetPerformanceModePre(CAudioPlayer *pAudioPlayer)
}
}
#if LOG_NDEBUG == 0
- bool blacklistResult = (
+ bool denylistResult = (
(allowedModes &
(ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS)) != 0);
- bool whitelistResult = true;
- static const unsigned whitelist[] = {
+ bool allowlistResult = true;
+ static const unsigned allowlist[] = {
MPH_BUFFERQUEUE,
MPH_DYNAMICINTERFACEMANAGEMENT,
MPH_METADATAEXTRACTION,
@@ -1561,19 +1562,19 @@ static void checkAndSetPerformanceModePre(CAudioPlayer *pAudioPlayer)
MPH_ANDROIDBUFFERQUEUESOURCE,
};
for (unsigned mph = MPH_MIN; mph < MPH_MAX; ++mph) {
- for (unsigned i = 0; i < sizeof(whitelist)/sizeof(whitelist[0]); ++i) {
- if (mph == whitelist[i]) {
+ for (unsigned i = 0; i < sizeof(allowlist)/sizeof(allowlist[0]); ++i) {
+ if (mph == allowlist[i]) {
goto compatible;
}
}
if (IsInterfaceInitialized(&pAudioPlayer->mObject, mph)) {
- whitelistResult = false;
+ allowlistResult = false;
break;
}
compatible: ;
}
- if (whitelistResult != blacklistResult) {
- SL_LOGW("whitelistResult != blacklistResult");
+ if (allowlistResult != denylistResult) {
+ SL_LOGW("allowlistResult != denylistResult");
}
#endif
if (pAudioPlayer->mPerformanceMode == ANDROID_PERFORMANCE_MODE_LATENCY) {
@@ -1711,7 +1712,7 @@ SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async
}
pAudioPlayer->mTrackPlayer->init(pat, android::PLAYER_TYPE_SLES_AUDIOPLAYER_BUFFERQUEUE,
- usageForStreamType(pAudioPlayer->mStreamType));
+ usageForStreamType(pAudioPlayer->mStreamType), pAudioPlayer->mSessionId);
// update performance mode according to actual flags granted to AudioTrack
checkAndSetPerformanceModePost(pAudioPlayer);
@@ -1812,7 +1813,7 @@ SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async
pAudioPlayer->mPIId = pAudioPlayer->mObject.mEngine->mAudioManager->trackPlayer(
android::PLAYER_TYPE_SLES_AUDIOPLAYER_URI_FD,
usageForStreamType(pAudioPlayer->mStreamType), AUDIO_CONTENT_TYPE_UNKNOWN,
- pAudioPlayer->mTrackPlayer);
+ pAudioPlayer->mTrackPlayer, pAudioPlayer->mSessionId);
}
}
break;
@@ -2232,6 +2233,11 @@ void android_audioPlayer_setPlayState(CAudioPlayer *ap) {
SLuint32 playState = ap->mPlay.mState;
+ audio_port_handle_t deviceId = AUDIO_PORT_HANDLE_NONE;
+ if (ap->mTrackPlayer != 0 && ap->mTrackPlayer->mAudioTrack != 0) {
+ deviceId = ap->mTrackPlayer->mAudioTrack->getRoutedDeviceId();
+ }
+
switch (ap->mAndroidObjType) {
case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
switch (playState) {
@@ -2249,7 +2255,7 @@ void android_audioPlayer_setPlayState(CAudioPlayer *ap) {
// instead of ap->mTrackPlayer->mAudioTrack->start();
if (!ap->mDeferredStart) {
// state change
- ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STARTED);
+ ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STARTED, deviceId);
}
ap->mDeferredStart = true;
}
@@ -2264,14 +2270,14 @@ void android_audioPlayer_setPlayState(CAudioPlayer *ap) {
switch (playState) {
case SL_PLAYSTATE_STOPPED:
aplayer_setPlayState(ap->mAPlayer, playState, &ap->mAndroidObjState);
- audioManagerPlayerEvent(ap, android::PLAYER_STATE_STOPPED);
+ audioManagerPlayerEvent(ap, android::PLAYER_STATE_STOPPED, AUDIO_PORT_HANDLE_NONE);
break;
case SL_PLAYSTATE_PAUSED:
aplayer_setPlayState(ap->mAPlayer, playState, &ap->mAndroidObjState);
- audioManagerPlayerEvent(ap, android::PLAYER_STATE_PAUSED);
+ audioManagerPlayerEvent(ap, android::PLAYER_STATE_PAUSED, AUDIO_PORT_HANDLE_NONE);
break;
case SL_PLAYSTATE_PLAYING:
- audioManagerPlayerEvent(ap, android::PLAYER_STATE_STARTED);
+ audioManagerPlayerEvent(ap, android::PLAYER_STATE_STARTED, deviceId);
aplayer_setPlayState(ap->mAPlayer, playState, &ap->mAndroidObjState);
break;
}
@@ -2481,7 +2487,8 @@ void android_audioPlayer_bufferQueue_onRefilled_l(CAudioPlayer *ap) {
// queue was stopped when the queue become empty, we restart as soon as a new buffer
// has been enqueued since we're in playing state
if (ap->mTrackPlayer->mAudioTrack != 0) {
- ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STARTED);
+ ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STARTED,
+ ap->mTrackPlayer->mAudioTrack->getRoutedDeviceId());
// instead of ap->mTrackPlayer->mAudioTrack->start();
ap->mDeferredStart = true;
}
diff --git a/src/android/AudioRecorder_to_android.cpp b/src/android/AudioRecorder_to_android.cpp
index 2595112..411beff 100644
--- a/src/android/AudioRecorder_to_android.cpp
+++ b/src/android/AudioRecorder_to_android.cpp
@@ -29,6 +29,8 @@
#define KEY_RECORDING_PRESET_PARAMSIZE sizeof(SLuint32)
#define KEY_PERFORMANCE_MODE_PARAMSIZE sizeof(SLuint32)
+using android::content::AttributionSourceState;
+
//-----------------------------------------------------------------------------
// Internal utility functions
//----------------------------
@@ -515,32 +517,32 @@ static void checkAndSetPerformanceModePre(CAudioRecorder* ar)
// no need to check the buffer queue size, application side
// double-buffering (and more) is not a requirement for using fast tracks
- // Check a blacklist of interfaces that are incompatible with fast tracks.
- // The alternative, to check a whitelist of compatible interfaces, is
+ // Check a denylist of interfaces that are incompatible with fast tracks.
+ // The alternative, to check a allowlist of compatible interfaces, is
// more maintainable but is too slow. As a compromise, in a debug build
// we use both methods and warn if they produce different results.
- // In release builds, we only use the blacklist method.
- // If a blacklisted interface is added after realization using
+ // In release builds, we only use the denylist method.
+ // If a denylisted interface is added after realization using
// DynamicInterfaceManagement::AddInterface,
// then this won't be detected but the interface will be ineffective.
- static const unsigned blacklist[] = {
+ static const unsigned denylist[] = {
MPH_ANDROIDACOUSTICECHOCANCELLATION,
MPH_ANDROIDAUTOMATICGAINCONTROL,
MPH_ANDROIDNOISESUPPRESSION,
MPH_ANDROIDEFFECT,
- // FIXME The problem with a blacklist is remembering to add new interfaces here
+ // FIXME The problem with a denylist is remembering to add new interfaces here
};
- for (unsigned i = 0; i < sizeof(blacklist)/sizeof(blacklist[0]); ++i) {
- if (IsInterfaceInitialized(&ar->mObject, blacklist[i])) {
+ for (unsigned i = 0; i < sizeof(denylist)/sizeof(denylist[0]); ++i) {
+ if (IsInterfaceInitialized(&ar->mObject, denylist[i])) {
uint32_t flags = 0;
allowedModes &= ~ANDROID_PERFORMANCE_MODE_LATENCY;
// if generic effect interface is used we don't know which effect will be used and
// disable all low latency performance modes
- if (blacklist[i] != MPH_ANDROIDEFFECT) {
- switch (blacklist[i]) {
+ if (denylist[i] != MPH_ANDROIDEFFECT) {
+ switch (denylist[i]) {
case MPH_ANDROIDACOUSTICECHOCANCELLATION:
SL_LOGV("checkAndSetPerformanceModePre found AEC name %s",
ar->mAcousticEchoCancellation.mAECDescriptor.name);
@@ -567,11 +569,11 @@ static void checkAndSetPerformanceModePre(CAudioRecorder* ar)
}
}
#if LOG_NDEBUG == 0
- bool blacklistResult = (
+ bool denylistResult = (
(allowedModes &
(ANDROID_PERFORMANCE_MODE_LATENCY|ANDROID_PERFORMANCE_MODE_LATENCY_EFFECTS)) != 0);
- bool whitelistResult = true;
- static const unsigned whitelist[] = {
+ bool allowlistResult = true;
+ static const unsigned allowlist[] = {
MPH_BUFFERQUEUE,
MPH_DYNAMICINTERFACEMANAGEMENT,
MPH_OBJECT,
@@ -580,19 +582,19 @@ static void checkAndSetPerformanceModePre(CAudioRecorder* ar)
MPH_ANDROIDSIMPLEBUFFERQUEUE,
};
for (unsigned mph = MPH_MIN; mph < MPH_MAX; ++mph) {
- for (unsigned i = 0; i < sizeof(whitelist)/sizeof(whitelist[0]); ++i) {
- if (mph == whitelist[i]) {
+ for (unsigned i = 0; i < sizeof(allowlist)/sizeof(allowlist[0]); ++i) {
+ if (mph == allowlist[i]) {
goto compatible;
}
}
if (IsInterfaceInitialized(&ar->mObject, mph)) {
- whitelistResult = false;
+ allowlistResult = false;
break;
}
compatible: ;
}
- if (whitelistResult != blacklistResult) {
- SL_LOGW("whitelistResult != blacklistResult");
+ if (allowlistResult != denylistResult) {
+ SL_LOGW("allowlistResult != denylistResult");
}
#endif
if (ar->mPerformanceMode == ANDROID_PERFORMANCE_MODE_LATENCY) {
@@ -687,13 +689,19 @@ SLresult android_audioRecorder_realize(CAudioRecorder* ar, SLboolean async) {
SL_LOGV("SLES channel mask %#x converted to Android mask %#x", df_pcm->channelMask,
channelMask);
+ // TODO b/182392769: use attribution source util
+ AttributionSourceState attributionSource;
+ attributionSource.uid = VALUE_OR_FATAL(android::legacy2aidl_uid_t_int32_t(getuid()));
+ attributionSource.pid = VALUE_OR_FATAL(android::legacy2aidl_pid_t_int32_t(getpid()));
+ attributionSource.token = android::sp<android::BBinder>::make();
+
// initialize platform-specific CAudioRecorder fields
ar->mAudioRecord = new android::AudioRecord(
ar->mRecordSource, // source
sampleRate, // sample rate in Hertz
sles_to_android_sampleFormat(df_pcm), // format
channelMask, // channel mask
- android::String16(), // app ops
+ attributionSource,
0, // frameCount
audioRecorder_callback,// callback_t
(void*)ar, // user, callback data, here the AudioRecorder
diff --git a/src/android/android_Effect.cpp b/src/android/android_Effect.cpp
index ca0a1c5..2b5582f 100644
--- a/src/android/android_Effect.cpp
+++ b/src/android/android_Effect.cpp
@@ -32,6 +32,8 @@
#include <system/audio.h>
+using android::content::AttributionSourceState;
+
static const int EQUALIZER_PARAM_SIZE_MAX = sizeof(effect_param_t) + 2 * sizeof(int32_t)
+ EFFECT_STRING_LEN_MAX;
@@ -665,12 +667,20 @@ bool android_fx_initEffectObj(audio_session_t sessionId, android::sp<android::Au
const effect_uuid_t *type) {
//SL_LOGV("android_fx_initEffectObj on session %d", sessionId);
- effect = new android::AudioEffect(type, android::String16(), EFFECT_UUID_NULL,
+ // TODO b/182392769: use attribution source util
+ AttributionSourceState attributionSource;
+ attributionSource.uid = VALUE_OR_FATAL(android::legacy2aidl_uid_t_int32_t(getuid()));
+ attributionSource.pid = VALUE_OR_FATAL(android::legacy2aidl_pid_t_int32_t(getpid()));
+ attributionSource.token = android::sp<android::BBinder>::make();
+
+ effect = android::sp<android::AudioEffect>::make(attributionSource);
+
+ effect->set(type, EFFECT_UUID_NULL,
0,// priority
0,// effect callback
0,// callback data
sessionId,// session ID
- 0 );// output
+ 0); // output
android::status_t status = effect->initCheck();
if (android::NO_ERROR != status) {
@@ -805,9 +815,15 @@ SLresult android_genericFx_createEffect(IAndroidEffect* iae, SLInterfaceID pUuid
}
// create new effect
- android::sp<android::AudioEffect> pFx = new android::AudioEffect(
- NULL, // not using type to create effect
- android::String16(),
+ // TODO b/182392769: use attribution source util
+ AttributionSourceState attributionSource;
+ attributionSource.uid = VALUE_OR_FATAL(android::legacy2aidl_uid_t_int32_t(getuid()));
+ attributionSource.pid = VALUE_OR_FATAL(android::legacy2aidl_pid_t_int32_t(getpid()));
+ attributionSource.token = android::sp<android::BBinder>::make();
+
+ const auto pFx = android::sp<android::AudioEffect>::make(attributionSource);
+
+ pFx->set(NULL, // not using type to create effect
(const effect_uuid_t*)pUuid,
0,// priority
0,// effect callback
diff --git a/src/android/channels.cpp b/src/android/channels.cpp
index 4f3e976..f0eeb7c 100644
--- a/src/android/channels.cpp
+++ b/src/android/channels.cpp
@@ -15,6 +15,7 @@
*/
#include "sles_allinclusive.h"
+#include <cutils/bitops.h>
#include <system/audio.h>
#include <SLES/OpenSLES_Android.h>
#include "channels.h"
@@ -191,7 +192,7 @@ static audio_channel_mask_t sles_to_android_mask_helper(
SL_LOGE("Unrecognized channel representation %#x", rep);
}
- uint32_t result = audio_channel_mask_from_representation_and_bits(
+ audio_channel_mask_t result = audio_channel_mask_from_representation_and_bits(
rep,
bitsOut);
diff --git a/src/itf/IPlay.cpp b/src/itf/IPlay.cpp
index acee3ff..3dcffcd 100644
--- a/src/itf/IPlay.cpp
+++ b/src/itf/IPlay.cpp
@@ -75,7 +75,7 @@ static SLresult IPlay_SetPlayState(SLPlayItf self, SLuint32 state)
case (SL_PLAYSTATE_STOPPING << 2) | SL_PLAYSTATE_PAUSED:
case (SL_PLAYSTATE_STOPPING << 2) | SL_PLAYSTATE_PLAYING:
- // wait for other guy to finish his transition, then retry ours
+ // wait for someone else to finish their transition, then retry ours
continue;
case (SL_PLAYSTATE_PAUSED << 2) | SL_PLAYSTATE_STOPPED:
diff --git a/src/itfstruct.h b/src/itfstruct.h
index a717f46..ab8a4d0 100644
--- a/src/itfstruct.h
+++ b/src/itfstruct.h
@@ -69,7 +69,7 @@ typedef struct {
const struct SL3DCommitItf_ *mItf;
IObject *mThis;
SLboolean mDeferred;
- SLuint32 mGeneration; // incremented each master clock cycle
+ SLuint32 mGeneration; // incremented each main clock cycle
SLuint32 mWaiting; // number of threads waiting in Commit
} I3DCommit;
diff --git a/tests/Android.bp b/tests/Android.bp
index fb33c08..9241d9e 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -1,4 +1,14 @@
// Build the unit tests.
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_wilhelm_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["frameworks_wilhelm_license"],
+}
+
cc_test {
name: "libopenslestests",
diff --git a/tests/automated/Android.bp b/tests/automated/Android.bp
index 6b78d5d..6e3b1bc 100644
--- a/tests/automated/Android.bp
+++ b/tests/automated/Android.bp
@@ -1,5 +1,9 @@
// Build the unit tests.
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test {
name: "BufferQueue_test",
diff --git a/tests/automated/README.md b/tests/automated/README.md
new file mode 100644
index 0000000..9e22a22
--- /dev/null
+++ b/tests/automated/README.md
@@ -0,0 +1,5 @@
+How to run BufferQueue\_test
+
+Run either /data/nativetest/BufferQueue\_test/BufferQueue\_test
+or /data/nativetest64/BufferQueue\_test/BufferQueue\_test
+then expect to hear several sine sweeps, and see PASSED at end.
diff --git a/tests/examples/Android.bp b/tests/examples/Android.bp
index 77b96d9..9603c26 100644
--- a/tests/examples/Android.bp
+++ b/tests/examples/Android.bp
@@ -1,5 +1,15 @@
// slesTest_recBuffQueue
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_wilhelm_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["frameworks_wilhelm_license"],
+}
+
cc_test {
name: "slesTest_recBuffQueue",
gtest: false,
diff --git a/tests/listening/Android.bp b/tests/listening/Android.bp
index c0ba682..0771be3 100644
--- a/tests/listening/Android.bp
+++ b/tests/listening/Android.bp
@@ -1,3 +1,7 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test {
name: "slesTest_seekTorture",
gtest: false,
diff --git a/tests/mimeUri/Android.bp b/tests/mimeUri/Android.bp
index 00ddd90..5e6fafd 100644
--- a/tests/mimeUri/Android.bp
+++ b/tests/mimeUri/Android.bp
@@ -1,5 +1,15 @@
// slesTest_playStates
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_wilhelm_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-MIT
+ default_applicable_licenses: ["frameworks_wilhelm_license"],
+}
+
cc_test {
name: "slesTest_playStates",
gtest: false,
diff --git a/tests/native-media/Android.bp b/tests/native-media/Android.bp
index d7f5549..66ff198 100644
--- a/tests/native-media/Android.bp
+++ b/tests/native-media/Android.bp
@@ -1,3 +1,7 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
android_test {
name: "native-media",
srcs: [
diff --git a/tests/native-media/jni/Android.bp b/tests/native-media/jni/Android.bp
index 28350d0..50ece7a 100644
--- a/tests/native-media/jni/Android.bp
+++ b/tests/native-media/jni/Android.bp
@@ -1,3 +1,7 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test_library {
name: "libnative-media-jni",
srcs: ["native-media-jni.c"],
diff --git a/tests/sandbox/Android.bp b/tests/sandbox/Android.bp
index 6188890..2142d19 100644
--- a/tests/sandbox/Android.bp
+++ b/tests/sandbox/Android.bp
@@ -1,5 +1,9 @@
// intbufq
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test {
name: "slesTest_intbufq",
gtest: false,
diff --git a/tests/sandbox/streamSource/Android.bp b/tests/sandbox/streamSource/Android.bp
index fed7e39..bfbb05a 100644
--- a/tests/sandbox/streamSource/Android.bp
+++ b/tests/sandbox/streamSource/Android.bp
@@ -1,5 +1,9 @@
// slesTest_playStream
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
cc_test {
name: "slesTest_playStream",
gtest: false,