@yume-chan/scrcpy 0.0.21 → 0.0.23
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 +30 -0
- package/CHANGELOG.md +17 -1
- package/esm/codec/h264.js.map +1 -1
- package/esm/codec/h265.d.ts +72 -4
- package/esm/codec/h265.d.ts.map +1 -1
- package/esm/codec/h265.js +16 -17
- package/esm/codec/h265.js.map +1 -1
- package/esm/codec/nalu.js.map +1 -1
- package/esm/control/hover-helper.js.map +1 -1
- package/esm/control/inject-keycode.d.ts +13 -13
- package/esm/control/inject-keycode.d.ts.map +1 -1
- package/esm/control/inject-touch.d.ts.map +1 -1
- package/esm/control/inject-touch.js +0 -1
- package/esm/control/inject-touch.js.map +1 -1
- package/esm/control/serializer.d.ts +3 -0
- package/esm/control/serializer.d.ts.map +1 -1
- package/esm/control/serializer.js +16 -0
- package/esm/control/serializer.js.map +1 -1
- package/esm/control/type.js.map +1 -1
- package/esm/control/writer.d.ts +4 -0
- package/esm/control/writer.d.ts.map +1 -1
- package/esm/control/writer.js +17 -8
- package/esm/control/writer.js.map +1 -1
- package/esm/device-message/stream.js.map +1 -1
- package/esm/options/1_16/codec-options.d.ts +2 -2
- package/esm/options/1_16/codec-options.d.ts.map +1 -1
- package/esm/options/1_16/codec-options.js +15 -5
- package/esm/options/1_16/codec-options.js.map +1 -1
- package/esm/options/1_16/float-to-uint16.js.map +1 -1
- package/esm/options/1_16/options.d.ts.map +1 -1
- package/esm/options/1_16/options.js +1 -2
- package/esm/options/1_16/options.js.map +1 -1
- package/esm/options/1_16/scroll.js.map +1 -1
- package/esm/options/1_17.js +1 -1
- package/esm/options/1_17.js.map +1 -1
- package/esm/options/1_18.js +1 -1
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22/options.js.map +1 -1
- package/esm/options/1_22/scroll.js.map +1 -1
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/2_0.d.ts.map +1 -1
- package/esm/options/2_0.js +3 -3
- package/esm/options/2_0.js.map +1 -1
- package/esm/options/2_2.d.ts +67 -0
- package/esm/options/2_2.d.ts.map +1 -0
- package/esm/options/2_2.js +44 -0
- package/esm/options/2_2.js.map +1 -0
- package/esm/options/codec.js +1 -1
- package/esm/options/codec.js.map +1 -1
- package/esm/options/index.d.ts +1 -0
- package/esm/options/index.d.ts.map +1 -1
- package/esm/options/index.js +1 -0
- package/esm/options/index.js.map +1 -1
- package/esm/options/latest.d.ts +4 -4
- package/esm/options/latest.js +2 -2
- package/esm/options/types.d.ts.map +1 -1
- package/esm/options/types.js +5 -0
- package/esm/options/types.js.map +1 -1
- package/package.json +11 -20
- package/src/codec/h265.ts +26 -17
- package/src/control/inject-touch.ts +0 -1
- package/src/control/serializer.ts +25 -0
- package/src/control/writer.ts +20 -8
- package/src/options/1_16/codec-options.ts +20 -5
- package/src/options/1_16/options.ts +1 -2
- package/src/options/1_17.ts +1 -1
- package/src/options/1_18.ts +1 -1
- package/src/options/2_0.ts +5 -3
- package/src/options/2_2.ts +68 -0
- package/src/options/codec.ts +1 -1
- package/src/options/index.ts +1 -0
- package/src/options/latest.ts +4 -4
- package/src/options/types.ts +8 -0
- package/tsconfig.build.tsbuildinfo +1 -1
|
@@ -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,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,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,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/esm/options/index.js
CHANGED
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,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,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,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
|
package/esm/options/latest.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { ScrcpyOptionsInit2_2 } from "./2_2.js";
|
|
3
|
+
import { ScrcpyOptions2_2 } from "./2_2.js";
|
|
4
4
|
export declare const ScrcpyLogLevel: typeof ScrcpyLogLevel1_18;
|
|
5
5
|
export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
6
6
|
export declare const ScrcpyVideoOrientation: typeof ScrcpyVideoOrientation1_18;
|
|
7
7
|
export type ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
8
|
-
export type ScrcpyOptionsInitLatest =
|
|
9
|
-
export declare class ScrcpyOptionsLatest extends
|
|
8
|
+
export type ScrcpyOptionsInitLatest = ScrcpyOptionsInit2_2;
|
|
9
|
+
export declare class ScrcpyOptionsLatest extends ScrcpyOptions2_2 {
|
|
10
10
|
}
|
|
11
11
|
//# sourceMappingURL=latest.d.ts.map
|
package/esm/options/latest.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ScrcpyOptions2_2 } from "./2_2.js";
|
|
3
3
|
export const ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
4
4
|
export const ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
5
|
-
export class ScrcpyOptionsLatest extends
|
|
5
|
+
export class ScrcpyOptionsLatest extends ScrcpyOptions2_2 {
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=latest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,KAAK,EACR,kCAAkC,EAClC,wBAAwB,EACxB,+BAA+B,EAC/B,gCAAgC,EACnC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EACR,yBAAyB,EACzB,uBAAuB,EACvB,iBAAiB,EACpB,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,mBAAmB,sCAAsC,CAAC;AAEvE,MAAM,WAAW,iBAAiB;IAC9B,aAAa,IAAI,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,OAAO,GACf,KAAK,IAAI,iBAAiB,CAO5B;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
|
package/esm/options/types.js
CHANGED
|
@@ -13,6 +13,11 @@ export function toScrcpyOptionValue(value, empty) {
|
|
|
13
13
|
if (value === undefined) {
|
|
14
14
|
return empty;
|
|
15
15
|
}
|
|
16
|
+
if (typeof value !== "string" &&
|
|
17
|
+
typeof value !== "number" &&
|
|
18
|
+
typeof value !== "boolean") {
|
|
19
|
+
throw new Error(`Invalid option value: ${String(value)}`);
|
|
20
|
+
}
|
|
16
21
|
return String(value);
|
|
17
22
|
}
|
|
18
23
|
export class ScrcpyOptionsBase {
|
package/esm/options/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAMvE,MAAM,UAAU,mBAAmB,CAC/B,KAAc;IAEd,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,eAAe,IAAI,KAAK;QACxB,OAAO,KAAK,CAAC,aAAa,KAAK,UAAU,CAC5C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAI,KAAc,EAAE,KAAQ;IAC3D,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/options/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yume-chan/scrcpy",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"description": "TypeScript implementation of Scrcpy.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"adb",
|
|
@@ -26,34 +26,25 @@
|
|
|
26
26
|
"main": "esm/index.js",
|
|
27
27
|
"types": "esm/index.d.ts",
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@yume-chan/stream-extra": "^0.0.
|
|
30
|
-
"@yume-chan/struct": "^0.0.
|
|
31
|
-
"tslib": "^2.6.
|
|
29
|
+
"@yume-chan/stream-extra": "^0.0.23",
|
|
30
|
+
"@yume-chan/struct": "^0.0.23",
|
|
31
|
+
"tslib": "^2.6.2"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@jest/globals": "^
|
|
34
|
+
"@jest/globals": "^30.0.0-alpha.3",
|
|
35
35
|
"@yume-chan/eslint-config": "^1.0.0",
|
|
36
36
|
"@yume-chan/tsconfig": "^1.0.0",
|
|
37
37
|
"cross-env": "^7.0.3",
|
|
38
|
-
"eslint": "^8.
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"typescript": "^5.1.6"
|
|
44
|
-
},
|
|
45
|
-
"peerDependencies": {
|
|
46
|
-
"gh-release-fetch": "^3.0.2"
|
|
47
|
-
},
|
|
48
|
-
"peerDependenciesMeta": {
|
|
49
|
-
"gh-release-fetch": {
|
|
50
|
-
"optional": true
|
|
51
|
-
}
|
|
38
|
+
"eslint": "^8.57.0",
|
|
39
|
+
"jest": "^30.0.0-alpha.3",
|
|
40
|
+
"prettier": "^3.2.5",
|
|
41
|
+
"ts-jest": "^29.1.2",
|
|
42
|
+
"typescript": "^5.4.2"
|
|
52
43
|
},
|
|
53
44
|
"scripts": {
|
|
54
45
|
"build": "tsc -b tsconfig.build.json",
|
|
55
46
|
"build:watch": "tsc -b tsconfig.build.json",
|
|
56
|
-
"test": "cross-env NODE_OPTIONS
|
|
47
|
+
"test": "cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-warnings\" TS_JEST_DISABLE_VER_CHECKER=true jest --coverage",
|
|
57
48
|
"lint": "eslint src/**/*.ts --fix && prettier src/**/*.ts --write --tab-width 4"
|
|
58
49
|
}
|
|
59
50
|
}
|
package/src/codec/h265.ts
CHANGED
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
// cspell: ignore texmc
|
|
15
15
|
// cspell: ignore rbsp
|
|
16
16
|
// cspell: ignore cprms
|
|
17
|
+
// cspell: ignore nalu
|
|
18
|
+
// cspell: ignore sodb
|
|
19
|
+
// cspell: ignore luma
|
|
17
20
|
|
|
18
21
|
import { NaluSodbBitReader, annexBSplitNalu } from "./nalu.js";
|
|
19
22
|
|
|
@@ -275,9 +278,9 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
|
|
275
278
|
const log2_max_pic_order_cnt_lsb_minus4 =
|
|
276
279
|
reader.decodeExponentialGolombNumber();
|
|
277
280
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
+
const sps_max_dec_pic_buffering_minus1: number[] = [];
|
|
282
|
+
const sps_max_num_reorder_pics: number[] = [];
|
|
283
|
+
const sps_max_latency_increase_plus1: number[] = [];
|
|
281
284
|
const sps_sub_layer_ordering_info_present_flag = !!reader.next();
|
|
282
285
|
for (
|
|
283
286
|
let i = sps_sub_layer_ordering_info_present_flag
|
|
@@ -286,17 +289,11 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
|
|
286
289
|
i <= sps_max_sub_layers_minus1;
|
|
287
290
|
i += 1
|
|
288
291
|
) {
|
|
289
|
-
sps_max_dec_pic_buffering_minus1 =
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
reader.decodeExponentialGolombNumber();
|
|
295
|
-
sps_max_num_reorder_pics[i] =
|
|
296
|
-
reader.decodeExponentialGolombNumber();
|
|
297
|
-
sps_max_latency_increase_plus1[i] =
|
|
298
|
-
reader.decodeExponentialGolombNumber();
|
|
299
|
-
}
|
|
292
|
+
sps_max_dec_pic_buffering_minus1[i] =
|
|
293
|
+
reader.decodeExponentialGolombNumber();
|
|
294
|
+
sps_max_num_reorder_pics[i] = reader.decodeExponentialGolombNumber();
|
|
295
|
+
sps_max_latency_increase_plus1[i] =
|
|
296
|
+
reader.decodeExponentialGolombNumber();
|
|
300
297
|
}
|
|
301
298
|
|
|
302
299
|
const log2_min_luma_coding_block_size_minus3 =
|
|
@@ -370,7 +367,10 @@ export function h265ParseSequenceParameterSet(nalu: Uint8Array) {
|
|
|
370
367
|
const vui_parameters_present_flag = !!reader.next();
|
|
371
368
|
let vuiParameters: H265VuiParameters | undefined;
|
|
372
369
|
if (vui_parameters_present_flag) {
|
|
373
|
-
vuiParameters = h265ParseVuiParameters(
|
|
370
|
+
vuiParameters = h265ParseVuiParameters(
|
|
371
|
+
reader,
|
|
372
|
+
sps_max_sub_layers_minus1,
|
|
373
|
+
);
|
|
374
374
|
}
|
|
375
375
|
|
|
376
376
|
const sps_extension_present_flag = !!reader.next();
|
|
@@ -897,7 +897,10 @@ export function h265ParseShortTermReferencePictureSet(
|
|
|
897
897
|
/**
|
|
898
898
|
* E.2.1 VUI parameters syntax
|
|
899
899
|
*/
|
|
900
|
-
export function h265ParseVuiParameters(
|
|
900
|
+
export function h265ParseVuiParameters(
|
|
901
|
+
reader: NaluSodbBitReader,
|
|
902
|
+
sps_max_sub_layers_minus1: number,
|
|
903
|
+
) {
|
|
901
904
|
const aspect_ratio_info_present_flag = !!reader.next();
|
|
902
905
|
let aspect_ratio_idc: number | undefined;
|
|
903
906
|
let sar_width: number | undefined;
|
|
@@ -966,6 +969,7 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
|
|
966
969
|
let vui_poc_proportional_to_timing_flag: boolean | undefined;
|
|
967
970
|
let vui_num_ticks_poc_diff_one_minus1: number | undefined;
|
|
968
971
|
let vui_hrd_parameters_present_flag: boolean | undefined;
|
|
972
|
+
let vui_hrd_parameters: H265HrdParameters | undefined;
|
|
969
973
|
if (vui_timing_info_present_flag) {
|
|
970
974
|
vui_num_units_in_tick = reader.read(32);
|
|
971
975
|
vui_time_scale = reader.read(32);
|
|
@@ -976,7 +980,11 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
|
|
976
980
|
}
|
|
977
981
|
vui_hrd_parameters_present_flag = !!reader.next();
|
|
978
982
|
if (vui_hrd_parameters_present_flag) {
|
|
979
|
-
|
|
983
|
+
vui_hrd_parameters = h265ParseHrdParameters(
|
|
984
|
+
reader,
|
|
985
|
+
true,
|
|
986
|
+
sps_max_sub_layers_minus1,
|
|
987
|
+
);
|
|
980
988
|
}
|
|
981
989
|
}
|
|
982
990
|
|
|
@@ -1037,6 +1045,7 @@ export function h265ParseVuiParameters(reader: NaluSodbBitReader) {
|
|
|
1037
1045
|
vui_poc_proportional_to_timing_flag,
|
|
1038
1046
|
vui_num_ticks_poc_diff_one_minus1,
|
|
1039
1047
|
vui_hrd_parameters_present_flag,
|
|
1048
|
+
vui_hrd_parameters,
|
|
1040
1049
|
|
|
1041
1050
|
bitstream_restriction_flag,
|
|
1042
1051
|
tiles_fixed_structure_flag,
|
|
@@ -3,6 +3,7 @@ import type {
|
|
|
3
3
|
ScrcpyScrollController,
|
|
4
4
|
} from "../options/index.js";
|
|
5
5
|
|
|
6
|
+
import { BasicControlMessage } from "./basic.js";
|
|
6
7
|
import type { AndroidKeyEventAction } from "./inject-keycode.js";
|
|
7
8
|
import { ScrcpyInjectKeyCodeControlMessage } from "./inject-keycode.js";
|
|
8
9
|
import type { ScrcpyInjectScrollControlMessage } from "./inject-scroll.js";
|
|
@@ -83,6 +84,30 @@ export class ScrcpyControlMessageSerializer {
|
|
|
83
84
|
});
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
expandNotificationPanel() {
|
|
88
|
+
return BasicControlMessage.serialize({
|
|
89
|
+
type: this.#typeValues.get(
|
|
90
|
+
ScrcpyControlMessageType.ExpandNotificationPanel,
|
|
91
|
+
),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
expandSettingPanel() {
|
|
96
|
+
return BasicControlMessage.serialize({
|
|
97
|
+
type: this.#typeValues.get(
|
|
98
|
+
ScrcpyControlMessageType.ExpandSettingPanel,
|
|
99
|
+
),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
collapseNotificationPanel() {
|
|
104
|
+
return BasicControlMessage.serialize({
|
|
105
|
+
type: this.#typeValues.get(
|
|
106
|
+
ScrcpyControlMessageType.CollapseNotificationPanel,
|
|
107
|
+
),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
86
111
|
rotateDevice() {
|
|
87
112
|
return ScrcpyRotateDeviceControlMessage.serialize({
|
|
88
113
|
type: this.#typeValues.get(ScrcpyControlMessageType.RotateDevice),
|
package/src/control/writer.ts
CHANGED
|
@@ -27,25 +27,25 @@ export class ScrcpyControlMessageWriter {
|
|
|
27
27
|
this.#serializer = new ScrcpyControlMessageSerializer(options);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
async
|
|
30
|
+
async write(message: Uint8Array) {
|
|
31
31
|
await ConsumableWritableStream.write(this.#writer, message);
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
async injectKeyCode(
|
|
35
35
|
message: Omit<ScrcpyInjectKeyCodeControlMessage, "type">,
|
|
36
36
|
) {
|
|
37
|
-
await this
|
|
37
|
+
await this.write(this.#serializer.injectKeyCode(message));
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
async injectText(text: string) {
|
|
41
|
-
await this
|
|
41
|
+
await this.write(this.#serializer.injectText(text));
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* `pressure` is a float value between 0 and 1.
|
|
46
46
|
*/
|
|
47
47
|
async injectTouch(message: Omit<ScrcpyInjectTouchControlMessage, "type">) {
|
|
48
|
-
await this
|
|
48
|
+
await this.write(this.#serializer.injectTouch(message));
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/**
|
|
@@ -56,23 +56,35 @@ export class ScrcpyControlMessageWriter {
|
|
|
56
56
|
) {
|
|
57
57
|
const data = this.#serializer.injectScroll(message);
|
|
58
58
|
if (data) {
|
|
59
|
-
await this
|
|
59
|
+
await this.write(data);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
async backOrScreenOn(action: AndroidKeyEventAction) {
|
|
64
64
|
const data = this.#serializer.backOrScreenOn(action);
|
|
65
65
|
if (data) {
|
|
66
|
-
await this
|
|
66
|
+
await this.write(data);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
async setScreenPowerMode(mode: AndroidScreenPowerMode) {
|
|
71
|
-
await this
|
|
71
|
+
await this.write(this.#serializer.setScreenPowerMode(mode));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async expandNotificationPanel() {
|
|
75
|
+
await this.write(this.#serializer.expandNotificationPanel());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async expandSettingPanel() {
|
|
79
|
+
await this.write(this.#serializer.expandSettingPanel());
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
async collapseNotificationPanel() {
|
|
83
|
+
await this.write(this.#serializer.collapseNotificationPanel());
|
|
72
84
|
}
|
|
73
85
|
|
|
74
86
|
async rotateDevice() {
|
|
75
|
-
await this
|
|
87
|
+
await this.write(this.#serializer.rotateDevice());
|
|
76
88
|
}
|
|
77
89
|
|
|
78
90
|
releaseLock() {
|
|
@@ -27,14 +27,22 @@ const CODEC_OPTION_TYPES: Partial<
|
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
export class CodecOptions implements ScrcpyOptionValue {
|
|
30
|
-
|
|
30
|
+
options: Partial<CodecOptionsInit>;
|
|
31
31
|
|
|
32
|
-
constructor(
|
|
33
|
-
|
|
32
|
+
constructor(options: Partial<CodecOptionsInit> = {}) {
|
|
33
|
+
for (const [key, value] of Object.entries(options)) {
|
|
34
|
+
if (typeof value !== "number") {
|
|
35
|
+
throw new Error(
|
|
36
|
+
`Invalid option value for ${key}: ${String(value)}`,
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
this.options = options;
|
|
34
42
|
}
|
|
35
43
|
|
|
36
44
|
toOptionValue(): string | undefined {
|
|
37
|
-
const entries = Object.entries(this.
|
|
45
|
+
const entries = Object.entries(this.options).filter(
|
|
38
46
|
([, value]) => value !== undefined,
|
|
39
47
|
);
|
|
40
48
|
|
|
@@ -44,8 +52,15 @@ export class CodecOptions implements ScrcpyOptionValue {
|
|
|
44
52
|
|
|
45
53
|
return entries
|
|
46
54
|
.map(([key, value]) => {
|
|
55
|
+
let result = toDashCase(key);
|
|
56
|
+
|
|
47
57
|
const type = CODEC_OPTION_TYPES[key as keyof CodecOptionsInit];
|
|
48
|
-
|
|
58
|
+
if (type) {
|
|
59
|
+
result += `:${type}`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
result += `=${value}`;
|
|
63
|
+
return result;
|
|
49
64
|
})
|
|
50
65
|
.join(",");
|
|
51
66
|
}
|
|
@@ -128,8 +128,7 @@ export class ScrcpyOptions1_16 implements ScrcpyOptions<ScrcpyOptionsInit1_16> {
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
131
|
-
const
|
|
132
|
-
const match = line.match(displayIdRegex);
|
|
131
|
+
const match = line.match(/^\s+scrcpy --display (\d+)$/);
|
|
133
132
|
if (match) {
|
|
134
133
|
return {
|
|
135
134
|
id: Number.parseInt(match[1]!, 10),
|
package/src/options/1_17.ts
CHANGED
|
@@ -60,7 +60,7 @@ export class ScrcpyOptions1_17 extends ScrcpyOptionsBase<
|
|
|
60
60
|
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
61
61
|
return ScrcpyOptions1_17.parseEncoder(
|
|
62
62
|
line,
|
|
63
|
-
|
|
63
|
+
/^\s+scrcpy --encoder-name '([^']+)'$/,
|
|
64
64
|
);
|
|
65
65
|
}
|
|
66
66
|
}
|
package/src/options/1_18.ts
CHANGED
|
@@ -125,7 +125,7 @@ export class ScrcpyOptions1_18 extends ScrcpyOptionsBase<
|
|
|
125
125
|
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
126
126
|
return ScrcpyOptions1_17.parseEncoder(
|
|
127
127
|
line,
|
|
128
|
-
|
|
128
|
+
/^\s+scrcpy --encoder '([^']+)'$/,
|
|
129
129
|
);
|
|
130
130
|
}
|
|
131
131
|
|
package/src/options/2_0.ts
CHANGED
|
@@ -155,7 +155,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
155
155
|
|
|
156
156
|
override parseEncoder(line: string): ScrcpyEncoder | undefined {
|
|
157
157
|
let match = line.match(
|
|
158
|
-
|
|
158
|
+
/^\s+--video-codec=(\S+)\s+--video-encoder='([^']+)'$/,
|
|
159
159
|
);
|
|
160
160
|
if (match) {
|
|
161
161
|
return {
|
|
@@ -165,7 +165,9 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
165
165
|
};
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
match = line.match(
|
|
168
|
+
match = line.match(
|
|
169
|
+
/^\s+--audio-codec=(\S+)\s+--audio-encoder='([^']+)'$/,
|
|
170
|
+
);
|
|
169
171
|
if (match) {
|
|
170
172
|
return {
|
|
171
173
|
type: "audio",
|
|
@@ -178,7 +180,7 @@ export class ScrcpyOptions2_0 extends ScrcpyOptionsBase<
|
|
|
178
180
|
}
|
|
179
181
|
|
|
180
182
|
override parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
181
|
-
const match = line.match(
|
|
183
|
+
const match = line.match(/^\s+--display=(\d+)\s+\(([^)]+)\)$/);
|
|
182
184
|
if (match) {
|
|
183
185
|
const display: ScrcpyDisplay = {
|
|
184
186
|
id: Number.parseInt(match[1]!, 10),
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { ScrcpyOptions1_21 } from "./1_21.js";
|
|
2
|
+
import type { ScrcpyOptionsInit2_1 } from "./2_1.js";
|
|
3
|
+
import { ScrcpyOptions2_1 } from "./2_1.js";
|
|
4
|
+
import type { ScrcpyDisplay } from "./types.js";
|
|
5
|
+
import { ScrcpyOptionsBase } from "./types.js";
|
|
6
|
+
|
|
7
|
+
export interface ScrcpyOptionsInit2_2
|
|
8
|
+
extends Omit<ScrcpyOptionsInit2_1, "display"> {
|
|
9
|
+
videoSource?: "display" | "camera";
|
|
10
|
+
displayId?: number;
|
|
11
|
+
cameraId?: string | undefined;
|
|
12
|
+
cameraSize?: string | undefined;
|
|
13
|
+
cameraFacing?: "front" | "back" | "external" | undefined;
|
|
14
|
+
cameraAr?: string | undefined;
|
|
15
|
+
cameraFps?: number | undefined;
|
|
16
|
+
cameraHighSpeed?: boolean;
|
|
17
|
+
|
|
18
|
+
listCameras?: boolean;
|
|
19
|
+
listCameraSizes?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class ScrcpyOptions2_2 extends ScrcpyOptionsBase<
|
|
23
|
+
ScrcpyOptionsInit2_2,
|
|
24
|
+
ScrcpyOptions2_1
|
|
25
|
+
> {
|
|
26
|
+
static readonly DEFAULTS = {
|
|
27
|
+
...ScrcpyOptions2_1.DEFAULTS,
|
|
28
|
+
videoSource: "display",
|
|
29
|
+
displayId: 0,
|
|
30
|
+
cameraId: undefined,
|
|
31
|
+
cameraSize: undefined,
|
|
32
|
+
cameraFacing: undefined,
|
|
33
|
+
cameraAr: undefined,
|
|
34
|
+
cameraFps: undefined,
|
|
35
|
+
cameraHighSpeed: false,
|
|
36
|
+
listCameras: false,
|
|
37
|
+
listCameraSizes: false,
|
|
38
|
+
} as const satisfies Required<ScrcpyOptionsInit2_2>;
|
|
39
|
+
|
|
40
|
+
override get defaults(): Required<ScrcpyOptionsInit2_2> {
|
|
41
|
+
return ScrcpyOptions2_2.DEFAULTS;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
constructor(init: ScrcpyOptionsInit2_2) {
|
|
45
|
+
super(new ScrcpyOptions2_1(init), {
|
|
46
|
+
...ScrcpyOptions2_2.DEFAULTS,
|
|
47
|
+
...init,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override parseDisplay(line: string): ScrcpyDisplay | undefined {
|
|
52
|
+
const match = line.match(/^\s+--display-id=(\d+)\s+\(([^)]+)\)$/);
|
|
53
|
+
if (match) {
|
|
54
|
+
const display: ScrcpyDisplay = {
|
|
55
|
+
id: Number.parseInt(match[1]!, 10),
|
|
56
|
+
};
|
|
57
|
+
if (match[2] !== "size unknown") {
|
|
58
|
+
display.resolution = match[2]!;
|
|
59
|
+
}
|
|
60
|
+
return display;
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override serialize(): string[] {
|
|
66
|
+
return ScrcpyOptions1_21.serialize(this.value, this.defaults);
|
|
67
|
+
}
|
|
68
|
+
}
|
package/src/options/codec.ts
CHANGED
package/src/options/index.ts
CHANGED
package/src/options/latest.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ScrcpyLogLevel1_18, ScrcpyVideoOrientation1_18 } from "./1_18.js";
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
2
|
+
import type { ScrcpyOptionsInit2_2 } from "./2_2.js";
|
|
3
|
+
import { ScrcpyOptions2_2 } from "./2_2.js";
|
|
4
4
|
|
|
5
5
|
export const ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
6
6
|
export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
@@ -8,5 +8,5 @@ export type ScrcpyLogLevel = ScrcpyLogLevel1_18;
|
|
|
8
8
|
export const ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
9
9
|
export type ScrcpyVideoOrientation = ScrcpyVideoOrientation1_18;
|
|
10
10
|
|
|
11
|
-
export type ScrcpyOptionsInitLatest =
|
|
12
|
-
export class ScrcpyOptionsLatest extends
|
|
11
|
+
export type ScrcpyOptionsInitLatest = ScrcpyOptionsInit2_2;
|
|
12
|
+
export class ScrcpyOptionsLatest extends ScrcpyOptions2_2 {}
|
package/src/options/types.ts
CHANGED
|
@@ -42,6 +42,14 @@ export function toScrcpyOptionValue<T>(value: unknown, empty: T): string | T {
|
|
|
42
42
|
return empty;
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
if (
|
|
46
|
+
typeof value !== "string" &&
|
|
47
|
+
typeof value !== "number" &&
|
|
48
|
+
typeof value !== "boolean"
|
|
49
|
+
) {
|
|
50
|
+
throw new Error(`Invalid option value: ${String(value)}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
45
53
|
return String(value);
|
|
46
54
|
}
|
|
47
55
|
|