From 1cdab4b52d895fe48f89205c5036c05f6a81511a Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Tue, 23 Jan 2024 16:04:01 -0800 Subject: [PATCH 1/3] Migrate video_player_android to SurfaceProducer. --- .../flutter/plugins/videoplayer/VideoPlayer.java | 14 +++++++------- .../plugins/videoplayer/VideoPlayerPlugin.java | 13 ++++++------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index 57fc1037cc7..f9557a494b7 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -50,7 +50,7 @@ final class VideoPlayer { private Surface surface; - private final TextureRegistry.SurfaceTextureEntry textureEntry; + private final TextureRegistry.SurfaceProducer textureProducer; private QueuingEventSink eventSink; @@ -67,13 +67,13 @@ final class VideoPlayer { VideoPlayer( Context context, EventChannel eventChannel, - TextureRegistry.SurfaceTextureEntry textureEntry, + TextureRegistry.SurfaceProducer textureProducer, String dataSource, String formatHint, @NonNull Map httpHeaders, VideoPlayerOptions options) { this.eventChannel = eventChannel; - this.textureEntry = textureEntry; + this.textureProducer = textureProducer; this.options = options; ExoPlayer exoPlayer = new ExoPlayer.Builder(context).build(); @@ -96,12 +96,12 @@ final class VideoPlayer { VideoPlayer( ExoPlayer exoPlayer, EventChannel eventChannel, - TextureRegistry.SurfaceTextureEntry textureEntry, + TextureRegistry.SurfaceProducer textureProducer, VideoPlayerOptions options, QueuingEventSink eventSink, DefaultHttpDataSource.Factory httpDataSourceFactory) { this.eventChannel = eventChannel; - this.textureEntry = textureEntry; + this.textureProducer = textureProducer; this.options = options; this.httpDataSourceFactory = httpDataSourceFactory; @@ -186,7 +186,7 @@ public void onCancel(Object o) { } }); - surface = new Surface(textureEntry.surfaceTexture()); + surface = textureProducer.getSurface(); exoPlayer.setVideoSurface(surface); setAudioAttributes(exoPlayer, options.mixWithOthers); @@ -330,7 +330,7 @@ void dispose() { if (isInitialized) { exoPlayer.stop(); } - textureEntry.release(); + textureProducer.release(); eventChannel.setStreamHandler(null); if (surface != null) { surface.release(); diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java index c0c60279324..41f48731d44 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java @@ -119,11 +119,10 @@ public void initialize() { } public @NonNull TextureMessage create(@NonNull CreateMessage arg) { - TextureRegistry.SurfaceTextureEntry handle = - flutterState.textureRegistry.createSurfaceTexture(); + TextureRegistry.SurfaceProducer producer = flutterState.textureRegistry.createSurfaceProducer(); EventChannel eventChannel = new EventChannel( - flutterState.binaryMessenger, "flutter.io/videoPlayer/videoEvents" + handle.id()); + flutterState.binaryMessenger, "flutter.io/videoPlayer/videoEvents" + producer.id()); VideoPlayer player; if (arg.getAsset() != null) { @@ -138,7 +137,7 @@ public void initialize() { new VideoPlayer( flutterState.applicationContext, eventChannel, - handle, + producer, "asset:///" + assetLookupKey, null, new HashMap<>(), @@ -149,15 +148,15 @@ public void initialize() { new VideoPlayer( flutterState.applicationContext, eventChannel, - handle, + producer, arg.getUri(), arg.getFormatHint(), httpHeaders, options); } - videoPlayers.put(handle.id(), player); + videoPlayers.put(producer.id(), player); - return new TextureMessage.Builder().setTextureId(handle.id()).build(); + return new TextureMessage.Builder().setTextureId(producer.id()).build(); } public void dispose(@NonNull TextureMessage arg) { From 92590df5e7e10a80f9246aa3e7de73da574ccac0 Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Mon, 12 Feb 2024 16:30:23 -0800 Subject: [PATCH 2/3] Allow deprecated members from the Dart SDK/Flutter Engine/Flutter Framework to roll in. --- analysis_options.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/analysis_options.yaml b/analysis_options.yaml index 69c2634ca12..364fc12db89 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -11,8 +11,10 @@ analyzer: strict-inference: true strict-raw-types: true errors: - # allow self-reference to deprecated members (we do this because otherwise we have - # to annotate every member in every test, assert, etc, when we deprecate something) + # allow deprecated members (we do this because otherwise we have to annotate + # every member in every test, assert, etc, when we or the Dart SDK deprecates + # something (https://github.com/flutter/flutter/issues/143312) + deprecated_member_use: ignore deprecated_member_use_from_same_package: ignore exclude: # DIFFERENT FROM FLUTTER/FLUTTER # Ignore generated files From ec4e3351f65e9d35becff5971e4e1d5cd3b261bf Mon Sep 17 00:00:00 2001 From: Matan Lurey Date: Mon, 12 Feb 2024 16:43:21 -0800 Subject: [PATCH 3/3] ++ --- .../flutter/plugins/videoplayer/VideoPlayer.java | 14 +++++++------- .../plugins/videoplayer/VideoPlayerPlugin.java | 13 +++++++------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java index f9557a494b7..57fc1037cc7 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayer.java @@ -50,7 +50,7 @@ final class VideoPlayer { private Surface surface; - private final TextureRegistry.SurfaceProducer textureProducer; + private final TextureRegistry.SurfaceTextureEntry textureEntry; private QueuingEventSink eventSink; @@ -67,13 +67,13 @@ final class VideoPlayer { VideoPlayer( Context context, EventChannel eventChannel, - TextureRegistry.SurfaceProducer textureProducer, + TextureRegistry.SurfaceTextureEntry textureEntry, String dataSource, String formatHint, @NonNull Map httpHeaders, VideoPlayerOptions options) { this.eventChannel = eventChannel; - this.textureProducer = textureProducer; + this.textureEntry = textureEntry; this.options = options; ExoPlayer exoPlayer = new ExoPlayer.Builder(context).build(); @@ -96,12 +96,12 @@ final class VideoPlayer { VideoPlayer( ExoPlayer exoPlayer, EventChannel eventChannel, - TextureRegistry.SurfaceProducer textureProducer, + TextureRegistry.SurfaceTextureEntry textureEntry, VideoPlayerOptions options, QueuingEventSink eventSink, DefaultHttpDataSource.Factory httpDataSourceFactory) { this.eventChannel = eventChannel; - this.textureProducer = textureProducer; + this.textureEntry = textureEntry; this.options = options; this.httpDataSourceFactory = httpDataSourceFactory; @@ -186,7 +186,7 @@ public void onCancel(Object o) { } }); - surface = textureProducer.getSurface(); + surface = new Surface(textureEntry.surfaceTexture()); exoPlayer.setVideoSurface(surface); setAudioAttributes(exoPlayer, options.mixWithOthers); @@ -330,7 +330,7 @@ void dispose() { if (isInitialized) { exoPlayer.stop(); } - textureProducer.release(); + textureEntry.release(); eventChannel.setStreamHandler(null); if (surface != null) { surface.release(); diff --git a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java index 41f48731d44..c0c60279324 100644 --- a/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java +++ b/packages/video_player/video_player_android/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java @@ -119,10 +119,11 @@ public void initialize() { } public @NonNull TextureMessage create(@NonNull CreateMessage arg) { - TextureRegistry.SurfaceProducer producer = flutterState.textureRegistry.createSurfaceProducer(); + TextureRegistry.SurfaceTextureEntry handle = + flutterState.textureRegistry.createSurfaceTexture(); EventChannel eventChannel = new EventChannel( - flutterState.binaryMessenger, "flutter.io/videoPlayer/videoEvents" + producer.id()); + flutterState.binaryMessenger, "flutter.io/videoPlayer/videoEvents" + handle.id()); VideoPlayer player; if (arg.getAsset() != null) { @@ -137,7 +138,7 @@ public void initialize() { new VideoPlayer( flutterState.applicationContext, eventChannel, - producer, + handle, "asset:///" + assetLookupKey, null, new HashMap<>(), @@ -148,15 +149,15 @@ public void initialize() { new VideoPlayer( flutterState.applicationContext, eventChannel, - producer, + handle, arg.getUri(), arg.getFormatHint(), httpHeaders, options); } - videoPlayers.put(producer.id(), player); + videoPlayers.put(handle.id(), player); - return new TextureMessage.Builder().setTextureId(producer.id()).build(); + return new TextureMessage.Builder().setTextureId(handle.id()).build(); } public void dispose(@NonNull TextureMessage arg) {