天天看點

[RK3288][Android6.0] 調試筆記 --- 開機動畫支援播放mp4視訊功能

Platform: Rockchip

OS: Android 6.0

Kernel: 3.10.92

kris@:~/rk3288/frameworks/base/cmds/bootanimation$ g df

diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp

index c521250..d86e011 100644

--- a/cmds/bootanimation/BootAnimation.cpp

+++ b/cmds/bootanimation/BootAnimation.cpp

@@ -72,6 +72,9 @@

 #define USER_SHUTDOWN_ANIMATION_FILE "/data/local/shutdownanimation.zip"

 #define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"

 #define SYSTEM_SHUTDOWN_ANIMATION_FILE "/system/media/shutdownanimation.zip"

+

+#define SYSTEM_BOOTVIDEO_FILE "/system/media/bootvideo.mp4"

+

 namespace android {

 static const int ANIM_ENTRY_NAME_MAX = 256;

@@ -332,6 +335,13 @@ status_t BootAnimation::readyToRun() {

         }

     }

+    

+    if(access(SYSTEM_BOOTVIDEO_FILE, R_OK) == 0)

+        mVideo = true;

+    else

+        mVideo = false;

+    

+

     return NO_ERROR;

 }

@@ -341,11 +351,20 @@ bool BootAnimation::threadLoop()

     // We have no bootanimation file, so we use the stock android logo

     // animation.

     playMusic();

+#if 0

     if (mZip == NULL) {

         r = android();

     } else {

         r = movie();

     }

+#else

+if (!mVideo) {

+ r = android();

+} else {

+ r = video();

+}

+#endif

+

     eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);

     eglDestroyContext(mDisplay, mContext);

     eglDestroySurface(mDisplay, mSurface);

@@ -740,6 +759,31 @@ bool BootAnimation::movie()

     return false;

 }

+bool BootAnimation::video()

+{

+    eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);

+    eglDestroySurface(mDisplay, mSurface);

+

+    sp<MediaPlayer> mp = new MediaPlayer();

+    mp->reset();

+    mp->setDataSource(NULL, SYSTEM_BOOTVIDEO_FILE, NULL);

+    mp->setLooping(false);

+    mp->setVideoSurfaceTexture(mFlingerSurface->getIGraphicBufferProducer());

+    mp->prepare();

+    mp->start();

+

+    while(true) {

+        if(exitPending())

+            break;

+        usleep(100);

//等待播放完才顯示launcher.

+        if(!mp->isPlaying())

+            checkExit();

+    }

+

+    mp->stop();

+    return false;

+}

+

 // ---------------------------------------------------------------------------

 }

diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h

index bb32e7b..16f0e3e 100644

--- a/cmds/bootanimation/BootAnimation.h

+++ b/cmds/bootanimation/BootAnimation.h

@@ -104,6 +104,10 @@ private:

     sp<SurfaceControl> mFlingerSurfaceControl;

     sp<Surface> mFlingerSurface;

     ZipFileRO   *mZip;

+    

+    bool video();

+    bool mVideo;

+    

 };

 // ---------------------------------------------------------------------------

參考:

http://blog.csdn.net/deeplee021/article/details/41042985