[Android] Bench: fix hardware decoding tests

Duncan McNamara git at videolan.org
Mon May 4 12:46:56 UTC 2026


vlc-android | branch: master | Duncan McNamara <dcn.mcnamara at gmail.com> | Thu Apr 16 11:15:49 2026 +0200| [cd03ada42e0c4d4aefa72a06a17b695c62fb7565] | committer: Nicolas Pomepuy

Bench: fix hardware decoding tests

To force opengl es, we have to restart the player, some changes in
vlc-android made the method previously used restart the whole activity
which would yield focus back to the benchmark app.
This adds a "soft" restart of the video player, without restarting
VideoPlayerActivity.

> https://code.videolan.org/videolan/vlc-android/commit/cd03ada42e0c4d4aefa72a06a17b695c62fb7565
---

 .../videolan/vlc/gui/video/benchmark/BenchActivity.kt   | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/application/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
index 0b1b7b329f..a96f1664cc 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/video/benchmark/BenchActivity.kt
@@ -91,6 +91,9 @@ class BenchActivity : ShallowVideoPlayer() {
     private var hasVLCFailed = false
     /* set to true when video is in hardware decoding */
     private var isHardware = false
+    /* set to true while waiting for VLCInstance + player restart in hardware mode,
+     * prevents the initial START_PLAYBACK from loading media before forcing opengl es */
+    private var isWaitingForHardwareRestart = false
     /* set to true when Vout event is received
      * used to check if hardware decoder works */
     private var hasVout = false
@@ -135,6 +138,7 @@ class BenchActivity : ShallowVideoPlayer() {
     private var timeLimit: Long = 0L
 
     override fun onServiceChanged(service: PlaybackService?) {
+        if (isHardware && service != null) isWaitingForHardwareRestart = true
         super.onServiceChanged(service)
         if (isSpeed && this.service != null) {
             oldRate = service!!.rate
@@ -156,12 +160,23 @@ class BenchActivity : ShallowVideoPlayer() {
             }
             lifecycleScope.launch {
                 VLCInstance.restart()
-                restartMediaPlayer()
+                isSetup = false
+                isWaitingForHardwareRestart = false
+                service?.let { s ->
+                    s.playlistManager.player.restart()
+                    videoLayout?.let {
+                        s.mediaplayer.attachViews(it, displayManager, true, false)
+                        s.mediaplayer.videoScale = MediaPlayer.ScaleType.SURFACE_FILL
+                    }
+                }
+
+                loadMedia(fromStart = false, forceUsingNew = true)
             }
         }
     }
 
     override fun loadMedia(fromStart: Boolean, forceUsingNew: Boolean) {
+        if (isWaitingForHardwareRestart) return
         service?.setBenchmark()
         if (isHardware) service?.setHardware()
         super.loadMedia(fromStart, true)



More information about the Android mailing list