MTK Android P 开机无动画,无铃声问题和开机铃声不同步,首次开机无铃声的问题

最近做Android9.0的项目定制出现开机动画铃声的问题,以下是解决方案

解决预置开机动画,铃声无效果的问题

1.device/mediatek/mt6739/device.mk

PRODUCT_PACKAGES += mtkbootanimation
PRODUCT_PACKAGES += libmtkbootanimation

2.device/mediatek/sepolicy/basic/non_plat/audioserver.te

allow audioserver bootanim:binder call;

3.frameworks/base/cmds/bootanimation/
在改文件夹下面将Android.mk文件修改为Android_disable.mk(当然删掉也是一样的)

4.vendor/mediatek/proprietary/operator/frameworks/bootanimation/
在改文件夹下面将Android_disable.mk文件修改为Android.mk

5.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/
在改文件夹下面将Android_disable.mk文件修改为Android.mk

6.vendor/mediatek/proprietary/frameworks/base/services/core/java/com/mediatek/server/MtkShutdownThread.java

private boolean showShutdownAnimation(Context context) {
.................
             bootanimCust(context);
             return true;
         }
-        return false;
+        return true;
     }
 
     private static void bootanimCust(Context context) {
  ........
 public static int isCustBootAnim() {
 .........................
                 sysProp = "NONE";
                 mode = DEFAULT_MODE;
             }
+            mode = ANIMATION_MODE; //Enable Shutdown Animation
             mShutOffAnimation = mode;
             Log.i(TAG,"mShutOffAnimation: " + mode + " (" + sysProp + ")");
             return mode;
 }

7.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

bool BootAnimation::threadLoop()
{
.......
     // We have no bootanimation file, so we use the stock android logo
     // animation.
     sp<MediaPlayer> mediaplayer;
-    const char* resourcePath = NULL;
+    const char* resourcePath = initAudioPath();
     status_t mediastatus = NO_ERROR;
     if (resourcePath != NULL) {
         bPlayMP3 = true;
.......
}

解决完开机动画显示发现首次开机还是无铃声,而且铃声和动画并不同步

解决铃声不同步问题

1.frameworks/av/media/libstagefright/MediaCodec.cpp

void MediaCodec::setState(State newState) {
...........
     cancelPendingDequeueOperations();
 
-    updateBatteryStat();
+    //updateBatteryStat();
 }
 
 void MediaCodec::returnBuffersToCodec(bool isReclaim) {

2.frameworks/av/services/audioflinger/AudioFlinger.cpp

AudioFlinger::AudioFlinger()
...........
       mTotalMemory(0),
       mClientSharedHeapSize(kMinimumClientSharedHeapSizeBytes),
       mGlobalEffectEnableTime(0),
-      mSystemReady(false)
+      mSystemReady(true)
 {
     // unsigned instead of audio_unique_id_use_t, because ++ operator is unavailable for enum
     for (unsigned use = AUDIO_UNIQUE_ID_USE_UNSPECIFIED; use < AUDIO_UNIQUE_ID_USE_MAX; use++) {

3.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

 bool BootAnimation::threadLoop()
 {
 .........
     if (bPlayMP3 && mediastatus == NO_ERROR) {
         AutoMutex _l(mMyLock);
         if (!bAudioStarted) {
-            status_t err = mCondition.waitRelative(mMyLock, s2ns(4));
+            status_t err = mCondition.waitRelative(mMyLock, s2ns(40));
             ALOGD("audio started re %d", err);
         }
     }
 .......
 }

4.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/audioplay.cpp

 // for native audio
 #include <SLES/OpenSLES.h>
 #include <SLES/OpenSLES_Android.h>
+#include <media/AudioSystem.h>
+#include <system/audio.h>
 
 namespace audioplay {
 namespace {
 // create buffer queue audio player
 bool createBufferQueueAudioPlayer(const ChunkFormat* chunkFormat) {
 .............
              ALOGE("config GetInterface failed with result %d", result);
         return false;
     }
+
+    int index = 0;
+    android::AudioSystem::initStreamVolume(AUDIO_STREAM_SYSTEM, 0, 7);
+    audio_devices_t device = android::AudioSystem::getDevicesForStream(AUDIO_STREAM_SYSTEM);
+    android::AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_SYSTEM, 7, device);
+    android::AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_SYSTEM, &index, device);
+
+    if (index != 0) {
+        ALOGE("android::AudioSystem::getDevicesForStream end index = %d", index);
+    } else {
+        ALOGE("Boot Music silence");
+    }
+
     SLint32 streamType = SL_ANDROID_STREAM_SYSTEM;
     result = (*playerConfig)->SetConfiguration(playerConfig,
         SL_ANDROID_KEY_STREAM_TYPE, &streamType, sizeof(SLint32));
 .................
 }

解决首次开机没有铃声的问题

1.frameworks/av/media/libaudioclient/AudioTrack.cpp

         }
     }
 #endif
+       if(!strcmp(mAttributes.tags,"BootAnimationAudioTrack")) {
+        ALOGD("mAttributes.tags = BootAnimationAudioTrack");
+               strcpy(input.attr.tags, "BootAnimationAudioTrack");
+    }else{
+               strcpy(input.attr.tags, "");
+       }
+       
     input.flags = mFlags;
     input.frameCount = mReqFrameCount;
     input.notificationFrameCount = mNotificationFramesReq;

2.frameworks/av/services/audioflinger/Threads.cpp

             }
 #endif
