diff --git a/android/app/build.gradle b/android/app/build.gradle
index 11f479be..674b2bd6 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -76,6 +76,11 @@ dependencies {
implementation platform('com.google.firebase:firebase-bom:34.9.0')
implementation 'com.google.firebase:firebase-messaging'
implementation 'androidx.work:work-runtime:2.10.2'
- implementation 'com.otaliastudios:transcoder:0.11.0'
+ // Hardware video composition and transcoding: MediaCodec for decode/encode,
+ // OpenGL for the overlay. Replaces both the software Flutter editor pass and
+ // the previous third-party transcoder.
+ implementation 'androidx.media3:media3-transformer:1.11.0'
+ implementation 'androidx.media3:media3-effect:1.11.0'
+ implementation 'androidx.media3:media3-common:1.11.0'
implementation 'androidx.core:core-splashscreen:1.0.1'
}
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 76b2cfaf..224bb24c 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -78,6 +78,10 @@
+
@@ -96,6 +100,9 @@
+
+
+
diff --git a/android/app/src/main/kotlin/eu/twonly/MainActivity.kt b/android/app/src/main/kotlin/eu/twonly/MainActivity.kt
index 24205927..6c208218 100644
--- a/android/app/src/main/kotlin/eu/twonly/MainActivity.kt
+++ b/android/app/src/main/kotlin/eu/twonly/MainActivity.kt
@@ -68,7 +68,6 @@ class MainActivity : FlutterFragmentActivity() {
Keyring.initializeNdkContext(applicationContext)
- VideoCompressionChannel.configure(flutterEngine, applicationContext)
NotificationTapChannel.configure(flutterEngine, applicationContext)
diff --git a/android/app/src/main/kotlin/eu/twonly/MyApplication.kt b/android/app/src/main/kotlin/eu/twonly/MyApplication.kt
index 9bd91360..268eb43b 100644
--- a/android/app/src/main/kotlin/eu/twonly/MyApplication.kt
+++ b/android/app/src/main/kotlin/eu/twonly/MyApplication.kt
@@ -1,15 +1,17 @@
package eu.twonly
import io.flutter.app.FlutterApplication
-import dev.fluttercommunity.workmanager.WorkmanagerDebug
-import dev.fluttercommunity.workmanager.LoggingDebugHandler
import io.crates.keyring.Keyring
class MyApplication : FlutterApplication() {
+ companion object {
+ lateinit var instance: MyApplication
+ private set
+ }
+
override fun onCreate() {
super.onCreate()
+ instance = this
Keyring.initializeNdkContext(this)
- // This enables the internal plugin logging to Logcat
- WorkmanagerDebug.setCurrent(LoggingDebugHandler())
}
-}
\ No newline at end of file
+}
diff --git a/android/app/src/main/kotlin/eu/twonly/VideoCompressionChannel.kt b/android/app/src/main/kotlin/eu/twonly/VideoCompressionChannel.kt
deleted file mode 100644
index 3958f706..00000000
--- a/android/app/src/main/kotlin/eu/twonly/VideoCompressionChannel.kt
+++ /dev/null
@@ -1,104 +0,0 @@
-package eu.twonly
-
-import android.content.Context
-import android.media.MediaFormat
-import android.os.Handler
-import android.os.Looper
-import com.otaliastudios.transcoder.Transcoder
-import com.otaliastudios.transcoder.TranscoderListener
-import com.otaliastudios.transcoder.strategy.DefaultVideoStrategy
-import com.otaliastudios.transcoder.strategy.PassThroughTrackStrategy
-import com.otaliastudios.transcoder.strategy.TrackStrategy
-import io.flutter.embedding.engine.FlutterEngine
-import io.flutter.plugin.common.MethodChannel
-
-object VideoCompressionChannel {
- private const val CHANNEL = "eu.twonly/videoCompression"
-
- // Compression parameters defined natively (as requested)
- private const val VIDEO_BITRATE = 2_000_000L // 2 Mbps
-
- fun configure(flutterEngine: FlutterEngine, context: Context) {
- val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
-
- channel.setMethodCallHandler { call, result ->
- try {
- if (call.method == "compressVideo") {
- val arguments = call.arguments