src/videotile/DefaultVideoElementResolutionMonitor.ts (39 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import VideoElementResolutionMonitor, { VideoElementResolutionObserver, } from './VideoElementResolutionMonitor'; export default class DefaultVideoElementResolutionMonitor implements VideoElementResolutionMonitor { private observerQueue = new Set<VideoElementResolutionObserver>(); private resizeObserver: ResizeObserver; private element: HTMLVideoElement | null = null; constructor() { this.resizeObserver = new ResizeObserver(entries => { for (const entry of entries) { const { width, height } = entry.contentRect; this.notifyObservers(width, height); } }); } private notifyObservers(newWidth: number, newHeight: number): void { for (const observer of this.observerQueue) { observer.videoElementResolutionChanged(newWidth, newHeight); } } registerObserver(observer: VideoElementResolutionObserver): void { this.observerQueue.add(observer); } removeObserver(observer: VideoElementResolutionObserver): void { this.observerQueue.delete(observer); } bindVideoElement(newElement: HTMLVideoElement | null): void { if (this.element === newElement) { return; } if (this.element) { this.resizeObserver.unobserve(this.element); } this.element = newElement; if (this.element) { this.resizeObserver.observe(this.element); } } }