ov-components: Refactors Firefox background processor handling

Simplifies the logic for attaching and detaching the background processor in Firefox.

Ensures the processor is stopped when background effects are disabled, optimizing performance.
pull/860/head
CSantosM 2026-01-22 19:35:22 +01:00
parent 465403f8cb
commit 6cfa44c4f1
1 changed files with 26 additions and 10 deletions

View File

@ -286,21 +286,37 @@ export class OpenViduService {
*/
async switchBackgroundMode(options: SwitchBackgroundProcessorOptions): Promise<void> {
// For Firefox, attach processor only when an effect is activated
if (this.platformService.isFirefox() && options.mode !== 'disabled') {
const videoTrack = await this.getVideoTrack();
if (videoTrack) {
const hasProcessor = videoTrack.getProcessor();
if (!hasProcessor) {
this.log.d('Firefox: Attaching processor on effect activation');
await videoTrack.setProcessor(this.backgroundProcessor);
}
}
if (this.platformService.isFirefox()) {
await this.handleFirefoxProcessor(options.mode);
}
await this.backgroundProcessor.switchTo(options);
this.log.d('Background mode switched:', options);
}
/**
* Applies the background processor handling for Firefox browser.
* @internal
*/
private async handleFirefoxProcessor(mode: SwitchBackgroundProcessorOptions['mode']): Promise<void> {
const videoTrack = await this.getVideoTrack();
if (!videoTrack) return;
const hasProcessor = Boolean(videoTrack.getProcessor());
const isDisabled = mode === 'disabled';
if (!isDisabled && !hasProcessor) {
this.log.d('Firefox: Attaching processor on effect activation');
await videoTrack.setProcessor(this.backgroundProcessor);
return;
}
if (isDisabled && hasProcessor) {
this.log.d('Firefox: Stopping processor on effect deactivation');
await videoTrack.stopProcessor();
}
}
/**
* @internal
**/
@ -377,7 +393,7 @@ export class OpenViduService {
// For Firefox: skip processor attachment to avoid performance issues (applied only when effect is activated)
// For other browsers: attach processor for smooth transitions
const videoTrack = newLocalTracks.find((t) => t.kind === Track.Kind.Video) as LocalVideoTrack | undefined;
debugger
debugger;
if (videoTrack && !this.platformService.isFirefox()) {
await videoTrack.setProcessor(this.backgroundProcessor);
this.log.d('Background processor applied to newly created video track');