diff --git a/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraRtcEnginePlugin.kt b/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraRtcEnginePlugin.kt index dc896c9e5..ef550ba07 100644 --- a/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraRtcEnginePlugin.kt +++ b/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraRtcEnginePlugin.kt @@ -109,7 +109,12 @@ class AgoraRtcEnginePlugin : FlutterPlugin, MethodCallHandler, EventChannel.Stre val textureRegistry = registrar?.textures() ?: binding?.textureRegistry val messenger = registrar?.messenger() ?: binding?.binaryMessenger if (call.method == "createTextureRender") { - val id = AgoraTextureViewFactory.createTextureRender(textureRegistry!!, messenger!!, this, rtcChannelPlugin) + val id = AgoraTextureViewFactory.createTextureRender( + textureRegistry!!, + messenger!!, + this, + rtcChannelPlugin + ) result.success(id) return } else if (call.method == "destroyTextureRender") { diff --git a/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraTextureViewFactory.kt b/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraTextureViewFactory.kt index df0e11258..e65d074dd 100644 --- a/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraTextureViewFactory.kt +++ b/android/src/main/kotlin/io/agora/agora_rtc_engine/AgoraTextureViewFactory.kt @@ -79,17 +79,39 @@ class TextureRender( return render.pixelFormat } - override fun consumeByteBufferFrame(buffer: ByteBuffer?, format: Int, width: Int, height: Int, rotation: Int, timestamp: Long) { + override fun consumeByteBufferFrame( + buffer: ByteBuffer?, + format: Int, + width: Int, + height: Int, + rotation: Int, + timestamp: Long + ) { updateTextureSize(width, height) render.consume(buffer, format, width, height, rotation, timestamp) } - override fun consumeByteArrayFrame(data: ByteArray?, format: Int, width: Int, height: Int, rotation: Int, timestamp: Long) { + override fun consumeByteArrayFrame( + data: ByteArray?, + format: Int, + width: Int, + height: Int, + rotation: Int, + timestamp: Long + ) { updateTextureSize(width, height) render.consume(data, format, width, height, rotation, timestamp) } - override fun consumeTextureFrame(textureId: Int, format: Int, width: Int, height: Int, rotation: Int, timestamp: Long, matrix: FloatArray?) { + override fun consumeTextureFrame( + textureId: Int, + format: Int, + width: Int, + height: Int, + rotation: Int, + timestamp: Long, + matrix: FloatArray? + ) { updateTextureSize(width, height) render.consume(textureId, format, width, height, rotation, timestamp, matrix) } @@ -106,17 +128,18 @@ class TextureRender( this.javaClass.declaredMethods.find { it.name == call.method }?.let { function -> function.let { method -> val parameters = mutableListOf() - function.parameters.forEach { parameter -> - val map = call.arguments>() - if (map.containsKey(parameter.name)) { - parameters.add(map[parameter.name]) + call.arguments>()?.let { args -> + args.values.forEach { + parameters.add(it) } } try { method.invoke(this, *parameters.toTypedArray()) + result.success(null) return@onMethodCall } catch (e: Exception) { e.printStackTrace() + result.error(e.toString(), null, null) } } } @@ -128,7 +151,10 @@ class TextureRender( val channel = (data["channelId"] as? String)?.let { getChannel(it) } if (uid == 0) { getEngine()?.setLocalVideoRenderer(this) - getEngine()?.setLocalRenderMode(Constants.RENDER_MODE_FIT, Constants.VIDEO_MIRROR_MODE_ENABLED) + getEngine()?.setLocalRenderMode( + Constants.RENDER_MODE_FIT, + Constants.VIDEO_MIRROR_MODE_ENABLED + ) } else { channel?.let { it.setRemoteVideoRenderer(uid, this) @@ -155,7 +181,12 @@ class AgoraTextureViewFactory( companion object { private val renders = mutableMapOf() - fun createTextureRender(textureRegistry: TextureRegistry, messenger: BinaryMessenger, rtcEnginePlugin: AgoraRtcEnginePlugin, rtcChannelPlugin: AgoraRtcChannelPlugin): Long { + fun createTextureRender( + textureRegistry: TextureRegistry, + messenger: BinaryMessenger, + rtcEnginePlugin: AgoraRtcEnginePlugin, + rtcChannelPlugin: AgoraRtcChannelPlugin + ): Long { val render = TextureRender(textureRegistry, messenger, rtcEnginePlugin, rtcChannelPlugin) val id = render.getId() renders[id] = render diff --git a/lib/src/rtc_render_view.dart b/lib/src/rtc_render_view.dart index caf00c522..c06d79713 100644 --- a/lib/src/rtc_render_view.dart +++ b/lib/src/rtc_render_view.dart @@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart'; import 'enum_converter.dart'; import 'enums.dart'; +import 'rtc_engine.dart'; final Map _channels = {};