[RK3288][Android6.0] 调试笔记 --- 开机动画支持播放mp4视频功能

来源:互联网 发布:淘宝上知网分解查重 编辑:程序博客网 时间:2024/06/15 22:01
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() {
         }
     }
 
+    /* Kris, 170612, add video play support. {*/
+    if(access(SYSTEM_BOOTVIDEO_FILE, R_OK) == 0)
+        mVideo = true;
+    else
+        mVideo = false;
+    /* Kris, 170612, add video play support. }*/
+
     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;
+    /* Kris, 170612, add video play support. {*/
+    bool video();
+    bool mVideo;
+    /* Kris, 170612, add video play support. }*/
 };
 
 // ---------------------------------------------------------------------------

参考:
http://blog.csdn.net/deeplee021/article/details/41042985
阅读全文
1 0
原创粉丝点击