From 12ec0ca84cfb1263d6a37f544a6d1731d03c640f Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Wed, 17 Nov 2021 11:22:50 -0400 Subject: [PATCH] Fix video playback after editing clip boundaries. --- .../securesms/video/VideoPlayer.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java index a2101ac1d..fd20e748e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java @@ -30,6 +30,9 @@ import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; +import com.google.android.exoplayer2.source.ClippingMediaSource; +import com.google.android.exoplayer2.source.DefaultMediaSourceFactory; +import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import com.google.android.exoplayer2.ui.PlayerControlView; import com.google.android.exoplayer2.ui.PlayerView; @@ -47,8 +50,9 @@ public class VideoPlayer extends FrameLayout { @SuppressWarnings("unused") private static final String TAG = Log.tag(VideoPlayer.class); - private final PlayerView exoView; - private final PlayerControlView exoControls; + private final PlayerView exoView; + private final PlayerControlView exoControls; + private final DefaultMediaSourceFactory mediaSourceFactory; private SimpleExoPlayer exoPlayer; private Window window; @@ -73,6 +77,8 @@ public class VideoPlayer extends FrameLayout { inflate(context, R.layout.video_player, this); + this.mediaSourceFactory = new DefaultMediaSourceFactory(context); + this.exoView = findViewById(R.id.video_view); this.exoControls = new PlayerControlView(getContext()); this.exoControls.setShowTimeoutMs(-1); @@ -213,11 +219,10 @@ public class VideoPlayer extends FrameLayout { public void clip(long fromUs, long toUs, boolean playWhenReady) { if (this.exoPlayer != null && mediaItem != null) { - MediaItem clippedMediaItem = mediaItem.buildUpon() - .setClipStartPositionMs(TimeUnit.MICROSECONDS.toMillis(fromUs)) - .setClipEndPositionMs(TimeUnit.MICROSECONDS.toMillis(toUs)) - .build(); - exoPlayer.setMediaItem(clippedMediaItem); + MediaSource mediaItemSource = mediaSourceFactory.createMediaSource(mediaItem); + ClippingMediaSource clippedSource = new ClippingMediaSource(mediaItemSource, fromUs, toUs); + + exoPlayer.setMediaSource(clippedSource); exoPlayer.prepare(); exoPlayer.setPlayWhenReady(playWhenReady); clipped = true;