Merge "cameraservice_test: Migrate test makefiles from Android.mk to Android.bp"
diff --git a/camera/ndk/impl/ACameraMetadata.cpp b/camera/ndk/impl/ACameraMetadata.cpp
index dab2fef..05124c0 100644
--- a/camera/ndk/impl/ACameraMetadata.cpp
+++ b/camera/ndk/impl/ACameraMetadata.cpp
@@ -182,7 +182,7 @@
int64_t format = entry.data.i64[i + STREAM_FORMAT_OFFSET];
int64_t width = entry.data.i64[i + STREAM_WIDTH_OFFSET];
int64_t height = entry.data.i64[i + STREAM_HEIGHT_OFFSET];
- int64_t duration = entry.data.i32[i + STREAM_DURATION_OFFSET];
+ int64_t duration = entry.data.i64[i + STREAM_DURATION_OFFSET];
// Leave the unfiltered format in so apps depending on previous wrong
// filter behavior continue to work
diff --git a/media/codec2/TEST_MAPPING b/media/codec2/TEST_MAPPING
index 6ac4210..16cb323 100644
--- a/media/codec2/TEST_MAPPING
+++ b/media/codec2/TEST_MAPPING
@@ -15,13 +15,24 @@
},
{
"exclude-annotation": "android.platform.test.annotations.RequiresDevice"
+ }
+ ]
+ },
+ {
+ "name": "CtsMediaAudioTestCases",
+ "options": [
+ {
+ "include-annotation": "android.platform.test.annotations.Presubmit"
+ },
+ {
+ "exclude-annotation": "android.platform.test.annotations.RequiresDevice"
},
// TODO: b/149314419
{
- "exclude-filter": "android.media.cts.AudioPlaybackCaptureTest"
+ "exclude-filter": "android.media.audio.cts.AudioPlaybackCaptureTest"
},
{
- "exclude-filter": "android.media.cts.AudioRecordTest"
+ "exclude-filter": "android.media.audio.cts.AudioRecordTest"
}
]
}
diff --git a/media/libaaudio/src/legacy/AudioStreamRecord.cpp b/media/libaaudio/src/legacy/AudioStreamRecord.cpp
index a3f89f6..df7d4cf 100644
--- a/media/libaaudio/src/legacy/AudioStreamRecord.cpp
+++ b/media/libaaudio/src/legacy/AudioStreamRecord.cpp
@@ -128,7 +128,7 @@
uint32_t notificationFrames = 0;
// Setup the callback if there is one.
- AudioRecord::callback_t callback = nullptr;
+ AudioRecord::legacy_callback_t callback = nullptr;
void *callbackData = nullptr;
AudioRecord::transfer_type streamTransferType = AudioRecord::transfer_type::TRANSFER_SYNC;
if (builder.getDataCallbackProc() != nullptr) {
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index d3c5231..ac128e6 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -143,7 +143,7 @@
audio_channel_mask_t channelMask,
const AttributionSourceState& client,
size_t frameCount,
- callback_t cbf,
+ legacy_callback_t callback,
void* user,
uint32_t notificationFrames,
audio_session_t sessionId,
@@ -163,7 +163,39 @@
{
uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(mClientAttributionSource.uid));
pid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(mClientAttributionSource.pid));
- (void)set(inputSource, sampleRate, format, channelMask, frameCount, cbf, user,
+ (void)set(inputSource, sampleRate, format, channelMask, frameCount, callback, user,
+ notificationFrames, false /*threadCanCallJava*/, sessionId, transferType, flags,
+ uid, pid, pAttributes, selectedDeviceId, selectedMicDirection,
+ microphoneFieldDimension);
+}
+
+AudioRecord::AudioRecord(
+ audio_source_t inputSource,
+ uint32_t sampleRate,
+ audio_format_t format,
+ audio_channel_mask_t channelMask,
+ const AttributionSourceState& client,
+ size_t frameCount,
+ const wp<IAudioRecordCallback>& callback,
+ uint32_t notificationFrames,
+ audio_session_t sessionId,
+ transfer_type transferType,
+ audio_input_flags_t flags,
+ const audio_attributes_t* pAttributes,
+ audio_port_handle_t selectedDeviceId,
+ audio_microphone_direction_t selectedMicDirection,
+ float microphoneFieldDimension)
+ : mActive(false),
+ mStatus(NO_INIT),
+ mClientAttributionSource(client),
+ mSessionId(AUDIO_SESSION_ALLOCATE),
+ mPreviousPriority(ANDROID_PRIORITY_NORMAL),
+ mPreviousSchedulingGroup(SP_DEFAULT),
+ mProxy(nullptr)
+{
+ uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(mClientAttributionSource.uid));
+ pid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(mClientAttributionSource.pid));
+ (void)set(inputSource, sampleRate, format, channelMask, frameCount, callback,
notificationFrames, false /*threadCanCallJava*/, sessionId, transferType, flags,
uid, pid, pAttributes, selectedDeviceId, selectedMicDirection,
microphoneFieldDimension);
@@ -218,14 +250,44 @@
AudioSystem::removeAudioDeviceCallback(this, mInput, mPortId);
}
}
+namespace {
+class LegacyCallbackWrapper : public AudioRecord::IAudioRecordCallback {
+ const AudioRecord::legacy_callback_t mCallback;
+ void* const mData;
+
+ public:
+ LegacyCallbackWrapper(AudioRecord::legacy_callback_t callback, void* user)
+ : mCallback(callback), mData(user) {}
+
+ size_t onMoreData(const AudioRecord::Buffer& buffer) override {
+ AudioRecord::Buffer copy = buffer;
+ mCallback(AudioRecord::EVENT_MORE_DATA, mData, ©);
+ return copy.size;
+ }
+
+ void onOverrun() override { mCallback(AudioRecord::EVENT_OVERRUN, mData, nullptr); }
+
+ void onMarker(uint32_t markerPosition) override {
+ mCallback(AudioRecord::EVENT_MARKER, mData, &markerPosition);
+ }
+
+ void onNewPos(uint32_t newPos) override {
+ mCallback(AudioRecord::EVENT_NEW_POS, mData, &newPos);
+ }
+
+ void onNewIAudioRecord() override {
+ mCallback(AudioRecord::EVENT_NEW_IAUDIORECORD, mData, nullptr);
+ }
+};
+} // namespace
+
status_t AudioRecord::set(
audio_source_t inputSource,
uint32_t sampleRate,
audio_format_t format,
audio_channel_mask_t channelMask,
size_t frameCount,
- callback_t cbf,
- void* user,
+ const wp<IAudioRecordCallback>& callback,
uint32_t notificationFrames,
bool threadCanCallJava,
audio_session_t sessionId,
@@ -241,7 +303,7 @@
{
status_t status = NO_ERROR;
uint32_t channelCount;
-
+ const sp<IAudioRecordCallback> callbackHandle = callback.promote();
// Note mPortId is not valid until the track is created, so omit mPortId in ALOG for set.
ALOGV("%s(): inputSource %d, sampleRate %u, format %#x, channelMask %#x, frameCount %zu, "
"notificationFrames %u, sessionId %d, transferType %d, flags %#x, attributionSource %s"
@@ -274,15 +336,15 @@
switch (transferType) {
case TRANSFER_DEFAULT:
- if (cbf == NULL || threadCanCallJava) {
+ if (callbackHandle == nullptr || threadCanCallJava) {
transferType = TRANSFER_SYNC;
} else {
transferType = TRANSFER_CALLBACK;
}
break;
case TRANSFER_CALLBACK:
- if (cbf == NULL) {
- ALOGE("%s(): Transfer type TRANSFER_CALLBACK but cbf == NULL", __func__);
+ if (callbackHandle == nullptr) {
+ ALOGE("%s(): Transfer type TRANSFER_CALLBACK but callback == nullptr", __func__);
status = BAD_VALUE;
goto exit;
}
@@ -304,7 +366,7 @@
goto exit;
}
- if (pAttributes == NULL) {
+ if (pAttributes == nullptr) {
mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
mAttributes.source = inputSource;
if (inputSource == AUDIO_SOURCE_VOICE_COMMUNICATION
@@ -360,9 +422,9 @@
ALOGV("%s(): mSessionId %d", __func__, mSessionId);
mOrigFlags = mFlags = flags;
- mCbf = cbf;
+ mCallback = callbackHandle;
- if (cbf != NULL) {
+ if (mCallback != nullptr) {
mAudioRecordThread = new AudioRecordThread(*this);
mAudioRecordThread->run("AudioRecord", ANDROID_PRIORITY_AUDIO);
// thread begins in paused state, and will not reference us until start()
@@ -385,7 +447,6 @@
goto exit;
}
- mUserData = user;
// TODO: add audio hardware input latency here
mLatency = (1000LL * mFrameCount) / mSampleRate;
mMarkerPosition = 0;
@@ -407,6 +468,37 @@
return status;
}
+status_t AudioRecord::set(
+ audio_source_t inputSource,
+ uint32_t sampleRate,
+ audio_format_t format,
+ audio_channel_mask_t channelMask,
+ size_t frameCount,
+ legacy_callback_t callback,
+ void* user,
+ uint32_t notificationFrames,
+ bool threadCanCallJava,
+ audio_session_t sessionId,
+ transfer_type transferType,
+ audio_input_flags_t flags,
+ uid_t uid,
+ pid_t pid,
+ const audio_attributes_t* pAttributes,
+ audio_port_handle_t selectedDeviceId,
+ audio_microphone_direction_t selectedMicDirection,
+ float microphoneFieldDimension,
+ int32_t maxSharedAudioHistoryMs)
+{
+ if (callback != nullptr) {
+ mLegacyCallbackWrapper = sp<LegacyCallbackWrapper>::make(callback, user);
+ } else if (user) {
+ LOG_ALWAYS_FATAL("Callback data provided without callback pointer!");
+ }
+ return set(inputSource, sampleRate, format, channelMask, frameCount, mLegacyCallbackWrapper,
+ notificationFrames, threadCanCallJava, sessionId, transferType, flags, uid, pid,
+ pAttributes, selectedDeviceId, selectedMicDirection, microphoneFieldDimension,
+ maxSharedAudioHistoryMs);
+}
// -------------------------------------------------------------------------
status_t AudioRecord::start(AudioSystem::sync_event_t event, audio_session_t triggerSession)
@@ -536,12 +628,12 @@
status_t AudioRecord::setMarkerPosition(uint32_t marker)
{
+ AutoMutex lock(mLock);
// The only purpose of setting marker position is to get a callback
- if (mCbf == NULL) {
+ if (mCallback.promote() == nullptr) {
return INVALID_OPERATION;
}
- AutoMutex lock(mLock);
mMarkerPosition = marker;
mMarkerReached = false;
@@ -566,12 +658,12 @@
status_t AudioRecord::setPositionUpdatePeriod(uint32_t updatePeriod)
{
+ AutoMutex lock(mLock);
// The only purpose of setting position update period is to get a callback
- if (mCbf == NULL) {
+ if (mCallback.promote() == nullptr) {
return INVALID_OPERATION;
}
- AutoMutex lock(mLock);
mNewPosition = mProxy->getPosition() + updatePeriod;
mUpdatePeriod = updatePeriod;
@@ -757,7 +849,7 @@
const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger();
IAudioFlinger::CreateRecordInput input;
IAudioFlinger::CreateRecordOutput output;
- audio_session_t originalSessionId;
+ [[maybe_unused]] audio_session_t originalSessionId;
void *iMemPointer;
audio_track_cblk_t* cblk;
status_t status;
@@ -926,7 +1018,7 @@
mNotificationFramesReq, output.notificationFrameCount, output.frameCount);
}
mNotificationFramesAct = (uint32_t)output.notificationFrameCount;
- if (mServerConfig.format != mFormat && mCbf != nullptr) {
+ if (mServerConfig.format != mFormat && mCallback.promote() != nullptr) {
mFormatConversionBufRaw = std::make_unique<uint8_t[]>(mNotificationFramesAct * mFrameSize);
mFormatConversionBuffer.raw = mFormatConversionBufRaw.get();
}
@@ -1182,6 +1274,11 @@
nsecs_t AudioRecord::processAudioBuffer()
{
mLock.lock();
+ const sp<IAudioRecordCallback> callback = mCallback.promote();
+ if (!callback) {
+ mCallback = nullptr;
+ return NS_NEVER;
+ }
if (mAwaitBoost) {
mAwaitBoost = false;
mLock.unlock();
@@ -1257,26 +1354,26 @@
uint32_t sequence = mSequence;
// These fields don't need to be cached, because they are assigned only by set():
- // mTransfer, mCbf, mUserData, mSampleRate, mFrameSize
+ // mTransfer, mCallback, mUserData, mSampleRate, mFrameSize
mLock.unlock();
// perform callbacks while unlocked
if (newOverrun) {
- mCbf(EVENT_OVERRUN, mUserData, NULL);
+ callback->onOverrun();
+
}
if (markerReached) {
- mCbf(EVENT_MARKER, mUserData, &markerPosition);
+ callback->onMarker(markerPosition.value());
}
while (newPosCount > 0) {
- size_t temp = newPosition.value(); // FIXME size_t != uint32_t
- mCbf(EVENT_NEW_POS, mUserData, &temp);
+ callback->onNewPos(newPosition.value());
newPosition += updatePeriod;
newPosCount--;
}
if (mObservedSequence != sequence) {
mObservedSequence = sequence;
- mCbf(EVENT_NEW_IAUDIORECORD, mUserData, NULL);
+ callback->onNewIAudioRecord();
}
// if inactive, then don't run me again until re-started
@@ -1370,9 +1467,9 @@
mServerConfig.format, audioBuffer.size / mServerSampleSize);
}
- size_t reqSize = buffer->size;
- mCbf(EVENT_MORE_DATA, mUserData, buffer);
- size_t readSize = buffer->size;
+ const size_t reqSize = buffer->size;
+ const size_t readSize = callback->onMoreData(*buffer);
+ buffer->size = readSize;
// Validate on returned size
if (ssize_t(readSize) < 0 || readSize > reqSize) {
diff --git a/media/libaudioclient/AudioSystem.cpp b/media/libaudioclient/AudioSystem.cpp
index edad6d1..07ef246 100644
--- a/media/libaudioclient/AudioSystem.cpp
+++ b/media/libaudioclient/AudioSystem.cpp
@@ -1972,8 +1972,8 @@
return result.value_or(false);
}
-status_t AudioSystem::getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t>* formats) {
+status_t AudioSystem::getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t>* formats) {
if (formats == nullptr) {
return BAD_VALUE;
}
@@ -1983,8 +1983,10 @@
if (aps == 0) return PERMISSION_DENIED;
std::vector<AudioFormatDescription> formatsAidl;
+ AudioDeviceDescription deviceAidl = VALUE_OR_RETURN_STATUS(
+ legacy2aidl_audio_devices_t_AudioDeviceDescription(device));
RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
- aps->getHwOffloadEncodingFormatsSupportedForA2DP(&formatsAidl)));
+ aps->getHwOffloadFormatsSupportedForBluetoothMedia(deviceAidl, &formatsAidl)));
*formats = VALUE_OR_RETURN_STATUS(
convertContainer<std::vector<audio_format_t>>(
formatsAidl,
diff --git a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
index c59655d..8e9ff86 100644
--- a/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
+++ b/media/libaudioclient/aidl/android/media/IAudioPolicyService.aidl
@@ -295,7 +295,8 @@
void getReportedSurroundFormats(inout Int count,
out AudioFormatDescription[] formats);
- AudioFormatDescription[] getHwOffloadEncodingFormatsSupportedForA2DP();
+ AudioFormatDescription[] getHwOffloadFormatsSupportedForBluetoothMedia(
+ in AudioDeviceDescription device);
void setSurroundFormatEnabled(in AudioFormatDescription audioFormat, boolean enabled);
diff --git a/media/libaudioclient/include/media/AudioRecord.h b/media/libaudioclient/include/media/AudioRecord.h
index a32c595..f6faaae 100644
--- a/media/libaudioclient/include/media/AudioRecord.h
+++ b/media/libaudioclient/include/media/AudioRecord.h
@@ -47,7 +47,7 @@
{
public:
- /* Events used by AudioRecord callback function (callback_t).
+ /* Events used by AudioRecord callback function (legacy_callback_t).
* Keep in sync with frameworks/base/media/java/android/media/AudioRecord.java NATIVE_EVENT_*.
*/
enum event_type {
@@ -65,7 +65,7 @@
};
/* Client should declare a Buffer and pass address to obtainBuffer()
- * and releaseBuffer(). See also callback_t for EVENT_MORE_DATA.
+ * and releaseBuffer(). See also legacy_callback_t for EVENT_MORE_DATA.
*/
class Buffer
@@ -117,7 +117,28 @@
* - EVENT_NEW_IAUDIORECORD: unused.
*/
- typedef void (*callback_t)(int event, void* user, void *info);
+ typedef void (*legacy_callback_t)(int event, void* user, void *info);
+
+ class IAudioRecordCallback : public virtual RefBase {
+ friend AudioRecord;
+ protected:
+ // Request for client to read newly available data.
+ // Used for TRANSFER_CALLBACK mode.
+ // Parameters:
+ // - buffer : Buffer to read from
+ // Returns:
+ // - Number of bytes actually consumed.
+ virtual size_t onMoreData([[maybe_unused]] const AudioRecord::Buffer& buffer) { return 0; }
+ // A buffer overrun occurred.
+ virtual void onOverrun() {}
+ // Record head is at the specified marker (see setMarkerPosition()).
+ virtual void onMarker([[maybe_unused]] uint32_t markerPosition) {}
+ // Record head is at a new position (see setPositionUpdatePeriod()).
+ virtual void onNewPos([[maybe_unused]] uint32_t newPos) {}
+ // IAudioRecord was recreated due to re-routing, server invalidation or
+ // server crash.
+ virtual void onNewIAudioRecord() {}
+ };
/* Returns the minimum frame count required for the successful creation of
* an AudioRecord object.
@@ -182,20 +203,37 @@
* pAttributes: If not NULL, supersedes inputSource for use case selection.
* threadCanCallJava: Not present in parameter list, and so is fixed at false.
*/
-
AudioRecord(audio_source_t inputSource,
uint32_t sampleRate,
audio_format_t format,
audio_channel_mask_t channelMask,
const android::content::AttributionSourceState& client,
size_t frameCount = 0,
- callback_t cbf = NULL,
- void* user = NULL,
+ const wp<IAudioRecordCallback> &callback = nullptr,
uint32_t notificationFrames = 0,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
transfer_type transferType = TRANSFER_DEFAULT,
audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
- const audio_attributes_t* pAttributes = NULL,
+ const audio_attributes_t* pAttributes = nullptr,
+ audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE,
+ audio_microphone_direction_t
+ selectedMicDirection = MIC_DIRECTION_UNSPECIFIED,
+ float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT);
+
+
+ AudioRecord(audio_source_t inputSource,
+ uint32_t sampleRate,
+ audio_format_t format,
+ audio_channel_mask_t channelMask,
+ const android::content::AttributionSourceState& client,
+ size_t frameCount,
+ legacy_callback_t callback,
+ void* user,
+ uint32_t notificationFrames = 0,
+ audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
+ transfer_type transferType = TRANSFER_DEFAULT,
+ audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
+ const audio_attributes_t* pAttributes = nullptr,
audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE,
audio_microphone_direction_t
selectedMicDirection = MIC_DIRECTION_UNSPECIFIED,
@@ -223,13 +261,12 @@
*
* threadCanCallJava: Whether callbacks are made from an attached thread and thus can call JNI.
*/
- status_t set(audio_source_t inputSource,
+ status_t set(audio_source_t inputSource,
uint32_t sampleRate,
audio_format_t format,
audio_channel_mask_t channelMask,
size_t frameCount = 0,
- callback_t cbf = NULL,
- void* user = NULL,
+ const wp<IAudioRecordCallback> &callback = nullptr,
uint32_t notificationFrames = 0,
bool threadCanCallJava = false,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
@@ -237,7 +274,28 @@
audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
uid_t uid = AUDIO_UID_INVALID,
pid_t pid = -1,
- const audio_attributes_t* pAttributes = NULL,
+ const audio_attributes_t* pAttributes = nullptr,
+ audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE,
+ audio_microphone_direction_t
+ selectedMicDirection = MIC_DIRECTION_UNSPECIFIED,
+ float selectedMicFieldDimension = MIC_FIELD_DIMENSION_DEFAULT,
+ int32_t maxSharedAudioHistoryMs = 0);
+
+ status_t set(audio_source_t inputSource,
+ uint32_t sampleRate,
+ audio_format_t format,
+ audio_channel_mask_t channelMask,
+ size_t frameCount,
+ legacy_callback_t callback,
+ void* user,
+ uint32_t notificationFrames = 0,
+ bool threadCanCallJava = false,
+ audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
+ transfer_type transferType = TRANSFER_DEFAULT,
+ audio_input_flags_t flags = AUDIO_INPUT_FLAG_NONE,
+ uid_t uid = AUDIO_UID_INVALID,
+ pid_t pid = -1,
+ const audio_attributes_t* pAttributes = nullptr,
audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE,
audio_microphone_direction_t
selectedMicDirection = MIC_DIRECTION_UNSPECIFIED,
@@ -673,8 +731,9 @@
bool mActive;
// for client callback handler
- callback_t mCbf; // callback handler for events, or NULL
- void* mUserData;
+
+ wp<IAudioRecordCallback> mCallback;
+ sp<IAudioRecordCallback> mLegacyCallbackWrapper;
// for notification APIs
uint32_t mNotificationFramesReq; // requested number of frames between each
diff --git a/media/libaudioclient/include/media/AudioSystem.h b/media/libaudioclient/include/media/AudioSystem.h
index 368b20a..0e9d48c 100644
--- a/media/libaudioclient/include/media/AudioSystem.h
+++ b/media/libaudioclient/include/media/AudioSystem.h
@@ -424,8 +424,8 @@
static status_t getMicrophones(std::vector<media::MicrophoneInfo> *microphones);
- static status_t getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t> *formats);
+ static status_t getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t> *formats);
// numSurroundFormats holds the maximum number of formats and bool value allowed in the array.
// When numSurroundFormats is 0, surroundFormats and surroundFormatsEnabled will not be
diff --git a/media/libaudiofoundation/AudioContainers.cpp b/media/libaudiofoundation/AudioContainers.cpp
index 31257d5..3df9378 100644
--- a/media/libaudiofoundation/AudioContainers.cpp
+++ b/media/libaudiofoundation/AudioContainers.cpp
@@ -63,6 +63,13 @@
return audioDeviceInAllUsbSet;
}
+const DeviceTypeSet& getAudioDeviceOutAllBleSet() {
+ static const DeviceTypeSet audioDeviceOutAllBleSet = DeviceTypeSet(
+ std::begin(AUDIO_DEVICE_OUT_ALL_BLE_ARRAY),
+ std::end(AUDIO_DEVICE_OUT_ALL_BLE_ARRAY));
+ return audioDeviceOutAllBleSet;
+}
+
bool deviceTypesToString(const DeviceTypeSet &deviceTypes, std::string &str) {
if (deviceTypes.empty()) {
str = "Empty device types";
diff --git a/media/libaudiofoundation/AudioPort.cpp b/media/libaudiofoundation/AudioPort.cpp
index 634b2e1..4513323 100644
--- a/media/libaudiofoundation/AudioPort.cpp
+++ b/media/libaudiofoundation/AudioPort.cpp
@@ -162,9 +162,16 @@
}
}
-void AudioPort::dump(std::string *dst, int spaces, bool verbose) const {
+void AudioPort::dump(std::string *dst, int spaces, const char* extraInfo, bool verbose) const {
if (!mName.empty()) {
- dst->append(base::StringPrintf("%*s- name: %s\n", spaces, "", mName.c_str()));
+ dst->append(base::StringPrintf("\"%s\"%s", mName.c_str(),
+ extraInfo != nullptr ? "; " : ""));
+ }
+ if (extraInfo != nullptr) {
+ dst->append(base::StringPrintf("%s", extraInfo));
+ }
+ if (!mName.empty() || extraInfo != nullptr) {
+ dst->append("\n");
}
if (verbose) {
std::string profilesStr;
diff --git a/media/libaudiofoundation/AudioProfile.cpp b/media/libaudiofoundation/AudioProfile.cpp
index 15f2d68..ec10bc9 100644
--- a/media/libaudiofoundation/AudioProfile.cpp
+++ b/media/libaudiofoundation/AudioProfile.cpp
@@ -99,18 +99,14 @@
void AudioProfile::dump(std::string *dst, int spaces) const
{
- dst->append(base::StringPrintf("%s%s%s\n", mIsDynamicFormat ? "[dynamic format]" : "",
+ dst->append(base::StringPrintf("\"%s\"; ", mName.c_str()));
+ dst->append(base::StringPrintf("%s%s%s%s", mIsDynamicFormat ? "[dynamic format]" : "",
mIsDynamicChannels ? "[dynamic channels]" : "",
- mIsDynamicRate ? "[dynamic rates]" : ""));
- if (mName.length() != 0) {
- dst->append(base::StringPrintf("%*s- name: %s\n", spaces, "", mName.c_str()));
- }
- std::string formatLiteral;
- if (FormatConverter::toString(mFormat, formatLiteral)) {
- dst->append(base::StringPrintf("%*s- format: %s\n", spaces, "", formatLiteral.c_str()));
- }
+ mIsDynamicRate ? "[dynamic rates]" : "", isDynamic() ? "; " : ""));
+ dst->append(base::StringPrintf("%s (0x%x)\n", audio_format_to_string(mFormat), mFormat));
+
if (!mSamplingRates.empty()) {
- dst->append(base::StringPrintf("%*s- sampling rates:", spaces, ""));
+ dst->append(base::StringPrintf("%*ssampling rates: ", spaces, ""));
for (auto it = mSamplingRates.begin(); it != mSamplingRates.end();) {
dst->append(base::StringPrintf("%d", *it));
dst->append(++it == mSamplingRates.end() ? "" : ", ");
@@ -119,7 +115,7 @@
}
if (!mChannelMasks.empty()) {
- dst->append(base::StringPrintf("%*s- channel masks:", spaces, ""));
+ dst->append(base::StringPrintf("%*schannel masks: ", spaces, ""));
for (auto it = mChannelMasks.begin(); it != mChannelMasks.end();) {
dst->append(base::StringPrintf("0x%04x", *it));
dst->append(++it == mChannelMasks.end() ? "" : ", ");
@@ -128,7 +124,7 @@
}
dst->append(base::StringPrintf(
- "%*s- encapsulation type: %#x\n", spaces, "", mEncapsulationType));
+ "%*s%s\n", spaces, "", audio_encapsulation_type_to_string(mEncapsulationType)));
}
bool AudioProfile::equals(const sp<AudioProfile>& other) const
@@ -321,11 +317,12 @@
void AudioProfileVector::dump(std::string *dst, int spaces) const
{
- dst->append(base::StringPrintf("%*s- Profiles:\n", spaces, ""));
+ dst->append(base::StringPrintf("%*s- Profiles (%zu):\n", spaces - 2, "", size()));
for (size_t i = 0; i < size(); i++) {
- dst->append(base::StringPrintf("%*sProfile %zu:", spaces + 4, "", i));
+ const std::string prefix = base::StringPrintf("%*s%zu. ", spaces + 1, "", i + 1);
+ dst->append(prefix);
std::string profileStr;
- at(i)->dump(&profileStr, spaces + 8);
+ at(i)->dump(&profileStr, prefix.size());
dst->append(profileStr);
}
}
diff --git a/media/libaudiofoundation/DeviceDescriptorBase.cpp b/media/libaudiofoundation/DeviceDescriptorBase.cpp
index c8222e7..88ba544 100644
--- a/media/libaudiofoundation/DeviceDescriptorBase.cpp
+++ b/media/libaudiofoundation/DeviceDescriptorBase.cpp
@@ -113,29 +113,24 @@
void DeviceDescriptorBase::dump(std::string *dst, int spaces, int index,
const char* extraInfo, bool verbose) const
{
- dst->append(base::StringPrintf("%*sDevice %d:\n", spaces, "", index + 1));
+ const std::string prefix = base::StringPrintf("%*s %d. ", spaces, "", index + 1);
+ dst->append(prefix);
if (mId != 0) {
- dst->append(base::StringPrintf("%*s- id: %2d\n", spaces, "", mId));
+ dst->append(base::StringPrintf("Port ID: %d; ", mId));
}
-
if (extraInfo != nullptr) {
- dst->append(extraInfo);
+ dst->append(base::StringPrintf("%s; ", extraInfo));
}
-
- dst->append(base::StringPrintf("%*s- type: %-48s\n",
- spaces, "", ::android::toString(mDeviceTypeAddr.mType).c_str()));
+ dst->append(base::StringPrintf("%s (%s)\n",
+ audio_device_to_string(mDeviceTypeAddr.mType),
+ mDeviceTypeAddr.toString(true /*includeSensitiveInfo*/).c_str()));
dst->append(base::StringPrintf(
- "%*s- supported encapsulation modes: %u\n", spaces, "", mEncapsulationModes));
- dst->append(base::StringPrintf(
- "%*s- supported encapsulation metadata types: %u\n",
- spaces, "", mEncapsulationMetadataTypes));
+ "%*sEncapsulation modes: %u, metadata types: %u\n",
+ static_cast<int>(prefix.size()), "",
+ mEncapsulationModes, mEncapsulationMetadataTypes));
- if (mDeviceTypeAddr.address().size() != 0) {
- dst->append(base::StringPrintf(
- "%*s- address: %-32s\n", spaces, "", mDeviceTypeAddr.getAddress()));
- }
- AudioPort::dump(dst, spaces, verbose);
+ AudioPort::dump(dst, prefix.size(), nullptr, verbose);
}
std::string DeviceDescriptorBase::toString(bool includeSensitiveInfo) const
diff --git a/media/libaudiofoundation/include/media/AudioContainers.h b/media/libaudiofoundation/include/media/AudioContainers.h
index 204b365..60b42fb 100644
--- a/media/libaudiofoundation/include/media/AudioContainers.h
+++ b/media/libaudiofoundation/include/media/AudioContainers.h
@@ -40,6 +40,7 @@
const DeviceTypeSet& getAudioDeviceOutAllUsbSet();
const DeviceTypeSet& getAudioDeviceInAllSet();
const DeviceTypeSet& getAudioDeviceInAllUsbSet();
+const DeviceTypeSet& getAudioDeviceOutAllBleSet();
template<typename T>
static std::vector<T> Intersection(const std::set<T>& a, const std::set<T>& b) {
diff --git a/media/libaudiofoundation/include/media/AudioPort.h b/media/libaudiofoundation/include/media/AudioPort.h
index 985e05e..d6a098f 100644
--- a/media/libaudiofoundation/include/media/AudioPort.h
+++ b/media/libaudiofoundation/include/media/AudioPort.h
@@ -111,7 +111,8 @@
((mFlags.input & AUDIO_INPUT_FLAG_MMAP_NOIRQ) != 0)));
}
- void dump(std::string *dst, int spaces, bool verbose = true) const;
+ void dump(std::string *dst, int spaces,
+ const char* extraInfo = nullptr, bool verbose = true) const;
void log(const char* indent) const;
diff --git a/media/libaudiofoundation/include/media/AudioProfile.h b/media/libaudiofoundation/include/media/AudioProfile.h
index 62670e4..d7cddb7 100644
--- a/media/libaudiofoundation/include/media/AudioProfile.h
+++ b/media/libaudiofoundation/include/media/AudioProfile.h
@@ -69,7 +69,7 @@
void setDynamicFormat(bool dynamic) { mIsDynamicFormat = dynamic; }
bool isDynamicFormat() const { return mIsDynamicFormat; }
- bool isDynamic() { return mIsDynamicFormat || mIsDynamicChannels || mIsDynamicRate; }
+ bool isDynamic() const { return mIsDynamicFormat || mIsDynamicChannels || mIsDynamicRate; }
audio_encapsulation_type_t getEncapsulationType() const { return mEncapsulationType; }
void setEncapsulationType(audio_encapsulation_type_t encapsulationType) {
diff --git a/media/libmediametrics/MediaMetricsItem.cpp b/media/libmediametrics/MediaMetricsItem.cpp
index 1c71f5c..a7ec975 100644
--- a/media/libmediametrics/MediaMetricsItem.cpp
+++ b/media/libmediametrics/MediaMetricsItem.cpp
@@ -70,7 +70,7 @@
status_t errorStringToStatus(const char *error) {
const auto& map = getErrorStringMap();
- if (error == nullptr || error == "") return NO_ERROR;
+ if (error == nullptr || error[0] == '\0') return NO_ERROR;
auto it = map.find(error);
if (it != map.end()) {
return it->second;
diff --git a/media/libstagefright/OggWriter.cpp b/media/libstagefright/OggWriter.cpp
index 0bc5976..0f5e95e 100644
--- a/media/libstagefright/OggWriter.cpp
+++ b/media/libstagefright/OggWriter.cpp
@@ -67,7 +67,11 @@
mFd = -1;
}
- free(mOs);
+ if (mOs != nullptr) {
+ ogg_stream_clear(mOs);
+ free(mOs);
+ mOs = nullptr;
+ }
}
status_t OggWriter::initCheck() const {
diff --git a/media/libstagefright/TEST_MAPPING b/media/libstagefright/TEST_MAPPING
index 7ce2968..0987a5b 100644
--- a/media/libstagefright/TEST_MAPPING
+++ b/media/libstagefright/TEST_MAPPING
@@ -20,13 +20,24 @@
},
{
"exclude-annotation": "android.platform.test.annotations.RequiresDevice"
+ }
+ ]
+ },
+ {
+ "name": "CtsMediaAudioTestCases",
+ "options": [
+ {
+ "include-annotation": "android.platform.test.annotations.Presubmit"
+ },
+ {
+ "exclude-annotation": "android.platform.test.annotations.RequiresDevice"
},
// TODO: b/149314419
{
- "exclude-filter": "android.media.cts.AudioPlaybackCaptureTest"
+ "exclude-filter": "android.media.audio.cts.AudioPlaybackCaptureTest"
},
{
- "exclude-filter": "android.media.cts.AudioRecordTest"
+ "exclude-filter": "android.media.audio.cts.AudioRecordTest"
}
]
}
diff --git a/services/audiopolicy/AudioPolicyInterface.h b/services/audiopolicy/AudioPolicyInterface.h
index add0684..33b455f 100644
--- a/services/audiopolicy/AudioPolicyInterface.h
+++ b/services/audiopolicy/AudioPolicyInterface.h
@@ -300,8 +300,8 @@
virtual bool isHapticPlaybackSupported() = 0;
- virtual status_t getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t> *formats) = 0;
+ virtual status_t getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t> *formats) = 0;
virtual void setAppState(audio_port_handle_t portId, app_state_t state) = 0;
diff --git a/services/audiopolicy/common/managerdefinitions/Android.bp b/services/audiopolicy/common/managerdefinitions/Android.bp
index 227c2d8..1f23ae3 100644
--- a/services/audiopolicy/common/managerdefinitions/Android.bp
+++ b/services/audiopolicy/common/managerdefinitions/Android.bp
@@ -30,6 +30,7 @@
],
shared_libs: [
"libaudiofoundation",
+ "libbase",
"libcutils",
"libhidlbase",
"liblog",
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
index cf699d3..856ae66 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioInputDescriptor.h
@@ -54,7 +54,7 @@
DeviceVector supportedDevices() const {
return mProfile != nullptr ? mProfile->getSupportedDevices() : DeviceVector(); }
- void dump(String8 *dst) const override;
+ void dump(String8 *dst, int spaces, const char* extraInfo) const override;
audio_io_handle_t mIoHandle = AUDIO_IO_HANDLE_NONE; // input handle
wp<AudioPolicyMix> mPolicyMix; // non NULL when used by a dynamic policy
diff --git a/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
index d06496d..69082ac 100644
--- a/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h
@@ -149,7 +149,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~AudioOutputDescriptor() {}
- void dump(String8 *dst) const override;
+ void dump(String8 *dst, int spaces, const char* extraInfo = nullptr) const override;
void log(const char* indent);
virtual DeviceVector devices() const { return mDevices; }
@@ -336,7 +336,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~SwAudioOutputDescriptor() {}
- void dump(String8 *dst) const override;
+ void dump(String8 *dst, int spaces, const char* extraInfo = nullptr) const override;
virtual DeviceVector devices() const;
void setDevices(const DeviceVector &devices) { mDevices = devices; }
bool sharesHwModuleWith(const sp<SwAudioOutputDescriptor>& outputDesc);
@@ -441,7 +441,7 @@
AudioPolicyClientInterface *clientInterface);
virtual ~HwAudioOutputDescriptor() {}
- void dump(String8 *dst) const override;
+ void dump(String8 *dst, int spaces, const char* extraInfo) const override;
virtual bool setVolume(float volumeDb,
VolumeSource volumeSource, const StreamTypeVector &streams,
diff --git a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
index 74b3405..e421c94 100644
--- a/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
+++ b/services/audiopolicy/common/managerdefinitions/include/ClientDescriptor.h
@@ -269,10 +269,11 @@
size_t getClientCount() const {
return mClients.size();
}
- virtual void dump(String8 *dst) const {
+ virtual void dump(String8 *dst, int spaces, const char* extraInfo = nullptr) const {
+ (void)extraInfo;
size_t index = 0;
for (const auto& client: getClientIterable()) {
- client->dump(dst, 2, index++);
+ client->dump(dst, spaces, index++);
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/include/HwModule.h b/services/audiopolicy/common/managerdefinitions/include/HwModule.h
index 54b3408..436fcc1 100644
--- a/services/audiopolicy/common/managerdefinitions/include/HwModule.h
+++ b/services/audiopolicy/common/managerdefinitions/include/HwModule.h
@@ -115,7 +115,7 @@
const sp<PolicyAudioPort> &dstPort) const;
// TODO remove from here (split serialization)
- void dump(String8 *dst) const;
+ void dump(String8 *dst, int spaces) const;
private:
void refreshSupportedDevices();
diff --git a/services/audiopolicy/common/managerdefinitions/include/IOProfile.h b/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
index 2e680e3..90b812d 100644
--- a/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
+++ b/services/audiopolicy/common/managerdefinitions/include/IOProfile.h
@@ -97,7 +97,7 @@
uint32_t flags,
bool exactMatchRequiredForInputFlags = false) const;
- void dump(String8 *dst) const;
+ void dump(String8 *dst, int spaces) const;
void log();
bool hasSupportedDevices() const { return !mSupportedDevices.isEmpty(); }
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
index cd10010..0fe5c16 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioCollections.cpp
@@ -17,6 +17,8 @@
#define LOG_TAG "APM::AudioCollections"
//#define LOG_NDEBUG 0
+#include <android-base/stringprintf.h>
+
#include "AudioCollections.h"
#include "AudioRoute.h"
#include "HwModule.h"
@@ -40,10 +42,11 @@
if (audioRouteVector.isEmpty()) {
return;
}
- dst->appendFormat("\n%*sAudio Routes (%zu):\n", spaces, "", audioRouteVector.size());
+ dst->appendFormat("%*s- Audio Routes (%zu):\n", spaces - 2, "", audioRouteVector.size());
for (size_t i = 0; i < audioRouteVector.size(); i++) {
- dst->appendFormat("%*s- Route %zu:\n", spaces, "", i + 1);
- audioRouteVector.itemAt(i)->dump(dst, 4);
+ const std::string prefix = base::StringPrintf("%*s%zu. ", spaces + 1, "", i + 1);
+ dst->append(prefix.c_str());
+ audioRouteVector.itemAt(i)->dump(dst, prefix.size());
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
index 6c1240b..966b8cb 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioInputDescriptor.cpp
@@ -17,6 +17,8 @@
#define LOG_TAG "APM::AudioInputDescriptor"
//#define LOG_NDEBUG 0
+#include <android-base/stringprintf.h>
+
#include <audiomanager/AudioManager.h>
#include <media/AudioPolicy.h>
#include <policy.h>
@@ -508,17 +510,20 @@
}
}
-void AudioInputDescriptor::dump(String8 *dst) const
+void AudioInputDescriptor::dump(String8 *dst, int spaces, const char* extraInfo) const
{
- dst->appendFormat(" ID: %d\n", getId());
- dst->appendFormat(" Sampling rate: %d\n", mSamplingRate);
- dst->appendFormat(" Format: %d\n", mFormat);
- dst->appendFormat(" Channels: %08x\n", mChannelMask);
- dst->appendFormat(" Devices %s\n", mDevice->toString(true /*includeSensitiveInfo*/).c_str());
- mEnabledEffects.dump(dst, 1 /*spaces*/, false /*verbose*/);
- dst->append(" AudioRecord Clients:\n");
- ClientMapHandler<RecordClientDescriptor>::dump(dst);
- dst->append("\n");
+ dst->appendFormat("Port ID: %d%s%s\n",
+ getId(), extraInfo != nullptr ? "; " : "", extraInfo != nullptr ? extraInfo : "");
+ dst->appendFormat("%*s%s; %d; Channel mask: 0x%x\n", spaces, "",
+ audio_format_to_string(mFormat), mSamplingRate, mChannelMask);
+ dst->appendFormat("%*sDevices: %s\n", spaces, "",
+ mDevice->toString(true /*includeSensitiveInfo*/).c_str());
+ mEnabledEffects.dump(dst, spaces /*spaces*/, false /*verbose*/);
+ if (getClientCount() != 0) {
+ dst->appendFormat("%*sAudioRecord Clients (%zu):\n", spaces, "", getClientCount());
+ ClientMapHandler<RecordClientDescriptor>::dump(dst, spaces);
+ dst->append("\n");
+ }
}
bool AudioInputCollection::isSourceActive(audio_source_t source) const
@@ -606,10 +611,12 @@
void AudioInputCollection::dump(String8 *dst) const
{
- dst->append("\nInputs dump:\n");
+ dst->appendFormat("\n Inputs (%zu):\n", size());
for (size_t i = 0; i < size(); i++) {
- dst->appendFormat("- Input %d dump:\n", keyAt(i));
- valueAt(i)->dump(dst);
+ const std::string prefix = base::StringPrintf(" %zu. ", i + 1);
+ const std::string extraInfo = base::StringPrintf("I/O handle: %d", keyAt(i));
+ dst->appendFormat("%s", prefix.c_str());
+ valueAt(i)->dump(dst, prefix.size(), extraInfo.c_str());
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
index b054c6d..1ae66de 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp
@@ -17,6 +17,8 @@
#define LOG_TAG "APM::AudioOutputDescriptor"
//#define LOG_NDEBUG 0
+#include <android-base/stringprintf.h>
+
#include <AudioPolicyInterface.h>
#include "AudioOutputDescriptor.h"
#include "AudioPolicyMix.h"
@@ -243,32 +245,42 @@
return client->volumeSource() != volumeSourceToIgnore; }) != end(mActiveClients);
}
-void AudioOutputDescriptor::dump(String8 *dst) const
+void AudioOutputDescriptor::dump(String8 *dst, int spaces, const char* extraInfo) const
{
- dst->appendFormat(" ID: %d\n", mId);
- dst->appendFormat(" Sampling rate: %d\n", mSamplingRate);
- dst->appendFormat(" Format: %08x\n", mFormat);
- dst->appendFormat(" Channels: %08x\n", mChannelMask);
- dst->appendFormat(" Devices: %s\n", devices().toString(true /*includeSensitiveInfo*/).c_str());
- dst->appendFormat(" Global active count: %u\n", mGlobalActiveCount);
- for (const auto &iter : mRoutingActivities) {
- dst->appendFormat(" Product Strategy id: %d", iter.first);
- iter.second.dump(dst, 4);
+ dst->appendFormat("Port ID: %d%s%s\n",
+ mId, extraInfo != nullptr ? "; " : "", extraInfo != nullptr ? extraInfo : "");
+ dst->appendFormat("%*s%s; %d; Channel mask: 0x%x\n", spaces, "",
+ audio_format_to_string(mFormat), mSamplingRate, mChannelMask);
+ dst->appendFormat("%*sDevices: %s\n", spaces, "",
+ devices().toString(true /*includeSensitiveInfo*/).c_str());
+ dst->appendFormat("%*sGlobal active count: %u\n", spaces, "", mGlobalActiveCount);
+ if (!mRoutingActivities.empty()) {
+ dst->appendFormat("%*sProduct Strategies (%zu):\n", spaces, "", mRoutingActivities.size());
+ for (const auto &iter : mRoutingActivities) {
+ dst->appendFormat("%*sid %d: ", spaces + 1, "", iter.first);
+ iter.second.dump(dst, 0);
+ }
}
- for (const auto &iter : mVolumeActivities) {
- dst->appendFormat(" Volume Activities id: %d", iter.first);
- iter.second.dump(dst, 4);
+ if (!mVolumeActivities.empty()) {
+ dst->appendFormat("%*sVolume Activities (%zu):\n", spaces, "", mVolumeActivities.size());
+ for (const auto &iter : mVolumeActivities) {
+ dst->appendFormat("%*sid %d: ", spaces + 1, "", iter.first);
+ iter.second.dump(dst, 0);
+ }
}
- dst->append(" AudioTrack Clients:\n");
- ClientMapHandler<TrackClientDescriptor>::dump(dst);
- dst->append("\n");
+ if (getClientCount() != 0) {
+ dst->appendFormat("%*sAudioTrack Clients (%zu):\n", spaces, "", getClientCount());
+ ClientMapHandler<TrackClientDescriptor>::dump(dst, spaces);
+ dst->append("\n");
+ }
if (!mActiveClients.empty()) {
- dst->append(" AudioTrack active (stream) clients:\n");
+ dst->appendFormat("%*sAudioTrack active (stream) clients (%zu):\n", spaces, "",
+ mActiveClients.size());
size_t index = 0;
for (const auto& client : mActiveClients) {
- client->dump(dst, 2, index++);
+ client->dump(dst, spaces, index++);
}
- dst->append(" \n");
+ dst->append("\n");
}
}
@@ -292,11 +304,18 @@
}
}
-void SwAudioOutputDescriptor::dump(String8 *dst) const
+void SwAudioOutputDescriptor::dump(String8 *dst, int spaces, const char* extraInfo) const
{
- dst->appendFormat(" Latency: %d\n", mLatency);
- dst->appendFormat(" Flags %08x\n", mFlags);
- AudioOutputDescriptor::dump(dst);
+ String8 allExtraInfo;
+ if (extraInfo != nullptr) {
+ allExtraInfo.appendFormat("%s; ", extraInfo);
+ }
+ std::string flagsLiteral = toString(mFlags);
+ allExtraInfo.appendFormat("Latency: %d; 0x%04x", mLatency, mFlags);
+ if (!flagsLiteral.empty()) {
+ allExtraInfo.appendFormat(" (%s)", flagsLiteral.c_str());
+ }
+ AudioOutputDescriptor::dump(dst, spaces, allExtraInfo.c_str());
}
DeviceVector SwAudioOutputDescriptor::devices() const
@@ -685,11 +704,11 @@
{
}
-void HwAudioOutputDescriptor::dump(String8 *dst) const
+void HwAudioOutputDescriptor::dump(String8 *dst, int spaces, const char* extraInfo) const
{
- AudioOutputDescriptor::dump(dst);
- dst->append("Source:\n");
- mSource->dump(dst, 0, 0);
+ AudioOutputDescriptor::dump(dst, spaces, extraInfo);
+ dst->appendFormat("%*sSource:\n", spaces, "");
+ mSource->dump(dst, spaces, 0);
}
void HwAudioOutputDescriptor::toAudioPortConfig(
@@ -862,10 +881,12 @@
void SwAudioOutputCollection::dump(String8 *dst) const
{
- dst->append("\nOutputs dump:\n");
+ dst->appendFormat("\n Outputs (%zu):\n", size());
for (size_t i = 0; i < size(); i++) {
- dst->appendFormat("- Output %d dump:\n", keyAt(i));
- valueAt(i)->dump(dst);
+ const std::string prefix = base::StringPrintf(" %zu. ", i + 1);
+ const std::string extraInfo = base::StringPrintf("I/O handle: %d", keyAt(i));
+ dst->appendFormat("%s", prefix.c_str());
+ valueAt(i)->dump(dst, prefix.size(), extraInfo.c_str());
}
}
@@ -884,10 +905,12 @@
void HwAudioOutputCollection::dump(String8 *dst) const
{
- dst->append("\nOutputs dump:\n");
+ dst->appendFormat("\n Outputs (%zu):\n", size());
for (size_t i = 0; i < size(); i++) {
- dst->appendFormat("- Output %d dump:\n", keyAt(i));
- valueAt(i)->dump(dst);
+ const std::string prefix = base::StringPrintf(" %zu. ", i + 1);
+ const std::string extraInfo = base::StringPrintf("I/O handle: %d", keyAt(i));
+ dst->appendFormat("%s", prefix.c_str());
+ valueAt(i)->dump(dst, prefix.size(), extraInfo.c_str());
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
index 866417e..53cc473 100644
--- a/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp
@@ -25,15 +25,16 @@
void AudioRoute::dump(String8 *dst, int spaces) const
{
- dst->appendFormat("%*s- Type: %s\n", spaces, "", mType == AUDIO_ROUTE_MUX ? "Mux" : "Mix");
- dst->appendFormat("%*s- Sink: %s\n", spaces, "", mSink->getTagName().c_str());
+ dst->appendFormat("%s; Sink: \"%s\"\n",
+ mType == AUDIO_ROUTE_MUX ? "Mux" : "Mix", mSink->getTagName().c_str());
if (mSources.size() != 0) {
- dst->appendFormat("%*s- Sources: \n", spaces, "");
+ dst->appendFormat("%*sSources: ", spaces, "");
for (size_t i = 0; i < mSources.size(); i++) {
- dst->appendFormat("%*s%s \n", spaces + 4, "", mSources[i]->getTagName().c_str());
+ dst->appendFormat("\"%s\"", mSources[i]->getTagName().c_str());
+ if (i + 1 < mSources.size()) dst->append(", ");
}
+ dst->append("\n");
}
- dst->append("\n");
}
bool AudioRoute::supportsPatch(const sp<PolicyAudioPort> &srcPort,
diff --git a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
index 141c2be..d76d0c2 100644
--- a/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/DeviceDescriptor.cpp
@@ -180,7 +180,7 @@
{
String8 extraInfo;
if (!mTagName.empty()) {
- extraInfo.appendFormat("%*s- tag name: %s\n", spaces, "", mTagName.c_str());
+ extraInfo.appendFormat("\"%s\"", mTagName.c_str());
}
std::string descBaseDumpStr;
@@ -447,7 +447,7 @@
if (isEmpty()) {
return;
}
- dst->appendFormat("%*s- %s devices:\n", spaces, "", tag.string());
+ dst->appendFormat("%*s%s devices (%zu):\n", spaces, "", tag.string(), size());
for (size_t i = 0; i < size(); i++) {
itemAt(i)->dump(dst, spaces + 2, i, verbose);
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
index 3a143b0..2977f38 100644
--- a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
@@ -17,11 +17,13 @@
#define LOG_TAG "APM::HwModule"
//#define LOG_NDEBUG 0
-#include "HwModule.h"
-#include "IOProfile.h"
+#include <android-base/stringprintf.h>
#include <policy.h>
#include <system/audio.h>
+#include "HwModule.h"
+#include "IOProfile.h"
+
namespace android {
HwModule::HwModule(const char *name, uint32_t halVersionMajor, uint32_t halVersionMinor)
@@ -247,28 +249,28 @@
return false;
}
-void HwModule::dump(String8 *dst) const
+void HwModule::dump(String8 *dst, int spaces) const
{
- dst->appendFormat(" - name: %s\n", getName());
- dst->appendFormat(" - handle: %d\n", mHandle);
- dst->appendFormat(" - version: %u.%u\n", getHalVersionMajor(), getHalVersionMinor());
+ dst->appendFormat("Handle: %d; \"%s\"\n", mHandle, getName());
if (mOutputProfiles.size()) {
- dst->append(" - outputs:\n");
+ dst->appendFormat("%*s- Output MixPorts (%zu):\n", spaces - 2, "", mOutputProfiles.size());
for (size_t i = 0; i < mOutputProfiles.size(); i++) {
- dst->appendFormat(" output %zu:\n", i);
- mOutputProfiles[i]->dump(dst);
+ const std::string prefix = base::StringPrintf("%*s%zu. ", spaces, "", i + 1);
+ dst->append(prefix.c_str());
+ mOutputProfiles[i]->dump(dst, prefix.size());
}
}
if (mInputProfiles.size()) {
- dst->append(" - inputs:\n");
+ dst->appendFormat("%*s- Input MixPorts (%zu):\n", spaces - 2, "", mInputProfiles.size());
for (size_t i = 0; i < mInputProfiles.size(); i++) {
- dst->appendFormat(" input %zu:\n", i);
- mInputProfiles[i]->dump(dst);
+ const std::string prefix = base::StringPrintf("%*s%zu. ", spaces, "", i + 1);
+ dst->append(prefix.c_str());
+ mInputProfiles[i]->dump(dst, prefix.size());
}
}
- mDeclaredDevices.dump(dst, String8("Declared"), 2, true);
- mDynamicDevices.dump(dst, String8("Dynamic"), 2, true);
- dumpAudioRouteVector(mRoutes, dst, 2);
+ mDeclaredDevices.dump(dst, String8("- Declared"), spaces - 2, true);
+ mDynamicDevices.dump(dst, String8("- Dynamic"), spaces - 2, true);
+ dumpAudioRouteVector(mRoutes, dst, spaces);
}
sp <HwModule> HwModuleCollection::getModuleFromName(const char *name) const
@@ -462,10 +464,11 @@
void HwModuleCollection::dump(String8 *dst) const
{
- dst->append("\nHW Modules dump:\n");
+ dst->appendFormat("\n Hardware modules (%zu):\n", size());
for (size_t i = 0; i < size(); i++) {
- dst->appendFormat("- HW Module %zu:\n", i + 1);
- itemAt(i)->dump(dst);
+ const std::string prefix = base::StringPrintf(" %zu. ", i + 1);
+ dst->append(prefix.c_str());
+ itemAt(i)->dump(dst, prefix.size());
}
}
diff --git a/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp b/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
index 624ad95..21f2018 100644
--- a/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
+++ b/services/audiopolicy/common/managerdefinitions/src/IOProfile.cpp
@@ -116,28 +116,30 @@
return device == deviceDesc && deviceDesc->hasCurrentEncodedFormat(); }) == 1;
}
-void IOProfile::dump(String8 *dst) const
+void IOProfile::dump(String8 *dst, int spaces) const
{
- std::string portStr;
- AudioPort::dump(&portStr, 4);
- dst->append(portStr.c_str());
-
- dst->appendFormat(" - flags: 0x%04x", getFlags());
+ String8 extraInfo;
+ extraInfo.appendFormat("0x%04x", getFlags());
std::string flagsLiteral =
getRole() == AUDIO_PORT_ROLE_SINK ?
toString(static_cast<audio_input_flags_t>(getFlags())) :
getRole() == AUDIO_PORT_ROLE_SOURCE ?
toString(static_cast<audio_output_flags_t>(getFlags())) : "";
if (!flagsLiteral.empty()) {
- dst->appendFormat(" (%s)", flagsLiteral.c_str());
+ extraInfo.appendFormat(" (%s)", flagsLiteral.c_str());
}
- dst->append("\n");
- mSupportedDevices.dump(dst, String8("Supported"), 4, false);
- dst->appendFormat("\n - maxOpenCount: %u - curOpenCount: %u\n",
- maxOpenCount, curOpenCount);
- dst->appendFormat(" - maxActiveCount: %u - curActiveCount: %u\n",
- maxActiveCount, curActiveCount);
- dst->appendFormat(" - recommendedMuteDurationMs: %u ms\n", recommendedMuteDurationMs);
+
+ std::string portStr;
+ AudioPort::dump(&portStr, spaces, extraInfo.c_str());
+ dst->append(portStr.c_str());
+
+ mSupportedDevices.dump(dst, String8("- Supported"), spaces - 2, false);
+ dst->appendFormat("%*s- maxOpenCount: %u; curOpenCount: %u\n",
+ spaces - 2, "", maxOpenCount, curOpenCount);
+ dst->appendFormat("%*s- maxActiveCount: %u; curActiveCount: %u\n",
+ spaces - 2, "", maxActiveCount, curActiveCount);
+ dst->appendFormat("%*s- recommendedMuteDurationMs: %u ms\n",
+ spaces - 2, "", recommendedMuteDurationMs);
}
void IOProfile::log()
diff --git a/services/audiopolicy/engineconfigurable/Android.bp b/services/audiopolicy/engineconfigurable/Android.bp
index a747822..dc8d9cf 100644
--- a/services/audiopolicy/engineconfigurable/Android.bp
+++ b/services/audiopolicy/engineconfigurable/Android.bp
@@ -41,8 +41,9 @@
"libaudiopolicyengineconfigurable_pfwwrapper",
],
- shared_libs: [
+ shared_libs: [
"libaudiofoundation",
+ "libbase",
"liblog",
"libcutils",
"libutils",
diff --git a/services/audiopolicy/enginedefault/Android.bp b/services/audiopolicy/enginedefault/Android.bp
index 7f9c0ac..4671fe9 100644
--- a/services/audiopolicy/enginedefault/Android.bp
+++ b/services/audiopolicy/enginedefault/Android.bp
@@ -31,6 +31,7 @@
],
shared_libs: [
"libaudiofoundation",
+ "libbase",
"liblog",
"libcutils",
"libutils",
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index 86e0566..22eeadd 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -525,10 +525,10 @@
return NO_ERROR;
}
-status_t AudioPolicyManager::getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t> *formats)
+status_t AudioPolicyManager::getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t> *formats)
{
- ALOGV("getHwOffloadEncodingFormatsSupportedForA2DP()");
+ ALOGV("getHwOffloadFormatsSupportedForBluetoothMedia()");
status_t status = NO_ERROR;
std::unordered_set<audio_format_t> formatSet;
sp<HwModule> primaryModule =
@@ -537,8 +537,23 @@
ALOGE("%s() unable to get primary module", __func__);
return NO_INIT;
}
+
+ DeviceTypeSet audioDeviceSet;
+
+ switch(device) {
+ case AUDIO_DEVICE_OUT_BLUETOOTH_A2DP:
+ audioDeviceSet = getAudioDeviceOutAllA2dpSet();
+ break;
+ case AUDIO_DEVICE_OUT_BLE_HEADSET:
+ audioDeviceSet = getAudioDeviceOutAllBleSet();
+ break;
+ default:
+ ALOGE("%s() device type 0x%08x not supported", __func__, device);
+ return BAD_VALUE;
+ }
+
DeviceVector declaredDevices = primaryModule->getDeclaredDevices().getDevicesFromTypes(
- getAudioDeviceOutAllA2dpSet());
+ audioDeviceSet);
for (const auto& device : declaredDevices) {
formatSet.insert(device->encodedFormats().begin(), device->encodedFormats().end());
}
@@ -2183,7 +2198,7 @@
}
// Explicit routing?
- sp<DeviceDescriptor> explicitRoutingDevice =
+ sp<DeviceDescriptor> explicitRoutingDevice =
mAvailableInputDevices.getDeviceFromId(*selectedDeviceId);
// special case for mmap capture: if an input IO handle is specified, we reuse this input if
@@ -2369,7 +2384,7 @@
profileFlags = AUDIO_INPUT_FLAG_NONE; // retry
} else { // fail
ALOGW("%s could not find profile for device %s, sampling rate %u, format %#x, "
- "channel mask 0x%X, flags %#x", __func__, device->toString().c_str(),
+ "channel mask 0x%X, flags %#x", __func__, device->toString().c_str(),
config->sample_rate, config->format, config->channel_mask, flags);
return input;
}
@@ -3568,7 +3583,7 @@
void AudioPolicyManager::dump(String8 *dst) const
{
dst->appendFormat("\nAudioPolicyManager Dump: %p\n", this);
- dst->appendFormat(" Primary Output: %d\n",
+ dst->appendFormat(" Primary Output I/O handle: %d\n",
hasPrimaryOutput() ? mPrimaryOutput->mIoHandle : AUDIO_IO_HANDLE_NONE);
std::string stateLiteral;
AudioModeConverter::toString(mEngine->getPhoneState(), stateLiteral);
@@ -3593,8 +3608,8 @@
dst->appendFormat(" Communnication Strategy: %d\n", mCommunnicationStrategy);
dst->appendFormat(" Config source: %s\n", mConfig.getSource().c_str()); // getConfig not const
- mAvailableOutputDevices.dump(dst, String8("Available output"));
- mAvailableInputDevices.dump(dst, String8("Available input"));
+ mAvailableOutputDevices.dump(dst, String8("\n Available output"));
+ mAvailableInputDevices.dump(dst, String8("\n Available input"));
mHwModulesAll.dump(dst);
mOutputs.dump(dst);
mInputs.dump(dst);
@@ -5589,7 +5604,7 @@
} // endif input != 0
if (input == AUDIO_IO_HANDLE_NONE) {
- ALOGW("%s could not open input for device %s", __func__,
+ ALOGW("%s could not open input for device %s", __func__,
device->toString().c_str());
profiles.removeAt(profile_index);
profile_index--;
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
index 0eda10e..8a85b95 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
@@ -320,8 +320,8 @@
audio_format_t *surroundFormats);
virtual status_t setSurroundFormatEnabled(audio_format_t audioFormat, bool enabled);
- virtual status_t getHwOffloadEncodingFormatsSupportedForA2DP(
- std::vector<audio_format_t> *formats);
+ virtual status_t getHwOffloadFormatsSupportedForBluetoothMedia(
+ audio_devices_t device, std::vector<audio_format_t> *formats);
virtual void setAppState(audio_port_handle_t portId, app_state_t state);
diff --git a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
index 099a49e..f7442cb 100644
--- a/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
+++ b/services/audiopolicy/service/AudioPolicyInterfaceImpl.cpp
@@ -1931,7 +1931,8 @@
return Status::ok();
}
-Status AudioPolicyService::getHwOffloadEncodingFormatsSupportedForA2DP(
+Status AudioPolicyService::getHwOffloadFormatsSupportedForBluetoothMedia(
+ const AudioDeviceDescription& deviceAidl,
std::vector<AudioFormatDescription>* _aidl_return) {
std::vector<audio_format_t> formats;
@@ -1940,8 +1941,10 @@
}
Mutex::Autolock _l(mLock);
AutoCallerClear acc;
+ audio_devices_t device = VALUE_OR_RETURN_BINDER_STATUS(
+ aidl2legacy_AudioDeviceDescription_audio_devices_t(deviceAidl));
RETURN_IF_BINDER_ERROR(binderStatusFromStatusT(
- mAudioPolicyManager->getHwOffloadEncodingFormatsSupportedForA2DP(&formats)));
+ mAudioPolicyManager->getHwOffloadFormatsSupportedForBluetoothMedia(device, &formats)));
*_aidl_return = VALUE_OR_RETURN_BINDER_STATUS(
convertContainer<std::vector<AudioFormatDescription>>(
formats,
diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp
index 0b4a059..0471ddc 100644
--- a/services/audiopolicy/service/AudioPolicyService.cpp
+++ b/services/audiopolicy/service/AudioPolicyService.cpp
@@ -476,7 +476,7 @@
}
}
-void AudioPolicyService::NotificationClient::onAudioVolumeGroupChanged(volume_group_t group,
+void AudioPolicyService::NotificationClient::onAudioVolumeGroupChanged(volume_group_t group,
int flags)
{
if (mAudioPolicyServiceClient != 0 && mAudioVolumeGroupCallbacksEnabled) {
@@ -1040,7 +1040,7 @@
case TRANSACTION_removeUidDeviceAffinities:
case TRANSACTION_setUserIdDeviceAffinities:
case TRANSACTION_removeUserIdDeviceAffinities:
- case TRANSACTION_getHwOffloadEncodingFormatsSupportedForA2DP:
+ case TRANSACTION_getHwOffloadFormatsSupportedForBluetoothMedia:
case TRANSACTION_listAudioVolumeGroups:
case TRANSACTION_getVolumeGroupFromAudioAttributes:
case TRANSACTION_acquireSoundTriggerSession:
diff --git a/services/audiopolicy/service/AudioPolicyService.h b/services/audiopolicy/service/AudioPolicyService.h
index 03241a2..8a42b7c 100644
--- a/services/audiopolicy/service/AudioPolicyService.h
+++ b/services/audiopolicy/service/AudioPolicyService.h
@@ -214,7 +214,8 @@
std::vector<bool>* formatsEnabled) override;
binder::Status getReportedSurroundFormats(
Int* count, std::vector<AudioFormatDescription>* formats) override;
- binder::Status getHwOffloadEncodingFormatsSupportedForA2DP(
+ binder::Status getHwOffloadFormatsSupportedForBluetoothMedia(
+ const AudioDeviceDescription& device,
std::vector<AudioFormatDescription>* _aidl_return) override;
binder::Status setSurroundFormatEnabled(const AudioFormatDescription& audioFormat,
bool enabled) override;
diff --git a/services/camera/libcameraservice/tests/PreviewSchedulerTest.cpp b/services/camera/libcameraservice/tests/PreviewSchedulerTest.cpp
index 6586b74..025521a 100644
--- a/services/camera/libcameraservice/tests/PreviewSchedulerTest.cpp
+++ b/services/camera/libcameraservice/tests/PreviewSchedulerTest.cpp
@@ -115,9 +115,6 @@
// The pair of nsecs_t: camera timestamp delta (negative means in the past) and frame interval
const std::pair<nsecs_t, nsecs_t> inputTimestamps[][BUFFER_COUNT] = {
- // 30fps, no interval
- {{-100000000LL, 0}, {-66666667LL, 0},
- {-33333333LL, 0}, {0, 0}},
// 30fps, 33ms interval
{{-100000000LL, 33333333LL}, {-66666667LL, 33333333LL},
{-33333333LL, 33333333LL}, {0, 0}},
@@ -132,22 +129,6 @@
{-16666667LL, 20666667LL}, {0, 0}},
};
- const nsecs_t USE_AS_IS = -1; // Use the producer set timestamp
- const nsecs_t USE_OVERRIDE = -2; // Use the scheduler overridden timestamp
- const nsecs_t expectedTimestamps[][BUFFER_COUNT] = {
- // 30fps, no interval: first 2 frames as is, and last 2 frames are
- // overridden.
- {USE_AS_IS, USE_AS_IS, USE_OVERRIDE, USE_OVERRIDE},
- // 30fps, 33ms interval: all frames are overridden
- {USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE},
- // 30fps, variable interval: all frames are overridden
- {USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE},
- // 60fps, 16.7ms interval: all frames are overridden
- {USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE},
- // 60fps, variable interval: all frames are overridden
- {USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE, USE_OVERRIDE},
- };
-
// Go through different use cases, and check the buffer timestamp
size_t iterations = sizeof(inputTimestamps)/sizeof(inputTimestamps[0]);
for (size_t i = 0; i < iterations; i++) {
@@ -185,11 +166,7 @@
outputTimestamps[j] = bufferItem.mTimestamp;
ALOGV("%s: [%zu][%zu]: input: %" PRId64 ", output: %" PRId64, __FUNCTION__,
i, j, timeBase + inputTimestamps[i][j].first, bufferItem.mTimestamp);
- if (expectedTimestamps[i][j] == USE_OVERRIDE) {
- ASSERT_GT(bufferItem.mTimestamp, inputTimestamps[i][j].first);
- } else if (expectedTimestamps[i][j] == USE_AS_IS) {
- ASSERT_EQ(bufferItem.mTimestamp, timeBase + inputTimestamps[i][j].first);
- }
+ ASSERT_GT(bufferItem.mTimestamp, inputTimestamps[i][j].first);
ASSERT_EQ(NO_ERROR, bufferConsumer->releaseBuffer(bufferItem));
}
@@ -197,12 +174,9 @@
// Check the output timestamp intervals are aligned with input intervals
const nsecs_t SHIFT_THRESHOLD = ms2ns(2);
for (size_t j = 0; j < BUFFER_COUNT - 1; j ++) {
- if (expectedTimestamps[i][j] == USE_OVERRIDE &&
- expectedTimestamps[i][j+1] == USE_OVERRIDE) {
- nsecs_t interval_shift = outputTimestamps[j+1] - outputTimestamps[j] -
- (inputTimestamps[i][j+1].first - inputTimestamps[i][j].first);
- ASSERT_LE(std::abs(interval_shift), SHIFT_THRESHOLD);
- }
+ nsecs_t interval_shift = outputTimestamps[j+1] - outputTimestamps[j] -
+ (inputTimestamps[i][j+1].first - inputTimestamps[i][j].first);
+ ASSERT_LE(std::abs(interval_shift), SHIFT_THRESHOLD);
}
consumerListener->reset(BUFFER_COUNT);
diff --git a/services/oboeservice/Android.bp b/services/oboeservice/Android.bp
index 20a4c34..80e4296 100644
--- a/services/oboeservice/Android.bp
+++ b/services/oboeservice/Android.bp
@@ -70,6 +70,7 @@
"framework-permission-aidl-cpp",
"libaudioclient_aidl_conversion",
"packagemanager_aidl-cpp",
+ "android.media.audio.common.types-V1-cpp",
],
export_shared_lib_headers: [