@yume-chan/scrcpy 0.0.12 → 0.0.15

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.
Files changed (78) hide show
  1. package/CHANGELOG.json +39 -0
  2. package/CHANGELOG.md +23 -1
  3. package/README.md +1 -0
  4. package/bin/scrcpy-server +0 -0
  5. package/bin/version.d.ts +1 -1
  6. package/bin/version.js +1 -1
  7. package/esm/client.d.ts +14 -2
  8. package/esm/client.d.ts.map +1 -1
  9. package/esm/client.js +277 -145
  10. package/esm/client.js.map +1 -1
  11. package/esm/connection.d.ts +4 -4
  12. package/esm/connection.d.ts.map +1 -1
  13. package/esm/connection.js +74 -71
  14. package/esm/connection.js.map +1 -1
  15. package/esm/decoder/tinyh264/index.js +48 -48
  16. package/esm/decoder/tinyh264/index.js.map +1 -1
  17. package/esm/decoder/tinyh264/wrapper.js +3 -2
  18. package/esm/decoder/tinyh264/wrapper.js.map +1 -1
  19. package/esm/decoder/web-codecs/index.d.ts.map +1 -1
  20. package/esm/decoder/web-codecs/index.js +28 -22
  21. package/esm/decoder/web-codecs/index.js.map +1 -1
  22. package/esm/message.d.ts +12 -8
  23. package/esm/message.d.ts.map +1 -1
  24. package/esm/message.js +13 -8
  25. package/esm/message.js.map +1 -1
  26. package/esm/options/1_16/index.d.ts +8 -7
  27. package/esm/options/1_16/index.d.ts.map +1 -1
  28. package/esm/options/1_16/index.js +88 -82
  29. package/esm/options/1_16/index.js.map +1 -1
  30. package/esm/options/1_16/sps.js +3 -2
  31. package/esm/options/1_16/sps.js.map +1 -1
  32. package/esm/options/1_18.d.ts +3 -2
  33. package/esm/options/1_18.d.ts.map +1 -1
  34. package/esm/options/1_18.js +24 -1
  35. package/esm/options/1_18.js.map +1 -1
  36. package/esm/options/1_21.js +4 -1
  37. package/esm/options/1_21.js.map +1 -1
  38. package/esm/options/1_22.d.ts +3 -3
  39. package/esm/options/1_22.d.ts.map +1 -1
  40. package/esm/options/1_22.js +9 -6
  41. package/esm/options/1_22.js.map +1 -1
  42. package/esm/options/1_23.d.ts +12 -0
  43. package/esm/options/1_23.d.ts.map +1 -0
  44. package/esm/options/1_23.js +34 -0
  45. package/esm/options/1_23.js.map +1 -0
  46. package/esm/options/1_24.d.ts +9 -0
  47. package/esm/options/1_24.d.ts.map +1 -0
  48. package/esm/options/1_24.js +13 -0
  49. package/esm/options/1_24.js.map +1 -0
  50. package/esm/options/common.d.ts +6 -2
  51. package/esm/options/common.d.ts.map +1 -1
  52. package/esm/options/common.js.map +1 -1
  53. package/esm/options/index.d.ts +2 -0
  54. package/esm/options/index.d.ts.map +1 -1
  55. package/esm/options/index.js +2 -0
  56. package/esm/options/index.js.map +1 -1
  57. package/esm/push-server.d.ts +2 -2
  58. package/esm/push-server.d.ts.map +1 -1
  59. package/esm/push-server.js +6 -13
  60. package/esm/push-server.js.map +1 -1
  61. package/esm/utils.d.ts +0 -2
  62. package/esm/utils.d.ts.map +1 -1
  63. package/esm/utils.js +0 -8
  64. package/esm/utils.js.map +1 -1
  65. package/package.json +6 -6
  66. package/src/client.ts +185 -25
  67. package/src/connection.ts +40 -15
  68. package/src/decoder/web-codecs/index.ts +2 -1
  69. package/src/message.ts +10 -3
  70. package/src/options/1_16/index.ts +51 -43
  71. package/src/options/1_18.ts +21 -1
  72. package/src/options/1_22.ts +6 -8
  73. package/src/options/1_23.ts +44 -0
  74. package/src/options/1_24.ts +18 -0
  75. package/src/options/common.ts +7 -2
  76. package/src/options/index.ts +2 -0
  77. package/src/push-server.ts +6 -8
  78. package/src/utils.ts +0 -11
