Remove last use of Buffer in ringrtc API
Co-authored-by: Jim Gustafson <jim@signal.org>
This commit is contained in:
parent
3b67d00c85
commit
dd1b7e6fc1
14 changed files with 27 additions and 40 deletions
|
|
@ -14517,7 +14517,7 @@ For more information on this, and how to apply and follow the GNU AGPL, see
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.58.1, protobuf 2.58.1, ringrtc 2.58.1, regex-aot 0.1.0, partial-default-derive 0.1.0
|
## libsignal-account-keys 0.1.0, libsignal-core 0.1.0, mrp 2.59.0, protobuf 2.59.0, ringrtc 2.59.0, regex-aot 0.1.0, partial-default-derive 0.1.0
|
||||||
|
|
||||||
```
|
```
|
||||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@
|
||||||
"@signalapp/libsignal-client": "0.81.1",
|
"@signalapp/libsignal-client": "0.81.1",
|
||||||
"@signalapp/minimask": "1.0.1",
|
"@signalapp/minimask": "1.0.1",
|
||||||
"@signalapp/quill-cjs": "2.1.2",
|
"@signalapp/quill-cjs": "2.1.2",
|
||||||
"@signalapp/ringrtc": "2.58.1",
|
"@signalapp/ringrtc": "2.59.0",
|
||||||
"@signalapp/sqlcipher": "2.4.4",
|
"@signalapp/sqlcipher": "2.4.4",
|
||||||
"@signalapp/windows-ucv": "1.0.1",
|
"@signalapp/windows-ucv": "1.0.1",
|
||||||
"@tanstack/react-virtual": "3.11.2",
|
"@tanstack/react-virtual": "3.11.2",
|
||||||
|
|
|
||||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
|
|
@ -135,8 +135,8 @@ importers:
|
||||||
specifier: 2.1.2
|
specifier: 2.1.2
|
||||||
version: 2.1.2
|
version: 2.1.2
|
||||||
'@signalapp/ringrtc':
|
'@signalapp/ringrtc':
|
||||||
specifier: 2.58.1
|
specifier: 2.59.0
|
||||||
version: 2.58.1
|
version: 2.59.0
|
||||||
'@signalapp/sqlcipher':
|
'@signalapp/sqlcipher':
|
||||||
specifier: 2.4.4
|
specifier: 2.4.4
|
||||||
version: 2.4.4
|
version: 2.4.4
|
||||||
|
|
@ -3471,8 +3471,8 @@ packages:
|
||||||
resolution: {integrity: sha512-y2sgqdivlrG41J4Zvt/82xtH/PZjDlgItqlD2g/Cv3ZbjlR6cGhTNXbfNygCJB8nXj+C7I28pjt1Zm3k0pv2mg==}
|
resolution: {integrity: sha512-y2sgqdivlrG41J4Zvt/82xtH/PZjDlgItqlD2g/Cv3ZbjlR6cGhTNXbfNygCJB8nXj+C7I28pjt1Zm3k0pv2mg==}
|
||||||
engines: {npm: '>=8.2.3'}
|
engines: {npm: '>=8.2.3'}
|
||||||
|
|
||||||
'@signalapp/ringrtc@2.58.1':
|
'@signalapp/ringrtc@2.59.0':
|
||||||
resolution: {integrity: sha512-u+80Vl460f4U4Btnv3blp2kbtPt29FHdC63mXaf1Yor5C/DH4xeb7HwYPdHW28cLu6xVBNw/j9h8DPJ0jrvbZw==}
|
resolution: {integrity: sha512-d0nim4iS7bkQuER7dZ1CgJePTJ4o9lb7ktm+DVTR7QZkq527dpeSwWOaywoiqo7V06KVp1D0vhby2PMxxLjyug==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
'@signalapp/sqlcipher@2.4.4':
|
'@signalapp/sqlcipher@2.4.4':
|
||||||
|
|
@ -14253,7 +14253,7 @@ snapshots:
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
quill-delta: 5.1.0
|
quill-delta: 5.1.0
|
||||||
|
|
||||||
'@signalapp/ringrtc@2.58.1':
|
'@signalapp/ringrtc@2.59.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6
|
||||||
tar: 6.2.1
|
tar: 6.2.1
|
||||||
|
|
|
||||||
|
|
@ -307,7 +307,7 @@ export class GumVideoCapturer {
|
||||||
const reader = new MediaStreamTrackProcessor({
|
const reader = new MediaStreamTrackProcessor({
|
||||||
track,
|
track,
|
||||||
}).readable.getReader();
|
}).readable.getReader();
|
||||||
const buffer = Buffer.alloc(MAX_VIDEO_CAPTURE_BUFFER_SIZE);
|
const buffer = new Uint8Array(MAX_VIDEO_CAPTURE_BUFFER_SIZE);
|
||||||
this.spawnedSenderRunning = true;
|
this.spawnedSenderRunning = true;
|
||||||
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
||||||
(async () => {
|
(async () => {
|
||||||
|
|
@ -397,13 +397,13 @@ export const MAX_VIDEO_CAPTURE_BUFFER_SIZE = MAX_VIDEO_CAPTURE_AREA * 4;
|
||||||
|
|
||||||
export class CanvasVideoRenderer {
|
export class CanvasVideoRenderer {
|
||||||
private canvas?: RefObject<HTMLCanvasElement>;
|
private canvas?: RefObject<HTMLCanvasElement>;
|
||||||
private buffer: Buffer;
|
private buffer: Uint8Array;
|
||||||
private imageData?: ImageData;
|
private imageData?: ImageData;
|
||||||
private source?: VideoFrameSource;
|
private source?: VideoFrameSource;
|
||||||
private rafId?: any;
|
private rafId?: any;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.buffer = Buffer.alloc(MAX_VIDEO_CAPTURE_BUFFER_SIZE);
|
this.buffer = new Uint8Array(MAX_VIDEO_CAPTURE_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
setCanvas(canvas: RefObject<HTMLCanvasElement> | undefined): void {
|
setCanvas(canvas: RefObject<HTMLCanvasElement> | undefined): void {
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,12 @@ import { FRAME_BUFFER_SIZE } from './constants.js';
|
||||||
* of allocating one per participant. Be careful when using this buffer elsewhere, as it
|
* of allocating one per participant. Be careful when using this buffer elsewhere, as it
|
||||||
* is not cleaned up and may hold stale data.
|
* is not cleaned up and may hold stale data.
|
||||||
*/
|
*/
|
||||||
export function useGetCallingFrameBuffer(): () => Buffer {
|
export function useGetCallingFrameBuffer(): () => Uint8Array {
|
||||||
const ref = useRef<Buffer | null>(null);
|
const ref = useRef<Uint8Array | null>(null);
|
||||||
|
|
||||||
return useCallback(() => {
|
return useCallback(() => {
|
||||||
if (!ref.current) {
|
if (!ref.current) {
|
||||||
ref.current = Buffer.alloc(FRAME_BUFFER_SIZE);
|
ref.current = new Uint8Array(FRAME_BUFFER_SIZE);
|
||||||
}
|
}
|
||||||
return ref.current;
|
return ref.current;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ export default {
|
||||||
} satisfies Meta<PropsType>;
|
} satisfies Meta<PropsType>;
|
||||||
|
|
||||||
const defaultProps = {
|
const defaultProps = {
|
||||||
getFrameBuffer: memoize(() => Buffer.alloc(FRAME_BUFFER_SIZE)),
|
getFrameBuffer: memoize(() => new Uint8Array(FRAME_BUFFER_SIZE)),
|
||||||
getCallingImageDataCache: memoize(() => new Map()),
|
getCallingImageDataCache: memoize(() => new Map()),
|
||||||
getGroupCallVideoFrameSource: fakeGetGroupCallVideoFrameSource,
|
getGroupCallVideoFrameSource: fakeGetGroupCallVideoFrameSource,
|
||||||
imageDataCache: React.createRef<CallingImageDataCache>(),
|
imageDataCache: React.createRef<CallingImageDataCache>(),
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ const OVERFLOW_SCROLL_BUTTON_RATIO = 0.75;
|
||||||
export const OVERFLOW_PARTICIPANT_WIDTH = 107;
|
export const OVERFLOW_PARTICIPANT_WIDTH = 107;
|
||||||
|
|
||||||
export type PropsType = {
|
export type PropsType = {
|
||||||
getFrameBuffer: () => Buffer;
|
getFrameBuffer: () => Uint8Array;
|
||||||
getGroupCallVideoFrameSource: (demuxId: number) => VideoFrameSource;
|
getGroupCallVideoFrameSource: (demuxId: number) => VideoFrameSource;
|
||||||
i18n: LocalizerType;
|
i18n: LocalizerType;
|
||||||
imageDataCache: React.RefObject<CallingImageDataCache>;
|
imageDataCache: React.RefObject<CallingImageDataCache>;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ type OverridePropsType = {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const getFrameBuffer = memoize(() => Buffer.alloc(FRAME_BUFFER_SIZE));
|
const getFrameBuffer = memoize(() => new Uint8Array(FRAME_BUFFER_SIZE));
|
||||||
|
|
||||||
const createProps = (
|
const createProps = (
|
||||||
overrideProps: OverridePropsType,
|
overrideProps: OverridePropsType,
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ const DELAY_TO_SHOW_MISSING_MEDIA_KEYS = 5000;
|
||||||
const CONTAINER_TRANSITION_TIME = 200;
|
const CONTAINER_TRANSITION_TIME = 200;
|
||||||
|
|
||||||
type BasePropsType = {
|
type BasePropsType = {
|
||||||
getFrameBuffer: () => Buffer;
|
getFrameBuffer: () => Uint8Array;
|
||||||
getGroupCallVideoFrameSource: (demuxId: number) => VideoFrameSource;
|
getGroupCallVideoFrameSource: (demuxId: number) => VideoFrameSource;
|
||||||
i18n: LocalizerType;
|
i18n: LocalizerType;
|
||||||
imageDataCache: React.RefObject<CallingImageDataCache>;
|
imageDataCache: React.RefObject<CallingImageDataCache>;
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class FakeGroupCallVideoFrameSource implements VideoFrameSource {
|
||||||
}
|
}
|
||||||
|
|
||||||
receiveVideoFrame(
|
receiveVideoFrame(
|
||||||
destinationBuffer: Buffer,
|
destinationBuffer: Uint8Array,
|
||||||
_maxWidth: number,
|
_maxWidth: number,
|
||||||
_maxHeight: number
|
_maxHeight: number
|
||||||
): [number, number] | undefined {
|
): [number, number] | undefined {
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ describe('pnp/calling', function (this: Mocha.Suite) {
|
||||||
{
|
{
|
||||||
callMessage: {
|
callMessage: {
|
||||||
offer: {
|
offer: {
|
||||||
opaque: Buffer.alloc(1),
|
opaque: new Uint8Array(1),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ describe('callingMessageToProto', () => {
|
||||||
it('attaches opaque data', () => {
|
it('attaches opaque data', () => {
|
||||||
const callingMessage = new CallingMessage();
|
const callingMessage = new CallingMessage();
|
||||||
callingMessage.opaque = new OpaqueMessage();
|
callingMessage.opaque = new OpaqueMessage();
|
||||||
callingMessage.opaque.data = Buffer.from([1, 2, 3]);
|
callingMessage.opaque.data = new Uint8Array([1, 2, 3]);
|
||||||
|
|
||||||
const result = callingMessageToProto(callingMessage);
|
const result = callingMessageToProto(callingMessage);
|
||||||
|
|
||||||
|
|
@ -74,7 +74,7 @@ describe('callingMessageToProto', () => {
|
||||||
it('attaches urgency and opaque data if both are provided', () => {
|
it('attaches urgency and opaque data if both are provided', () => {
|
||||||
const callingMessage = new CallingMessage();
|
const callingMessage = new CallingMessage();
|
||||||
callingMessage.opaque = new OpaqueMessage();
|
callingMessage.opaque = new OpaqueMessage();
|
||||||
callingMessage.opaque.data = Buffer.from([1, 2, 3]);
|
callingMessage.opaque.data = new Uint8Array([1, 2, 3]);
|
||||||
|
|
||||||
const result = callingMessageToProto(
|
const result = callingMessageToProto(
|
||||||
callingMessage,
|
callingMessage,
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ export function callingMessageToProto(
|
||||||
if (opaque) {
|
if (opaque) {
|
||||||
opaqueField = {
|
opaqueField = {
|
||||||
...opaque,
|
...opaque,
|
||||||
data: bufferToProto(opaque.data),
|
data: opaque.data,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (urgency !== undefined) {
|
if (urgency !== undefined) {
|
||||||
|
|
@ -43,14 +43,14 @@ export function callingMessageToProto(
|
||||||
...offer,
|
...offer,
|
||||||
id: Long.fromValue(offer.callId),
|
id: Long.fromValue(offer.callId),
|
||||||
type: offer.type as number,
|
type: offer.type as number,
|
||||||
opaque: bufferToProto(offer.opaque),
|
opaque: offer.opaque,
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
answer: answer
|
answer: answer
|
||||||
? {
|
? {
|
||||||
...answer,
|
...answer,
|
||||||
id: Long.fromValue(answer.callId),
|
id: Long.fromValue(answer.callId),
|
||||||
opaque: bufferToProto(answer.opaque),
|
opaque: answer.opaque,
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
iceUpdate: iceCandidates
|
iceUpdate: iceCandidates
|
||||||
|
|
@ -58,7 +58,7 @@ export function callingMessageToProto(
|
||||||
return {
|
return {
|
||||||
...candidate,
|
...candidate,
|
||||||
id: Long.fromValue(candidate.callId),
|
id: Long.fromValue(candidate.callId),
|
||||||
opaque: bufferToProto(candidate.opaque),
|
opaque: candidate.opaque,
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
: undefined,
|
: undefined,
|
||||||
|
|
@ -80,19 +80,6 @@ export function callingMessageToProto(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function bufferToProto(
|
|
||||||
value: Uint8Array | { toArrayBuffer(): ArrayBuffer } | undefined
|
|
||||||
): Uint8Array | undefined {
|
|
||||||
if (!value) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
if (value instanceof Uint8Array) {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new Uint8Array(value.toArrayBuffer());
|
|
||||||
}
|
|
||||||
|
|
||||||
function urgencyToProto(
|
function urgencyToProto(
|
||||||
urgency: CallMessageUrgency
|
urgency: CallMessageUrgency
|
||||||
): Proto.CallMessage.Opaque.Urgency {
|
): Proto.CallMessage.Opaque.Urgency {
|
||||||
|
|
|
||||||
|
|
@ -828,9 +828,9 @@
|
||||||
{
|
{
|
||||||
"rule": "React-useRef",
|
"rule": "React-useRef",
|
||||||
"path": "ts/calling/useGetCallingFrameBuffer.ts",
|
"path": "ts/calling/useGetCallingFrameBuffer.ts",
|
||||||
"line": " const ref = useRef<Buffer | null>(null);",
|
"line": " const ref = useRef<Uint8Array | null>(null);",
|
||||||
"reasonCategory": "usageTrusted",
|
"reasonCategory": "usageTrusted",
|
||||||
"updated": "2021-12-10T23:24:03.829Z",
|
"updated": "2025-10-01T20:11:56Z",
|
||||||
"reasonDetail": "Doesn't touch the DOM."
|
"reasonDetail": "Doesn't touch the DOM."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue