Revert "Refactor AudioTrack callback to Interface"
This reverts commit f86d269d7cd4141129d2f4b18035e133324c15b7.
Reason for revert: Bug: 204055298
Change-Id: Ib48e22cce572845192f1a9bc4b2c70c4816fbe5a
diff --git a/media/libaaudio/src/legacy/AudioStreamTrack.cpp b/media/libaaudio/src/legacy/AudioStreamTrack.cpp
index fe84ec5..b512b48 100644
--- a/media/libaaudio/src/legacy/AudioStreamTrack.cpp
+++ b/media/libaaudio/src/legacy/AudioStreamTrack.cpp
@@ -103,7 +103,7 @@
: getFormat();
// Setup the callback if there is one.
- AudioTrack::legacy_callback_t callback = nullptr;
+ AudioTrack::callback_t callback = nullptr;
void *callbackData = nullptr;
// Note that TRANSFER_SYNC does not allow FAST track
AudioTrack::transfer_type streamTransferType = AudioTrack::transfer_type::TRANSFER_SYNC;
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 5e2dfcc..8cf22c4 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -254,80 +254,7 @@
audio_channel_mask_t channelMask,
size_t frameCount,
audio_output_flags_t flags,
- const wp<IAudioTrackCallback> & callback,
- int32_t notificationFrames,
- audio_session_t sessionId,
- transfer_type transferType,
- const audio_offload_info_t *offloadInfo,
- const AttributionSourceState& attributionSource,
- const audio_attributes_t* pAttributes,
- bool doNotReconnect,
- float maxRequiredSpeed,
- audio_port_handle_t selectedDeviceId)
- : mStatus(NO_INIT),
- mState(STATE_STOPPED),
- mPreviousPriority(ANDROID_PRIORITY_NORMAL),
- mPreviousSchedulingGroup(SP_DEFAULT),
- mPausedPosition(0),
- mAudioTrackCallback(new AudioTrackCallback())
-{
- mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
-
- (void)set(streamType, sampleRate, format, channelMask,
- frameCount, flags, callback, notificationFrames,
- 0 /*sharedBuffer*/, false /*threadCanCallJava*/, sessionId, transferType, offloadInfo,
- attributionSource, pAttributes, doNotReconnect, maxRequiredSpeed, selectedDeviceId);
-}
-
-namespace {
- class LegacyCallbackWrapper : public AudioTrack::IAudioTrackCallback {
- const AudioTrack::legacy_callback_t mCallback;
- void * const mData;
- public:
- LegacyCallbackWrapper(AudioTrack::legacy_callback_t callback, void* user)
- : mCallback(callback), mData(user) {}
- size_t onMoreData(const AudioTrack::Buffer & buffer) override {
- AudioTrack::Buffer copy = buffer;
- mCallback(AudioTrack::EVENT_MORE_DATA, mData, static_cast<void*>(©));
- return copy.size;
- }
- void onUnderrun() override {
- mCallback(AudioTrack::EVENT_UNDERRUN, mData, nullptr);
- }
- void onLoopEnd(int32_t loopsRemaining) override {
- mCallback(AudioTrack::EVENT_LOOP_END, mData, &loopsRemaining);
- }
- void onMarker(uint32_t markerPosition) override {
- mCallback(AudioTrack::EVENT_MARKER, mData, &markerPosition);
- }
- void onNewPos(uint32_t newPos) override {
- mCallback(AudioTrack::EVENT_NEW_POS, mData, &newPos);
- }
- void onBufferEnd() override {
- mCallback(AudioTrack::EVENT_BUFFER_END, mData, nullptr);
- }
- void onNewIAudioTrack() override {
- mCallback(AudioTrack::EVENT_NEW_IAUDIOTRACK, mData, nullptr);
- }
- void onStreamEnd() override {
- mCallback(AudioTrack::EVENT_STREAM_END, mData, nullptr);
- }
- size_t onCanWriteMoreData(const AudioTrack::Buffer & buffer) override {
- AudioTrack::Buffer copy = buffer;
- mCallback(AudioTrack::EVENT_CAN_WRITE_MORE_DATA, mData, static_cast<void*>(©));
- return copy.size;
- }
- };
-}
-
-AudioTrack::AudioTrack(
- audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- size_t frameCount,
- audio_output_flags_t flags,
- legacy_callback_t callback,
+ callback_t cbf,
void* user,
int32_t notificationFrames,
audio_session_t sessionId,
@@ -346,13 +273,9 @@
mAudioTrackCallback(new AudioTrackCallback())
{
mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
- if (callback != nullptr) {
- mLegacyCallbackWrapper = sp<LegacyCallbackWrapper>::make(callback, user);
- } else if (user) {
- LOG_ALWAYS_FATAL("Callback data provided without callback pointer!");
- }
+
(void)set(streamType, sampleRate, format, channelMask,
- frameCount, flags, mLegacyCallbackWrapper, notificationFrames,
+ frameCount, flags, cbf, user, notificationFrames,
0 /*sharedBuffer*/, false /*threadCanCallJava*/, sessionId, transferType, offloadInfo,
attributionSource, pAttributes, doNotReconnect, maxRequiredSpeed, selectedDeviceId);
}
@@ -364,7 +287,8 @@
audio_channel_mask_t channelMask,
const sp<IMemory>& sharedBuffer,
audio_output_flags_t flags,
- const wp<IAudioTrackCallback>& callback,
+ callback_t cbf,
+ void* user,
int32_t notificationFrames,
audio_session_t sessionId,
transfer_type transferType,
@@ -384,49 +308,11 @@
mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
(void)set(streamType, sampleRate, format, channelMask,
- 0 /*frameCount*/, flags, callback, notificationFrames,
+ 0 /*frameCount*/, flags, cbf, user, notificationFrames,
sharedBuffer, false /*threadCanCallJava*/, sessionId, transferType, offloadInfo,
attributionSource, pAttributes, doNotReconnect, maxRequiredSpeed);
}
-AudioTrack::AudioTrack(
- audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- const sp<IMemory>& sharedBuffer,
- audio_output_flags_t flags,
- legacy_callback_t callback,
- void* user,
- int32_t notificationFrames,
- audio_session_t sessionId,
- transfer_type transferType,
- const audio_offload_info_t *offloadInfo,
- const AttributionSourceState& attributionSource,
- const audio_attributes_t* pAttributes,
- bool doNotReconnect,
- float maxRequiredSpeed)
- : mStatus(NO_INIT),
- mState(STATE_STOPPED),
- mPreviousPriority(ANDROID_PRIORITY_NORMAL),
- mPreviousSchedulingGroup(SP_DEFAULT),
- mPausedPosition(0),
- mSelectedDeviceId(AUDIO_PORT_HANDLE_NONE),
- mAudioTrackCallback(new AudioTrackCallback())
-{
- mAttributes = AUDIO_ATTRIBUTES_INITIALIZER;
- if (callback) {
- mLegacyCallbackWrapper = sp<LegacyCallbackWrapper>::make(callback, user);
- } else if (user) {
- LOG_ALWAYS_FATAL("Callback data provided without callback pointer!");
- }
-
- (void)set(streamType, sampleRate, format, channelMask, 0 /*frameCount*/, flags,
- mLegacyCallbackWrapper, notificationFrames, sharedBuffer,
- false /*threadCanCallJava*/, sessionId, transferType, offloadInfo, attributionSource,
- pAttributes, doNotReconnect, maxRequiredSpeed);
-}
-
AudioTrack::~AudioTrack()
{
// pull together the numbers, before we clean up our structures
@@ -488,38 +374,8 @@
audio_channel_mask_t channelMask,
size_t frameCount,
audio_output_flags_t flags,
- legacy_callback_t callback,
- void * user,
- int32_t notificationFrames,
- const sp<IMemory>& sharedBuffer,
- bool threadCanCallJava,
- audio_session_t sessionId,
- transfer_type transferType,
- const audio_offload_info_t *offloadInfo,
- const AttributionSourceState& attributionSource,
- const audio_attributes_t* pAttributes,
- bool doNotReconnect,
- float maxRequiredSpeed,
- audio_port_handle_t selectedDeviceId)
-{
- if (callback) {
- mLegacyCallbackWrapper = sp<LegacyCallbackWrapper>::make(callback, user);
- } else if (user) {
- LOG_ALWAYS_FATAL("Callback data provided without callback pointer!");
- }
- return set(streamType, sampleRate,format, channelMask, frameCount, flags,
- mLegacyCallbackWrapper, notificationFrames, sharedBuffer, threadCanCallJava,
- sessionId, transferType, offloadInfo, attributionSource, pAttributes,
- doNotReconnect, maxRequiredSpeed, selectedDeviceId);
-}
-status_t AudioTrack::set(
- audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- size_t frameCount,
- audio_output_flags_t flags,
- const wp<IAudioTrackCallback>& callback,
+ callback_t cbf,
+ void* user,
int32_t notificationFrames,
const sp<IMemory>& sharedBuffer,
bool threadCanCallJava,
@@ -538,7 +394,7 @@
pid_t myPid;
uid_t uid = VALUE_OR_FATAL(aidl2legacy_int32_t_uid_t(attributionSource.uid));
pid_t pid = VALUE_OR_FATAL(aidl2legacy_int32_t_pid_t(attributionSource.pid));
- sp<IAudioTrackCallback> _callback = callback.promote();
+
// Note mPortId is not valid until the track is created, so omit mPortId in ALOG for set.
ALOGV("%s(): streamType %d, sampleRate %u, format %#x, channelMask %#x, frameCount %zu, "
"flags #%x, notificationFrames %d, sessionId %d, transferType %d, uid %d, pid %d",
@@ -554,7 +410,7 @@
case TRANSFER_DEFAULT:
if (sharedBuffer != 0) {
transferType = TRANSFER_SHARED;
- } else if (_callback == nullptr|| threadCanCallJava) {
+ } else if (cbf == NULL || threadCanCallJava) {
transferType = TRANSFER_SYNC;
} else {
transferType = TRANSFER_CALLBACK;
@@ -562,8 +418,8 @@
break;
case TRANSFER_CALLBACK:
case TRANSFER_SYNC_NOTIF_CALLBACK:
- if (_callback == nullptr || sharedBuffer != 0) {
- ALOGE("%s(): Transfer type %s but callback == nullptr || sharedBuffer != 0",
+ if (cbf == NULL || sharedBuffer != 0) {
+ ALOGE("%s(): Transfer type %s but cbf == NULL || sharedBuffer != 0",
convertTransferToText(transferType), __func__);
status = BAD_VALUE;
goto exit;
@@ -753,10 +609,10 @@
}
mAuxEffectId = 0;
mOrigFlags = mFlags = flags;
- mCallback = callback;
+ mCbf = cbf;
- if (_callback != nullptr) {
- mAudioTrackThread = sp<AudioTrackThread>::make(*this);
+ if (cbf != NULL) {
+ mAudioTrackThread = new AudioTrackThread(*this);
mAudioTrackThread->run("AudioTrack", ANDROID_PRIORITY_AUDIO, 0 /*stack*/);
// thread begins in paused state, and will not reference us until start()
}
@@ -775,6 +631,7 @@
goto exit;
}
+ mUserData = user;
mLoopCount = 0;
mLoopStart = 0;
mLoopEnd = 0;
@@ -818,7 +675,7 @@
uint32_t channelMask,
size_t frameCount,
audio_output_flags_t flags,
- legacy_callback_t callback,
+ callback_t cbf,
void* user,
int32_t notificationFrames,
const sp<IMemory>& sharedBuffer,
@@ -837,15 +694,11 @@
attributionSource.uid = VALUE_OR_FATAL(legacy2aidl_uid_t_int32_t(uid));
attributionSource.pid = VALUE_OR_FATAL(legacy2aidl_pid_t_int32_t(pid));
attributionSource.token = sp<BBinder>::make();
- if (callback) {
- mLegacyCallbackWrapper = sp<LegacyCallbackWrapper>::make(callback, user);
- } else if (user) {
- LOG_ALWAYS_FATAL("Callback data provided without callback pointer!");
- }
- return set(streamType, sampleRate, format, static_cast<audio_channel_mask_t>(channelMask),
- frameCount, flags, mLegacyCallbackWrapper, notificationFrames, sharedBuffer,
- threadCanCallJava, sessionId, transferType, offloadInfo, attributionSource,
- pAttributes, doNotReconnect, maxRequiredSpeed, selectedDeviceId);
+ return set(streamType, sampleRate, format,
+ static_cast<audio_channel_mask_t>(channelMask),
+ frameCount, flags, cbf, user, notificationFrames, sharedBuffer,
+ threadCanCallJava, sessionId, transferType, offloadInfo, attributionSource,
+ pAttributes, doNotReconnect, maxRequiredSpeed, selectedDeviceId);
}
// -------------------------------------------------------------------------
@@ -1554,7 +1407,7 @@
status_t AudioTrack::setMarkerPosition(uint32_t marker)
{
// The only purpose of setting marker position is to get a callback
- if (!mCallback.promote() || isOffloadedOrDirect()) {
+ if (mCbf == NULL || isOffloadedOrDirect()) {
return INVALID_OPERATION;
}
@@ -1587,7 +1440,7 @@
status_t AudioTrack::setPositionUpdatePeriod(uint32_t updatePeriod)
{
// The only purpose of setting position update period is to get a callback
- if (!mCallback.promote() || isOffloadedOrDirect()) {
+ if (mCbf == NULL || isOffloadedOrDirect()) {
return INVALID_OPERATION;
}
@@ -2356,14 +2209,10 @@
{
// Currently the AudioTrack thread is not created if there are no callbacks.
// Would it ever make sense to run the thread, even without callbacks?
- // If so, then replace this by checks at each use for mCallback != NULL.
+ // If so, then replace this by checks at each use for mCbf != NULL.
LOG_ALWAYS_FATAL_IF(mCblk == NULL);
+
mLock.lock();
- sp<IAudioTrackCallback> callback = mCallback.promote();
- if (!callback) {
- mCallback = nullptr;
- return NS_NEVER;
- }
if (mAwaitBoost) {
mAwaitBoost = false;
mLock.unlock();
@@ -2461,7 +2310,7 @@
sp<AudioTrackClientProxy> proxy = mProxy;
// Determine the number of new loop callback(s) that will be needed, while locked.
- uint32_t loopCountNotifications = 0;
+ int loopCountNotifications = 0;
uint32_t loopPeriod = 0; // time in frames for next EVENT_LOOP_END or EVENT_BUFFER_END
if (mLoopCount > 0) {
@@ -2483,7 +2332,7 @@
}
// These fields don't need to be cached, because they are assigned only by set():
- // mTransfer, mCallback, mUserData, mFormat, mFrameSize, mFlags
+ // mTransfer, mCbf, mUserData, mFormat, mFrameSize, mFlags
// mFlags is also assigned by createTrack_l(), but not the bit we care about.
mLock.unlock();
@@ -2508,7 +2357,7 @@
if (status != DEAD_OBJECT) {
// for DEAD_OBJECT, we do not send a EVENT_STREAM_END after stop();
// instead, the application should handle the EVENT_NEW_IAUDIOTRACK.
- callback->onStreamEnd();
+ mCbf(EVENT_STREAM_END, mUserData, NULL);
}
{
AutoMutex lock(mLock);
@@ -2531,27 +2380,28 @@
// perform callbacks while unlocked
if (newUnderrun) {
- callback->onUnderrun();
+ mCbf(EVENT_UNDERRUN, mUserData, NULL);
}
while (loopCountNotifications > 0) {
+ mCbf(EVENT_LOOP_END, mUserData, NULL);
--loopCountNotifications;
- callback->onLoopEnd(mLoopCount > 0 ? loopCountNotifications + mLoopCountNotified : -1);
}
if (flags & CBLK_BUFFER_END) {
- callback->onBufferEnd();
+ mCbf(EVENT_BUFFER_END, mUserData, NULL);
}
if (markerReached) {
- callback->onMarker(markerPosition.value());
+ mCbf(EVENT_MARKER, mUserData, &markerPosition);
}
while (newPosCount > 0) {
- callback->onNewPos(newPosition.value());
+ size_t temp = newPosition.value(); // FIXME size_t != uint32_t
+ mCbf(EVENT_NEW_POS, mUserData, &temp);
newPosition += updatePeriod;
newPosCount--;
}
if (mObservedSequence != sequence) {
mObservedSequence = sequence;
- callback->onNewIAudioTrack();
+ mCbf(EVENT_NEW_IAUDIOTRACK, mUserData, NULL);
// for offloaded tracks, just wait for the upper layers to recreate the track
if (isOffloadedOrDirect()) {
return NS_INACTIVE;
@@ -2689,9 +2539,10 @@
// written in the next write() call, since it's not passed through the callback
audioBuffer.size += nonContig;
}
- size_t writtenSize = (mTransfer == TRANSFER_CALLBACK)
- ? callback->onMoreData(audioBuffer)
- : callback->onCanWriteMoreData(audioBuffer);
+ mCbf(mTransfer == TRANSFER_CALLBACK ? EVENT_MORE_DATA : EVENT_CAN_WRITE_MORE_DATA,
+ mUserData, &audioBuffer);
+ size_t writtenSize = audioBuffer.size;
+
// Validate on returned size
if (ssize_t(writtenSize) < 0 || writtenSize > reqSize) {
ALOGE("%s(%d): EVENT_MORE_DATA requested %zu bytes but callback returned %zd bytes",
diff --git a/media/libaudioclient/include/media/AudioTrack.h b/media/libaudioclient/include/media/AudioTrack.h
index 1bc2c32..5ba9f91 100644
--- a/media/libaudioclient/include/media/AudioTrack.h
+++ b/media/libaudioclient/include/media/AudioTrack.h
@@ -146,51 +146,7 @@
* - EVENT_NEW_TIMESTAMP: pointer to const AudioTimestamp.
*/
- typedef void (*legacy_callback_t)(int event, void* user, void* info);
- class IAudioTrackCallback : public virtual RefBase {
- friend AudioTrack;
- protected:
- // Request to write more data to buffer.
- // This event only occurs for TRANSFER_CALLBACK.
- // If this event is delivered but the callback handler does not want to write more data,
- // the handler must ignore the event by returning zero.
- // This might occur, for example, if the application is waiting for source data or is at
- // the end of stream.
- // For data filling, it is preferred that the callback does not block and instead returns
- // a short count of the amount of data actually delivered.
- // buffer: Buffer to fill
- virtual size_t onMoreData(const AudioTrack::Buffer& buffer) { return buffer.size; }
- // Buffer underrun occurred. This will not occur for static tracks.
- virtual void onUnderrun() {}
- // Sample loop end was reached; playback restarted from loop start if loop count was not 0
- // for a static track.
- // loopsRemaining: Number of loops remaining to be played. -1 if infinite looping.
- virtual void onLoopEnd([[maybe_unused]] int32_t loopsRemaining) {}
- // Playback head is at the specified marker (See setMarkerPosition()).
- // onMarker: Marker position in frames
- virtual void onMarker([[maybe_unused]] uint32_t markerPosition) {}
- // Playback head is at a new position (See setPositionUpdatePeriod()).
- // newPos: New position in frames
- virtual void onNewPos([[maybe_unused]] uint32_t newPos) {}
- // Playback has completed for a static track.
- virtual void onBufferEnd() {}
- // IAudioTrack was re-created, either due to re-routing and voluntary invalidation
- // by mediaserver, or mediaserver crash.
- virtual void onNewIAudioTrack() {}
- // Sent after all the buffers queued in AF and HW are played back (after stop is called)
- // for an offloaded track.
- virtual void onStreamEnd() {}
- // Delivered periodically and when there's a significant change
- // in the mapping from frame position to presentation time.
- // See AudioTimestamp for the information included with event.
- // TODO not yet implemented.
- virtual void onNewTimestamp([[maybe_unused]] AudioTimestamp timestamp) {}
- // Notification that more data can be given by write()
- // This event only occurs for TRANSFER_SYNC_NOTIF_CALLBACK.
- // Similar to onMoreData(), return the number of frames actually written
- // buffer: Buffer to fill
- virtual size_t onCanWriteMoreData(const AudioTrack::Buffer& buffer) { return buffer.size; }
- };
+ typedef void (*callback_t)(int event, void* user, void *info);
/* Returns the minimum frame count required for the successful creation of
* an AudioTrack object.
@@ -301,34 +257,15 @@
audio_channel_mask_t channelMask,
size_t frameCount = 0,
audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE,
- const wp<IAudioTrackCallback>& callback = nullptr,
+ callback_t cbf = NULL,
+ void* user = NULL,
int32_t notificationFrames = 0,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
+ const audio_offload_info_t *offloadInfo = NULL,
const AttributionSourceState& attributionSource =
AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
- bool doNotReconnect = false,
- float maxRequiredSpeed = 1.0f,
- audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
-
-
- AudioTrack( audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- size_t frameCount,
- audio_output_flags_t flags,
- legacy_callback_t cbf,
- void* user = nullptr,
- int32_t notificationFrames = 0,
- audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
- transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
- const AttributionSourceState& attributionSource =
- AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
+ const audio_attributes_t* pAttributes = NULL,
bool doNotReconnect = false,
float maxRequiredSpeed = 1.0f,
audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
@@ -344,39 +281,22 @@
* It is recommended to pass a callback function to be notified of playback end by an
* EVENT_UNDERRUN event.
*/
+
AudioTrack( audio_stream_type_t streamType,
uint32_t sampleRate,
audio_format_t format,
audio_channel_mask_t channelMask,
const sp<IMemory>& sharedBuffer,
audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE,
- const wp<IAudioTrackCallback>& callback = nullptr,
+ callback_t cbf = NULL,
+ void* user = NULL,
int32_t notificationFrames = 0,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
+ const audio_offload_info_t *offloadInfo = NULL,
const AttributionSourceState& attributionSource =
AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
- bool doNotReconnect = false,
- float maxRequiredSpeed = 1.0f);
-
-
- AudioTrack( audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- const sp<IMemory>& sharedBuffer,
- audio_output_flags_t flags,
- legacy_callback_t cbf,
- void* user = nullptr,
- int32_t notificationFrames = 0,
- audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
- transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
- const AttributionSourceState& attributionSource =
- AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
+ const audio_attributes_t* pAttributes = NULL,
bool doNotReconnect = false,
float maxRequiredSpeed = 1.0f);
@@ -414,41 +334,20 @@
audio_channel_mask_t channelMask,
size_t frameCount = 0,
audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE,
- const wp<IAudioTrackCallback>& callback = nullptr,
+ callback_t cbf = NULL,
+ void* user = NULL,
int32_t notificationFrames = 0,
const sp<IMemory>& sharedBuffer = 0,
bool threadCanCallJava = false,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
+ const audio_offload_info_t *offloadInfo = NULL,
const AttributionSourceState& attributionSource =
AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
+ const audio_attributes_t* pAttributes = NULL,
bool doNotReconnect = false,
float maxRequiredSpeed = 1.0f,
audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
-
- status_t set(audio_stream_type_t streamType,
- uint32_t sampleRate,
- audio_format_t format,
- audio_channel_mask_t channelMask,
- size_t frameCount,
- audio_output_flags_t flags,
- legacy_callback_t callback,
- void * user = nullptr,
- int32_t notificationFrames = 0,
- const sp<IMemory>& sharedBuffer = 0,
- bool threadCanCallJava = false,
- audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
- transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
- const AttributionSourceState& attributionSource =
- AttributionSourceState(),
- const audio_attributes_t* pAttributes = nullptr,
- bool doNotReconnect = false,
- float maxRequiredSpeed = 1.0f,
- audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
-
// FIXME(b/169889714): Vendor code depends on the old method signature at link time
status_t set(audio_stream_type_t streamType,
uint32_t sampleRate,
@@ -456,17 +355,17 @@
uint32_t channelMask,
size_t frameCount = 0,
audio_output_flags_t flags = AUDIO_OUTPUT_FLAG_NONE,
- legacy_callback_t cbf = nullptr,
- void* user = nullptr,
+ callback_t cbf = NULL,
+ void* user = NULL,
int32_t notificationFrames = 0,
const sp<IMemory>& sharedBuffer = 0,
bool threadCanCallJava = false,
audio_session_t sessionId = AUDIO_SESSION_ALLOCATE,
transfer_type transferType = TRANSFER_DEFAULT,
- const audio_offload_info_t *offloadInfo = nullptr,
+ const audio_offload_info_t *offloadInfo = NULL,
uid_t uid = AUDIO_UID_INVALID,
pid_t pid = -1,
- const audio_attributes_t* pAttributes = nullptr,
+ const audio_attributes_t* pAttributes = NULL,
bool doNotReconnect = false,
float maxRequiredSpeed = 1.0f,
audio_port_handle_t selectedDeviceId = AUDIO_PORT_HANDLE_NONE);
@@ -1316,8 +1215,9 @@
}
// for client callback handler
- wp<IAudioTrackCallback> mCallback; // callback handler for events, or NULL
- sp<IAudioTrackCallback> mLegacyCallbackWrapper; // wrapper for legacy callback interface
+ callback_t mCbf; // callback handler for events, or NULL
+ void* mUserData;
+
// for notification APIs
// next 2 fields are const after constructor or set()