mirror of
https://github.com/yume-chan/ya-webadb.git
synced 2025-10-03 17:59:50 +02:00
refactor: code cleanup
This commit is contained in:
parent
f3d8ded9d2
commit
d8301a61f2
8 changed files with 38 additions and 34 deletions
|
@ -20,9 +20,6 @@ export class AdbDaemonWebUsbDeviceObserver
|
||||||
#exclusionFilters?: USBDeviceFilter[] | undefined;
|
#exclusionFilters?: USBDeviceFilter[] | undefined;
|
||||||
#usbManager: USB;
|
#usbManager: USB;
|
||||||
|
|
||||||
#onError = new EventEmitter<Error>();
|
|
||||||
onError = this.#onError.event;
|
|
||||||
|
|
||||||
#onDeviceAdd = new EventEmitter<AdbDaemonWebUsbDevice[]>();
|
#onDeviceAdd = new EventEmitter<AdbDaemonWebUsbDevice[]>();
|
||||||
onDeviceAdd = this.#onDeviceAdd.event;
|
onDeviceAdd = this.#onDeviceAdd.event;
|
||||||
|
|
||||||
|
@ -86,7 +83,6 @@ export class AdbDaemonWebUsbDeviceObserver
|
||||||
this.#handleDisconnect,
|
this.#handleDisconnect,
|
||||||
);
|
);
|
||||||
|
|
||||||
this.#onError.dispose();
|
|
||||||
this.#onDeviceAdd.dispose();
|
this.#onDeviceAdd.dispose();
|
||||||
this.#onDeviceRemove.dispose();
|
this.#onDeviceRemove.dispose();
|
||||||
this.#onListChange.dispose();
|
this.#onListChange.dispose();
|
||||||
|
|
|
@ -2,7 +2,6 @@ import type { MaybePromiseLike } from "@yume-chan/async";
|
||||||
import type { Event } from "@yume-chan/event";
|
import type { Event } from "@yume-chan/event";
|
||||||
|
|
||||||
export interface DeviceObserver<T> {
|
export interface DeviceObserver<T> {
|
||||||
onError: Event<Error>;
|
|
||||||
onDeviceAdd: Event<T[]>;
|
onDeviceAdd: Event<T[]>;
|
||||||
onDeviceRemove: Event<T[]>;
|
onDeviceRemove: Event<T[]>;
|
||||||
onListChange: Event<T[]>;
|
onListChange: Event<T[]>;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
import type { MaybePromiseLike } from "@yume-chan/async";
|
import type { MaybePromiseLike } from "@yume-chan/async";
|
||||||
import { PromiseResolver } from "@yume-chan/async";
|
import { PromiseResolver } from "@yume-chan/async";
|
||||||
|
import type { Event } from "@yume-chan/event";
|
||||||
import { EventEmitter } from "@yume-chan/event";
|
import { EventEmitter } from "@yume-chan/event";
|
||||||
import { getUint64LittleEndian } from "@yume-chan/no-data-view";
|
import { getUint64LittleEndian } from "@yume-chan/no-data-view";
|
||||||
import type {
|
import type {
|
||||||
|
@ -24,7 +25,7 @@ import {
|
||||||
|
|
||||||
import type { AdbIncomingSocketHandler, AdbSocket, Closeable } from "../adb.js";
|
import type { AdbIncomingSocketHandler, AdbSocket, Closeable } from "../adb.js";
|
||||||
import { AdbBanner } from "../banner.js";
|
import { AdbBanner } from "../banner.js";
|
||||||
import type { DeviceObserver } from "../device-observer.js";
|
import type { DeviceObserver as DeviceObserverBase } from "../device-observer.js";
|
||||||
import type { AdbFeature } from "../features.js";
|
import type { AdbFeature } from "../features.js";
|
||||||
import { hexToNumber, sequenceEqual, write4HexDigits } from "../utils/index.js";
|
import { hexToNumber, sequenceEqual, write4HexDigits } from "../utils/index.js";
|
||||||
|
|
||||||
|
@ -287,7 +288,7 @@ export class AdbServerClient {
|
||||||
/**
|
/**
|
||||||
* Monitors device list changes.
|
* Monitors device list changes.
|
||||||
*/
|
*/
|
||||||
async trackDevices(): Promise<DeviceObserver<AdbServerClient.Device>> {
|
async trackDevices(): Promise<AdbServerClient.DeviceObserver> {
|
||||||
const connection = await this.createConnection("host:track-devices-l");
|
const connection = await this.createConnection("host:track-devices-l");
|
||||||
|
|
||||||
let current: AdbServerClient.Device[] = [];
|
let current: AdbServerClient.Device[] = [];
|
||||||
|
@ -752,4 +753,8 @@ export namespace AdbServerClient {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface DeviceObserver extends DeviceObserverBase<Device> {
|
||||||
|
onError: Event<Error>;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,19 +17,10 @@ import type {
|
||||||
import type { TinyH264Wrapper } from "./wrapper.js";
|
import type { TinyH264Wrapper } from "./wrapper.js";
|
||||||
import { createTinyH264Wrapper } from "./wrapper.js";
|
import { createTinyH264Wrapper } from "./wrapper.js";
|
||||||
|
|
||||||
const NOOP = () => {
|
const noop = () => {
|
||||||
// no-op
|
// no-op
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface TinyH264DecoderInit {
|
|
||||||
/**
|
|
||||||
* Optional render target canvas element or offscreen canvas.
|
|
||||||
* If not provided, a new `<canvas>` (when DOM is available)
|
|
||||||
* or a `OffscreenCanvas` will be created.
|
|
||||||
*/
|
|
||||||
canvas?: HTMLCanvasElement | OffscreenCanvas | undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function createCanvas() {
|
export function createCanvas() {
|
||||||
if (typeof document !== "undefined") {
|
if (typeof document !== "undefined") {
|
||||||
return document.createElement("canvas");
|
return document.createElement("canvas");
|
||||||
|
@ -77,7 +68,7 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder {
|
||||||
#yuvCanvas: YuvCanvas | undefined;
|
#yuvCanvas: YuvCanvas | undefined;
|
||||||
#initializer: PromiseResolver<TinyH264Wrapper> | undefined;
|
#initializer: PromiseResolver<TinyH264Wrapper> | undefined;
|
||||||
|
|
||||||
constructor({ canvas }: TinyH264DecoderInit = {}) {
|
constructor({ canvas }: TinyH264Decoder.Options = {}) {
|
||||||
if (canvas) {
|
if (canvas) {
|
||||||
this.#renderer = canvas;
|
this.#renderer = canvas;
|
||||||
} else {
|
} else {
|
||||||
|
@ -180,7 +171,18 @@ export class TinyH264Decoder implements ScrcpyVideoDecoder {
|
||||||
this.#initializer?.promise
|
this.#initializer?.promise
|
||||||
.then((wrapper) => wrapper.dispose())
|
.then((wrapper) => wrapper.dispose())
|
||||||
// NOOP: It's disposed so nobody cares about the error
|
// NOOP: It's disposed so nobody cares about the error
|
||||||
.catch(NOOP);
|
.catch(noop);
|
||||||
this.#initializer = undefined;
|
this.#initializer = undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export namespace TinyH264Decoder {
|
||||||
|
export interface Options {
|
||||||
|
/**
|
||||||
|
* Optional render target canvas element or offscreen canvas.
|
||||||
|
* If not provided, a new `<canvas>` (when DOM is available)
|
||||||
|
* or a `OffscreenCanvas` will be created.
|
||||||
|
*/
|
||||||
|
canvas?: HTMLCanvasElement | OffscreenCanvas | undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -96,15 +96,6 @@ const VideoFrameCapturerPool =
|
||||||
/* #__PURE__ */
|
/* #__PURE__ */
|
||||||
new Pool(() => new VideoFrameCapturer(), 4);
|
new Pool(() => new VideoFrameCapturer(), 4);
|
||||||
|
|
||||||
export interface WebCodecsVideoDecoderInit {
|
|
||||||
/**
|
|
||||||
* The video codec to decode
|
|
||||||
*/
|
|
||||||
codec: ScrcpyVideoCodecId;
|
|
||||||
|
|
||||||
renderer: WebCodecsVideoDecoderRenderer;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder {
|
export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder {
|
||||||
static get isSupported() {
|
static get isSupported() {
|
||||||
return typeof globalThis.VideoDecoder !== "undefined";
|
return typeof globalThis.VideoDecoder !== "undefined";
|
||||||
|
@ -164,7 +155,7 @@ export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder {
|
||||||
/**
|
/**
|
||||||
* Create a new WebCodecs video decoder.
|
* Create a new WebCodecs video decoder.
|
||||||
*/
|
*/
|
||||||
constructor({ codec, renderer }: WebCodecsVideoDecoderInit) {
|
constructor({ codec, renderer }: WebCodecsVideoDecoder.Options) {
|
||||||
this.#codec = codec;
|
this.#codec = codec;
|
||||||
|
|
||||||
this.#renderer = renderer;
|
this.#renderer = renderer;
|
||||||
|
@ -303,3 +294,14 @@ export class WebCodecsVideoDecoder implements ScrcpyVideoDecoder {
|
||||||
this.#captureFrame?.close();
|
this.#captureFrame?.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export namespace WebCodecsVideoDecoder {
|
||||||
|
export interface Options {
|
||||||
|
/**
|
||||||
|
* The video codec to decode
|
||||||
|
*/
|
||||||
|
codec: ScrcpyVideoCodecId;
|
||||||
|
|
||||||
|
renderer: WebCodecsVideoDecoderRenderer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { CanvasWebCodecsVideoDecoderRenderer } from "./canvas.js";
|
import { CanvasWebCodecsDecoderRenderer } from "./canvas.js";
|
||||||
|
|
||||||
export class BitmapWebCodecsDecoderRenderer extends CanvasWebCodecsVideoDecoderRenderer {
|
export class BitmapWebCodecsDecoderRenderer extends CanvasWebCodecsDecoderRenderer {
|
||||||
#context: ImageBitmapRenderingContext;
|
#context: ImageBitmapRenderingContext;
|
||||||
|
|
||||||
constructor(canvas?: HTMLCanvasElement | OffscreenCanvas) {
|
constructor(canvas?: HTMLCanvasElement | OffscreenCanvas) {
|
||||||
|
|
|
@ -2,7 +2,7 @@ import { createCanvas } from "@yume-chan/scrcpy-decoder-tinyh264";
|
||||||
|
|
||||||
import type { WebCodecsVideoDecoderRenderer } from "./type.js";
|
import type { WebCodecsVideoDecoderRenderer } from "./type.js";
|
||||||
|
|
||||||
export abstract class CanvasWebCodecsVideoDecoderRenderer
|
export abstract class CanvasWebCodecsDecoderRenderer
|
||||||
implements WebCodecsVideoDecoderRenderer
|
implements WebCodecsVideoDecoderRenderer
|
||||||
{
|
{
|
||||||
#canvas: HTMLCanvasElement | OffscreenCanvas;
|
#canvas: HTMLCanvasElement | OffscreenCanvas;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { createCanvas } from "@yume-chan/scrcpy-decoder-tinyh264";
|
import { createCanvas } from "@yume-chan/scrcpy-decoder-tinyh264";
|
||||||
|
|
||||||
import { CanvasWebCodecsVideoDecoderRenderer } from "./canvas.js";
|
import { CanvasWebCodecsDecoderRenderer } from "./canvas.js";
|
||||||
|
|
||||||
const Resolved = Promise.resolve();
|
const Resolved = Promise.resolve();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ function createContext(
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export class WebGLWebCodecsDecoderRenderer extends CanvasWebCodecsVideoDecoderRenderer {
|
export class WebGLWebCodecsDecoderRenderer extends CanvasWebCodecsDecoderRenderer {
|
||||||
static vertexShaderSource = `
|
static vertexShaderSource = `
|
||||||
attribute vec2 xy;
|
attribute vec2 xy;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue