@blockcast/mmt-wasm 0.4.0-main.bbd83cb48eff → 0.4.0-main.bbdfdbf39ded

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blockcast/mmt-wasm",
3
- "version": "0.4.0-main.bbd83cb48eff",
3
+ "version": "0.4.0-main.bbdfdbf39ded",
4
4
  "description": "wasm-bindgen builds of the libmmt Rust core (RaptorQ FEC, MMTP MFU reassembly): `pkg` for ESM bundlers and `pkg-no-modules` as a global script for Closure-compiled pages",
5
5
  "main": "pkg/mmt_wasm.js",
6
6
  "types": "pkg/mmt_wasm.d.ts",
package/pkg/mmt_wasm.d.ts CHANGED
@@ -141,6 +141,10 @@ export class MmtFecDecoder {
141
141
  * Reset statistics
142
142
  */
143
143
  reset_stats(): void;
144
+ /**
145
+ * The `fec.algorithm` token this decoder was built for.
146
+ */
147
+ get_algorithm(): string;
144
148
  /**
145
149
  * Get alignment (Al) parameter from OTI
146
150
  */
@@ -217,8 +221,10 @@ export class MmtFecDecoder {
217
221
  * * `interleave_depth` - Explicit positive number of interleaved blocks.
218
222
  * * `block_profile` - Catalog `fec.blockProfile`: `"iso-ssbg1-v1"`.
219
223
  * Required; any other value is refused.
224
+ * * `algorithm` - Catalog `fec.algorithm`: `"raptorq"` (the default when
225
+ * omitted) or `"reed-solomon"`; any other value is refused.
220
226
  */
221
- constructor(interleave_depth: number, block_profile: string);
227
+ constructor(interleave_depth: number, block_profile: string, algorithm?: string | null);
222
228
  /**
223
229
  * Flush all pending decoder state while preserving configuration.
224
230
  */
@@ -231,7 +237,8 @@ export class MmtFecDecoder {
231
237
  * Configure FEC from 12-byte OTI
232
238
  *
233
239
  * # Arguments
234
- * * `oti` - 12-byte Object Transmission Information from S-TSID fecOTI
240
+ * * `oti` - 12-byte RFC 6330 Common FEC OTI: decoder geometry per
241
+ * draft-fec-01 Section 4.2 (Z = 1, N = 1, Al = 8)
235
242
  */
236
243
  configure(oti: Uint8Array): void;
237
244
  /**
@@ -273,14 +280,18 @@ export class MmtFecEncoder {
273
280
  *
274
281
  * `block_profile` is the catalog `fec.blockProfile` (`"iso-ssbg1-v1"`);
275
282
  * any other value is refused.
283
+ *
284
+ * `algorithm` is the catalog `fec.algorithm`: `"raptorq"` (the default
285
+ * when omitted) or `"reed-solomon"` (K + P <= 255 per block).
276
286
  */
277
- constructor(k: number, symbol_size: number, block_profile: string);
287
+ constructor(k: number, symbol_size: number, block_profile: string, algorithm?: string | null);
278
288
  /**
279
289
  * The configured 12-byte OTI (RFC 6330 §3.3.2 Common FEC OTI).
280
290
  *
281
291
  * Publishers (BLO-8975 / BLO-8990 catalog-gen) emit this so the player's
282
292
  * [`MmtFecDecoder::configure`] reconstructs identical block geometry. The
283
- * bytes round-trip exactly through `OtiParams::from_bytes`.
293
+ * bytes round-trip exactly through `OtiParams::from_bytes`. Empty under
294
+ * `reed-solomon`, which has no OTI.
284
295
  */
285
296
  oti(): Uint8Array;
286
297
  /**
@@ -295,6 +306,10 @@ export class MmtFecEncoder {
295
306
  * Source symbols per block (K).
296
307
  */
297
308
  readonly k: number;
309
+ /**
310
+ * The `fec.algorithm` token this encoder was built for.
311
+ */
312
+ readonly algorithm: string;
298
313
  }
299
314
 
300
315
  /**
@@ -798,7 +813,6 @@ export interface InitOutput {
798
813
  readonly __wbg_moqfecstatsjs_free: (a: number, b: number) => void;
799
814
  readonly __wbg_reassembledmfujs_free: (a: number, b: number) => void;
800
815
  readonly __wbg_recoveredset_free: (a: number, b: number) => void;
801
- readonly __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
802
816
  readonly __wbg_set_fecstats_blocks_complete: (a: number, b: bigint) => void;
803
817
  readonly __wbg_set_fecstats_blocks_delivery_failed: (a: number, b: bigint) => void;
804
818
  readonly __wbg_set_fecstats_blocks_failed: (a: number, b: bigint) => void;
@@ -841,6 +855,7 @@ export interface InitOutput {
841
855
  readonly mmtfecdecoder_configure: (a: number, b: number, c: number) => [number, number];
842
856
  readonly mmtfecdecoder_configure_params: (a: number, b: number, c: number) => [number, number];
843
857
  readonly mmtfecdecoder_flush: (a: number) => void;
858
+ readonly mmtfecdecoder_get_algorithm: (a: number) => [number, number];
844
859
  readonly mmtfecdecoder_get_alignment: (a: number) => [number, number, number];
845
860
  readonly mmtfecdecoder_get_block_profile: (a: number) => [number, number];
846
861
  readonly mmtfecdecoder_get_interleave_depth: (a: number) => number;
@@ -849,14 +864,15 @@ export interface InitOutput {
849
864
  readonly mmtfecdecoder_get_stats: (a: number) => number;
850
865
  readonly mmtfecdecoder_get_sub_blocks: (a: number) => [number, number, number];
851
866
  readonly mmtfecdecoder_get_symbol_size: (a: number) => [number, number, number];
852
- readonly mmtfecdecoder_new: (a: number, b: number, c: number) => [number, number, number];
867
+ readonly mmtfecdecoder_new: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
853
868
  readonly mmtfecdecoder_pending_blocks: (a: number) => number;
854
869
  readonly mmtfecdecoder_reset_stats: (a: number) => void;
855
870
  readonly mmtfecdecoder_retire_unplaced: (a: number, b: number) => [number, number, number];
871
+ readonly mmtfecencoder_algorithm: (a: number) => [number, number];
856
872
  readonly mmtfecencoder_block_profile: (a: number) => [number, number];
857
873
  readonly mmtfecencoder_encode_repair: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
858
874
  readonly mmtfecencoder_k: (a: number) => number;
859
- readonly mmtfecencoder_new: (a: number, b: number, c: number, d: number) => [number, number, number];
875
+ readonly mmtfecencoder_new: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
860
876
  readonly mmtfecencoder_oti: (a: number) => [number, number];
861
877
  readonly mmtfecencoder_symbol_size: (a: number) => number;
862
878
  readonly mmtpacketizer_build_mfu: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
@@ -931,6 +947,7 @@ export interface InitOutput {
931
947
  readonly reassembledmfujs_sample_number: (a: number) => number;
932
948
  readonly reassembledmfujs_stream_identity: (a: number) => number;
933
949
  readonly reassembledmfujs_timestamp: (a: number) => number;
950
+ readonly recoveredset_fec_set_index: (a: number) => number;
934
951
  readonly recoveredset_payload: (a: number) => [number, number];
935
952
  readonly recoveredset_slot: (a: number) => bigint;
936
953
  readonly shredfecbuffer_add_shred: (a: number, b: bigint, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
@@ -947,7 +964,6 @@ export interface InitOutput {
947
964
  readonly moqfecstatsjs_blocksComplete: (a: number) => number;
948
965
  readonly moqfecstatsjs_blocksIncomplete: (a: number) => number;
949
966
  readonly moqfecstatsjs_totalSymbolsReceived: (a: number) => number;
950
- readonly recoveredset_fec_set_index: (a: number) => number;
951
967
  readonly shredreassembler_pending_fec_sets: (a: number) => number;
952
968
  readonly __wbg_get_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number) => bigint;
953
969
  readonly __wbg_get_reassemblerstatsjs_duplicate_fragments: (a: number) => bigint;
@@ -962,6 +978,7 @@ export interface InitOutput {
962
978
  readonly __wbg_get_samplecombinerstatsjs_passthrough_samples: (a: number) => bigint;
963
979
  readonly __wbg_get_samplecombinerstatsjs_timed_out_samples: (a: number) => bigint;
964
980
  readonly __wbg_reassemblerstatsjs_free: (a: number, b: number) => void;
981
+ readonly __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
965
982
  readonly __wbg_set_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number, b: bigint) => void;
966
983
  readonly __wbg_set_reassemblerstatsjs_duplicate_fragments: (a: number, b: bigint) => void;
967
984
  readonly __wbg_set_reassemblerstatsjs_evicted_data_units: (a: number, b: bigint) => void;
package/pkg/mmt_wasm.js CHANGED
@@ -762,6 +762,22 @@ export class MmtFecDecoder {
762
762
  reset_stats() {
763
763
  wasm.mmtfecdecoder_reset_stats(this.__wbg_ptr);
764
764
  }
765
+ /**
766
+ * The `fec.algorithm` token this decoder was built for.
767
+ * @returns {string}
768
+ */
769
+ get_algorithm() {
770
+ let deferred1_0;
771
+ let deferred1_1;
772
+ try {
773
+ const ret = wasm.mmtfecdecoder_get_algorithm(this.__wbg_ptr);
774
+ deferred1_0 = ret[0];
775
+ deferred1_1 = ret[1];
776
+ return getStringFromWasm0(ret[0], ret[1]);
777
+ } finally {
778
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
779
+ }
780
+ }
765
781
  /**
766
782
  * Get alignment (Al) parameter from OTI
767
783
  * @returns {number}
@@ -916,13 +932,18 @@ export class MmtFecDecoder {
916
932
  * * `interleave_depth` - Explicit positive number of interleaved blocks.
917
933
  * * `block_profile` - Catalog `fec.blockProfile`: `"iso-ssbg1-v1"`.
918
934
  * Required; any other value is refused.
935
+ * * `algorithm` - Catalog `fec.algorithm`: `"raptorq"` (the default when
936
+ * omitted) or `"reed-solomon"`; any other value is refused.
919
937
  * @param {number} interleave_depth
920
938
  * @param {string} block_profile
939
+ * @param {string | null} [algorithm]
921
940
  */
922
- constructor(interleave_depth, block_profile) {
941
+ constructor(interleave_depth, block_profile, algorithm) {
923
942
  const ptr0 = passStringToWasm0(block_profile, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
924
943
  const len0 = WASM_VECTOR_LEN;
925
- const ret = wasm.mmtfecdecoder_new(interleave_depth, ptr0, len0);
944
+ var ptr1 = isLikeNone(algorithm) ? 0 : passStringToWasm0(algorithm, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
945
+ var len1 = WASM_VECTOR_LEN;
946
+ const ret = wasm.mmtfecdecoder_new(interleave_depth, ptr0, len0, ptr1, len1);
926
947
  if (ret[2]) {
927
948
  throw takeFromExternrefTable0(ret[1]);
928
949
  }
@@ -951,7 +972,8 @@ export class MmtFecDecoder {
951
972
  * Configure FEC from 12-byte OTI
952
973
  *
953
974
  * # Arguments
954
- * * `oti` - 12-byte Object Transmission Information from S-TSID fecOTI
975
+ * * `oti` - 12-byte RFC 6330 Common FEC OTI: decoder geometry per
976
+ * draft-fec-01 Section 4.2 (Z = 1, N = 1, Al = 8)
955
977
  * @param {Uint8Array} oti
956
978
  */
957
979
  configure(oti) {
@@ -1093,14 +1115,20 @@ export class MmtFecEncoder {
1093
1115
  *
1094
1116
  * `block_profile` is the catalog `fec.blockProfile` (`"iso-ssbg1-v1"`);
1095
1117
  * any other value is refused.
1118
+ *
1119
+ * `algorithm` is the catalog `fec.algorithm`: `"raptorq"` (the default
1120
+ * when omitted) or `"reed-solomon"` (K + P <= 255 per block).
1096
1121
  * @param {number} k
1097
1122
  * @param {number} symbol_size
1098
1123
  * @param {string} block_profile
1124
+ * @param {string | null} [algorithm]
1099
1125
  */
1100
- constructor(k, symbol_size, block_profile) {
1126
+ constructor(k, symbol_size, block_profile, algorithm) {
1101
1127
  const ptr0 = passStringToWasm0(block_profile, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1102
1128
  const len0 = WASM_VECTOR_LEN;
1103
- const ret = wasm.mmtfecencoder_new(k, symbol_size, ptr0, len0);
1129
+ var ptr1 = isLikeNone(algorithm) ? 0 : passStringToWasm0(algorithm, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1130
+ var len1 = WASM_VECTOR_LEN;
1131
+ const ret = wasm.mmtfecencoder_new(k, symbol_size, ptr0, len0, ptr1, len1);
1104
1132
  if (ret[2]) {
1105
1133
  throw takeFromExternrefTable0(ret[1]);
1106
1134
  }
@@ -1113,7 +1141,8 @@ export class MmtFecEncoder {
1113
1141
  *
1114
1142
  * Publishers (BLO-8975 / BLO-8990 catalog-gen) emit this so the player's
1115
1143
  * [`MmtFecDecoder::configure`] reconstructs identical block geometry. The
1116
- * bytes round-trip exactly through `OtiParams::from_bytes`.
1144
+ * bytes round-trip exactly through `OtiParams::from_bytes`. Empty under
1145
+ * `reed-solomon`, which has no OTI.
1117
1146
  * @returns {Uint8Array}
1118
1147
  */
1119
1148
  oti() {
@@ -1122,6 +1151,22 @@ export class MmtFecEncoder {
1122
1151
  wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1123
1152
  return v1;
1124
1153
  }
1154
+ /**
1155
+ * The `fec.algorithm` token this encoder was built for.
1156
+ * @returns {string}
1157
+ */
1158
+ get algorithm() {
1159
+ let deferred1_0;
1160
+ let deferred1_1;
1161
+ try {
1162
+ const ret = wasm.mmtfecencoder_algorithm(this.__wbg_ptr);
1163
+ deferred1_0 = ret[0];
1164
+ deferred1_1 = ret[1];
1165
+ return getStringFromWasm0(ret[0], ret[1]);
1166
+ } finally {
1167
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
1168
+ }
1169
+ }
1125
1170
  }
1126
1171
  if (Symbol.dispose) MmtFecEncoder.prototype[Symbol.dispose] = MmtFecEncoder.prototype.free;
1127
1172
 
@@ -2312,7 +2357,7 @@ export class RecoveredSet {
2312
2357
  * @returns {number}
2313
2358
  */
2314
2359
  get fec_set_index() {
2315
- const ret = wasm.mmtfecencoder_k(this.__wbg_ptr);
2360
+ const ret = wasm.recoveredset_fec_set_index(this.__wbg_ptr);
2316
2361
  return ret >>> 0;
2317
2362
  }
2318
2363
  /**
Binary file
@@ -24,7 +24,6 @@ export const __wbg_moqfecencoder_free: (a: number, b: number) => void;
24
24
  export const __wbg_moqfecstatsjs_free: (a: number, b: number) => void;
25
25
  export const __wbg_reassembledmfujs_free: (a: number, b: number) => void;
26
26
  export const __wbg_recoveredset_free: (a: number, b: number) => void;
27
- export const __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
28
27
  export const __wbg_set_fecstats_blocks_complete: (a: number, b: bigint) => void;
29
28
  export const __wbg_set_fecstats_blocks_delivery_failed: (a: number, b: bigint) => void;
30
29
  export const __wbg_set_fecstats_blocks_failed: (a: number, b: bigint) => void;
@@ -67,6 +66,7 @@ export const mmtfecdecoder_cleanup_by_ss_start: (a: number, b: number) => [numbe
67
66
  export const mmtfecdecoder_configure: (a: number, b: number, c: number) => [number, number];
68
67
  export const mmtfecdecoder_configure_params: (a: number, b: number, c: number) => [number, number];
69
68
  export const mmtfecdecoder_flush: (a: number) => void;
69
+ export const mmtfecdecoder_get_algorithm: (a: number) => [number, number];
70
70
  export const mmtfecdecoder_get_alignment: (a: number) => [number, number, number];
71
71
  export const mmtfecdecoder_get_block_profile: (a: number) => [number, number];
72
72
  export const mmtfecdecoder_get_interleave_depth: (a: number) => number;
@@ -75,14 +75,15 @@ export const mmtfecdecoder_get_source_blocks: (a: number) => [number, number, nu
75
75
  export const mmtfecdecoder_get_stats: (a: number) => number;
76
76
  export const mmtfecdecoder_get_sub_blocks: (a: number) => [number, number, number];
77
77
  export const mmtfecdecoder_get_symbol_size: (a: number) => [number, number, number];
78
- export const mmtfecdecoder_new: (a: number, b: number, c: number) => [number, number, number];
78
+ export const mmtfecdecoder_new: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
79
79
  export const mmtfecdecoder_pending_blocks: (a: number) => number;
80
80
  export const mmtfecdecoder_reset_stats: (a: number) => void;
81
81
  export const mmtfecdecoder_retire_unplaced: (a: number, b: number) => [number, number, number];
82
+ export const mmtfecencoder_algorithm: (a: number) => [number, number];
82
83
  export const mmtfecencoder_block_profile: (a: number) => [number, number];
83
84
  export const mmtfecencoder_encode_repair: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
84
85
  export const mmtfecencoder_k: (a: number) => number;
85
- export const mmtfecencoder_new: (a: number, b: number, c: number, d: number) => [number, number, number];
86
+ export const mmtfecencoder_new: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
86
87
  export const mmtfecencoder_oti: (a: number) => [number, number];
87
88
  export const mmtfecencoder_symbol_size: (a: number) => number;
88
89
  export const mmtpacketizer_build_mfu: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
@@ -157,6 +158,7 @@ export const reassembledmfujs_repaired_packet_sequence_numbers: (a: number) => [
157
158
  export const reassembledmfujs_sample_number: (a: number) => number;
158
159
  export const reassembledmfujs_stream_identity: (a: number) => number;
159
160
  export const reassembledmfujs_timestamp: (a: number) => number;
161
+ export const recoveredset_fec_set_index: (a: number) => number;
160
162
  export const recoveredset_payload: (a: number) => [number, number];
161
163
  export const recoveredset_slot: (a: number) => bigint;
162
164
  export const shredfecbuffer_add_shred: (a: number, b: bigint, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
@@ -173,7 +175,6 @@ export const moqencodedblock_p: (a: number) => number;
173
175
  export const moqfecstatsjs_blocksComplete: (a: number) => number;
174
176
  export const moqfecstatsjs_blocksIncomplete: (a: number) => number;
175
177
  export const moqfecstatsjs_totalSymbolsReceived: (a: number) => number;
176
- export const recoveredset_fec_set_index: (a: number) => number;
177
178
  export const shredreassembler_pending_fec_sets: (a: number) => number;
178
179
  export const __wbg_get_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number) => bigint;
179
180
  export const __wbg_get_reassemblerstatsjs_duplicate_fragments: (a: number) => bigint;
@@ -188,6 +189,7 @@ export const __wbg_get_samplecombinerstatsjs_evicted_samples: (a: number) => big
188
189
  export const __wbg_get_samplecombinerstatsjs_passthrough_samples: (a: number) => bigint;
189
190
  export const __wbg_get_samplecombinerstatsjs_timed_out_samples: (a: number) => bigint;
190
191
  export const __wbg_reassemblerstatsjs_free: (a: number, b: number) => void;
192
+ export const __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
191
193
  export const __wbg_set_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number, b: bigint) => void;
192
194
  export const __wbg_set_reassemblerstatsjs_duplicate_fragments: (a: number, b: bigint) => void;
193
195
  export const __wbg_set_reassemblerstatsjs_evicted_data_units: (a: number, b: bigint) => void;
@@ -142,6 +142,10 @@ declare namespace wasm_bindgen {
142
142
  * Reset statistics
143
143
  */
144
144
  reset_stats(): void;
145
+ /**
146
+ * The `fec.algorithm` token this decoder was built for.
147
+ */
148
+ get_algorithm(): string;
145
149
  /**
146
150
  * Get alignment (Al) parameter from OTI
147
151
  */
@@ -218,8 +222,10 @@ declare namespace wasm_bindgen {
218
222
  * * `interleave_depth` - Explicit positive number of interleaved blocks.
219
223
  * * `block_profile` - Catalog `fec.blockProfile`: `"iso-ssbg1-v1"`.
220
224
  * Required; any other value is refused.
225
+ * * `algorithm` - Catalog `fec.algorithm`: `"raptorq"` (the default when
226
+ * omitted) or `"reed-solomon"`; any other value is refused.
221
227
  */
222
- constructor(interleave_depth: number, block_profile: string);
228
+ constructor(interleave_depth: number, block_profile: string, algorithm?: string | null);
223
229
  /**
224
230
  * Flush all pending decoder state while preserving configuration.
225
231
  */
@@ -232,7 +238,8 @@ declare namespace wasm_bindgen {
232
238
  * Configure FEC from 12-byte OTI
233
239
  *
234
240
  * # Arguments
235
- * * `oti` - 12-byte Object Transmission Information from S-TSID fecOTI
241
+ * * `oti` - 12-byte RFC 6330 Common FEC OTI: decoder geometry per
242
+ * draft-fec-01 Section 4.2 (Z = 1, N = 1, Al = 8)
236
243
  */
237
244
  configure(oti: Uint8Array): void;
238
245
  /**
@@ -274,14 +281,18 @@ declare namespace wasm_bindgen {
274
281
  *
275
282
  * `block_profile` is the catalog `fec.blockProfile` (`"iso-ssbg1-v1"`);
276
283
  * any other value is refused.
284
+ *
285
+ * `algorithm` is the catalog `fec.algorithm`: `"raptorq"` (the default
286
+ * when omitted) or `"reed-solomon"` (K + P <= 255 per block).
277
287
  */
278
- constructor(k: number, symbol_size: number, block_profile: string);
288
+ constructor(k: number, symbol_size: number, block_profile: string, algorithm?: string | null);
279
289
  /**
280
290
  * The configured 12-byte OTI (RFC 6330 §3.3.2 Common FEC OTI).
281
291
  *
282
292
  * Publishers (BLO-8975 / BLO-8990 catalog-gen) emit this so the player's
283
293
  * [`MmtFecDecoder::configure`] reconstructs identical block geometry. The
284
- * bytes round-trip exactly through `OtiParams::from_bytes`.
294
+ * bytes round-trip exactly through `OtiParams::from_bytes`. Empty under
295
+ * `reed-solomon`, which has no OTI.
285
296
  */
286
297
  oti(): Uint8Array;
287
298
  /**
@@ -296,6 +307,10 @@ declare namespace wasm_bindgen {
296
307
  * Source symbols per block (K).
297
308
  */
298
309
  readonly k: number;
310
+ /**
311
+ * The `fec.algorithm` token this encoder was built for.
312
+ */
313
+ readonly algorithm: string;
299
314
  }
300
315
 
301
316
  /**
@@ -801,7 +816,6 @@ declare interface InitOutput {
801
816
  readonly __wbg_moqfecstatsjs_free: (a: number, b: number) => void;
802
817
  readonly __wbg_reassembledmfujs_free: (a: number, b: number) => void;
803
818
  readonly __wbg_recoveredset_free: (a: number, b: number) => void;
804
- readonly __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
805
819
  readonly __wbg_set_fecstats_blocks_complete: (a: number, b: bigint) => void;
806
820
  readonly __wbg_set_fecstats_blocks_delivery_failed: (a: number, b: bigint) => void;
807
821
  readonly __wbg_set_fecstats_blocks_failed: (a: number, b: bigint) => void;
@@ -844,6 +858,7 @@ declare interface InitOutput {
844
858
  readonly mmtfecdecoder_configure: (a: number, b: number, c: number) => [number, number];
845
859
  readonly mmtfecdecoder_configure_params: (a: number, b: number, c: number) => [number, number];
846
860
  readonly mmtfecdecoder_flush: (a: number) => void;
861
+ readonly mmtfecdecoder_get_algorithm: (a: number) => [number, number];
847
862
  readonly mmtfecdecoder_get_alignment: (a: number) => [number, number, number];
848
863
  readonly mmtfecdecoder_get_block_profile: (a: number) => [number, number];
849
864
  readonly mmtfecdecoder_get_interleave_depth: (a: number) => number;
@@ -852,14 +867,15 @@ declare interface InitOutput {
852
867
  readonly mmtfecdecoder_get_stats: (a: number) => number;
853
868
  readonly mmtfecdecoder_get_sub_blocks: (a: number) => [number, number, number];
854
869
  readonly mmtfecdecoder_get_symbol_size: (a: number) => [number, number, number];
855
- readonly mmtfecdecoder_new: (a: number, b: number, c: number) => [number, number, number];
870
+ readonly mmtfecdecoder_new: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
856
871
  readonly mmtfecdecoder_pending_blocks: (a: number) => number;
857
872
  readonly mmtfecdecoder_reset_stats: (a: number) => void;
858
873
  readonly mmtfecdecoder_retire_unplaced: (a: number, b: number) => [number, number, number];
874
+ readonly mmtfecencoder_algorithm: (a: number) => [number, number];
859
875
  readonly mmtfecencoder_block_profile: (a: number) => [number, number];
860
876
  readonly mmtfecencoder_encode_repair: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
861
877
  readonly mmtfecencoder_k: (a: number) => number;
862
- readonly mmtfecencoder_new: (a: number, b: number, c: number, d: number) => [number, number, number];
878
+ readonly mmtfecencoder_new: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
863
879
  readonly mmtfecencoder_oti: (a: number) => [number, number];
864
880
  readonly mmtfecencoder_symbol_size: (a: number) => number;
865
881
  readonly mmtpacketizer_build_mfu: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
@@ -934,6 +950,7 @@ declare interface InitOutput {
934
950
  readonly reassembledmfujs_sample_number: (a: number) => number;
935
951
  readonly reassembledmfujs_stream_identity: (a: number) => number;
936
952
  readonly reassembledmfujs_timestamp: (a: number) => number;
953
+ readonly recoveredset_fec_set_index: (a: number) => number;
937
954
  readonly recoveredset_payload: (a: number) => [number, number];
938
955
  readonly recoveredset_slot: (a: number) => bigint;
939
956
  readonly shredfecbuffer_add_shred: (a: number, b: bigint, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
@@ -950,7 +967,6 @@ declare interface InitOutput {
950
967
  readonly moqfecstatsjs_blocksComplete: (a: number) => number;
951
968
  readonly moqfecstatsjs_blocksIncomplete: (a: number) => number;
952
969
  readonly moqfecstatsjs_totalSymbolsReceived: (a: number) => number;
953
- readonly recoveredset_fec_set_index: (a: number) => number;
954
970
  readonly shredreassembler_pending_fec_sets: (a: number) => number;
955
971
  readonly __wbg_get_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number) => bigint;
956
972
  readonly __wbg_get_reassemblerstatsjs_duplicate_fragments: (a: number) => bigint;
@@ -965,6 +981,7 @@ declare interface InitOutput {
965
981
  readonly __wbg_get_samplecombinerstatsjs_passthrough_samples: (a: number) => bigint;
966
982
  readonly __wbg_get_samplecombinerstatsjs_timed_out_samples: (a: number) => bigint;
967
983
  readonly __wbg_reassemblerstatsjs_free: (a: number, b: number) => void;
984
+ readonly __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
968
985
  readonly __wbg_set_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number, b: bigint) => void;
969
986
  readonly __wbg_set_reassemblerstatsjs_duplicate_fragments: (a: number, b: bigint) => void;
970
987
  readonly __wbg_set_reassemblerstatsjs_evicted_data_units: (a: number, b: bigint) => void;
@@ -764,6 +764,22 @@ let wasm_bindgen;
764
764
  reset_stats() {
765
765
  wasm.mmtfecdecoder_reset_stats(this.__wbg_ptr);
766
766
  }
767
+ /**
768
+ * The `fec.algorithm` token this decoder was built for.
769
+ * @returns {string}
770
+ */
771
+ get_algorithm() {
772
+ let deferred1_0;
773
+ let deferred1_1;
774
+ try {
775
+ const ret = wasm.mmtfecdecoder_get_algorithm(this.__wbg_ptr);
776
+ deferred1_0 = ret[0];
777
+ deferred1_1 = ret[1];
778
+ return getStringFromWasm0(ret[0], ret[1]);
779
+ } finally {
780
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
781
+ }
782
+ }
767
783
  /**
768
784
  * Get alignment (Al) parameter from OTI
769
785
  * @returns {number}
@@ -918,13 +934,18 @@ let wasm_bindgen;
918
934
  * * `interleave_depth` - Explicit positive number of interleaved blocks.
919
935
  * * `block_profile` - Catalog `fec.blockProfile`: `"iso-ssbg1-v1"`.
920
936
  * Required; any other value is refused.
937
+ * * `algorithm` - Catalog `fec.algorithm`: `"raptorq"` (the default when
938
+ * omitted) or `"reed-solomon"`; any other value is refused.
921
939
  * @param {number} interleave_depth
922
940
  * @param {string} block_profile
941
+ * @param {string | null} [algorithm]
923
942
  */
924
- constructor(interleave_depth, block_profile) {
943
+ constructor(interleave_depth, block_profile, algorithm) {
925
944
  const ptr0 = passStringToWasm0(block_profile, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
926
945
  const len0 = WASM_VECTOR_LEN;
927
- const ret = wasm.mmtfecdecoder_new(interleave_depth, ptr0, len0);
946
+ var ptr1 = isLikeNone(algorithm) ? 0 : passStringToWasm0(algorithm, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
947
+ var len1 = WASM_VECTOR_LEN;
948
+ const ret = wasm.mmtfecdecoder_new(interleave_depth, ptr0, len0, ptr1, len1);
928
949
  if (ret[2]) {
929
950
  throw takeFromExternrefTable0(ret[1]);
930
951
  }
@@ -953,7 +974,8 @@ let wasm_bindgen;
953
974
  * Configure FEC from 12-byte OTI
954
975
  *
955
976
  * # Arguments
956
- * * `oti` - 12-byte Object Transmission Information from S-TSID fecOTI
977
+ * * `oti` - 12-byte RFC 6330 Common FEC OTI: decoder geometry per
978
+ * draft-fec-01 Section 4.2 (Z = 1, N = 1, Al = 8)
957
979
  * @param {Uint8Array} oti
958
980
  */
959
981
  configure(oti) {
@@ -1096,14 +1118,20 @@ let wasm_bindgen;
1096
1118
  *
1097
1119
  * `block_profile` is the catalog `fec.blockProfile` (`"iso-ssbg1-v1"`);
1098
1120
  * any other value is refused.
1121
+ *
1122
+ * `algorithm` is the catalog `fec.algorithm`: `"raptorq"` (the default
1123
+ * when omitted) or `"reed-solomon"` (K + P <= 255 per block).
1099
1124
  * @param {number} k
1100
1125
  * @param {number} symbol_size
1101
1126
  * @param {string} block_profile
1127
+ * @param {string | null} [algorithm]
1102
1128
  */
1103
- constructor(k, symbol_size, block_profile) {
1129
+ constructor(k, symbol_size, block_profile, algorithm) {
1104
1130
  const ptr0 = passStringToWasm0(block_profile, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1105
1131
  const len0 = WASM_VECTOR_LEN;
1106
- const ret = wasm.mmtfecencoder_new(k, symbol_size, ptr0, len0);
1132
+ var ptr1 = isLikeNone(algorithm) ? 0 : passStringToWasm0(algorithm, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
1133
+ var len1 = WASM_VECTOR_LEN;
1134
+ const ret = wasm.mmtfecencoder_new(k, symbol_size, ptr0, len0, ptr1, len1);
1107
1135
  if (ret[2]) {
1108
1136
  throw takeFromExternrefTable0(ret[1]);
1109
1137
  }
@@ -1116,7 +1144,8 @@ let wasm_bindgen;
1116
1144
  *
1117
1145
  * Publishers (BLO-8975 / BLO-8990 catalog-gen) emit this so the player's
1118
1146
  * [`MmtFecDecoder::configure`] reconstructs identical block geometry. The
1119
- * bytes round-trip exactly through `OtiParams::from_bytes`.
1147
+ * bytes round-trip exactly through `OtiParams::from_bytes`. Empty under
1148
+ * `reed-solomon`, which has no OTI.
1120
1149
  * @returns {Uint8Array}
1121
1150
  */
1122
1151
  oti() {
@@ -1125,6 +1154,22 @@ let wasm_bindgen;
1125
1154
  wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
1126
1155
  return v1;
1127
1156
  }
1157
+ /**
1158
+ * The `fec.algorithm` token this encoder was built for.
1159
+ * @returns {string}
1160
+ */
1161
+ get algorithm() {
1162
+ let deferred1_0;
1163
+ let deferred1_1;
1164
+ try {
1165
+ const ret = wasm.mmtfecencoder_algorithm(this.__wbg_ptr);
1166
+ deferred1_0 = ret[0];
1167
+ deferred1_1 = ret[1];
1168
+ return getStringFromWasm0(ret[0], ret[1]);
1169
+ } finally {
1170
+ wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
1171
+ }
1172
+ }
1128
1173
  }
1129
1174
  if (Symbol.dispose) MmtFecEncoder.prototype[Symbol.dispose] = MmtFecEncoder.prototype.free;
1130
1175
  __exports.MmtFecEncoder = MmtFecEncoder;
@@ -2327,7 +2372,7 @@ let wasm_bindgen;
2327
2372
  * @returns {number}
2328
2373
  */
2329
2374
  get fec_set_index() {
2330
- const ret = wasm.mmtfecencoder_k(this.__wbg_ptr);
2375
+ const ret = wasm.recoveredset_fec_set_index(this.__wbg_ptr);
2331
2376
  return ret >>> 0;
2332
2377
  }
2333
2378
  /**
Binary file
@@ -24,7 +24,6 @@ export const __wbg_moqfecencoder_free: (a: number, b: number) => void;
24
24
  export const __wbg_moqfecstatsjs_free: (a: number, b: number) => void;
25
25
  export const __wbg_reassembledmfujs_free: (a: number, b: number) => void;
26
26
  export const __wbg_recoveredset_free: (a: number, b: number) => void;
27
- export const __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
28
27
  export const __wbg_set_fecstats_blocks_complete: (a: number, b: bigint) => void;
29
28
  export const __wbg_set_fecstats_blocks_delivery_failed: (a: number, b: bigint) => void;
30
29
  export const __wbg_set_fecstats_blocks_failed: (a: number, b: bigint) => void;
@@ -67,6 +66,7 @@ export const mmtfecdecoder_cleanup_by_ss_start: (a: number, b: number) => [numbe
67
66
  export const mmtfecdecoder_configure: (a: number, b: number, c: number) => [number, number];
68
67
  export const mmtfecdecoder_configure_params: (a: number, b: number, c: number) => [number, number];
69
68
  export const mmtfecdecoder_flush: (a: number) => void;
69
+ export const mmtfecdecoder_get_algorithm: (a: number) => [number, number];
70
70
  export const mmtfecdecoder_get_alignment: (a: number) => [number, number, number];
71
71
  export const mmtfecdecoder_get_block_profile: (a: number) => [number, number];
72
72
  export const mmtfecdecoder_get_interleave_depth: (a: number) => number;
@@ -75,14 +75,15 @@ export const mmtfecdecoder_get_source_blocks: (a: number) => [number, number, nu
75
75
  export const mmtfecdecoder_get_stats: (a: number) => number;
76
76
  export const mmtfecdecoder_get_sub_blocks: (a: number) => [number, number, number];
77
77
  export const mmtfecdecoder_get_symbol_size: (a: number) => [number, number, number];
78
- export const mmtfecdecoder_new: (a: number, b: number, c: number) => [number, number, number];
78
+ export const mmtfecdecoder_new: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
79
79
  export const mmtfecdecoder_pending_blocks: (a: number) => number;
80
80
  export const mmtfecdecoder_reset_stats: (a: number) => void;
81
81
  export const mmtfecdecoder_retire_unplaced: (a: number, b: number) => [number, number, number];
82
+ export const mmtfecencoder_algorithm: (a: number) => [number, number];
82
83
  export const mmtfecencoder_block_profile: (a: number) => [number, number];
83
84
  export const mmtfecencoder_encode_repair: (a: number, b: number, c: number, d: number, e: number) => [number, number, number, number];
84
85
  export const mmtfecencoder_k: (a: number) => number;
85
- export const mmtfecencoder_new: (a: number, b: number, c: number, d: number) => [number, number, number];
86
+ export const mmtfecencoder_new: (a: number, b: number, c: number, d: number, e: number, f: number) => [number, number, number];
86
87
  export const mmtfecencoder_oti: (a: number) => [number, number];
87
88
  export const mmtfecencoder_symbol_size: (a: number) => number;
88
89
  export const mmtpacketizer_build_mfu: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => [number, number, number, number];
@@ -157,6 +158,7 @@ export const reassembledmfujs_repaired_packet_sequence_numbers: (a: number) => [
157
158
  export const reassembledmfujs_sample_number: (a: number) => number;
158
159
  export const reassembledmfujs_stream_identity: (a: number) => number;
159
160
  export const reassembledmfujs_timestamp: (a: number) => number;
161
+ export const recoveredset_fec_set_index: (a: number) => number;
160
162
  export const recoveredset_payload: (a: number) => [number, number];
161
163
  export const recoveredset_slot: (a: number) => bigint;
162
164
  export const shredfecbuffer_add_shred: (a: number, b: bigint, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number];
@@ -173,7 +175,6 @@ export const moqencodedblock_p: (a: number) => number;
173
175
  export const moqfecstatsjs_blocksComplete: (a: number) => number;
174
176
  export const moqfecstatsjs_blocksIncomplete: (a: number) => number;
175
177
  export const moqfecstatsjs_totalSymbolsReceived: (a: number) => number;
176
- export const recoveredset_fec_set_index: (a: number) => number;
177
178
  export const shredreassembler_pending_fec_sets: (a: number) => number;
178
179
  export const __wbg_get_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number) => bigint;
179
180
  export const __wbg_get_reassemblerstatsjs_duplicate_fragments: (a: number) => bigint;
@@ -188,6 +189,7 @@ export const __wbg_get_samplecombinerstatsjs_evicted_samples: (a: number) => big
188
189
  export const __wbg_get_samplecombinerstatsjs_passthrough_samples: (a: number) => bigint;
189
190
  export const __wbg_get_samplecombinerstatsjs_timed_out_samples: (a: number) => bigint;
190
191
  export const __wbg_reassemblerstatsjs_free: (a: number, b: number) => void;
192
+ export const __wbg_samplecombinerstatsjs_free: (a: number, b: number) => void;
191
193
  export const __wbg_set_reassemblerstatsjs_ambiguous_fallback_fragments: (a: number, b: bigint) => void;
192
194
  export const __wbg_set_reassemblerstatsjs_duplicate_fragments: (a: number, b: bigint) => void;
193
195
  export const __wbg_set_reassemblerstatsjs_evicted_data_units: (a: number, b: bigint) => void;