[Android] Prevent infinite loop in media playback

Geoffrey Métais git at videolan.org
Thu Mar 1 11:41:24 CET 2018


vlc-android | branch: master | Geoffrey Métais <geoffrey.metais at gmail.com> | Thu Mar  1 11:07:25 2018 +0100| [b3dbb29afa49b818af230a4496c6842799d339cc] | committer: Geoffrey Métais

Prevent infinite loop in media playback

If no audio track is detected and repeat was activated, we could loop on the same media trying to
skipping it

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

 .../src/org/videolan/vlc/media/PlaylistManager.kt      | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt b/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
index 1738b962d..ef53f1afc 100644
--- a/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
+++ b/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
@@ -241,11 +241,13 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
         player.switchToVideo = false
         if (TextUtils.equals(mw.uri.scheme, "content")) MediaUtils.retrieveMediaTitle(mw)
 
-        if (mw.hasFlag(MediaWrapper.MEDIA_FORCE_AUDIO) && player.getAudioTracksCount() == 0) {
-            next()
-        } else if (mw.type != MediaWrapper.TYPE_VIDEO || isVideoPlaying || player.hasRenderer
-                || mw.hasFlag(MediaWrapper.MEDIA_FORCE_AUDIO)) {
-            launch(UI, CoroutineStart.UNDISPATCHED) {
+        launch(UI, CoroutineStart.UNDISPATCHED) {
+            if (mw.hasFlag(MediaWrapper.MEDIA_FORCE_AUDIO) && player.getAudioTracksCount() == 0) {
+                determinePrevAndNextIndices(true)
+                if (currentIndex != nextIndex) next()
+                else stop(false)
+            } else if (mw.type != MediaWrapper.TYPE_VIDEO || isVideoPlaying || player.hasRenderer
+                    || mw.hasFlag(MediaWrapper.MEDIA_FORCE_AUDIO)) {
                 val media = Media(VLCInstance.get(), FileUtils.getUri(mw.uri))
                 VLCOptions.setMediaOptions(media, ctx, flags or mw.flags)
                 /* keeping only video during benchmark */
@@ -284,10 +286,10 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
                 }
                 saveCurrentMedia()
                 newMedia = true
+            } else { //Start VideoPlayer for first video, it will trigger playIndex when ready.
+                player.stop()
+                VideoPlayerActivity.startOpened(ctx, mw.uri, currentIndex)
             }
-        } else { //Start VideoPlayer for first video, it will trigger playIndex when ready.
-            player.stop()
-            VideoPlayerActivity.startOpened(ctx, mw.uri, currentIndex)
         }
     }
 



More information about the Android mailing list