-            // XXX: these things DON'T need to be done each time
+
+
+                       if(!strcmp(track->mAttr.tags,"BootAnimationAudioTrack")) {
+                               ALOGD("mAttributes.tags = BootAnimationAudioTrack");
+                               vlf = 0.50f;
+                               vrf = 0.50f;
+                               vaf = 0.50f; 
+                       }
+          
+           // XXX: these things DON'T need to be done each time
             mAudioMixer->setBufferProvider(name, track);
             mAudioMixer->enable(name);

3.vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation/BootAnimation.cpp

 #endif
 
-#if !(defined(MTK_CARRIEREXPRESS_PACK) && defined(MTK_TER_SERVICE))
+//#if !(defined(MTK_CARRIEREXPRESS_PACK) && defined(MTK_TER_SERVICE))
     static const char* mAudioPath[2][PATH_COUNT] =
     {{"/system/media/bootaudio.mp3", "/custom/media/bootaudio.mp3", "/data/local/bootaudio.mp3"} , /*  bootaudio path  */
      {"/system/media/shutaudio.mp3", "/custom/media/shutaudio.mp3", "/data/local/shutaudio.mp3"} /*  shutaudio path  */
     };
-#endif
+//#endif
 
 namespace android {
         mShuttingDown = true;
     }
     bShutRotate = bSetRotated;
-    bPlayMP3 = bSetPlayMP3;
+    bPlayMP3 = bSetPlayMP3?bSetPlayMP3:true;
     mProgram = 0;
     bETC1Movie = false;
     mBootVideoPlayType = BOOT_VIDEO_PLAY_FULL;
     // We have no bootanimation file, so we use the stock android logo
     // animation.
     sp<MediaPlayer> mediaplayer;
-    const char* resourcePath = initAudioPath();
+       int index = 0;
+    if (bBootOrShutDown) {
+        index = 0;
+    } else {
+        index = 1;
+    }
+       
+    const char* resourcePath = mAudioPath[index][0];//initAudioPath();
     status_t mediastatus = NO_ERROR;
+       usleep(800000);
     if (resourcePath != NULL) {
         bPlayMP3 = true;
         ALOGD("sound file path: %s", resourcePath);

猜你喜欢

转载自blog.csdn.net/weixin_42910727/article/details/88976117