[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
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
- [RK3288][Android6.0] 调试笔记 --- 开机动画支持播放mp4视频功能
- [RK3288][Android6.0] 调试笔记 --- 开机视频无法播放
- [RK3288][Android6.0] 调试笔记 --- 开机动画时间的确定
- [RK3288][Android6.0] 调试笔记 --- 开机动画画面偏移
- [RK3288][Android6.0] 调试笔记 --- 播放GIF动画卡顿问题
- [RK3288][Android6.0] 调试笔记 --- 播放搜狐视频会Crash问题
- [RK3288][Android6.0] 调试笔记 --- 关闭音频播放停止后进入Standby功能
- [RK3288][Android6.0] 调试笔记 --- 开机语言默认为简体中文
- [RK3288][Android6.0] 调试笔记 --- 开机后台抓取kernel log
- [RK3288][Android6.0] 调试笔记 --- 开机提示mmc rescan错误
- [RK3288][Android6.0] 调试笔记 --- tts语音无法播放
- [RK3288][Android6.0] 调试笔记 --- 命令行播放音乐方法
- [RK3288][Android6.0] 调试笔记 --- Camera动态热插拔支持
- [RK3288][Android6.0] 调试笔记 --- 移除锁屏功能
- [RK3288][Android6.0] 调试笔记 --- Su添加密码登陆功能
- [RK3288][Android6.0] 开机播放音乐流程小结
- [RK3288][Android6.0] 移植笔记 --- RK818配置不正确导致无法开机调试
- [RK3288][Android6.0] 调试笔记 --- 系统第一次开机进入Recovery模式原因
- python面向对象(进阶篇)
- how to use TensorFlow?
- Plugin is too old gradle插件版本太低
- Android Studio 导入第三方库
- 如何用android-layout_weight弄个满意的比例
- [RK3288][Android6.0] 调试笔记 --- 开机动画支持播放mp4视频功能
- ORACLE rman 部分恢复
- 胎教音乐库——官方博客
- 如何制作Android Splash界面
- ORACLE 数据文件重命名(批量重命名,单独重命名)
- 如何修改Excel的编码
- Mybaits——DAO层开发两种模式
- Android Studio如何永久显示行数
- Elasticsearch 5.4 Mapping详解