Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit bef336da authored by Simon Chan's avatar Simon Chan
Browse files

feat(decoder): add `sizeChanged` event

parent 4fbd24fc
Loading
Loading
Loading
Loading
+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,
@@ -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;
@@ -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;
+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,
@@ -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>;
+1 −0
Original line number Diff line number Diff line
@@ -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",
+10 −0
Original line number Diff line number Diff line
import { EventEmitter } from "@yume-chan/event";
import type {
    ScrcpyMediaStreamDataPacket,
    ScrcpyMediaStreamPacket,
@@ -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;
@@ -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