@@ -1,4 +1,4 @@
1
- import { Adb, AdbBufferedStream, AdbSocket } from "@yume-chan/adb";
1
+ import type { Adb, AdbSocket } from "@yume-chan/adb";
2
2
  import type { Disposable } from "@yume-chan/event";
3
3
  import type { ValueOrPromise } from "@yume-chan/struct";
4
4
  export interface ScrcpyClientConnectionOptions {
@@ -17,21 +17,21 @@ export declare abstract class ScrcpyClientConnection implements Disposable {
17
17
  protected options: ScrcpyClientConnectionOptions;
18
18
  constructor(device: Adb, options: ScrcpyClientConnectionOptions);
19
19
  initialize(): ValueOrPromise<void>;
20
- abstract getStreams(): ValueOrPromise<[videoSteam: AdbBufferedStream, controlStream: AdbSocket | undefined]>;
20
+ abstract getStreams(): ValueOrPromise<[videoSteam: AdbSocket, controlStream: AdbSocket | undefined]>;
21
21
  dispose(): void;
22
22
  }
23
23
  export declare class ScrcpyClientForwardConnection extends ScrcpyClientConnection {
24
24
  private connect;
25
25
  private connectAndRetry;
26
26
  private connectVideoStream;
27
- getStreams(): Promise<[videoSteam: AdbBufferedStream, controlStream: AdbSocket | undefined]>;
27
+ getStreams(): Promise<[videoSteam: AdbSocket, controlStream: AdbSocket | undefined]>;
28
28
  }
29
29
  export declare class ScrcpyClientReverseConnection extends ScrcpyClientConnection {
30
30
  private streams;
31
31
  private address;
32
32
  initialize(): Promise<void>;
33
33
  private accept;
34
- getStreams(): Promise<[videoSteam: AdbBufferedStream, controlStream: AdbSocket | undefined]>;
34
+ getStreams(): Promise<[videoSteam: AdbSocket, controlStream: AdbSocket | undefined]>;
35
35
  dispose(): void;
36
36
  }
37
37
  //# sourceMappingURL=connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,8BAAsB,sBAAuB,YAAW,UAAU;IAC9D,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB,SAAS,CAAC,OAAO,EAAE,6BAA6B,CAAC;gBAE9B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B;IAK/D,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC;aAEzB,UAAU,IAAI,cAAc,CAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAE5G,OAAO,IAAI,IAAI;CACzB;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;YACvD,OAAO;YAIP,eAAe;YAWf,kBAAkB;IAUnB,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAY5G;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;IACrE,OAAO,CAAC,OAAO,CAA0C;IAEzD,OAAO,CAAC,OAAO,CAAU;IAEH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBnC,MAAM;IAIP,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAazF,OAAO;CAM1B"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGxD,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAC;CAC3B;AAED,8BAAsB,sBAAuB,YAAW,UAAU;IAC9D,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;IAEtB,SAAS,CAAC,OAAO,EAAE,6BAA6B,CAAC;gBAE9B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B;IAK/D,UAAU,IAAI,cAAc,CAAC,IAAI,CAAC;aAEzB,UAAU,IAAI,cAAc,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAEpG,OAAO,IAAI,IAAI;CACzB;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;YACvD,OAAO;YAIP,eAAe;YAWf,kBAAkB;IAcnB,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAqBpG;AAED,qBAAa,6BAA8B,SAAQ,sBAAsB;IACrE,OAAO,CAAC,OAAO,CAA0C;IAEzD,OAAO,CAAC,OAAO,CAAU;IAEH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBnC,MAAM;IAIP,UAAU,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAsBjF,OAAO;CAM1B"}
package/esm/connection.js CHANGED
@@ -1,7 +1,7 @@
1
- import { __awaiter } from "tslib";
2
- import { AdbBufferedStream } from "@yume-chan/adb";
3
1
  import { delay } from "./utils.js";
4
2
  export class ScrcpyClientConnection {
3
+ device;
4
+ options;
5
5
  constructor(device, options) {
6
6
  this.device = device;
7
7
  this.options = options;
@@ -10,88 +10,91 @@ export class ScrcpyClientConnection {
10
10
  dispose() { }
11
11
  }
12
12
  export class ScrcpyClientForwardConnection extends ScrcpyClientConnection {
13
- connect() {
14
- return __awaiter(this, void 0, void 0, function* () {
15
- return yield this.device.createSocket('localabstract:scrcpy');
16
- });
13
+ async connect() {
14
+ return await this.device.createSocket('localabstract:scrcpy');
17
15
  }
18
- connectAndRetry() {
19
- return __awaiter(this, void 0, void 0, function* () {
20
- for (let i = 0; i < 100; i++) {
21
- try {
22
- return yield this.connect();
23
- }
24
- catch (e) {
25
- yield delay(100);
26
- }
16
+ async connectAndRetry() {
17
+ for (let i = 0; i < 100; i++) {
18
+ try {
19
+ return await this.connect();
27
20
  }
28
- throw new Error(`Can't connect to server after 100 retries`);
29
- });
30
- }
31
- connectVideoStream() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- const socket = yield this.connectAndRetry();
34
- const stream = new AdbBufferedStream(socket);
35
- if (this.options.sendDummyByte) {
36
- // server will write a `0` to signal connection success
37
- yield stream.read(1);
21
+ catch (e) {
22
+ await delay(100);
38
23
  }
39
- return stream;
40
- });
24
+ }
25
+ throw new Error(`Can't connect to server after 100 retries`);
41
26
  }
42
- getStreams() {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const videoStream = yield this.connectVideoStream();
45
- let controlStream;
46
- if (this.options.control) {
47
- controlStream = yield this.connectAndRetry();
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');
48
35
  }
49
- if (this.options.sendDeviceMeta) {
50
- // 64 bytes device name + 2 bytes video width + 2 bytes video height
51
- yield videoStream.read(64 + 2 + 2);
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');
52
53
  }
53
- return [videoStream, controlStream];
54
- });
54
+ reader.releaseLock();
55
+ }
56
+ return [videoStream, controlStream];
55
57
  }
56
58
  }
57
59
  export class ScrcpyClientReverseConnection extends ScrcpyClientConnection {
58
- initialize() {
59
- return __awaiter(this, void 0, void 0, function* () {
60
- try {
61
- // try to unbind first
62
- yield this.device.reverse.remove('localabstract:scrcpy');
63
- }
64
- catch (_a) {
65
- // ignore error
66
- }
67
- const queue = new TransformStream();
68
- this.streams = queue.readable.getReader();
69
- const writer = queue.writable.getWriter();
70
- this.address = yield this.device.reverse.add('localabstract:scrcpy', 27183, {
71
- onSocket: (packet, stream) => {
72
- writer.write(stream);
73
- },
74
- });
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;
75
76
  });
76
77
  }
77
- accept() {
78
- return __awaiter(this, void 0, void 0, function* () {
79
- return (yield this.streams.read()).value;
80
- });
78
+ async accept() {
79
+ return (await this.streams.read()).value;
81
80
  }
82
- getStreams() {
83
- return __awaiter(this, void 0, void 0, function* () {
84
- const videoStream = new AdbBufferedStream(yield this.accept());
85
- let controlStream;
86
- if (this.options.control) {
87
- controlStream = yield this.accept();
88
- }
89
- if (this.options.sendDeviceMeta) {
90
- // 64 bytes device name + 2 bytes video width + 2 bytes video height
91
- yield videoStream.read(64 + 2 + 2);
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');
92
94
  }
93
- return [videoStream, controlStream];
94
- });
95
+ reader.releaseLock();
96
+ }
97
+ return [videoStream, controlStream];
95
98
  }
96
99
  dispose() {
97
100
  // Don't await this!
@@ -1 +1 @@
1
- {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}
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) => __awaiter(this, void 0, void 0, function* () {
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 = yield this._initializer.promise;
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
- get renderer() { return this._renderer; }
40
- get frameRendered() { return this._frameRendered; }
41
- get writable() { return this._writable; }
42
- configure(config) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- this.dispose();
45
- this._initializer = new PromiseResolver();
46
- const { YuvBuffer, YuvCanvas } = yield initialize();
47
- if (!this._yuvCanvas) {
48
- this._yuvCanvas = YuvCanvas.attach(this._renderer);
49
- ;
50
- }
51
- const { encodedWidth, encodedHeight } = config;
52
- const chromaWidth = encodedWidth / 2;
53
- const chromaHeight = encodedHeight / 2;
54
- this._renderer.width = config.croppedWidth;
55
- this._renderer.height = config.croppedHeight;
56
- const format = YuvBuffer.format({
57
- width: encodedWidth,
58
- height: encodedHeight,
59
- chromaWidth,
60
- chromaHeight,
61
- cropLeft: config.cropLeft,
62
- cropTop: config.cropTop,
63
- cropWidth: config.croppedWidth,
64
- cropHeight: config.croppedHeight,
65
- displayWidth: config.croppedWidth,
66
- displayHeight: config.croppedHeight,
67
- });
68
- const wrapper = yield createTinyH264Wrapper();
69
- this._initializer.resolve(wrapper);
70
- const uPlaneOffset = encodedWidth * encodedHeight;
71
- const vPlaneOffset = uPlaneOffset + chromaWidth * chromaHeight;
72
- wrapper.onPictureReady(({ data }) => {
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
- var _a;
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":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/tinyh264/index.ts"],"names":[],"mappings":"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"}
@@ -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;IAM/C,YAAmB,QAAgB;QAC/B,KAAK,EAAE,CAAC;QAJK,sBAAiB,GAAG,IAAI,YAAY,EAAyB,CAAC;QAM3E,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;IAPD,IAAW,cAAc,KAAK,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;IAS5D,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
+ {"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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAC;AAMlE,qBAAa,gBAAiB,YAAW,WAAW;IAGhD,SAAgB,UAAU,YAAa;IACvC,SAAgB,QAAQ,YAAa;IAErC,OAAO,CAAC,SAAS,CAAoC;IACrD,IAAW,QAAQ,sCAA6B;IAEhD,OAAO,CAAC,SAAS,CAAoB;IACrC,IAAW,QAAQ,sBAA6B;IAEhD,OAAO,CAAC,cAAc,CAAK;IAC3B,IAAW,aAAa,WAAkC;IAE1D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAe;IAG9B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAa;;IAuCnC,OAAO,CAAC,MAAM,CASZ;IAEF,OAAO,CAAC,SAAS;IAeV,OAAO;CAIjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAqB,WAAW,EAAE,MAAM,aAAa,CAAC;AAMlE,qBAAa,gBAAiB,YAAW,WAAW;IAGhD,SAAgB,UAAU,YAAa;IACvC,SAAgB,QAAQ,YAAa;IAErC,OAAO,CAAC,SAAS,CAAoC;IACrD,IAAW,QAAQ,sCAA6B;IAEhD,OAAO,CAAC,SAAS,CAAoB;IACrC,IAAW,QAAQ,sBAA6B;IAEhD,OAAO,CAAC,cAAc,CAAK;IAC3B,IAAW,aAAa,WAAkC;IAE1D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAe;IAG9B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,cAAc,CAAa;;IAwCnC,OAAO,CAAC,MAAM,CASZ;IAEF,OAAO,CAAC,SAAS;IAeV,OAAO;CAIjB"}
@@ -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,25 +35,32 @@ export class WebCodecsDecoder {
36
35
  error() { },
37
36
  });
38
37
  this._writable = new WritableStream({
39
- write: (packet) => __awaiter(this, void 0, void 0, function* () {
38
+ write: async (packet) => {
40
39
  switch (packet.type) {
41
40
  case 'configuration':
42
41
  this.configure(packet.data);
43
42
  break;
44
43
  case 'frame':
45
44
  this.decoder.decode(new EncodedVideoChunk({
46
- type: 'key',
45
+ // Treat `undefined` as `key`, otherwise won't decode.
46
+ type: packet.keyframe === false ? 'delta' : 'key',
47
47
  timestamp: 0,
48
48
  data: packet.data,
49
49
  }));
50
50
  break;
51
51
  }
52
- })
52
+ }
53
53
  });
54
54
  }
55
- get writable() { return this._writable; }
56
- get renderer() { return this._renderer; }
57
- get frameRendered() { return this._frameRendered; }
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
+ };
58
64
  configure(config) {
59
65
  const { profileIndex, constraintSet, levelIndex } = config;
60
66
  this._renderer.width = config.croppedWidth;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/decoder/web-codecs/index.ts"],"names":[],"mappings":"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"}
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
- CollapseNotificationPanel = 6,
10
- GetClipboard = 7,
11
- SetClipboard = 8,
12
- SetScreenPowerMode = 9,
13
- RotateDevice = 10
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: ScrcpyControlMessageType.InjectTouch;
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: ScrcpyControlMessageType.InjectText;
47
+ type: number;
44
48
  length: number;
45
49
  text: string;
46
50
  }, "length", {}, undefined>;
@@ -83,7 +87,7 @@ export declare enum AndroidKeyCode {
83
87
  AppSwitch = 187
84
88
  }
85
89
  export declare const ScrcpyInjectKeyCodeControlMessage: Struct<{
86
- type: ScrcpyControlMessageType.InjectKeycode;
90
+ type: number;
87
91
  action: AndroidKeyEventAction;
88
92
  keyCode: number;
89
93
  repeat: number;
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src/message.ts"],"names":[],"mappings":"AAAA,OAAO,MAAuB,MAAM,mBAAmB,CAAC;AAExD,oBAAY,wBAAwB;IAChC,aAAa,IAAA;IACb,UAAU,IAAA;IACV,WAAW,IAAA;IACX,YAAY,IAAA;IACZ,cAAc,IAAA;IACd,uBAAuB,IAAA;IACvB,yBAAyB,IAAA;IACzB,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,kBAAkB,IAAA;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,+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,MAAM,KAAK;IACX,SAAS,MAAM;CAClB;AAED,eAAO,MAAM,iCAAiC;;;;;;wBAMlB,CAAC;AAE7B,oBAAY,iCAAiC,GACzC,OAAO,iCAAiC,CAAC,OAAO,CAAC,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,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["CollapseNotificationPanel"] = 6] = "CollapseNotificationPanel";
11
- ScrcpyControlMessageType[ScrcpyControlMessageType["GetClipboard"] = 7] = "GetClipboard";
12
- ScrcpyControlMessageType[ScrcpyControlMessageType["SetClipboard"] = 8] = "SetClipboard";
13
- ScrcpyControlMessageType[ScrcpyControlMessageType["SetScreenPowerMode"] = 9] = "SetScreenPowerMode";
14
- ScrcpyControlMessageType[ScrcpyControlMessageType["RotateDevice"] = 10] = "RotateDevice";
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
- .uint8('type', ScrcpyControlMessageType.InjectTouch)
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
- .uint8('type', ScrcpyControlMessageType.InjectText)
49
+ .fields(ScrcpySimpleControlMessage)
45
50
  .uint32('length')
46
51
  .string('text', { lengthField: 'length' });
47
52
  export var AndroidKeyEventAction;
@@ -84,7 +89,7 @@ export var AndroidKeyCode;
84
89
  AndroidKeyCode[AndroidKeyCode["AppSwitch"] = 187] = "AppSwitch";
85
90
  })(AndroidKeyCode || (AndroidKeyCode = {}));
86
91
  export const ScrcpyInjectKeyCodeControlMessage = new Struct()
87
- .uint8('type', ScrcpyControlMessageType.InjectKeycode)
92
+ .fields(ScrcpySimpleControlMessage)
88
93
  .uint8('action', placeholder())
89
94
  .uint32('keyCode')
90
95
  .uint32('repeat')