I looked into that.
At startup, on odroid, the S02splash script starts the splash mp4 video, in background process, using ffplay for x seconds (set to 20 by default. see recalbox.conf, system.splash.length parameter).
Meantime the video is running, others startup scripts are running including the S31emulationstation script that display version logo (that is useless as the S02splash script do it after the splash video...) and start emulationstation without to wait the splash mp4 video finish. Making flickering effects.
Said simpler, ffplay output is in conflict with fbv (via showlogo.sh) and emulationstation boot logo as it's displayed in the same time.
Waiting a real fix you can do either of the following trick to display splash video properly:
A simple trick is to not run the splash video in background so the other startup scripts will not run untill the video is finished. Boot process will be longer as nothing else will append the time the video is running.
Open a ssh session on your recalbox then run :
mount -o remount rw, /
cd /etc/init.d
nano S02splash
Edit the file as shown bellow
do_ffmpeg_start () { if ! `which ffplay >/dev/null` || [[ ! -f $video ]] ; then return fi ffplay_opts="-hide_banner -autoexit" ffplay_srt="subtitles=/recalbox/system/resources/splash/recalboxintro.srt:force_style='FontName=/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf,Fontsize=10'" ffplay $ffplay_opts -vf "$ffplay_srt" "$video" >/dev/null 2>&1 & PID=$! count=0 if [[ $videolength -gt -1 ]]; then while [[ ! -f "/tmp/emulationstation.ready" && ! -e "/var/run/kodi.msg" && $count -lt $(($videolength*10)) ]]; do sleep 0.1 ((count++)) done fi do_ffmpeg_stop $PID show_logo & # <-- edit here by adding the "&" }...
case "$1" in start) if [[ `cat /recalbox/recalbox.arch` == "rpi"* ]] ; then ( do_omx_start ; show_logo ) & else ( wait_for_fb ; do_ffmpeg_start ) #& # <-- edit here by removing or commenting the "&" fi ;; stop) ;; restart|reload) ;; *) esacSave and close it with STRG + X
You can customize the length of the splash video by editing your /recalbox/share/system/recalbox.conf file, system.splash.length parameter. 12 seconds is a good choice.
--
Another way is to modify S31emulationstation script to wait ffplay finished (or killed) before to start emulationstation. So the others sartup scripts will not wait video completion.
Open an ssh session on your recalbox then run :
mount -o remount rw, /
cd /etc/init.d
nano S31emulationstation
Edit the file as shown bellow
case "$1" in start) enabled="`$systemsetting -command load -key system.es.atstartup`" videoMode="`$systemsetting -command load -key system.es.videomode`" if [ "$enabled" != "0" ];then while [ "$(pidof ffplay)" ]; do #<-- eddit here by adding this sleep 0.1 #<-- eddit here by adding this done #<-- eddit here by adding this /recalbox/scripts/showlogo.sh & # In case the logo has been removed, let's put it back again echo $videoMode | grep -qE "(CEA|DMT) [0-9]{1,2} (HDMI|DVI)" [ $? = "0" ] && tvservice -e "$videoMode" settings_lang="`$systemsetting -command load -key system.language`" recallog "starting emulationstation with lang = $settings_lang" HOME=/recalbox/share/system LANG="${settings_lang}.UTF-8" SDL_VIDEO_GL_DRIVER=/usr/lib/libGLESv2.so SDL_VIDEO_EGL_DRIVER=/usr/lib/libGLESv2.so SDL_NOMOUSE=1 start-stop-daemon -S -q -m -p /var/run/emulationstation.pid --exec /usr/bin/emulationstation & fi ;;Save and close it with STRG + X
--
In both case, you can still customize the length of the splash video by editing your /recalbox/share/system/recalbox.conf file, system.splash.length parameter.
12 seconds is a good choice.