mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2024-09-30 00:40:49 +00:00
Minimizes Jittering when loading videos.
This commit is contained in:
parent
820def620c
commit
ba1f2dc17d
@ -209,7 +209,7 @@ fun VideoViewInner(
|
|||||||
if (!automaticallyStartPlayback.value) {
|
if (!automaticallyStartPlayback.value) {
|
||||||
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
|
ImageUrlWithDownloadButton(url = videoUri, showImage = automaticallyStartPlayback)
|
||||||
} else {
|
} else {
|
||||||
VideoPlayerActiveMutex(videoUri) { activeOnScreen ->
|
VideoPlayerActiveMutex(videoUri) { modifier, activeOnScreen ->
|
||||||
val mediaItem = remember(videoUri) {
|
val mediaItem = remember(videoUri) {
|
||||||
mutableStateOf(
|
mutableStateOf(
|
||||||
MediaItem.Builder()
|
MediaItem.Builder()
|
||||||
@ -251,6 +251,7 @@ fun VideoViewInner(
|
|||||||
keepPlaying = keepPlaying,
|
keepPlaying = keepPlaying,
|
||||||
automaticallyStartPlayback = automaticallyStartPlayback,
|
automaticallyStartPlayback = automaticallyStartPlayback,
|
||||||
activeOnScreen = activeOnScreen,
|
activeOnScreen = activeOnScreen,
|
||||||
|
modifier = modifier,
|
||||||
onControllerVisibilityChanged = onControllerVisibilityChanged,
|
onControllerVisibilityChanged = onControllerVisibilityChanged,
|
||||||
onDialog = onDialog
|
onDialog = onDialog
|
||||||
)
|
)
|
||||||
@ -450,7 +451,7 @@ class VisibilityData() {
|
|||||||
* the screen wins the mutex.
|
* the screen wins the mutex.
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState<Boolean>) -> Unit) {
|
fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (Modifier, MutableState<Boolean>) -> Unit) {
|
||||||
val myCache = remember(videoUri) {
|
val myCache = remember(videoUri) {
|
||||||
VisibilityData()
|
VisibilityData()
|
||||||
}
|
}
|
||||||
@ -499,9 +500,7 @@ fun VideoPlayerActiveMutex(videoUri: String, inner: @Composable (MutableState<Bo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Box(modifier = myModifier) {
|
inner(myModifier, active)
|
||||||
inner(active)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Stable
|
@Stable
|
||||||
@ -520,6 +519,7 @@ private fun RenderVideoPlayer(
|
|||||||
keepPlaying: MutableState<Boolean>,
|
keepPlaying: MutableState<Boolean>,
|
||||||
automaticallyStartPlayback: State<Boolean>,
|
automaticallyStartPlayback: State<Boolean>,
|
||||||
activeOnScreen: MutableState<Boolean>,
|
activeOnScreen: MutableState<Boolean>,
|
||||||
|
modifier: Modifier,
|
||||||
onControllerVisibilityChanged: ((Boolean) -> Unit)? = null,
|
onControllerVisibilityChanged: ((Boolean) -> Unit)? = null,
|
||||||
onDialog: ((Boolean) -> Unit)?
|
onDialog: ((Boolean) -> Unit)?
|
||||||
) {
|
) {
|
||||||
@ -552,11 +552,13 @@ private fun RenderVideoPlayer(
|
|||||||
|
|
||||||
val myModifier = remember {
|
val myModifier = remember {
|
||||||
if (roundedCorner) {
|
if (roundedCorner) {
|
||||||
|
modifier.then(
|
||||||
borders
|
borders
|
||||||
.defaultMinSize(minHeight = 100.dp)
|
.defaultMinSize(minHeight = 100.dp)
|
||||||
.align(Alignment.Center)
|
.align(Alignment.Center)
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
Modifier
|
modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.defaultMinSize(minHeight = 100.dp)
|
.defaultMinSize(minHeight = 100.dp)
|
||||||
.align(Alignment.Center)
|
.align(Alignment.Center)
|
||||||
@ -607,7 +609,7 @@ private fun RenderVideoPlayer(
|
|||||||
controller.volume < 0.001
|
controller.volume < 0.001
|
||||||
}
|
}
|
||||||
|
|
||||||
val spaceModifier =
|
val spaceModifier = remember {
|
||||||
if (topPaddingForControllers.isSpecified && videoPlaybackSize.value.height > 0) {
|
if (topPaddingForControllers.isSpecified && videoPlaybackSize.value.height > 0) {
|
||||||
val space = (abs(parentVideoPlaybackSize.value.height - videoPlaybackSize.value.height) / 2).dp
|
val space = (abs(parentVideoPlaybackSize.value.height - videoPlaybackSize.value.height) / 2).dp
|
||||||
if (space > topPaddingForControllers) {
|
if (space > topPaddingForControllers) {
|
||||||
@ -618,6 +620,7 @@ private fun RenderVideoPlayer(
|
|||||||
} else {
|
} else {
|
||||||
Modifier
|
Modifier
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MuteButton(
|
MuteButton(
|
||||||
controllerVisible,
|
controllerVisible,
|
||||||
|
Loading…
Reference in New Issue
Block a user