Loading libraries/scrcpy-decoder-tinyh264/src/decoder.ts +10 −0 Original line number Diff line number Diff line import { PromiseResolver } from "@yume-chan/async"; import { EventEmitter } from "@yume-chan/event"; import type { ScrcpyMediaStreamPacket } from "@yume-chan/scrcpy"; import { AndroidAvcLevel, Loading Loading @@ -51,6 +52,11 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder { return this.#renderer; } #sizeChanged = new EventEmitter<{ width: number; height: number }>(); get sizeChanged() { return this.#sizeChanged.event; } #frameRendered = 0; get frameRendered() { return this.#frameRendered; Loading Loading @@ -112,6 +118,10 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder { cropLeft, cropTop, } = h264ParseConfiguration(data); this.#sizeChanged.fire({ width: croppedWidth, height: croppedHeight, }); // H.264 Baseline profile only supports YUV 420 pixel format const chromaWidth = encodedWidth / 2; Loading libraries/scrcpy-decoder-tinyh264/src/types.ts +2 −1 Original line number Diff line number Diff line import type { Disposable } from "@yume-chan/event"; import type { Disposable, Event } from "@yume-chan/event"; import type { ScrcpyMediaStreamPacket, ScrcpyVideoCodecId, Loading @@ -12,6 +12,7 @@ export interface ScrcpyVideoDecoderCapability { export interface ScrcpyVideoDecoder extends Disposable { readonly renderer: HTMLElement; readonly sizeChanged: Event<{ width: number; height: number }>; readonly frameRendered: number; readonly frameSkipped: number; readonly writable: WritableStream<ScrcpyMediaStreamPacket>; Loading libraries/scrcpy-decoder-webcodecs/package.json +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { "@yume-chan/event": "workspace:^0.0.22", "@yume-chan/scrcpy": "workspace:^0.0.22", "@yume-chan/scrcpy-decoder-tinyh264": "workspace:^0.0.22", "@yume-chan/stream-extra": "workspace:^0.0.22", Loading libraries/scrcpy-decoder-webcodecs/src/index.ts +10 −0 Original line number Diff line number Diff line import { EventEmitter } from "@yume-chan/event"; import type { ScrcpyMediaStreamDataPacket, ScrcpyMediaStreamPacket, Loading Loading @@ -62,6 +63,11 @@ export class WebCodecsDecoder implements ScrcpyVideoDecoder { return this.#frameSkipped; } #sizeChanged = new EventEmitter<{ width: number; height: number }>(); get sizeChanged() { return this.#sizeChanged.event; } #context: CanvasRenderingContext2D; #decoder: VideoDecoder; #config: Uint8Array | undefined; Loading Loading @@ -132,6 +138,10 @@ export class WebCodecsDecoder implements ScrcpyVideoDecoder { this.#renderer.width = croppedWidth; this.#renderer.height = croppedHeight; this.#sizeChanged.fire({ width: croppedWidth, height: croppedHeight, }); // https://www.rfc-editor.org/rfc/rfc6381#section-3.3 // ISO Base Media File Format Name Space Loading Loading
libraries/scrcpy-decoder-tinyh264/src/decoder.ts +10 −0 Original line number Diff line number Diff line import { PromiseResolver } from "@yume-chan/async"; import { EventEmitter } from "@yume-chan/event"; import type { ScrcpyMediaStreamPacket } from "@yume-chan/scrcpy"; import { AndroidAvcLevel, Loading Loading @@ -51,6 +52,11 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder { return this.#renderer; } #sizeChanged = new EventEmitter<{ width: number; height: number }>(); get sizeChanged() { return this.#sizeChanged.event; } #frameRendered = 0; get frameRendered() { return this.#frameRendered; Loading Loading @@ -112,6 +118,10 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder { cropLeft, cropTop, } = h264ParseConfiguration(data); this.#sizeChanged.fire({ width: croppedWidth, height: croppedHeight, }); // H.264 Baseline profile only supports YUV 420 pixel format const chromaWidth = encodedWidth / 2; Loading
libraries/scrcpy-decoder-tinyh264/src/types.ts +2 −1 Original line number Diff line number Diff line import type { Disposable } from "@yume-chan/event"; import type { Disposable, Event } from "@yume-chan/event"; import type { ScrcpyMediaStreamPacket, ScrcpyVideoCodecId, Loading @@ -12,6 +12,7 @@ export interface ScrcpyVideoDecoderCapability { export interface ScrcpyVideoDecoder extends Disposable { readonly renderer: HTMLElement; readonly sizeChanged: Event<{ width: number; height: number }>; readonly frameRendered: number; readonly frameSkipped: number; readonly writable: WritableStream<ScrcpyMediaStreamPacket>; Loading
libraries/scrcpy-decoder-webcodecs/package.json +1 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ "prepublishOnly": "npm run build" }, "dependencies": { "@yume-chan/event": "workspace:^0.0.22", "@yume-chan/scrcpy": "workspace:^0.0.22", "@yume-chan/scrcpy-decoder-tinyh264": "workspace:^0.0.22", "@yume-chan/stream-extra": "workspace:^0.0.22", Loading
libraries/scrcpy-decoder-webcodecs/src/index.ts +10 −0 Original line number Diff line number Diff line import { EventEmitter } from "@yume-chan/event"; import type { ScrcpyMediaStreamDataPacket, ScrcpyMediaStreamPacket, Loading Loading @@ -62,6 +63,11 @@ export class WebCodecsDecoder implements ScrcpyVideoDecoder { return this.#frameSkipped; } #sizeChanged = new EventEmitter<{ width: number; height: number }>(); get sizeChanged() { return this.#sizeChanged.event; } #context: CanvasRenderingContext2D; #decoder: VideoDecoder; #config: Uint8Array | undefined; Loading Loading @@ -132,6 +138,10 @@ export class WebCodecsDecoder implements ScrcpyVideoDecoder { this.#renderer.width = croppedWidth; this.#renderer.height = croppedHeight; this.#sizeChanged.fire({ width: croppedWidth, height: croppedHeight, }); // https://www.rfc-editor.org/rfc/rfc6381#section-3.3 // ISO Base Media File Format Name Space Loading