UNPKG

infobip-rtc

Version:

Infobip RTC JavaScript SDK - Infobip WebRTC API Implementation

90 lines 3.84 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { createFrameProvider } from './frame-provider/FrameProvider'; import { FpsCounter } from "./util/FpsCounter"; import { CallsApiEvent } from "../../../event/CallsApiEvents"; import { ApplicationErrorCode } from "../../../ApplicationErrorCode"; export class DefaultVideoFilterManager { constructor(videoFilter) { this.videoFilter = videoFilter; this.fpsCounter = new FpsCounter(); } stop() { var _a; return __awaiter(this, void 0, void 0, function* () { if (!this.originalTrack) { return; } yield this.videoFilter.stop(); (_a = this.frameProvider) === null || _a === void 0 ? void 0 : _a.destroy(); this.setActiveTrack(this.originalTrack); delete this.originalTrack; delete this.originalStream; delete this.frameProvider; }); } getCurrentFramerate() { return this.fpsCounter.fps(); } getVideoFilter() { return this.videoFilter; } configureFramerate(filterFps) { this.frameProvider.configureFramerate(filterFps); } start(stream, trackIndex, apiEventEmitter) { return __awaiter(this, void 0, void 0, function* () { const track = stream.getTracks()[trackIndex]; if (!track) { return null; } if (this.originalTrack) { this.originalTrack.stop(); } this.originalTrack = track; this.originalStream = stream; const width = track.getSettings().width; const height = track.getSettings().height; const sourceFps = track.getSettings().frameRate; this.apiEventEmitter = apiEventEmitter; this.frameProvider = createFrameProvider(track, sourceFps, (frame) => this.onFrameProvided(frame)); this.frameProvider.configureFramerate(sourceFps); this.filteredTrack = yield this.videoFilter.start(width, height, sourceFps, this); this.setActiveTrack(this.filteredTrack); this.frameProvider.start(); return this.filteredTrack; }); } setActiveTrack(track) { if (track !== this.originalTrack) { this.originalStream.removeTrack(this.originalTrack); } else if (track !== this.filteredTrack) { this.originalStream.removeTrack(this.filteredTrack); } this.originalStream.addTrack(track); } onFrameProvided(frame) { return __awaiter(this, void 0, void 0, function* () { try { yield this.videoFilter.applyFilter(frame); } catch (error) { this.apiEventEmitter.emit(CallsApiEvent.ERROR, { id: ApplicationErrorCode.MEDIA_ERROR.id, name: ApplicationErrorCode.MEDIA_ERROR.name, description: (error === null || error === void 0 ? void 0 : error.message) || error, }); } this.fpsCounter.tick(); }); } } //# sourceMappingURL=DefaultVideoFilterManager.js.map