Add Matroska muxer

This commit is contained in:
Vanilagy
2024-11-10 17:08:04 +01:00
parent dd6526a070
commit d01d32f08c
14 changed files with 2655 additions and 36 deletions
+36
View File
@@ -13,3 +13,39 @@ export const last = <T>(arr: T[]) => {
export const isU32 = (value: number) => {
return value >= 0 && value < 2**32;
};
export const readBits = (bytes: Uint8Array, start: number, end: number) => {
let result = 0;
for (let i = start; i < end; i++) {
let byteIndex = Math.floor(i / 8);
let byte = bytes[byteIndex]!;
let bitIndex = 0b111 - (i & 0b111);
let bit = (byte & (1 << bitIndex)) >> bitIndex;
result <<= 1;
result |= bit;
}
return result;
};
export const writeBits = (bytes: Uint8Array, start: number, end: number, value: number) => {
for (let i = start; i < end; i++) {
let byteIndex = Math.floor(i / 8);
let byte = bytes[byteIndex]!;
let bitIndex = 0b111 - (i & 0b111);
byte &= ~(1 << bitIndex);
byte |= ((value & (1 << (end - i - 1))) >> (end - i - 1)) << bitIndex;
bytes[byteIndex] = byte;
}
};
export const toUint8Array = (source: AllowSharedBufferSource): Uint8Array => {
if (source instanceof ArrayBuffer) {
return new Uint8Array(source);
} else {
return new Uint8Array(source.buffer, source.byteOffset, source.byteLength);
}
};