@yume-chan/scrcpy 0.0.18 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +33 -0
- package/CHANGELOG.md +18 -1
- package/README.md +157 -183
- package/bin/scrcpy-server +0 -0
- package/bin/version.d.ts +1 -1
- package/bin/version.js +1 -1
- package/esm/codec/av1.d.ts +33 -0
- package/esm/codec/av1.d.ts.map +1 -0
- package/esm/codec/av1.js +35 -0
- package/esm/codec/av1.js.map +1 -0
- package/esm/codec/h264.d.ts +78 -0
- package/esm/codec/h264.d.ts.map +1 -0
- package/esm/codec/h264.js +256 -0
- package/esm/codec/h264.js.map +1 -0
- package/esm/codec/h265.d.ts +490 -0
- package/esm/codec/h265.d.ts.map +1 -0
- package/esm/codec/h265.js +1098 -0
- package/esm/codec/h265.js.map +1 -0
- package/esm/codec/index.d.ts +5 -0
- package/esm/codec/index.d.ts.map +1 -0
- package/esm/codec/index.js +5 -0
- package/esm/codec/index.js.map +1 -0
- package/esm/codec/nalu.d.ts +44 -0
- package/esm/codec/nalu.d.ts.map +1 -0
- package/esm/codec/nalu.js +310 -0
- package/esm/codec/nalu.js.map +1 -0
- package/esm/control/back-or-screen-on.d.ts +2 -2
- package/esm/control/back-or-screen-on.d.ts.map +1 -1
- package/esm/control/back-or-screen-on.js +1 -1
- package/esm/control/basic.d.ts +5 -0
- package/esm/control/basic.d.ts.map +1 -0
- package/esm/control/basic.js +3 -0
- package/esm/control/basic.js.map +1 -0
- package/esm/control/hover-helper.d.ts +17 -17
- package/esm/control/hover-helper.d.ts.map +1 -1
- package/esm/control/hover-helper.js +43 -43
- package/esm/control/hover-helper.js.map +1 -1
- package/esm/control/index.d.ts +13 -11
- package/esm/control/index.d.ts.map +1 -1
- package/esm/control/index.js +13 -11
- package/esm/control/index.js.map +1 -1
- package/esm/control/inject-keycode.d.ts +193 -60
- package/esm/control/inject-keycode.d.ts.map +1 -1
- package/esm/control/inject-keycode.js +198 -61
- package/esm/control/inject-keycode.js.map +1 -1
- package/esm/control/inject-scroll.d.ts +2 -2
- package/esm/control/inject-scroll.d.ts.map +1 -1
- package/esm/control/inject-scroll.js +1 -1
- package/esm/control/inject-text.d.ts +7 -8
- package/esm/control/inject-text.d.ts.map +1 -1
- package/esm/control/inject-text.js +5 -6
- package/esm/control/inject-text.js.map +1 -1
- package/esm/control/inject-touch.d.ts +32 -37
- package/esm/control/inject-touch.d.ts.map +1 -1
- package/esm/control/inject-touch.js +35 -62
- package/esm/control/inject-touch.js.map +1 -1
- package/esm/control/rotate-device.d.ts +4 -6
- package/esm/control/rotate-device.d.ts.map +1 -1
- package/esm/control/rotate-device.js +2 -4
- package/esm/control/rotate-device.js.map +1 -1
- package/esm/control/serializer.d.ts +25 -33
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +53 -78
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/set-clipboard.d.ts +2 -2
- package/esm/control/set-clipboard.d.ts.map +1 -1
- package/esm/control/set-clipboard.js +1 -1
- package/esm/control/set-screen-power-mode.d.ts +10 -11
- package/esm/control/set-screen-power-mode.d.ts.map +1 -1
- package/esm/control/set-screen-power-mode.js +10 -11
- package/esm/control/set-screen-power-mode.js.map +1 -1
- package/esm/control/type.d.ts +28 -14
- package/esm/control/type.d.ts.map +1 -1
- package/esm/control/type.js +40 -18
- package/esm/control/type.js.map +1 -1
- package/esm/control/writer.d.ts +28 -0
- package/esm/control/writer.d.ts.map +1 -0
- package/esm/control/writer.js +53 -0
- package/esm/control/writer.js.map +1 -0
- package/esm/device-message/ack-clipboard.d.ts +8 -8
- package/esm/device-message/ack-clipboard.d.ts.map +1 -1
- package/esm/device-message/ack-clipboard.js +5 -5
- package/esm/device-message/clipboard.d.ts +9 -9
- package/esm/device-message/clipboard.d.ts.map +1 -1
- package/esm/device-message/clipboard.js +6 -6
- package/esm/device-message/index.d.ts +4 -4
- package/esm/device-message/index.js +4 -4
- package/esm/device-message/stream.d.ts +7 -7
- package/esm/device-message/stream.d.ts.map +1 -1
- package/esm/device-message/stream.js +34 -19
- package/esm/device-message/stream.js.map +1 -1
- package/esm/device-message/type.d.ts +4 -4
- package/esm/device-message/type.js +6 -6
- package/esm/index.d.ts +4 -5
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +4 -5
- package/esm/index.js.map +1 -1
- package/esm/options/1_16/codec-options.d.ts +19 -19
- package/esm/options/1_16/codec-options.d.ts.map +1 -1
- package/esm/options/1_16/codec-options.js +25 -25
- package/esm/options/1_16/codec-options.js.map +1 -1
- package/esm/options/1_16/float-to-uint16.d.ts +5 -0
- package/esm/options/1_16/float-to-uint16.d.ts.map +1 -0
- package/esm/options/1_16/float-to-uint16.js +27 -0
- package/esm/options/1_16/float-to-uint16.js.map +1 -0
- package/esm/options/1_16/index.d.ts +6 -4
- package/esm/options/1_16/index.d.ts.map +1 -1
- package/esm/options/1_16/index.js +6 -4
- package/esm/options/1_16/index.js.map +1 -1
- package/esm/options/1_16/init.d.ts +66 -0
- package/esm/options/1_16/init.d.ts.map +1 -0
- package/esm/options/1_16/init.js +16 -0
- package/esm/options/1_16/init.js.map +1 -0
- package/esm/options/1_16/message.d.ts +32 -0
- package/esm/options/1_16/message.d.ts.map +1 -0
- package/esm/options/1_16/message.js +37 -0
- package/esm/options/1_16/message.js.map +1 -0
- package/esm/options/1_16/options.d.ts +48 -93
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +152 -189
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_16/scroll.d.ts +26 -26
- package/esm/options/1_16/scroll.d.ts.map +1 -1
- package/esm/options/1_16/scroll.js +54 -55
- package/esm/options/1_16/scroll.js.map +1 -1
- package/esm/options/1_17.d.ts +33 -0
- package/esm/options/1_17.d.ts.map +1 -0
- package/esm/options/1_17.js +42 -0
- package/esm/options/1_17.js.map +1 -0
- package/esm/options/1_18.d.ts +59 -19
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +78 -45
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.d.ts +41 -20
- package/esm/options/1_21.d.ts.map +1 -1
- package/esm/options/1_21.js +51 -36
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/index.d.ts +3 -2
- package/esm/options/1_22/index.d.ts.map +1 -1
- package/esm/options/1_22/index.js +3 -2
- package/esm/options/1_22/index.js.map +1 -1
- package/esm/options/1_22/init.d.ts +17 -0
- package/esm/options/1_22/init.d.ts.map +1 -0
- package/esm/options/1_22/init.js +2 -0
- package/esm/options/1_22/init.js.map +1 -0
- package/esm/options/1_22/options.d.ts +35 -28
- package/esm/options/1_22/options.d.ts.map +1 -1
- package/esm/options/1_22/options.js +36 -25
- package/esm/options/1_22/options.js.map +1 -1
- package/esm/options/1_22/scroll.d.ts +16 -16
- package/esm/options/1_22/scroll.d.ts.map +1 -1
- package/esm/options/1_22/scroll.js +14 -14
- package/esm/options/1_23.d.ts +36 -11
- package/esm/options/1_23.d.ts.map +1 -1
- package/esm/options/1_23.js +44 -34
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +34 -8
- package/esm/options/1_24.d.ts.map +1 -1
- package/esm/options/1_24.js +22 -12
- package/esm/options/1_24.js.map +1 -1
- package/esm/options/1_25/index.d.ts +2 -2
- package/esm/options/1_25/index.js +2 -2
- package/esm/options/1_25/options.d.ts +10 -5
- package/esm/options/1_25/options.d.ts.map +1 -1
- package/esm/options/1_25/options.js +21 -7
- package/esm/options/1_25/options.js.map +1 -1
- package/esm/options/1_25/scroll.d.ts +19 -18
- package/esm/options/1_25/scroll.d.ts.map +1 -1
- package/esm/options/1_25/scroll.js +33 -32
- package/esm/options/1_25/scroll.js.map +1 -1
- package/esm/options/2_0.d.ts +91 -0
- package/esm/options/2_0.d.ts.map +1 -0
- package/esm/options/2_0.js +244 -0
- package/esm/options/2_0.js.map +1 -0
- package/esm/options/codec.d.ts +52 -0
- package/esm/options/codec.d.ts.map +1 -0
- package/esm/options/codec.js +26 -0
- package/esm/options/codec.js.map +1 -0
- package/esm/options/index.d.ts +12 -8
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +12 -8
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +12 -0
- package/esm/options/latest.d.ts.map +1 -0
- package/esm/options/latest.js +8 -0
- package/esm/options/latest.js.map +1 -0
- package/esm/options/types.d.ts +86 -46
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +69 -17
- package/esm/options/types.js.map +1 -1
- package/package.json +10 -16
- package/src/codec/av1.ts +33 -0
- package/src/codec/h264.ts +317 -0
- package/src/codec/h265.ts +1375 -0
- package/src/codec/index.ts +4 -0
- package/src/codec/nalu.ts +373 -0
- package/src/control/back-or-screen-on.ts +1 -1
- package/src/control/basic.ts +3 -0
- package/src/control/hover-helper.ts +2 -4
- package/src/control/index.ts +2 -0
- package/src/control/inject-keycode.ts +194 -51
- package/src/control/inject-scroll.ts +1 -1
- package/src/control/inject-text.ts +6 -9
- package/src/control/inject-touch.ts +16 -55
- package/src/control/rotate-device.ts +3 -7
- package/src/control/serializer.ts +49 -105
- package/src/control/set-clipboard.ts +1 -1
- package/src/control/set-screen-power-mode.ts +6 -9
- package/src/control/type.ts +32 -0
- package/src/control/writer.ts +87 -0
- package/src/device-message/ack-clipboard.ts +1 -1
- package/src/device-message/clipboard.ts +1 -1
- package/src/device-message/stream.ts +32 -12
- package/src/index.ts +4 -5
- package/src/options/1_16/codec-options.ts +5 -8
- package/src/options/1_16/float-to-uint16.ts +33 -0
- package/src/options/1_16/index.ts +3 -1
- package/src/options/1_16/init.ts +80 -0
- package/src/options/1_16/message.ts +55 -0
- package/src/options/1_16/options.ts +152 -256
- package/src/options/1_16/scroll.ts +2 -5
- package/src/options/1_17.ts +66 -0
- package/src/options/1_18.ts +106 -42
- package/src/options/1_21.ts +51 -30
- package/src/options/1_22/index.ts +1 -0
- package/src/options/1_22/init.ts +19 -0
- package/src/options/1_22/options.ts +40 -46
- package/src/options/1_22/scroll.ts +2 -2
- package/src/options/1_23.ts +33 -23
- package/src/options/1_24.ts +25 -11
- package/src/options/1_25/options.ts +25 -6
- package/src/options/1_25/scroll.ts +5 -7
- package/src/options/2_0.ts +342 -0
- package/src/options/codec.ts +98 -0
- package/src/options/index.ts +7 -3
- package/src/options/latest.ts +14 -0
- package/src/options/types.ts +158 -48
- package/tsconfig.build.json +9 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/esm/adb/client.d.ts +0 -41
- package/esm/adb/client.d.ts.map +0 -1
- package/esm/adb/client.js +0 -243
- package/esm/adb/client.js.map +0 -1
- package/esm/adb/connection.d.ts +0 -47
- package/esm/adb/connection.d.ts.map +0 -1
- package/esm/adb/connection.js +0 -110
- package/esm/adb/connection.js.map +0 -1
- package/esm/adb/index.d.ts +0 -4
- package/esm/adb/index.d.ts.map +0 -1
- package/esm/adb/index.js +0 -4
- package/esm/adb/index.js.map +0 -1
- package/esm/adb/options/1_16.d.ts +0 -8
- package/esm/adb/options/1_16.d.ts.map +0 -1
- package/esm/adb/options/1_16.js +0 -20
- package/esm/adb/options/1_16.js.map +0 -1
- package/esm/adb/options/1_22.d.ts +0 -8
- package/esm/adb/options/1_22.d.ts.map +0 -1
- package/esm/adb/options/1_22.js +0 -17
- package/esm/adb/options/1_22.js.map +0 -1
- package/esm/adb/options/index.d.ts +0 -4
- package/esm/adb/options/index.d.ts.map +0 -1
- package/esm/adb/options/index.js +0 -4
- package/esm/adb/options/index.js.map +0 -1
- package/esm/adb/options/types.d.ts +0 -24
- package/esm/adb/options/types.d.ts.map +0 -1
- package/esm/adb/options/types.js +0 -37
- package/esm/adb/options/types.js.map +0 -1
- package/esm/codec.d.ts +0 -34
- package/esm/codec.d.ts.map +0 -1
- package/esm/codec.js +0 -37
- package/esm/codec.js.map +0 -1
- package/esm/options/1_16/h264-configuration.d.ts +0 -49
- package/esm/options/1_16/h264-configuration.d.ts.map +0 -1
- package/esm/options/1_16/h264-configuration.js +0 -414
- package/esm/options/1_16/h264-configuration.js.map +0 -1
- package/esm/options/1_16/sps.d.ts +0 -22
- package/esm/options/1_16/sps.d.ts.map +0 -1
- package/esm/options/1_16/sps.js +0 -263
- package/esm/options/1_16/sps.js.map +0 -1
- package/src/adb/client.ts +0 -345
- package/src/adb/connection.ts +0 -192
- package/src/adb/index.ts +0 -3
- package/src/adb/options/1_16.ts +0 -30
- package/src/adb/options/1_22.ts +0 -26
- package/src/adb/options/index.ts +0 -3
- package/src/adb/options/types.ts +0 -75
- package/src/codec.ts +0 -35
- package/src/options/1_16/h264-configuration.ts +0 -485
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { ReadableStream } from "@yume-chan/stream-extra";
|
|
2
|
+
import type { ValueOrPromise } from "@yume-chan/struct";
|
|
3
|
+
import Struct from "@yume-chan/struct";
|
|
4
|
+
import type { AndroidMotionEventAction, ScrcpyInjectTouchControlMessage } from "../control/index.js";
|
|
5
|
+
import { CodecOptions } from "./1_16/index.js";
|
|
6
|
+
import type { ScrcpyOptionsInit1_24 } from "./1_24.js";
|
|
7
|
+
import { ScrcpyOptions1_25 } from "./1_25/index.js";
|
|
8
|
+
import type { ScrcpyAudioStreamMetadata, ScrcpyVideoStream } from "./codec.js";
|
|
9
|
+
import type { ScrcpyDisplay, ScrcpyEncoder, ScrcpyOptionValue } from "./types.js";
|
|
10
|
+
import { ScrcpyOptionsBase } from "./types.js";
|
|
11
|
+
export declare const ScrcpyInjectTouchControlMessage2_0: Struct<{
|
|
12
|
+
type: number;
|
|
13
|
+
action: AndroidMotionEventAction;
|
|
14
|
+
pointerId: bigint;
|
|
15
|
+
pointerX: number;
|
|
16
|
+
pointerY: number;
|
|
17
|
+
screenWidth: number;
|
|
18
|
+
screenHeight: number;
|
|
19
|
+
pressure: number;
|
|
20
|
+
actionButton: number;
|
|
21
|
+
buttons: number;
|
|
22
|
+
}, never, Record<never, never>, undefined>;
|
|
23
|
+
export type ScrcpyInjectTouchControlMessage2_0 = (typeof ScrcpyInjectTouchControlMessage2_0)["TInit"];
|
|
24
|
+
export declare class ScrcpyInstanceId implements ScrcpyOptionValue {
|
|
25
|
+
static readonly NONE: ScrcpyInstanceId;
|
|
26
|
+
static random(): ScrcpyInstanceId;
|
|
27
|
+
value: number;
|
|
28
|
+
constructor(value: number);
|
|
29
|
+
toOptionValue(): string | undefined;
|
|
30
|
+
}
|
|
31
|
+
export interface ScrcpyOptionsInit2_0 extends Omit<ScrcpyOptionsInit1_24, "bitRate" | "codecOptions" | "encoderName"> {
|
|
32
|
+
scid?: ScrcpyInstanceId;
|
|
33
|
+
videoCodec?: "h264" | "h265" | "av1";
|
|
34
|
+
videoBitRate?: number;
|
|
35
|
+
videoCodecOptions?: CodecOptions;
|
|
36
|
+
videoEncoder?: string;
|
|
37
|
+
audio?: boolean;
|
|
38
|
+
audioCodec?: "opus" | "aac" | "raw";
|
|
39
|
+
audioBitRate?: number;
|
|
40
|
+
audioCodecOptions?: CodecOptions;
|
|
41
|
+
audioEncoder?: string;
|
|
42
|
+
listEncoders?: boolean;
|
|
43
|
+
listDisplays?: boolean;
|
|
44
|
+
sendCodecMeta?: boolean;
|
|
45
|
+
}
|
|
46
|
+
export declare class ScrcpyOptions2_0 extends ScrcpyOptionsBase<ScrcpyOptionsInit2_0, ScrcpyOptions1_25> {
|
|
47
|
+
static readonly DEFAULTS: {
|
|
48
|
+
readonly scid: ScrcpyInstanceId;
|
|
49
|
+
readonly videoCodec: "h264";
|
|
50
|
+
readonly videoBitRate: 8000000;
|
|
51
|
+
readonly videoCodecOptions: CodecOptions;
|
|
52
|
+
readonly videoEncoder: "";
|
|
53
|
+
readonly audio: true;
|
|
54
|
+
readonly audioCodec: "opus";
|
|
55
|
+
readonly audioBitRate: 128000;
|
|
56
|
+
readonly audioCodecOptions: CodecOptions;
|
|
57
|
+
readonly audioEncoder: "";
|
|
58
|
+
readonly listEncoders: false;
|
|
59
|
+
readonly listDisplays: false;
|
|
60
|
+
readonly sendCodecMeta: true;
|
|
61
|
+
readonly logLevel: import("./1_18.js").ScrcpyLogLevel1_18.Debug;
|
|
62
|
+
readonly maxSize: 0;
|
|
63
|
+
readonly maxFps: 0;
|
|
64
|
+
readonly lockVideoOrientation: import("./1_18.js").ScrcpyVideoOrientation1_18.Unlocked;
|
|
65
|
+
readonly tunnelForward: false;
|
|
66
|
+
readonly crop: undefined;
|
|
67
|
+
readonly sendFrameMeta: true;
|
|
68
|
+
readonly control: true;
|
|
69
|
+
readonly displayId: 0;
|
|
70
|
+
readonly showTouches: false;
|
|
71
|
+
readonly stayAwake: false;
|
|
72
|
+
readonly powerOffOnClose: false;
|
|
73
|
+
readonly clipboardAutosync: true;
|
|
74
|
+
readonly downsizeOnError: true;
|
|
75
|
+
readonly sendDeviceMeta: true;
|
|
76
|
+
readonly sendDummyByte: true;
|
|
77
|
+
readonly cleanup: true;
|
|
78
|
+
readonly powerOn: true;
|
|
79
|
+
};
|
|
80
|
+
get defaults(): Required<ScrcpyOptionsInit2_0>;
|
|
81
|
+
constructor(init: ScrcpyOptionsInit2_0);
|
|
82
|
+
serialize(): string[];
|
|
83
|
+
setListEncoders(): void;
|
|
84
|
+
setListDisplays(): void;
|
|
85
|
+
parseEncoder(line: string): ScrcpyEncoder | undefined;
|
|
86
|
+
parseDisplay(line: string): ScrcpyDisplay | undefined;
|
|
87
|
+
parseVideoStreamMetadata(stream: ReadableStream<Uint8Array>): ValueOrPromise<ScrcpyVideoStream>;
|
|
88
|
+
parseAudioStreamMetadata(stream: ReadableStream<Uint8Array>): ValueOrPromise<ScrcpyAudioStreamMetadata>;
|
|
89
|
+
serializeInjectTouchControlMessage(message: ScrcpyInjectTouchControlMessage): Uint8Array;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=2_0.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2_0.d.ts","sourceRoot":"","sources":["../../src/options/2_0.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAK9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,MAAwC,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EACR,wBAAwB,EACxB,+BAA+B,EAClC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACH,YAAY,EAGf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/E,OAAO,KAAK,EACR,aAAa,EACb,aAAa,EACb,iBAAiB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,eAAO,MAAM,kCAAkC;;;;;;;;;;;0CAUzB,CAAC;AAEvB,MAAM,MAAM,kCAAkC,GAC1C,CAAC,OAAO,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEzD,qBAAa,gBAAiB,YAAW,iBAAiB;IACtD,gBAAuB,IAAI,mBAA4B;WAEzC,MAAM,IAAI,gBAAgB;IAKjC,KAAK,EAAE,MAAM,CAAC;gBAEF,KAAK,EAAE,MAAM;IAIzB,aAAa,IAAI,MAAM,GAAG,SAAS;CAM7C;AAED,MAAM,WAAW,oBACb,SAAQ,IAAI,CACR,qBAAqB,EACrB,SAAS,GAAG,cAAc,GAAG,aAAa,CAC7C;IACD,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAExB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,YAAY,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,YAAY,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAeD,qBAAa,gBAAiB,SAAQ,iBAAiB,CACnD,oBAAoB,EACpB,iBAAiB,CACpB;IACG,gBAAuB,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAsBqB;IAEpD,IAAoB,QAAQ,IAAI,QAAQ,CAAC,oBAAoB,CAAC,CAE7D;gBAEkB,IAAI,EAAE,oBAAoB;IAO7B,SAAS,IAAI,MAAM,EAAE;IAIrB,eAAe,IAAI,IAAI;IAIvB,eAAe,IAAI,IAAI;IAIvB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAwBrD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAcrD,wBAAwB,CACpC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,cAAc,CAAC,iBAAiB,CAAC;IAwDpB,wBAAwB,CACpC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GACnC,cAAc,CAAC,yBAAyB,CAAC;IAmF5B,kCAAkC,CAC9C,OAAO,EAAE,+BAA+B,GACzC,UAAU;CAGhB"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { BufferedReadableStream, PushReadableStream, } from "@yume-chan/stream-extra";
|
|
2
|
+
import Struct, { NumberFieldType, placeholder } from "@yume-chan/struct";
|
|
3
|
+
import { CodecOptions, ScrcpyFloatToUint16FieldDefinition, ScrcpyOptions1_16, } from "./1_16/index.js";
|
|
4
|
+
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
5
|
+
import { ScrcpyOptions1_24 } from "./1_24.js";
|
|
6
|
+
import { ScrcpyOptions1_25 } from "./1_25/index.js";
|
|
7
|
+
import { ScrcpyAudioCodec, ScrcpyVideoCodecId } from "./codec.js";
|
|
8
|
+
import { ScrcpyOptionsBase } from "./types.js";
|
|
9
|
+
export const ScrcpyInjectTouchControlMessage2_0 = new Struct()
|
|
10
|
+
.uint8("type")
|
|
11
|
+
.uint8("action", placeholder())
|
|
12
|
+
.uint64("pointerId")
|
|
13
|
+
.uint32("pointerX")
|
|
14
|
+
.uint32("pointerY")
|
|
15
|
+
.uint16("screenWidth")
|
|
16
|
+
.uint16("screenHeight")
|
|
17
|
+
.field("pressure", ScrcpyFloatToUint16FieldDefinition)
|
|
18
|
+
.uint32("actionButton")
|
|
19
|
+
.uint32("buttons");
|
|
20
|
+
class ScrcpyInstanceId {
|
|
21
|
+
static NONE = new ScrcpyInstanceId(-1);
|
|
22
|
+
static random() {
|
|
23
|
+
// A random 31-bit unsigned integer
|
|
24
|
+
return new ScrcpyInstanceId((Math.random() * 0x80000000) | 0);
|
|
25
|
+
}
|
|
26
|
+
value;
|
|
27
|
+
constructor(value) {
|
|
28
|
+
this.value = value;
|
|
29
|
+
}
|
|
30
|
+
toOptionValue() {
|
|
31
|
+
if (this.value < 0) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return this.value.toString(16);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export { ScrcpyInstanceId };
|
|
38
|
+
function omit(obj, keys) {
|
|
39
|
+
const result = {};
|
|
40
|
+
for (const key in obj) {
|
|
41
|
+
if (!keys.includes(key)) {
|
|
42
|
+
result[key] = obj[key];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
class ScrcpyOptions2_0 extends ScrcpyOptionsBase {
|
|
48
|
+
static DEFAULTS = {
|
|
49
|
+
...omit(ScrcpyOptions1_24.DEFAULTS, [
|
|
50
|
+
"bitRate",
|
|
51
|
+
"codecOptions",
|
|
52
|
+
"encoderName",
|
|
53
|
+
]),
|
|
54
|
+
scid: ScrcpyInstanceId.NONE,
|
|
55
|
+
videoCodec: "h264",
|
|
56
|
+
videoBitRate: 8000000,
|
|
57
|
+
videoCodecOptions: new CodecOptions(),
|
|
58
|
+
videoEncoder: "",
|
|
59
|
+
audio: true,
|
|
60
|
+
audioCodec: "opus",
|
|
61
|
+
audioBitRate: 128000,
|
|
62
|
+
audioCodecOptions: new CodecOptions(),
|
|
63
|
+
audioEncoder: "",
|
|
64
|
+
listEncoders: false,
|
|
65
|
+
listDisplays: false,
|
|
66
|
+
sendCodecMeta: true,
|
|
67
|
+
};
|
|
68
|
+
get defaults() {
|
|
69
|
+
return ScrcpyOptions2_0.DEFAULTS;
|
|
70
|
+
}
|
|
71
|
+
constructor(init) {
|
|
72
|
+
super(new ScrcpyOptions1_25(init), {
|
|
73
|
+
...ScrcpyOptions2_0.DEFAULTS,
|
|
74
|
+
...init,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
serialize() {
|
|
78
|
+
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
79
|
+
}
|
|
80
|
+
setListEncoders() {
|
|
81
|
+
this.value.listEncoders = true;
|
|
82
|
+
}
|
|
83
|
+
setListDisplays() {
|
|
84
|
+
this.value.listDisplays = true;
|
|
85
|
+
}
|
|
86
|
+
parseEncoder(line) {
|
|
87
|
+
let match = line.match(/\s+--video-codec=(.*)\s+--video-encoder='(.*)'/);
|
|
88
|
+
if (match) {
|
|
89
|
+
return {
|
|
90
|
+
type: "video",
|
|
91
|
+
codec: match[1],
|
|
92
|
+
name: match[2],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
match = line.match(/\s+--audio-codec=(.*)\s+--audio-encoder='(.*)'/);
|
|
96
|
+
if (match) {
|
|
97
|
+
return {
|
|
98
|
+
type: "audio",
|
|
99
|
+
codec: match[1],
|
|
100
|
+
name: match[2],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
parseDisplay(line) {
|
|
106
|
+
const match = line.match(/\s+--display=(\d+)\s+\((.*?)\)/);
|
|
107
|
+
if (match) {
|
|
108
|
+
const display = {
|
|
109
|
+
id: Number.parseInt(match[1], 10),
|
|
110
|
+
};
|
|
111
|
+
if (match[2] !== "size unknown") {
|
|
112
|
+
display.resolution = match[2];
|
|
113
|
+
}
|
|
114
|
+
return display;
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
parseVideoStreamMetadata(stream) {
|
|
119
|
+
const { sendDeviceMeta, sendCodecMeta } = this.value;
|
|
120
|
+
if (!sendDeviceMeta && !sendCodecMeta) {
|
|
121
|
+
let codec;
|
|
122
|
+
switch (this.value.videoCodec) {
|
|
123
|
+
case "h264":
|
|
124
|
+
codec = ScrcpyVideoCodecId.H264;
|
|
125
|
+
break;
|
|
126
|
+
case "h265":
|
|
127
|
+
codec = ScrcpyVideoCodecId.H265;
|
|
128
|
+
break;
|
|
129
|
+
case "av1":
|
|
130
|
+
codec = ScrcpyVideoCodecId.AV1;
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
return { stream, metadata: { codec } };
|
|
134
|
+
}
|
|
135
|
+
return (async () => {
|
|
136
|
+
const buffered = new BufferedReadableStream(stream);
|
|
137
|
+
// `sendDeviceMeta` now only contains device name,
|
|
138
|
+
// can't use `super.parseVideoStreamMetadata` here
|
|
139
|
+
let deviceName;
|
|
140
|
+
if (sendDeviceMeta) {
|
|
141
|
+
deviceName = await ScrcpyOptions1_16.parseCString(buffered, 64);
|
|
142
|
+
}
|
|
143
|
+
let codec;
|
|
144
|
+
let width;
|
|
145
|
+
let height;
|
|
146
|
+
if (sendCodecMeta) {
|
|
147
|
+
codec = await ScrcpyOptions1_16.parseUint32BE(buffered);
|
|
148
|
+
width = await ScrcpyOptions1_16.parseUint32BE(buffered);
|
|
149
|
+
height = await ScrcpyOptions1_16.parseUint32BE(buffered);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
switch (this.value.videoCodec) {
|
|
153
|
+
case "h264":
|
|
154
|
+
codec = ScrcpyVideoCodecId.H264;
|
|
155
|
+
break;
|
|
156
|
+
case "h265":
|
|
157
|
+
codec = ScrcpyVideoCodecId.H265;
|
|
158
|
+
break;
|
|
159
|
+
case "av1":
|
|
160
|
+
codec = ScrcpyVideoCodecId.AV1;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
stream: buffered.release(),
|
|
166
|
+
metadata: { deviceName, codec, width, height },
|
|
167
|
+
};
|
|
168
|
+
})();
|
|
169
|
+
}
|
|
170
|
+
parseAudioStreamMetadata(stream) {
|
|
171
|
+
return (async () => {
|
|
172
|
+
const buffered = new BufferedReadableStream(stream);
|
|
173
|
+
const buffer = await buffered.readExactly(NumberFieldType.Uint32.size);
|
|
174
|
+
const codecMetadataValue = NumberFieldType.Uint32.deserialize(buffer, false);
|
|
175
|
+
// Server will send `0x00_00_00_00` and `0x00_00_00_01` even if `sendCodecMeta` is false
|
|
176
|
+
switch (codecMetadataValue) {
|
|
177
|
+
case 0x00_00_00_00:
|
|
178
|
+
return {
|
|
179
|
+
type: "disabled",
|
|
180
|
+
};
|
|
181
|
+
case 0x00_00_00_01:
|
|
182
|
+
return {
|
|
183
|
+
type: "errored",
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (this.value.sendCodecMeta) {
|
|
187
|
+
let codec;
|
|
188
|
+
switch (codecMetadataValue) {
|
|
189
|
+
case ScrcpyAudioCodec.OPUS.metadataValue:
|
|
190
|
+
codec = ScrcpyAudioCodec.OPUS;
|
|
191
|
+
break;
|
|
192
|
+
case ScrcpyAudioCodec.AAC.metadataValue:
|
|
193
|
+
codec = ScrcpyAudioCodec.AAC;
|
|
194
|
+
break;
|
|
195
|
+
case ScrcpyAudioCodec.RAW.metadataValue:
|
|
196
|
+
codec = ScrcpyAudioCodec.RAW;
|
|
197
|
+
break;
|
|
198
|
+
default:
|
|
199
|
+
throw new Error(`Unknown audio codec metadata value: ${codecMetadataValue}`);
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
type: "success",
|
|
203
|
+
codec,
|
|
204
|
+
stream: buffered.release(),
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
// Infer codec from `audioCodec` option
|
|
208
|
+
let codec;
|
|
209
|
+
switch (this.value.audioCodec) {
|
|
210
|
+
case "opus":
|
|
211
|
+
codec = ScrcpyAudioCodec.OPUS;
|
|
212
|
+
break;
|
|
213
|
+
case "aac":
|
|
214
|
+
codec = ScrcpyAudioCodec.AAC;
|
|
215
|
+
break;
|
|
216
|
+
case "raw":
|
|
217
|
+
codec = ScrcpyAudioCodec.RAW;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
type: "success",
|
|
222
|
+
codec,
|
|
223
|
+
stream: new PushReadableStream(async (controller) => {
|
|
224
|
+
// Put the first 4 bytes back
|
|
225
|
+
await controller.enqueue(buffer);
|
|
226
|
+
const stream = buffered.release();
|
|
227
|
+
const reader = stream.getReader();
|
|
228
|
+
while (true) {
|
|
229
|
+
const { done, value } = await reader.read();
|
|
230
|
+
if (done) {
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
await controller.enqueue(value);
|
|
234
|
+
}
|
|
235
|
+
}),
|
|
236
|
+
};
|
|
237
|
+
})();
|
|
238
|
+
}
|
|
239
|
+
serializeInjectTouchControlMessage(message) {
|
|
240
|
+
return ScrcpyInjectTouchControlMessage2_0.serialize(message);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
export { ScrcpyOptions2_0 };
|
|
244
|
+
//# sourceMappingURL=2_0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"2_0.js","sourceRoot":"","sources":["../../src/options/2_0.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ReadableStream } from "@yume-chan/stream-extra";
|
|
2
|
+
import type { ScrcpyOptionValue } from "./types.js";
|
|
3
|
+
export declare enum ScrcpyVideoCodecId {
|
|
4
|
+
H264 = 1748121140,
|
|
5
|
+
H265 = 1748121141,
|
|
6
|
+
AV1 = 6387249
|
|
7
|
+
}
|
|
8
|
+
export interface ScrcpyVideoStreamMetadata {
|
|
9
|
+
deviceName?: string | undefined;
|
|
10
|
+
width?: number | undefined;
|
|
11
|
+
height?: number | undefined;
|
|
12
|
+
codec: ScrcpyVideoCodecId;
|
|
13
|
+
}
|
|
14
|
+
export interface ScrcpyVideoStream {
|
|
15
|
+
readonly stream: ReadableStream<Uint8Array>;
|
|
16
|
+
readonly metadata: ScrcpyVideoStreamMetadata;
|
|
17
|
+
}
|
|
18
|
+
export declare class ScrcpyAudioCodec implements ScrcpyOptionValue {
|
|
19
|
+
static readonly OPUS: ScrcpyAudioCodec;
|
|
20
|
+
static readonly AAC: ScrcpyAudioCodec;
|
|
21
|
+
static readonly RAW: ScrcpyAudioCodec;
|
|
22
|
+
readonly optionValue: string;
|
|
23
|
+
readonly metadataValue: number;
|
|
24
|
+
readonly mimeType: string;
|
|
25
|
+
readonly webCodecId: string;
|
|
26
|
+
constructor(optionValue: string, metadataValue: number, mimeType: string, webCodecId: string);
|
|
27
|
+
toOptionValue(): string;
|
|
28
|
+
}
|
|
29
|
+
export interface ScrcpyAudioStreamDisabledMetadata {
|
|
30
|
+
readonly type: "disabled";
|
|
31
|
+
}
|
|
32
|
+
export interface ScrcpyAudioStreamErroredMetadata {
|
|
33
|
+
readonly type: "errored";
|
|
34
|
+
}
|
|
35
|
+
export interface ScrcpyAudioStreamSuccessMetadata {
|
|
36
|
+
readonly type: "success";
|
|
37
|
+
readonly codec: ScrcpyAudioCodec;
|
|
38
|
+
readonly stream: ReadableStream<Uint8Array>;
|
|
39
|
+
}
|
|
40
|
+
export type ScrcpyAudioStreamMetadata = ScrcpyAudioStreamDisabledMetadata | ScrcpyAudioStreamErroredMetadata | ScrcpyAudioStreamSuccessMetadata;
|
|
41
|
+
export interface ScrcpyMediaStreamConfigurationPacket {
|
|
42
|
+
type: "configuration";
|
|
43
|
+
data: Uint8Array;
|
|
44
|
+
}
|
|
45
|
+
export interface ScrcpyMediaStreamDataPacket {
|
|
46
|
+
type: "data";
|
|
47
|
+
keyframe?: boolean;
|
|
48
|
+
pts?: bigint;
|
|
49
|
+
data: Uint8Array;
|
|
50
|
+
}
|
|
51
|
+
export type ScrcpyMediaStreamPacket = ScrcpyMediaStreamConfigurationPacket | ScrcpyMediaStreamDataPacket;
|
|
52
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/options/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,oBAAY,kBAAkB;IAC1B,IAAI,aAAgB;IACpB,IAAI,aAAgB;IACpB,GAAG,UAAgB;CACtB;AAED,MAAM,WAAW,yBAAyB;IACtC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,kBAAkB,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;CAChD;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IACtD,gBAAuB,IAAI,mBAKzB;IACF,gBAAuB,GAAG,mBAKxB;IACF,gBAAuB,GAAG,mBAKxB;IAEF,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,UAAU,EAAE,MAAM,CAAC;gBAG/B,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM;IAQf,aAAa,IAAI,MAAM;CAGjC;AAED,MAAM,WAAW,iCAAiC;IAC9C,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;CAC/C;AAED,MAAM,MAAM,yBAAyB,GAC/B,iCAAiC,GACjC,gCAAgC,GAChC,gCAAgC,CAAC;AAEvC,MAAM,WAAW,oCAAoC;IACjD,IAAI,EAAE,eAAe,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,WAAW,2BAA2B;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,uBAAuB,GAC7B,oCAAoC,GACpC,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export var ScrcpyVideoCodecId;
|
|
2
|
+
(function (ScrcpyVideoCodecId) {
|
|
3
|
+
ScrcpyVideoCodecId[ScrcpyVideoCodecId["H264"] = 1748121140] = "H264";
|
|
4
|
+
ScrcpyVideoCodecId[ScrcpyVideoCodecId["H265"] = 1748121141] = "H265";
|
|
5
|
+
ScrcpyVideoCodecId[ScrcpyVideoCodecId["AV1"] = 6387249] = "AV1";
|
|
6
|
+
})(ScrcpyVideoCodecId = ScrcpyVideoCodecId || (ScrcpyVideoCodecId = {}));
|
|
7
|
+
class ScrcpyAudioCodec {
|
|
8
|
+
static OPUS = new ScrcpyAudioCodec("opus", 0x6f_70_75_73, "audio/opus", "opus");
|
|
9
|
+
static AAC = new ScrcpyAudioCodec("aac", 0x00_61_61_63, "audio/aac", "mp4a.66");
|
|
10
|
+
static RAW = new ScrcpyAudioCodec("raw", 0x00_72_61_77, "audio/raw", "1");
|
|
11
|
+
optionValue;
|
|
12
|
+
metadataValue;
|
|
13
|
+
mimeType;
|
|
14
|
+
webCodecId;
|
|
15
|
+
constructor(optionValue, metadataValue, mimeType, webCodecId) {
|
|
16
|
+
this.optionValue = optionValue;
|
|
17
|
+
this.metadataValue = metadataValue;
|
|
18
|
+
this.mimeType = mimeType;
|
|
19
|
+
this.webCodecId = webCodecId;
|
|
20
|
+
}
|
|
21
|
+
toOptionValue() {
|
|
22
|
+
return this.optionValue;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export { ScrcpyAudioCodec };
|
|
26
|
+
//# sourceMappingURL=codec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/options/codec.ts"],"names":[],"mappings":"AAIA,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC1B,oEAAoB,CAAA;IACpB,oEAAoB,CAAA;IACpB,+DAAmB,CAAA;AACvB,CAAC,EAJW,kBAAkB,GAAlB,kBAAkB,KAAlB,kBAAkB,QAI7B;AAcD,MAAa,gBAAgB;IAClB,MAAM,CAAU,IAAI,GAAG,IAAI,gBAAgB,CAC9C,MAAM,EACN,aAAa,EACb,YAAY,EACZ,MAAM,CACT,CAAC;IACK,MAAM,CAAU,GAAG,GAAG,IAAI,gBAAgB,CAC7C,KAAK,EACL,aAAa,EACb,WAAW,EACX,SAAS,CACZ,CAAC;IACK,MAAM,CAAU,GAAG,GAAG,IAAI,gBAAgB,CAC7C,KAAK,EACL,aAAa,EACb,WAAW,EACX,GAAG,CACN,CAAC;IAEc,WAAW,CAAS;IACpB,aAAa,CAAS;IACtB,QAAQ,CAAS;IACjB,UAAU,CAAS;IAEnC,YACI,WAAmB,EACnB,aAAqB,EACrB,QAAgB,EAChB,UAAkB;QAElB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;;SAvCQ,gBAAgB"}
|
package/esm/options/index.d.ts
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./
|
|
1
|
+
export * from "./1_16/index.js";
|
|
2
|
+
export * from "./1_17.js";
|
|
3
|
+
export * from "./1_18.js";
|
|
4
|
+
export * from "./1_21.js";
|
|
5
|
+
export * from "./1_22/index.js";
|
|
6
|
+
export * from "./1_23.js";
|
|
7
|
+
export * from "./1_24.js";
|
|
8
|
+
export * from "./1_25/index.js";
|
|
9
|
+
export * from "./2_0.js";
|
|
10
|
+
export * from "./codec.js";
|
|
11
|
+
export * from "./latest.js";
|
|
12
|
+
export * from "./types.js";
|
|
9
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/esm/options/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
8
|
-
export * from "./
|
|
1
|
+
export * from "./1_16/index.js";
|
|
2
|
+
export * from "./1_17.js";
|
|
3
|
+
export * from "./1_18.js";
|
|
4
|
+
export * from "./1_21.js";
|
|
5
|
+
export * from "./1_22/index.js";
|
|
6
|
+
export * from "./1_23.js";
|
|
7
|
+
export * from "./1_24.js";
|
|
8
|
+
export * from "./1_25/index.js";
|
|
9
|
+
export * from "./2_0.js";
|
|
10
|
+
export * from "./codec.js";
|
|
11
|
+
export * from "./latest.js";
|
|
12
|
+
export * from "./types.js";
|
|
9
13
|
//# sourceMappingURL=index.js.map
|
package/esm/options/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/options/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
+
import type { ScrcpyOptionsInit2_0 } from "./2_0.js";
|
|
3
|
+
import { ScrcpyOptions2_0 } from "./2_0.js";
|
|
4
|
+
export declare const ScrcpyLogLevel: typeof ScrcpyLogLevel1_18;
|
|
5
|
+
export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
6
|
+
export declare const ScrcpyVideoOrientation: typeof ScrcpyVideoOrientation1_18;
|
|
7
|
+
export type ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
8
|
+
export type ScrcpyOptionsInitLatest = ScrcpyOptionsInit2_0;
|
|
9
|
+
export declare class ScrcpyOptionsLatest extends ScrcpyOptions2_0 {
|
|
10
|
+
}
|
|
11
|
+
export declare const ScrcpyLatestVersion = "2.0";
|
|
12
|
+
//# sourceMappingURL=latest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latest.d.ts","sourceRoot":"","sources":["../../src/options/latest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,eAAO,MAAM,cAAc,2BAAqB,CAAC;AACjD,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEhD,eAAO,MAAM,sBAAsB,mCAA6B,CAAC;AACjE,MAAM,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEhE,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAC3D,qBAAa,mBAAoB,SAAQ,gBAAgB;CAAG;AAE5D,eAAO,MAAM,mBAAmB,QAAQ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
+
import { ScrcpyOptions2_0 } from "./2_0.js";
|
|
3
|
+
export const ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
4
|
+
export const ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
5
|
+
export class ScrcpyOptionsLatest extends ScrcpyOptions2_0 {
|
|
6
|
+
}
|
|
7
|
+
export const ScrcpyLatestVersion = "2.0";
|
|
8
|
+
//# sourceMappingURL=latest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"latest.js","sourceRoot":"","sources":["../../src/options/latest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAGjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAIjE,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;CAAG;AAE5D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC"}
|