mirror of
https://github.com/arcodange-org/mediabunny.git
synced 2026-09-27 02:43:48 +02:00
Add @mediabunny/flac-encoder extension, clean up some other code, fix incorrect top-level tsconfig
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
import createModule from '../build/aac';
|
||||
import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
|
||||
import type { PacketInfo, WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
|
||||
|
||||
type ExtendedEmscriptenModule = EmscriptenModule & {
|
||||
cwrap: typeof cwrap;
|
||||
@@ -28,8 +28,6 @@ let resetEncoderFn: (ctx: number) => void;
|
||||
let getEncodedData: (ctx: number) => number;
|
||||
let getEncodedPts: (ctx: number) => number;
|
||||
let getEncodedDuration: (ctx: number) => number;
|
||||
let closeEncoderFn: (ctx: number) => void;
|
||||
|
||||
const ensureModule = async () => {
|
||||
if (!module) {
|
||||
if (modulePromise) {
|
||||
@@ -52,7 +50,6 @@ const ensureModule = async () => {
|
||||
getEncodedData = module.cwrap('get_encoded_data', 'number', ['number']);
|
||||
getEncodedPts = module.cwrap('get_encoded_pts', 'number', ['number']);
|
||||
getEncodedDuration = module.cwrap('get_encoded_duration', 'number', ['number']);
|
||||
closeEncoderFn = module.cwrap('close_encoder', null, ['number']);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -77,8 +74,6 @@ const initEncoder = async (
|
||||
return { ctx, frameSize, extradata };
|
||||
};
|
||||
|
||||
type PacketInfo = { encodedData: ArrayBuffer; pts: number; duration: number };
|
||||
|
||||
const drainPackets = (ctx: number) => {
|
||||
const packets: PacketInfo[] = [];
|
||||
|
||||
@@ -151,11 +146,6 @@ const onMessage = (data: { id: number; command: WorkerCommand }) => {
|
||||
resetEncoderFn(command.data.ctx);
|
||||
result = { type: command.type, packets };
|
||||
}; break;
|
||||
|
||||
case 'close': {
|
||||
closeEncoderFn(command.data.ctx);
|
||||
result = { type: command.type };
|
||||
}; break;
|
||||
}
|
||||
|
||||
const response: WorkerResponse = {
|
||||
|
||||
@@ -19,7 +19,7 @@ import {
|
||||
EncodedPacket,
|
||||
registerEncoder,
|
||||
} from 'mediabunny';
|
||||
import type { WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
|
||||
import type { PacketInfo, WorkerCommand, WorkerResponse, WorkerResponseData } from './shared';
|
||||
// @ts-expect-error An esbuild plugin handles this, TypeScript doesn't need to understand
|
||||
import createWorker from './encode.worker';
|
||||
|
||||
@@ -184,7 +184,6 @@ class AacEncoder extends CustomAudioEncoder {
|
||||
}
|
||||
|
||||
close() {
|
||||
void this.sendCommand({ type: 'close', data: { ctx: this.ctx } });
|
||||
this.worker?.terminate();
|
||||
}
|
||||
|
||||
@@ -219,7 +218,7 @@ class AacEncoder extends CustomAudioEncoder {
|
||||
this.emitPackets(result.packets);
|
||||
}
|
||||
|
||||
private emitPackets(packets: Array<{ encodedData: ArrayBuffer; pts: number; duration: number }>) {
|
||||
private emitPackets(packets: PacketInfo[]) {
|
||||
assert(this.nextPacketTimestampInSamples !== null);
|
||||
|
||||
for (const p of packets) {
|
||||
|
||||
@@ -25,11 +25,12 @@ export type WorkerCommand = {
|
||||
data: {
|
||||
ctx: number;
|
||||
};
|
||||
} | {
|
||||
type: 'close';
|
||||
data: {
|
||||
ctx: number;
|
||||
};
|
||||
};
|
||||
|
||||
export type PacketInfo = {
|
||||
encodedData: ArrayBuffer;
|
||||
pts: number;
|
||||
duration: number;
|
||||
};
|
||||
|
||||
export type WorkerResponseData = {
|
||||
@@ -39,20 +40,10 @@ export type WorkerResponseData = {
|
||||
extradata: ArrayBuffer;
|
||||
} | {
|
||||
type: 'encode';
|
||||
packets: Array<{
|
||||
encodedData: ArrayBuffer;
|
||||
pts: number;
|
||||
duration: number;
|
||||
}>;
|
||||
packets: PacketInfo[];
|
||||
} | {
|
||||
type: 'flush';
|
||||
packets: Array<{
|
||||
encodedData: ArrayBuffer;
|
||||
pts: number;
|
||||
duration: number;
|
||||
}>;
|
||||
} | {
|
||||
type: 'close';
|
||||
packets: PacketInfo[];
|
||||
};
|
||||
|
||||
export type WorkerResponse = {
|
||||
|
||||
Reference in New Issue
Block a user