@yume-chan/scrcpy 0.0.13 → 0.0.16
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 +45 -0
- package/CHANGELOG.md +25 -1
- package/LICENSE +21 -21
- package/README.md +90 -89
- package/bin/scrcpy-server +0 -0
- package/bin/version.d.ts +1 -1
- package/bin/version.js +1 -1
- package/esm/client.d.ts +14 -2
- package/esm/client.d.ts.map +1 -1
- package/esm/client.js +275 -143
- package/esm/client.js.map +1 -1
- package/esm/connection.d.ts.map +1 -1
- package/esm/connection.js +74 -86
- package/esm/connection.js.map +1 -1
- package/esm/decoder/tinyh264/index.js +48 -48
- package/esm/decoder/tinyh264/index.js.map +1 -1
- package/esm/decoder/tinyh264/wrapper.js +3 -2
- package/esm/decoder/tinyh264/wrapper.js.map +1 -1
- package/esm/decoder/web-codecs/index.js +26 -21
- package/esm/decoder/web-codecs/index.js.map +1 -1
- package/esm/message.d.ts +13 -8
- package/esm/message.d.ts.map +1 -1
- package/esm/message.js +14 -8
- package/esm/message.js.map +1 -1
- package/esm/options/1_16/index.d.ts +8 -4
- package/esm/options/1_16/index.d.ts.map +1 -1
- package/esm/options/1_16/index.js +44 -18
- package/esm/options/1_16/index.js.map +1 -1
- package/esm/options/1_16/sps.js +3 -2
- package/esm/options/1_16/sps.js.map +1 -1
- package/esm/options/1_18.d.ts +3 -2
- package/esm/options/1_18.d.ts.map +1 -1
- package/esm/options/1_18.js +24 -1
- package/esm/options/1_18.js.map +1 -1
- package/esm/options/1_21.js +4 -1
- package/esm/options/1_21.js.map +1 -1
- package/esm/options/1_22.d.ts +3 -3
- package/esm/options/1_22.d.ts.map +1 -1
- package/esm/options/1_22.js +9 -6
- package/esm/options/1_22.js.map +1 -1
- package/esm/options/1_23.js +4 -1
- package/esm/options/1_23.js.map +1 -1
- package/esm/options/1_24.d.ts +9 -0
- package/esm/options/1_24.d.ts.map +1 -0
- package/esm/options/1_24.js +13 -0
- package/esm/options/1_24.js.map +1 -0
- package/esm/options/common.d.ts +2 -0
- package/esm/options/common.d.ts.map +1 -1
- package/esm/options/common.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/push-server.js +5 -10
- package/esm/push-server.js.map +1 -1
- package/package.json +8 -8
- package/scrcpy.LICENSE +203 -203
- package/scripts/fetch-server.cjs +28 -28
- package/src/client.ts +435 -275
- package/src/codec.ts +35 -35
- package/src/connection.ts +148 -145
- package/src/decoder/index.ts +3 -3
- package/src/decoder/tinyh264/index.ts +112 -112
- package/src/decoder/tinyh264/types.d.ts +137 -137
- package/src/decoder/tinyh264/worker.ts +2 -2
- package/src/decoder/tinyh264/wrapper.ts +89 -89
- package/src/decoder/types.ts +35 -35
- package/src/decoder/web-codecs/index.ts +99 -99
- package/src/index.ts +8 -8
- package/src/message.ts +113 -105
- package/src/options/1_16/index.ts +345 -315
- package/src/options/1_16/sps.ts +300 -300
- package/src/options/1_18.ts +61 -41
- package/src/options/1_21.ts +34 -34
- package/src/options/1_22.ts +78 -80
- package/src/options/1_24.ts +18 -0
- package/src/options/common.ts +66 -63
- package/src/options/index.ts +7 -6
- package/src/push-server.ts +24 -24
- package/src/utils.ts +5 -5
package/esm/connection.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { delay } from "./utils.js";
|
|
3
2
|
export class ScrcpyClientConnection {
|
|
3
|
+
device;
|
|
4
|
+
options;
|
|
4
5
|
constructor(device, options) {
|
|
5
6
|
this.device = device;
|
|
6
7
|
this.options = options;
|
|
@@ -9,104 +10,91 @@ export class ScrcpyClientConnection {
|
|
|
9
10
|
dispose() { }
|
|
10
11
|
}
|
|
11
12
|
export class ScrcpyClientForwardConnection extends ScrcpyClientConnection {
|
|
12
|
-
connect() {
|
|
13
|
-
return
|
|
14
|
-
return yield this.device.createSocket('localabstract:scrcpy');
|
|
15
|
-
});
|
|
13
|
+
async connect() {
|
|
14
|
+
return await this.device.createSocket('localabstract:scrcpy');
|
|
16
15
|
}
|
|
17
|
-
connectAndRetry() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return yield this.connect();
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
yield delay(100);
|
|
25
|
-
}
|
|
16
|
+
async connectAndRetry() {
|
|
17
|
+
for (let i = 0; i < 100; i++) {
|
|
18
|
+
try {
|
|
19
|
+
return await this.connect();
|
|
26
20
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
connectVideoStream() {
|
|
31
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
-
const stream = yield this.connectAndRetry();
|
|
33
|
-
if (this.options.sendDummyByte) {
|
|
34
|
-
const reader = stream.readable.getReader();
|
|
35
|
-
const { done, value } = yield reader.read();
|
|
36
|
-
// server will write a `0` to signal connection success
|
|
37
|
-
if (done || value.byteLength !== 1 || value[0] !== 0) {
|
|
38
|
-
throw new Error('Unexpected response from server');
|
|
39
|
-
}
|
|
40
|
-
reader.releaseLock();
|
|
21
|
+
catch (e) {
|
|
22
|
+
await delay(100);
|
|
41
23
|
}
|
|
42
|
-
|
|
43
|
-
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`Can't connect to server after 100 retries`);
|
|
44
26
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
27
|
+
async connectVideoStream() {
|
|
28
|
+
const stream = await this.connectAndRetry();
|
|
29
|
+
if (this.options.sendDummyByte) {
|
|
30
|
+
const reader = stream.readable.getReader();
|
|
31
|
+
const { done, value } = await reader.read();
|
|
32
|
+
// server will write a `0` to signal connection success
|
|
33
|
+
if (done || value.byteLength !== 1 || value[0] !== 0) {
|
|
34
|
+
throw new Error('Unexpected response from server');
|
|
51
35
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
36
|
+
reader.releaseLock();
|
|
37
|
+
}
|
|
38
|
+
return stream;
|
|
39
|
+
}
|
|
40
|
+
async getStreams() {
|
|
41
|
+
const videoStream = await this.connectVideoStream();
|
|
42
|
+
let controlStream;
|
|
43
|
+
if (this.options.control) {
|
|
44
|
+
controlStream = await this.connectAndRetry();
|
|
45
|
+
}
|
|
46
|
+
// Server only writes device meta after control socket is connected (if enabled)
|
|
47
|
+
if (this.options.sendDeviceMeta) {
|
|
48
|
+
const reader = videoStream.readable.getReader();
|
|
49
|
+
const { done, value } = await reader.read();
|
|
50
|
+
// 64 bytes device name + 2 bytes video width + 2 bytes video height
|
|
51
|
+
if (done || value.byteLength !== 64 + 2 + 2) {
|
|
52
|
+
throw new Error('Unexpected response from server');
|
|
61
53
|
}
|
|
62
|
-
|
|
63
|
-
}
|
|
54
|
+
reader.releaseLock();
|
|
55
|
+
}
|
|
56
|
+
return [videoStream, controlStream];
|
|
64
57
|
}
|
|
65
58
|
}
|
|
66
59
|
export class ScrcpyClientReverseConnection extends ScrcpyClientConnection {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
});
|
|
60
|
+
streams;
|
|
61
|
+
address;
|
|
62
|
+
async initialize() {
|
|
63
|
+
try {
|
|
64
|
+
// try to unbind first
|
|
65
|
+
await this.device.reverse.remove('localabstract:scrcpy');
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// ignore error
|
|
69
|
+
}
|
|
70
|
+
const queue = new TransformStream();
|
|
71
|
+
this.streams = queue.readable.getReader();
|
|
72
|
+
const writer = queue.writable.getWriter();
|
|
73
|
+
this.address = await this.device.reverse.add('localabstract:scrcpy', 'tcp:27183', socket => {
|
|
74
|
+
writer.write(socket);
|
|
75
|
+
return true;
|
|
84
76
|
});
|
|
85
77
|
}
|
|
86
|
-
accept() {
|
|
87
|
-
return
|
|
88
|
-
return (yield this.streams.read()).value;
|
|
89
|
-
});
|
|
78
|
+
async accept() {
|
|
79
|
+
return (await this.streams.read()).value;
|
|
90
80
|
}
|
|
91
|
-
getStreams() {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
throw new Error('Unexpected response from server');
|
|
105
|
-
}
|
|
106
|
-
reader.releaseLock();
|
|
81
|
+
async getStreams() {
|
|
82
|
+
const videoStream = await this.accept();
|
|
83
|
+
let controlStream;
|
|
84
|
+
if (this.options.control) {
|
|
85
|
+
controlStream = await this.accept();
|
|
86
|
+
}
|
|
87
|
+
// Server only writes device meta after control socket is connected (if enabled)
|
|
88
|
+
if (this.options.sendDeviceMeta) {
|
|
89
|
+
const reader = videoStream.readable.getReader();
|
|
90
|
+
const { done, value } = await reader.read();
|
|
91
|
+
// 64 bytes device name + 2 bytes video width + 2 bytes video height
|
|
92
|
+
if (done || value.byteLength !== 64 + 2 + 2) {
|
|
93
|
+
throw new Error('Unexpected response from server');
|
|
107
94
|
}
|
|
108
|
-
|
|
109
|
-
}
|
|
95
|
+
reader.releaseLock();
|
|
96
|
+
}
|
|
97
|
+
return [videoStream, controlStream];
|
|
110
98
|
}
|
|
111
99
|
dispose() {
|
|
112
100
|
// Don't await this!
|
package/esm/connection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { WritableStream } from "@yume-chan/adb";
|
|
3
2
|
import { PromiseResolver } from "@yume-chan/async";
|
|
4
3
|
import { AndroidCodecLevel, AndroidCodecProfile } from "../../codec.js";
|
|
@@ -13,14 +12,21 @@ function initialize() {
|
|
|
13
12
|
return cachedInitializePromise;
|
|
14
13
|
}
|
|
15
14
|
export class TinyH264Decoder {
|
|
15
|
+
maxProfile = AndroidCodecProfile.Baseline;
|
|
16
|
+
maxLevel = AndroidCodecLevel.Level4;
|
|
17
|
+
_renderer;
|
|
18
|
+
get renderer() { return this._renderer; }
|
|
19
|
+
_frameRendered = 0;
|
|
20
|
+
get frameRendered() { return this._frameRendered; }
|
|
21
|
+
_writable;
|
|
22
|
+
get writable() { return this._writable; }
|
|
23
|
+
_yuvCanvas;
|
|
24
|
+
_initializer;
|
|
16
25
|
constructor() {
|
|
17
|
-
this.maxProfile = AndroidCodecProfile.Baseline;
|
|
18
|
-
this.maxLevel = AndroidCodecLevel.Level4;
|
|
19
|
-
this._frameRendered = 0;
|
|
20
26
|
initialize();
|
|
21
27
|
this._renderer = document.createElement('canvas');
|
|
22
28
|
this._writable = new WritableStream({
|
|
23
|
-
write: (packet) =>
|
|
29
|
+
write: async (packet) => {
|
|
24
30
|
switch (packet.type) {
|
|
25
31
|
case 'configuration':
|
|
26
32
|
this.configure(packet.data);
|
|
@@ -29,57 +35,51 @@ export class TinyH264Decoder {
|
|
|
29
35
|
if (!this._initializer) {
|
|
30
36
|
throw new Error('Decoder not initialized');
|
|
31
37
|
}
|
|
32
|
-
const wrapper =
|
|
38
|
+
const wrapper = await this._initializer.promise;
|
|
33
39
|
wrapper.feed(packet.data.slice().buffer);
|
|
34
40
|
break;
|
|
35
41
|
}
|
|
36
|
-
}
|
|
42
|
+
}
|
|
37
43
|
});
|
|
38
44
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
this.
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
this._frameRendered += 1;
|
|
74
|
-
const array = new Uint8Array(data);
|
|
75
|
-
const frame = YuvBuffer.frame(format, YuvBuffer.lumaPlane(format, array, encodedWidth, 0), YuvBuffer.chromaPlane(format, array, chromaWidth, uPlaneOffset), YuvBuffer.chromaPlane(format, array, chromaWidth, vPlaneOffset));
|
|
76
|
-
this._yuvCanvas.drawFrame(frame);
|
|
77
|
-
});
|
|
45
|
+
async configure(config) {
|
|
46
|
+
this.dispose();
|
|
47
|
+
this._initializer = new PromiseResolver();
|
|
48
|
+
const { YuvBuffer, YuvCanvas } = await initialize();
|
|
49
|
+
if (!this._yuvCanvas) {
|
|
50
|
+
this._yuvCanvas = YuvCanvas.attach(this._renderer);
|
|
51
|
+
;
|
|
52
|
+
}
|
|
53
|
+
const { encodedWidth, encodedHeight } = config;
|
|
54
|
+
const chromaWidth = encodedWidth / 2;
|
|
55
|
+
const chromaHeight = encodedHeight / 2;
|
|
56
|
+
this._renderer.width = config.croppedWidth;
|
|
57
|
+
this._renderer.height = config.croppedHeight;
|
|
58
|
+
const format = YuvBuffer.format({
|
|
59
|
+
width: encodedWidth,
|
|
60
|
+
height: encodedHeight,
|
|
61
|
+
chromaWidth,
|
|
62
|
+
chromaHeight,
|
|
63
|
+
cropLeft: config.cropLeft,
|
|
64
|
+
cropTop: config.cropTop,
|
|
65
|
+
cropWidth: config.croppedWidth,
|
|
66
|
+
cropHeight: config.croppedHeight,
|
|
67
|
+
displayWidth: config.croppedWidth,
|
|
68
|
+
displayHeight: config.croppedHeight,
|
|
69
|
+
});
|
|
70
|
+
const wrapper = await createTinyH264Wrapper();
|
|
71
|
+
this._initializer.resolve(wrapper);
|
|
72
|
+
const uPlaneOffset = encodedWidth * encodedHeight;
|
|
73
|
+
const vPlaneOffset = uPlaneOffset + chromaWidth * chromaHeight;
|
|
74
|
+
wrapper.onPictureReady(({ data }) => {
|
|
75
|
+
this._frameRendered += 1;
|
|
76
|
+
const array = new Uint8Array(data);
|
|
77
|
+
const frame = YuvBuffer.frame(format, YuvBuffer.lumaPlane(format, array, encodedWidth, 0), YuvBuffer.chromaPlane(format, array, chromaWidth, uPlaneOffset), YuvBuffer.chromaPlane(format, array, chromaWidth, vPlaneOffset));
|
|
78
|
+
this._yuvCanvas.drawFrame(frame);
|
|
78
79
|
});
|
|
79
80
|
}
|
|
80
81
|
dispose() {
|
|
81
|
-
|
|
82
|
-
(_a = this._initializer) === null || _a === void 0 ? void 0 : _a.promise.then(wrapper => wrapper.dispose());
|
|
82
|
+
this._initializer?.promise.then(wrapper => wrapper.dispose());
|
|
83
83
|
this._initializer = undefined;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAwB,MAAM,cAAc,CAAC;AAE3E,IAAI,uBAAyI,CAAC;AAC9I,SAAS,UAAU;IACf,IAAI,CAAC,uBAAuB,EAAE;QAC1B,uBAAuB,GAAG,OAAO,CAAC,GAAG,CACjC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAC/C,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7C,SAAS,EAAE,SAAS;SACvB,CAAC,CAAC,CAAC;KACP;IAED,OAAO,uBAAuB,CAAC;AACnC,CAAC;AAED,MAAM,OAAO,eAAe;IACR,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC;IAE1C,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAE5C,SAAS,CAAoB;IACrC,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC,cAAc,GAAG,CAAC,CAAC;IAC3B,IAAW,aAAa,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAElD,SAAS,CAAoC;IACrD,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAExC,UAAU,CAA2C;IACrD,YAAY,CAA+C;IAEnE;QACI,UAAU,EAAE,CAAC;QAEb,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAoB;YACnD,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBACpB,QAAQ,MAAM,CAAC,IAAI,EAAE;oBACjB,KAAK,eAAe;wBAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC5B,MAAM;oBACV,KAAK,OAAO;wBACR,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;4BACpB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;yBAC9C;wBAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;wBAChD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC;wBACzC,MAAM;iBACb;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,MAAyB;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,EAAmB,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;QAEpD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAAA,CAAC;SACvD;QAED,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;QAC/C,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;QACrC,MAAM,YAAY,GAAG,aAAa,GAAG,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;QAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC5B,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,aAAa;YACrB,WAAW;YACX,YAAY;YACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,YAAY;YAC9B,UAAU,EAAE,MAAM,CAAC,aAAa;YAChC,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;SACtC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEnC,MAAM,YAAY,GAAG,YAAY,GAAG,aAAa,CAAC;QAClD,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,CAAC;QAC/D,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAChC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAChC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,EACnD,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAC/D,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,CAClE,CAAC;YACF,IAAI,CAAC,UAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAClC,CAAC;CACJ"}
|
|
@@ -6,13 +6,14 @@ const pendingResolvers = [];
|
|
|
6
6
|
let streamId = 0;
|
|
7
7
|
const pictureReadyEvent = new EventEmitter();
|
|
8
8
|
export class TinyH264Wrapper extends AutoDisposable {
|
|
9
|
+
streamId;
|
|
10
|
+
pictureReadyEvent = new EventEmitter();
|
|
11
|
+
get onPictureReady() { return this.pictureReadyEvent.event; }
|
|
9
12
|
constructor(streamId) {
|
|
10
13
|
super();
|
|
11
|
-
this.pictureReadyEvent = new EventEmitter();
|
|
12
14
|
this.streamId = streamId;
|
|
13
15
|
this.addDisposable(pictureReadyEvent.event(this.handlePictureReady, this));
|
|
14
16
|
}
|
|
15
|
-
get onPictureReady() { return this.pictureReadyEvent.event; }
|
|
16
17
|
handlePictureReady(e) {
|
|
17
18
|
if (e.renderStateId === this.streamId) {
|
|
18
19
|
this.pictureReadyEvent.fire(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhE,IAAI,MAA0B,CAAC;AAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,gBAAgB,GAAuC,EAAE,CAAC;AAChE,IAAI,QAAQ,GAAG,CAAC,CAAC;AAYjB,MAAM,iBAAiB,GAAG,IAAI,YAAY,EAAyB,CAAC;AAEpE,MAAM,OAAO,eAAgB,SAAQ,cAAc;
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhE,IAAI,MAA0B,CAAC;AAC/B,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,MAAM,gBAAgB,GAAuC,EAAE,CAAC;AAChE,IAAI,QAAQ,GAAG,CAAC,CAAC;AAYjB,MAAM,iBAAiB,GAAG,IAAI,YAAY,EAAyB,CAAC;AAEpE,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC/B,QAAQ,CAAS;IAEhB,iBAAiB,GAAG,IAAI,YAAY,EAAyB,CAAC;IAC/E,IAAW,cAAc,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAEpE,YAAmB,QAAgB;QAC/B,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/E,CAAC;IAEO,kBAAkB,CAAC,CAAwB;QAC/C,IAAI,CAAC,CAAC,aAAa,KAAK,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClC;IACL,CAAC;IAEM,IAAI,CAAC,IAAiB;QACzB,MAAO,CAAC,WAAW,CAAC;YAChB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,CAAC;YACT,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,aAAa,EAAE,IAAI,CAAC,QAAQ;SAC/B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACf,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAO,CAAC,WAAW,CAAC;YAChB,IAAI,EAAE,SAAS;YACf,aAAa,EAAE,IAAI,CAAC,QAAQ;SAC/B,CAAC,CAAC;IACP,CAAC;CACJ;AAED,MAAM,UAAU,qBAAqB;IACjC,IAAI,CAAC,MAAM,EAAE;QACT,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YACrC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACnB,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACf,KAAK,cAAc;oBACf,WAAW,GAAG,IAAI,CAAC;oBACnB,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE;wBACrC,QAAQ,CAAC,OAAO,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC;wBAChD,QAAQ,IAAI,CAAC,CAAC;qBACjB;oBACD,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;oBAC5B,MAAM;gBACV,KAAK,cAAc;oBACf,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC7B,MAAM;aACb;QACL,CAAC,CAAC,CAAC;KACN;IAED,IAAI,CAAC,WAAW,EAAE;QACd,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAmB,CAAC;QACxD,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,QAAQ,CAAC,OAAO,CAAC;KAC3B;IAED,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9C,QAAQ,IAAI,CAAC,CAAC;IACd,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { WritableStream } from '@yume-chan/adb';
|
|
3
2
|
function toHex(value) {
|
|
4
3
|
return value.toString(16).padStart(2, '0').toUpperCase();
|
|
5
4
|
}
|
|
6
5
|
export class WebCodecsDecoder {
|
|
6
|
+
// Usually, browsers can decode most configurations,
|
|
7
|
+
// So let device choose best profile and level for itself.
|
|
8
|
+
maxProfile = undefined;
|
|
9
|
+
maxLevel = undefined;
|
|
10
|
+
_writable;
|
|
11
|
+
get writable() { return this._writable; }
|
|
12
|
+
_renderer;
|
|
13
|
+
get renderer() { return this._renderer; }
|
|
14
|
+
_frameRendered = 0;
|
|
15
|
+
get frameRendered() { return this._frameRendered; }
|
|
16
|
+
context;
|
|
17
|
+
decoder;
|
|
18
|
+
// Limit FPS to system refresh rate
|
|
19
|
+
lastFrame;
|
|
20
|
+
animationFrame = 0;
|
|
7
21
|
constructor() {
|
|
8
|
-
// Usually, browsers can decode most configurations,
|
|
9
|
-
// So let device choose best profile and level for itself.
|
|
10
|
-
this.maxProfile = undefined;
|
|
11
|
-
this.maxLevel = undefined;
|
|
12
|
-
this._frameRendered = 0;
|
|
13
|
-
this.animationFrame = 0;
|
|
14
|
-
this.render = () => {
|
|
15
|
-
if (this.lastFrame) {
|
|
16
|
-
this._frameRendered += 1;
|
|
17
|
-
this.context.drawImage(this.lastFrame, 0, 0);
|
|
18
|
-
this.lastFrame.close();
|
|
19
|
-
this.lastFrame = undefined;
|
|
20
|
-
}
|
|
21
|
-
this.animationFrame = requestAnimationFrame(this.render);
|
|
22
|
-
};
|
|
23
22
|
this._renderer = document.createElement('canvas');
|
|
24
23
|
this.context = this._renderer.getContext('2d');
|
|
25
24
|
this.decoder = new VideoDecoder({
|
|
@@ -36,7 +35,7 @@ export class WebCodecsDecoder {
|
|
|
36
35
|
error() { },
|
|
37
36
|
});
|
|
38
37
|
this._writable = new WritableStream({
|
|
39
|
-
write: (packet) =>
|
|
38
|
+
write: async (packet) => {
|
|
40
39
|
switch (packet.type) {
|
|
41
40
|
case 'configuration':
|
|
42
41
|
this.configure(packet.data);
|
|
@@ -50,12 +49,18 @@ export class WebCodecsDecoder {
|
|
|
50
49
|
}));
|
|
51
50
|
break;
|
|
52
51
|
}
|
|
53
|
-
}
|
|
52
|
+
}
|
|
54
53
|
});
|
|
55
54
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
render = () => {
|
|
56
|
+
if (this.lastFrame) {
|
|
57
|
+
this._frameRendered += 1;
|
|
58
|
+
this.context.drawImage(this.lastFrame, 0, 0);
|
|
59
|
+
this.lastFrame.close();
|
|
60
|
+
this.lastFrame = undefined;
|
|
61
|
+
}
|
|
62
|
+
this.animationFrame = requestAnimationFrame(this.render);
|
|
63
|
+
};
|
|
59
64
|
configure(config) {
|
|
60
65
|
const { profileIndex, constraintSet, levelIndex } = config;
|
|
61
66
|
this._renderer.width = config.croppedWidth;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"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"}
|
package/esm/message.d.ts
CHANGED
|
@@ -6,11 +6,12 @@ export declare enum ScrcpyControlMessageType {
|
|
|
6
6
|
InjectScroll = 3,
|
|
7
7
|
BackOrScreenOn = 4,
|
|
8
8
|
ExpandNotificationPanel = 5,
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
ExpandSettingPanel = 6,
|
|
10
|
+
CollapseNotificationPanel = 7,
|
|
11
|
+
GetClipboard = 8,
|
|
12
|
+
SetClipboard = 9,
|
|
13
|
+
SetScreenPowerMode = 10,
|
|
14
|
+
RotateDevice = 11
|
|
14
15
|
}
|
|
15
16
|
export declare enum AndroidMotionEventAction {
|
|
16
17
|
Down = 0,
|
|
@@ -27,8 +28,11 @@ export declare enum AndroidMotionEventAction {
|
|
|
27
28
|
ButtonPress = 11,
|
|
28
29
|
ButtonRelease = 12
|
|
29
30
|
}
|
|
31
|
+
export declare const ScrcpySimpleControlMessage: Struct<{
|
|
32
|
+
type: number;
|
|
33
|
+
}, never, {}, undefined>;
|
|
30
34
|
export declare const ScrcpyInjectTouchControlMessage: Struct<{
|
|
31
|
-
type:
|
|
35
|
+
type: number;
|
|
32
36
|
action: AndroidMotionEventAction;
|
|
33
37
|
pointerId: bigint;
|
|
34
38
|
pointerX: number;
|
|
@@ -40,7 +44,7 @@ export declare const ScrcpyInjectTouchControlMessage: Struct<{
|
|
|
40
44
|
}, never, {}, undefined>;
|
|
41
45
|
export declare type ScrcpyInjectTouchControlMessage = typeof ScrcpyInjectTouchControlMessage['TInit'];
|
|
42
46
|
export declare const ScrcpyInjectTextControlMessage: Struct<{
|
|
43
|
-
type:
|
|
47
|
+
type: number;
|
|
44
48
|
length: number;
|
|
45
49
|
text: string;
|
|
46
50
|
}, "length", {}, undefined>;
|
|
@@ -79,11 +83,12 @@ export declare enum AndroidKeyCode {
|
|
|
79
83
|
Y = 53,
|
|
80
84
|
Z = 54,
|
|
81
85
|
Space = 62,
|
|
86
|
+
Enter = 66,
|
|
82
87
|
Delete = 67,
|
|
83
88
|
AppSwitch = 187
|
|
84
89
|
}
|
|
85
90
|
export declare const ScrcpyInjectKeyCodeControlMessage: Struct<{
|
|
86
|
-
type:
|
|
91
|
+
type: number;
|
|
87
92
|
action: AndroidKeyEventAction;
|
|
88
93
|
keyCode: number;
|
|
89
94
|
repeat: number;
|
package/esm/message.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AAIxD,oBAAY,wBAAwB;IAChC,aAAa,IAAA;IACb,UAAU,IAAA;IACV,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;IACd,uBAAuB,IAAA;IACvB,kBAAkB,IAAA;IAClB,yBAAyB,IAAA;IACzB,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,kBAAkB,KAAA;IAClB,YAAY,KAAA;CACf;AAGD,oBAAY,wBAAwB;IAChC,IAAI,IAAA;IACJ,EAAE,IAAA;IACF,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,OAAO,IAAA;IACP,WAAW,IAAA;IACX,SAAS,IAAA;IACT,SAAS,IAAA;IACT,MAAM,IAAA;IACN,UAAU,IAAA;IACV,SAAS,KAAA;IACT,WAAW,KAAA;IACX,aAAa,KAAA;CAChB;AAED,eAAO,MAAM,0BAA0B;;wBAEjB,CAAC;AAEvB,eAAO,MAAM,+BAA+B;;;;;;;;;;wBAUlB,CAAC;AAE3B,oBAAY,+BAA+B,GAAG,OAAO,+BAA+B,CAAC,OAAO,CAAC,CAAC;AAE9F,eAAO,MAAM,8BAA8B;;;;2BAIO,CAAC;AAEnD,oBAAY,8BAA8B,GACtC,OAAO,8BAA8B,CAAC,OAAO,CAAC,CAAC;AAEnD,oBAAY,qBAAqB;IAC7B,IAAI,IAAI;IACR,EAAE,IAAI;CACT;AAED,oBAAY,cAAc;IACtB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,CAAC,KAAK;IACN,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,CAAC,KAAA;IACD,KAAK,KAAK;IACV,KAAK,KAAK;IACV,MAAM,KAAK;IACX,SAAS,MAAM;CAClB;AAED,eAAO,MAAM,iCAAiC;;;;;;wBAMlB,CAAC;AAE7B,oBAAY,iCAAiC,GACzC,OAAO,iCAAiC,CAAC,OAAO,CAAC,CAAC"}
|
package/esm/message.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import Struct, { placeholder } from '@yume-chan/struct';
|
|
2
|
+
// https://github.com/Genymobile/scrcpy/blob/fa5b2a29e983a46b49531def9cf3d80c40c3de37/app/src/control_msg.h#L23
|
|
3
|
+
// For their message bodies, see https://github.com/Genymobile/scrcpy/blob/5c62f3419d252d10cd8c9cbb7c918b358b81f2d0/app/src/control_msg.c#L92
|
|
2
4
|
export var ScrcpyControlMessageType;
|
|
3
5
|
(function (ScrcpyControlMessageType) {
|
|
4
6
|
ScrcpyControlMessageType[ScrcpyControlMessageType["InjectKeycode"] = 0] = "InjectKeycode";
|
|
@@ -7,11 +9,12 @@ export var ScrcpyControlMessageType;
|
|
|
7
9
|
ScrcpyControlMessageType[ScrcpyControlMessageType["InjectScroll"] = 3] = "InjectScroll";
|
|
8
10
|
ScrcpyControlMessageType[ScrcpyControlMessageType["BackOrScreenOn"] = 4] = "BackOrScreenOn";
|
|
9
11
|
ScrcpyControlMessageType[ScrcpyControlMessageType["ExpandNotificationPanel"] = 5] = "ExpandNotificationPanel";
|
|
10
|
-
ScrcpyControlMessageType[ScrcpyControlMessageType["
|
|
11
|
-
ScrcpyControlMessageType[ScrcpyControlMessageType["
|
|
12
|
-
ScrcpyControlMessageType[ScrcpyControlMessageType["
|
|
13
|
-
ScrcpyControlMessageType[ScrcpyControlMessageType["
|
|
14
|
-
ScrcpyControlMessageType[ScrcpyControlMessageType["
|
|
12
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["ExpandSettingPanel"] = 6] = "ExpandSettingPanel";
|
|
13
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["CollapseNotificationPanel"] = 7] = "CollapseNotificationPanel";
|
|
14
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["GetClipboard"] = 8] = "GetClipboard";
|
|
15
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["SetClipboard"] = 9] = "SetClipboard";
|
|
16
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["SetScreenPowerMode"] = 10] = "SetScreenPowerMode";
|
|
17
|
+
ScrcpyControlMessageType[ScrcpyControlMessageType["RotateDevice"] = 11] = "RotateDevice";
|
|
15
18
|
})(ScrcpyControlMessageType || (ScrcpyControlMessageType = {}));
|
|
16
19
|
// https://developer.android.com/reference/android/view/MotionEvent#constants_1
|
|
17
20
|
export var AndroidMotionEventAction;
|
|
@@ -30,8 +33,10 @@ export var AndroidMotionEventAction;
|
|
|
30
33
|
AndroidMotionEventAction[AndroidMotionEventAction["ButtonPress"] = 11] = "ButtonPress";
|
|
31
34
|
AndroidMotionEventAction[AndroidMotionEventAction["ButtonRelease"] = 12] = "ButtonRelease";
|
|
32
35
|
})(AndroidMotionEventAction || (AndroidMotionEventAction = {}));
|
|
36
|
+
export const ScrcpySimpleControlMessage = new Struct()
|
|
37
|
+
.uint8('type');
|
|
33
38
|
export const ScrcpyInjectTouchControlMessage = new Struct()
|
|
34
|
-
.
|
|
39
|
+
.fields(ScrcpySimpleControlMessage)
|
|
35
40
|
.uint8('action', placeholder())
|
|
36
41
|
.uint64('pointerId')
|
|
37
42
|
.uint32('pointerX')
|
|
@@ -41,7 +46,7 @@ export const ScrcpyInjectTouchControlMessage = new Struct()
|
|
|
41
46
|
.uint16('pressure')
|
|
42
47
|
.uint32('buttons');
|
|
43
48
|
export const ScrcpyInjectTextControlMessage = new Struct()
|
|
44
|
-
.
|
|
49
|
+
.fields(ScrcpySimpleControlMessage)
|
|
45
50
|
.uint32('length')
|
|
46
51
|
.string('text', { lengthField: 'length' });
|
|
47
52
|
export var AndroidKeyEventAction;
|
|
@@ -80,11 +85,12 @@ export var AndroidKeyCode;
|
|
|
80
85
|
AndroidKeyCode[AndroidKeyCode["Y"] = 53] = "Y";
|
|
81
86
|
AndroidKeyCode[AndroidKeyCode["Z"] = 54] = "Z";
|
|
82
87
|
AndroidKeyCode[AndroidKeyCode["Space"] = 62] = "Space";
|
|
88
|
+
AndroidKeyCode[AndroidKeyCode["Enter"] = 66] = "Enter";
|
|
83
89
|
AndroidKeyCode[AndroidKeyCode["Delete"] = 67] = "Delete";
|
|
84
90
|
AndroidKeyCode[AndroidKeyCode["AppSwitch"] = 187] = "AppSwitch";
|
|
85
91
|
})(AndroidKeyCode || (AndroidKeyCode = {}));
|
|
86
92
|
export const ScrcpyInjectKeyCodeControlMessage = new Struct()
|
|
87
|
-
.
|
|
93
|
+
.fields(ScrcpySimpleControlMessage)
|
|
88
94
|
.uint8('action', placeholder())
|
|
89
95
|
.uint32('keyCode')
|
|
90
96
|
.uint32('repeat')
|
package/esm/message.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"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"}
|