diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/PlayerFactory.kt b/app/src/main/java/com/github/damontecres/wholphin/services/PlayerFactory.kt index da00fd3d..7f4886b4 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/PlayerFactory.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/PlayerFactory.kt @@ -106,7 +106,13 @@ class PlayerFactory .setExtensionRendererMode(rendererMode) val mediaSourceFactory = if (useLibAss) { - assHandler = AssHandler(AssRenderType.OVERLAY_OPEN_GL) + val renderType = + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) { + AssRenderType.OVERLAY_CANVAS + } else { + AssRenderType.OVERLAY_OPEN_GL + } + assHandler = AssHandler(renderType) val assSubtitleParserFactory = AssSubtitleParserFactory(assHandler) renderersFactory = AssRenderersFactory(assHandler, renderersFactory) DefaultMediaSourceFactory( diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt index e0e24f4c..5e748396 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/playback/PlaybackPage.kt @@ -439,6 +439,9 @@ fun PlaybackPageContent( val subtitleMaxSize by animateFloatAsState(if (controllerViewState.controlsVisible) .7f else 1f) val isImageSubtitles = remember(cues) { cues.firstOrNull()?.bitmap != null } var cueCount by remember { mutableIntStateOf(0) } + + val subtitleVisible = skipIndicatorDuration == 0L && currentItemPlayback.subtitleIndexEnabled && !presentationState.coverSurface + AndroidView( factory = { context -> SubtitleView(context).apply { @@ -465,10 +468,6 @@ fun PlaybackPageContent( } }, update = { subtitleView -> - val subtitleVisible = - skipIndicatorDuration == 0L && currentItemPlayback.subtitleIndexEnabled && !presentationState.coverSurface - subtitleView.visibility = if (subtitleVisible) View.VISIBLE else View.INVISIBLE - subtitleView.setCues(cues) if (cues.size > cueCount) { // The output creates a painter for each cue, so need to apply the changes when the number of cues increases @@ -480,7 +479,8 @@ fun PlaybackPageContent( (it as? AssSubtitleView)?.apply { val resized = layoutParams.let { it.width != playerSurfaceSize.width || it.height != playerSurfaceSize.height } - if (resized) { + + if (resized && playerSurfaceSize.width > 0 && playerSurfaceSize.height > 0) { Timber.v("Resizing AssSubtitleView: %s", playerSurfaceSize) layoutParams = FrameLayout @@ -501,7 +501,14 @@ fun PlaybackPageContent( .align(Alignment.TopCenter) .background(Color.Transparent) .graphicsLayer { - alpha = if (isImageSubtitles) subtitleImageOpacity else 1f + alpha = + if (!subtitleVisible) { + 0f + } else if (isImageSubtitles) { + subtitleImageOpacity + } else { + 1f + } }, ) }