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