Merge "libwilhelm: Remove direct usage of TrackPlayerBase::mAudioTrack" into main am: 6a6c177d80 am: b85ecbb09a

Original change: https://android-review.googlesource.com/c/platform/frameworks/wilhelm/+/2928911

Change-Id: Ida3c79a11ace7369d8bb780912d1b90d5bfbd95e
Signed-off-by: Automerger Merge Worker <[email protected]>
diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp
index 5df053d..134bf3d 100644
--- a/src/android/AudioPlayer_to_android.cpp
+++ b/src/android/AudioPlayer_to_android.cpp
@@ -623,7 +623,7 @@
 
 //-----------------------------------------------------------------------------
 void audioPlayer_auxEffectUpdate(CAudioPlayer* ap) {
-    if ((ap->mTrackPlayer->mAudioTrack != 0) && (ap->mAuxEffect != 0)) {
+    if ((ap->mTrackPlayer->getAudioTrack() != 0) && (ap->mAuxEffect != 0)) {
         android_fxSend_attach(ap, true, ap->mAuxEffect, ap->mVolume.mLevel + ap->mAuxSendLevel);
     }
 }
@@ -877,8 +877,9 @@
 
     case android::GenericPlayer::kEventEndOfStream: {
         audioPlayer_dispatch_headAtEnd_lockPlay(ap, true /*set state to paused?*/, true);
-        if ((ap->mTrackPlayer->mAudioTrack != 0) && (!ap->mSeek.mLoopEnabled)) {
-            ap->mTrackPlayer->mAudioTrack->stop();
+        auto audioTrack = ap->mTrackPlayer->getAudioTrack();
+        if ((audioTrack != 0) && (!ap->mSeek.mLoopEnabled)) {
+            audioTrack->stop();
         }
         ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STOPPED, AUDIO_PORT_HANDLE_NONE);
         }
@@ -1542,7 +1543,7 @@
 // AudioTrack to adjust performance mode based on actual output flags
 static void checkAndSetPerformanceModePost(CAudioPlayer *pAudioPlayer)
 {
-    audio_output_flags_t flags = pAudioPlayer->mTrackPlayer->mAudioTrack->getFlags();
+    audio_output_flags_t flags = pAudioPlayer->mTrackPlayer->getAudioTrack()->getFlags();
     switch (pAudioPlayer->mPerformanceMode) {
     case ANDROID_PERFORMANCE_MODE_LATENCY:
         if ((flags & (AUDIO_OUTPUT_FLAG_FAST | AUDIO_OUTPUT_FLAG_RAW)) ==
@@ -1698,11 +1699,11 @@
             j_env->ExceptionClear();
             j_env->CallVoidMethod(pAudioPlayer->mAndroidConfiguration.mRoutingProxy,
                                   midRoutingProxy_connect,
-                                  (jlong)pAudioPlayer->mTrackPlayer->mAudioTrack.get());
+                                  (jlong)pAudioPlayer->mTrackPlayer->getAudioTrack().get());
             if (j_env->ExceptionCheck()) {
                 SL_LOGE("Java exception releasing player routing object.");
                 result = SL_RESULT_INTERNAL_ERROR;
-                pAudioPlayer->mTrackPlayer->mAudioTrack.clear();
+                pAudioPlayer->mTrackPlayer->clearAudioTrack();
                 return result;
             }
         }
@@ -1988,8 +1989,9 @@
         // get the content sample rate
         uint32_t contentRate = sles_to_android_sampleRate(ap->mSampleRateMilliHz);
         // apply the SL ES playback rate on the AudioTrack as a factor of its content sample rate
-        if (ap->mTrackPlayer->mAudioTrack != 0) {
-            ap->mTrackPlayer->mAudioTrack->setSampleRate(contentRate * (rate/1000.0f));
+        auto audioTrack = ap->mTrackPlayer->getAudioTrack();
+        if (audioTrack != 0) {
+            audioTrack->setSampleRate(contentRate * (rate/1000.0f));
         }
         }
         break;
@@ -2195,8 +2197,10 @@
     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();
+    android::sp<android::AudioTrack> audioTrack =
+        ap->mTrackPlayer != 0 ? ap->mTrackPlayer->getAudioTrack() : nullptr;
+    if (audioTrack != 0) {
+        deviceId = audioTrack->getRoutedDeviceId();
     }
 
     switch (ap->mAndroidObjType) {
@@ -2212,7 +2216,7 @@
             break;
         case SL_PLAYSTATE_PLAYING:
             SL_LOGV("setting AudioPlayer to SL_PLAYSTATE_PLAYING");
-            if (ap->mTrackPlayer->mAudioTrack != 0) {
+            if (audioTrack != 0) {
                 // instead of ap->mTrackPlayer->mAudioTrack->start();
                 if (!ap->mDeferredStart) {
                     // state change
@@ -2268,19 +2272,20 @@
     /*switch (ap->mAndroidObjType) {
     case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:*/
 
+    auto audioTrack = ap->mTrackPlayer->getAudioTrack();
     if (ap->mAPlayer != 0) {
-        assert(ap->mTrackPlayer->mAudioTrack == 0);
+        assert(audioTrack == 0);
         ap->mAPlayer->setPlayEvents((int32_t) eventFlags, (int32_t) pPlayItf->mMarkerPosition,
                 (int32_t) pPlayItf->mPositionUpdatePeriod);
         return;
     }
 
-    if (ap->mTrackPlayer->mAudioTrack == 0) {
+    if (audioTrack == 0) {
         return;
     }
 
     if (eventFlags & SL_PLAYEVENT_HEADATMARKER) {
-        ap->mTrackPlayer->mAudioTrack->setMarkerPosition(
+        audioTrack->setMarkerPosition(
             (uint32_t) (
                 (int64_t) pPlayItf->mMarkerPosition *
                 sles_to_android_sampleRate(ap->mSampleRateMilliHz) /
@@ -2288,16 +2293,16 @@
             ));
     } else {
         // clear marker
-        ap->mTrackPlayer->mAudioTrack->setMarkerPosition(0);
+        audioTrack->setMarkerPosition(0);
     }
 
     if (eventFlags & SL_PLAYEVENT_HEADATNEWPOS) {
-         ap->mTrackPlayer->mAudioTrack->setPositionUpdatePeriod(
+         audioTrack->setPositionUpdatePeriod(
                 (uint32_t)((((int64_t)pPlayItf->mPositionUpdatePeriod
                 * sles_to_android_sampleRate(ap->mSampleRateMilliHz)))/1000));
     } else {
         // clear periodic update
-        ap->mTrackPlayer->mAudioTrack->setPositionUpdatePeriod(0);
+        audioTrack->setPositionUpdatePeriod(0);
     }
 
     if (eventFlags & SL_PLAYEVENT_HEADATEND) {
@@ -2348,16 +2353,18 @@
     CAudioPlayer *ap = (CAudioPlayer *)pPlayItf->mThis;
     switch (ap->mAndroidObjType) {
 
-      case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
-        if (ap->mSampleRateMilliHz == UNKNOWN_SAMPLERATE || ap->mTrackPlayer->mAudioTrack == 0) {
+      case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE: {
+        auto audioTrack = ap->mTrackPlayer->getAudioTrack();
+        if (ap->mSampleRateMilliHz == UNKNOWN_SAMPLERATE || audioTrack == 0) {
             *pPosMsec = 0;
         } else {
             uint32_t positionInFrames;
-            ap->mTrackPlayer->mAudioTrack->getPosition(&positionInFrames);
+            audioTrack->getPosition(&positionInFrames);
             *pPosMsec = ((int64_t)positionInFrames * 1000) /
                     sles_to_android_sampleRate(ap->mSampleRateMilliHz);
         }
         break;
+      }
 
       case AUDIOPLAYER_FROM_TS_ANDROIDBUFFERQUEUE:    // intended fall-through
       case AUDIOPLAYER_FROM_URIFD:
@@ -2447,9 +2454,10 @@
     // the AudioTrack associated with the AudioPlayer receiving audio from a PCM buffer
     // 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) {
+    auto audioTrack = ap->mTrackPlayer->getAudioTrack();
+    if (audioTrack != 0) {
         ap->mTrackPlayer->reportEvent(android::PLAYER_STATE_STARTED,
-                            ap->mTrackPlayer->mAudioTrack->getRoutedDeviceId());
+                            audioTrack->getRoutedDeviceId());
         // instead of ap->mTrackPlayer->mAudioTrack->start();
         ap->mDeferredStart = true;
     }
@@ -2484,11 +2492,13 @@
     switch (ap->mAndroidObjType) {
     //-----------------------------------
     // AudioTrack
-    case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE:
-        if (ap->mTrackPlayer->mAudioTrack != 0) {
-            ap->mTrackPlayer->mAudioTrack->flush();
+    case AUDIOPLAYER_FROM_PCM_BUFFERQUEUE: {
+        auto audioTrack = ap->mTrackPlayer->getAudioTrack();
+        if (audioTrack != 0) {
+            audioTrack->flush();
         }
         break;
+    }
     default:
         result = SL_RESULT_INTERNAL_ERROR;
         break;
diff --git a/src/android/android_Effect.cpp b/src/android/android_Effect.cpp
index c87e584..8d7607e 100644
--- a/src/android/android_Effect.cpp
+++ b/src/android/android_Effect.cpp
@@ -511,8 +511,9 @@
     //  mAPlayer == 0 && mAudioTrack != 0 means playing PCM audio
     //  mAPlayer == 0 && mAudioTrack == 0 means player not fully configured yet
     // The asserts document and verify this.
+    auto audioTrack = ap->mTrackPlayer->getAudioTrack();
     if (ap->mAPlayer != 0) {
-        assert(ap->mTrackPlayer->mAudioTrack == 0);
+        assert(audioTrack == 0);
         if (attach) {
             ap->mAPlayer->attachAuxEffect(pFx->id());
             ap->mAPlayer->setAuxEffectSendLevel( sles_to_android_amplification(sendLevel) );
@@ -522,7 +523,7 @@
         return android::NO_ERROR;
     }
 
-    if (ap->mTrackPlayer->mAudioTrack == 0) {
+    if (audioTrack == 0) {
         // the player doesn't have an AudioTrack at the moment, so store this info to use it
         // when the AudioTrack becomes available
         if (attach) {
@@ -536,16 +537,15 @@
     }
 
     if (attach) {
-        android::status_t status = ap->mTrackPlayer->mAudioTrack->attachAuxEffect(pFx->id());
+        android::status_t status = audioTrack->attachAuxEffect(pFx->id());
         //SL_LOGV("attachAuxEffect(%d) returned %d", pFx->id(), status);
         if (android::NO_ERROR == status) {
-            status =
-                ap->mTrackPlayer->mAudioTrack->setAuxEffectSendLevel(
-                        sles_to_android_amplification(sendLevel) );
+            status = audioTrack->setAuxEffectSendLevel(
+                    sles_to_android_amplification(sendLevel) );
         }
         return status;
     } else {
-        return ap->mTrackPlayer->mAudioTrack->attachAuxEffect(0);
+        return audioTrack->attachAuxEffect(0);
     }
 }
 
@@ -593,17 +593,18 @@
     // we keep track of the send level, independently of the current audio player level
     ap->mAuxSendLevel = sendLevel - ap->mVolume.mLevel;
 
+    auto audioTrack = ap->mTrackPlayer->getAudioTrack();
     if (ap->mAPlayer != 0) {
-        assert(ap->mTrackPlayer->mAudioTrack == 0);
+        assert(audioTrack == 0);
         ap->mAPlayer->setAuxEffectSendLevel( sles_to_android_amplification(sendLevel) );
         return android::NO_ERROR;
     }
 
-    if (ap->mTrackPlayer->mAudioTrack == 0) {
+    if (audioTrack == 0) {
         return android::NO_ERROR;
     }
 
-    return ap->mTrackPlayer->mAudioTrack->setAuxEffectSendLevel(
+    return audioTrack->setAuxEffectSendLevel(
             sles_to_android_amplification(sendLevel) );
 }
 
diff --git a/src/itf/IAndroidConfiguration.cpp b/src/itf/IAndroidConfiguration.cpp
index 412ef70..f3d23e1 100644
--- a/src/itf/IAndroidConfiguration.cpp
+++ b/src/itf/IAndroidConfiguration.cpp
@@ -154,7 +154,7 @@
     SLresult result;
 
     IObject* configObj = iConfig->mThis;                // get corresponding object
-    android::AudioTrack* pAudioTrack = ((CAudioPlayer*)configObj)->mTrackPlayer->mAudioTrack.get();
+    auto audioTrack = ((CAudioPlayer*)configObj)->mTrackPlayer->getAudioTrack();
 
     JNIEnv* j_env = android::AndroidRuntime::getJNIEnv();
 
@@ -163,7 +163,7 @@
     jobject localObjRef =
         j_env->NewObject(gClsAudioTrackRoutingProxy,
                          gMidAudioTrackRoutingProxy_ctor,
-                         (jlong)pAudioTrack /*audioTrackObjInLong*/);
+                         (jlong)audioTrack.get() /*audioTrackObjInLong*/);
 
     *proxyObj = j_env->NewGlobalRef(localObjRef);
 
@@ -381,4 +381,3 @@
         thiz->mItf->ReleaseJavaProxy(&thiz->mItf, SL_ANDROID_JAVA_PROXY_ROUTING);
     }
 }
-
diff --git a/src/itf/IAndroidEffect.cpp b/src/itf/IAndroidEffect.cpp
index 6748561..e17ad7b 100644
--- a/src/itf/IAndroidEffect.cpp
+++ b/src/itf/IAndroidEffect.cpp
@@ -28,7 +28,7 @@
     IAndroidEffect *thiz = (IAndroidEffect *) self;
     if (SL_OBJECTID_AUDIOPLAYER == IObjectToObjectID(thiz->mThis)) {
         CAudioPlayer *ap = (CAudioPlayer *)thiz->mThis;
-        if (ap->mTrackPlayer->mAudioTrack != 0) {
+        if (ap->mTrackPlayer->getAudioTrack() != 0) {
             result = android_genericFx_createEffect(thiz, effectImplementationId, ap->mSessionId);
         } else {
             result = SL_RESULT_RESOURCE_ERROR;
diff --git a/src/locks.cpp b/src/locks.cpp
index f3edd33..d2d7cb5 100644
--- a/src/locks.cpp
+++ b/src/locks.cpp
@@ -228,7 +228,7 @@
         ap->mPrefetchStatus.mDeferredPrefetchContext  = NULL;
         ap->mPrefetchStatus.mDeferredPrefetchEvents   = SL_PREFETCHEVENT_NONE;
         if (ap->mDeferredStart) {
-            audioTrack = ap->mTrackPlayer->mAudioTrack;
+            audioTrack = ap->mTrackPlayer->getAudioTrack();
             ap->mDeferredStart = false;
         }
     }