From e38675b8a1f75e835452e9f7bafcd9248ac82dfb Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:49:07 +0900 Subject: [PATCH 1/4] fixes 1 --- lib/src/track/local/local.dart | 7 +++++++ lib/src/track/options.dart | 11 +++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/src/track/local/local.dart b/lib/src/track/local/local.dart index 832581f28..e520b8712 100644 --- a/lib/src/track/local/local.dart +++ b/lib/src/track/local/local.dart @@ -224,6 +224,13 @@ abstract class LocalTrack extends Track { logger.severe('MediaStreamTrack.dispose() did throw $error'); } _stopped = true; + try { + if (_processor != null) { + await stopProcessor(); + } + } catch (error) { + logger.severe('LocalTrack.stopProcessor did throw: $error'); + } } return didStop; } diff --git a/lib/src/track/options.dart b/lib/src/track/options.dart index e60d49270..d5bfc5bbf 100644 --- a/lib/src/track/options.dart +++ b/lib/src/track/options.dart @@ -79,6 +79,7 @@ class CameraCaptureOptions extends VideoCaptureOptions { params: captureOptions.params, deviceId: captureOptions.deviceId, maxFrameRate: captureOptions.maxFrameRate, + processor: captureOptions.processor, ); @override @@ -108,18 +109,24 @@ class CameraCaptureOptions extends VideoCaptureOptions { // Returns new options with updated properties CameraCaptureOptions copyWith({ - VideoParameters? params, CameraPosition? cameraPosition, + CameraFocusMode? focusMode, + CameraExposureMode? exposureMode, String? deviceId, double? maxFrameRate, + VideoParameters? params, bool? stopCameraCaptureOnMute, + TrackProcessor? processor, }) => CameraCaptureOptions( - params: params ?? this.params, cameraPosition: cameraPosition ?? this.cameraPosition, + focusMode: focusMode ?? this.focusMode, + exposureMode: exposureMode ?? this.exposureMode, deviceId: deviceId ?? this.deviceId, maxFrameRate: maxFrameRate ?? this.maxFrameRate, + params: params ?? this.params, stopCameraCaptureOnMute: stopCameraCaptureOnMute ?? this.stopCameraCaptureOnMute, + processor: processor ?? this.processor, ); } From 49957e9f889be6780a6d5e7bd796914a23bba993 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:55:25 +0900 Subject: [PATCH 2/4] changes --- .changes/fix-camera-options-copywith | 1 + .changes/fix-processor-stop | 1 + 2 files changed, 2 insertions(+) create mode 100644 .changes/fix-camera-options-copywith create mode 100644 .changes/fix-processor-stop diff --git a/.changes/fix-camera-options-copywith b/.changes/fix-camera-options-copywith new file mode 100644 index 000000000..24cc94877 --- /dev/null +++ b/.changes/fix-camera-options-copywith @@ -0,0 +1 @@ +patch type="fixed" "Fix missing params in CameraCaptureOptions.copyWith" diff --git a/.changes/fix-processor-stop b/.changes/fix-processor-stop new file mode 100644 index 000000000..19a33b77a --- /dev/null +++ b/.changes/fix-processor-stop @@ -0,0 +1 @@ +patch type="fixed" "Stop processor on track end" From 679c9d9bb0decab785b6fcbda7fd9c6a43dfd95b Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 21:43:58 +0900 Subject: [PATCH 3/4] fixes --- lib/src/track/local/local.dart | 14 ++++---------- lib/src/track/track.dart | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/src/track/local/local.dart b/lib/src/track/local/local.dart index e520b8712..dc176ff01 100644 --- a/lib/src/track/local/local.dart +++ b/lib/src/track/local/local.dart @@ -348,7 +348,7 @@ abstract class LocalTrack extends Track { await _processor!.init(processorOptions); if (_processor?.processedTrack != null) { - setProcessedTrack(processor.processedTrack!); + await setProcessedTrack(processor.processedTrack!); } logger.fine('processor initialized'); @@ -361,18 +361,12 @@ abstract class LocalTrack extends Track { if (_processor == null) return; logger.fine('stopping processor'); + await _processor?.processedTrack?.stop(); await _processor?.destroy(); _processor = null; - if (!keepElement) { - // processorElement?.remove(); - // processorElement = null; - } - - // apply original track constraints in case the processor changed them - //await this._mediaStreamTrack.applyConstraints(this._constraints); - // force re-setting of the mediaStreamTrack on the sender - //await this.setMediaStreamTrack(this._mediaStreamTrack, true); + // Restore original track on sender + await setProcessedTrack(null); events.emit(TrackProcessorUpdateEvent(track: this)); } diff --git a/lib/src/track/track.dart b/lib/src/track/track.dart index 520a69169..203e371af 100644 --- a/lib/src/track/track.dart +++ b/lib/src/track/track.dart @@ -222,8 +222,19 @@ abstract class Track extends DisposableChangeNotifier with EventsEmittable setProcessedTrack(rtc.MediaStreamTrack? track) async { + if (track != null) { + _originalTrack = _mediaStreamTrack; + _mediaStreamTrack = track; + } else if (_originalTrack != null) { + _mediaStreamTrack = _originalTrack!; + _originalTrack = null; + } + // Update sender to transmit the correct track + await sender?.replaceTrack(_mediaStreamTrack); + events.emit(TrackStreamUpdatedEvent( + track: this, + stream: _mediaStream, + )); } } From 07665076e93d4fa021521216e90e9d6a8dc0b7a5 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Mon, 23 Mar 2026 22:06:39 +0900 Subject: [PATCH 4/4] Create fix-processor-track-restore --- .changes/fix-processor-track-restore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .changes/fix-processor-track-restore diff --git a/.changes/fix-processor-track-restore b/.changes/fix-processor-track-restore new file mode 100644 index 000000000..cb0a3ead5 --- /dev/null +++ b/.changes/fix-processor-track-restore @@ -0,0 +1 @@ +patch type="fixed" "Restore original track on sender when processor stopped"