@dolbylaboratories/alps 2.0.0 → 3.0.0-alpha.2

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.
@@ -1102,35 +1102,69 @@ var PRESENTATION_LEVEL = "presentation_level";
1102
1102
  var PAYLOAD_BASE_MINUS1 = "payload_base_minus1";
1103
1103
  var BYTE_ALIGNMENT = "byte_alignment";
1104
1104
  var AC4_TOC_END = "ac4_toc_end";
1105
+ var PAYLOAD_BASE = "payload_base";
1105
1106
 
1106
1107
  // src/bitwise_operations.js
1108
+ var rev = (byte) => {
1109
+ let result = (byte & 240) >>> 4 | (byte & 15) << 4;
1110
+ result = (result & 204) >>> 2 | (result & 51) << 2;
1111
+ result = (result & 170) >>> 1 | (result & 85) << 1;
1112
+ return result;
1113
+ };
1107
1114
  var shiftLeft = (data, offset, width, shift) => {
1115
+ if (width === 0) return data;
1108
1116
  const startByte = offset >> 3;
1109
1117
  const endByte = offset + width - 1 >> 3;
1110
- const startBit = offset & 7;
1111
- const endBit = offset + width - 1 & 7;
1112
- const startMask = 255 >> startBit;
1113
- const endMask = 255 << 7 - endBit & 255;
1118
+ const startMask = 255 >> (offset & 7);
1119
+ const endMask = 255 << 7 - (offset + width - 1 & 7) & 255;
1120
+ const useBitwise = shift < 24;
1121
+ const shiftMul = useBitwise ? 0 : 2 ** shift;
1114
1122
  let shiftAcc = 0;
1115
1123
  for (let i = endByte; i >= startByte; i--) {
1116
- const currByte = data.getUint8(i);
1117
1124
  let mask = 255;
1118
- if (i === startByte) {
1119
- mask &= startMask;
1125
+ if (i === startByte) mask &= startMask;
1126
+ if (i === endByte) mask &= endMask;
1127
+ const byte = data.getUint8(i);
1128
+ if (useBitwise) {
1129
+ shiftAcc = ((byte & mask) << shift) + shiftAcc;
1130
+ data.setUint8(i, byte & ~mask | shiftAcc & 255 & mask);
1131
+ shiftAcc >>>= 8;
1132
+ } else {
1133
+ shiftAcc = (byte & mask) * shiftMul + shiftAcc;
1134
+ data.setUint8(i, byte & ~mask | shiftAcc % 256 & mask);
1135
+ shiftAcc = Math.trunc(shiftAcc / 256);
1120
1136
  }
1121
- if (i === endByte) {
1122
- mask &= endMask;
1137
+ }
1138
+ return data;
1139
+ };
1140
+ var shiftRight = (data, offset, width, shift) => {
1141
+ if (width === 0) return data;
1142
+ const startByte = offset >> 3;
1143
+ const endByte = offset + width - 1 >> 3;
1144
+ const startMask = 255 >> (offset & 7);
1145
+ const endMask = 255 << 7 - (offset + width - 1 & 7) & 255;
1146
+ const useBitwise = shift < 24;
1147
+ const shiftMul = useBitwise ? 0 : 2 ** shift;
1148
+ let shiftAcc = 0;
1149
+ for (let i = startByte; i <= endByte; i++) {
1150
+ let mask = 255;
1151
+ if (i === startByte) mask &= startMask;
1152
+ if (i === endByte) mask &= endMask;
1153
+ const byte = data.getUint8(i);
1154
+ if (useBitwise) {
1155
+ shiftAcc = (rev(byte & mask) << shift) + shiftAcc;
1156
+ data.setUint8(i, byte & ~mask | rev(shiftAcc & 255) & mask);
1157
+ shiftAcc >>>= 8;
1158
+ } else {
1159
+ shiftAcc = rev(byte & mask) * shiftMul + shiftAcc;
1160
+ data.setUint8(i, byte & ~mask | rev(shiftAcc % 256) & mask);
1161
+ shiftAcc = Math.trunc(shiftAcc / 256);
1123
1162
  }
1124
- const clearedByte = currByte & ~mask;
1125
- const maskedCurrByte = currByte & mask;
1126
- shiftAcc = (maskedCurrByte << shift) + shiftAcc;
1127
- const shiftedCurrByte = clearedByte | shiftAcc & 255 & mask;
1128
- shiftAcc >>= 8;
1129
- data.setUint8(i, shiftedCurrByte);
1130
1163
  }
1131
1164
  return data;
1132
1165
  };
1133
1166
  var setBits = (data, offset, width, value) => {
1167
+ console.assert(value >> width === 0, "value is not a ".concat(width, " bit value"));
1134
1168
  const byteOffset = offset >>> 3;
1135
1169
  const bitOffset = offset & 7;
1136
1170
  const mask = (1 << width) - 1 << 16 - width >> bitOffset;
@@ -1216,6 +1250,9 @@ var BitSource = class {
1216
1250
  const BYTE_SIZE = 8;
1217
1251
  const INT_SIZE = 32;
1218
1252
  if (bitsWidth > MAX_SUPPORTED_WIDTH) {
1253
+ console.warn(
1254
+ "BitSource.get getting value ".concat(varname, " with not supported width=").concat(bitsWidth, " (max supported width: 24)")
1255
+ );
1219
1256
  }
1220
1257
  let width = bitsWidth;
1221
1258
  while (this.bitsLeft < width) {
@@ -1312,6 +1349,17 @@ var FilterSink = class {
1312
1349
  this.callback(name, null, null, position, "after_position");
1313
1350
  }
1314
1351
  }
1352
+ /**
1353
+ * Called after a derived/computed value is assigned to a variable (e.g. when
1354
+ * `payload_base` is extended beyond the initial 5-bit field).
1355
+ * @param {string} name - name of the AC-4 TOC element
1356
+ * @param {number} value - final computed value of the element
1357
+ */
1358
+ after_add(name, value) {
1359
+ if (this.elements.includes(name)) {
1360
+ this.callback(name, value, null, null, "after_add");
1361
+ }
1362
+ }
1315
1363
  };
1316
1364
 
1317
1365
  // src/ac4_toc_parser.js
@@ -1423,8 +1471,8 @@ var Parser = class {
1423
1471
  }
1424
1472
  }
1425
1473
  F_bitrate_indicator() {
1426
- var bi;
1427
1474
  var factor;
1475
+ var bi;
1428
1476
  {
1429
1477
  {
1430
1478
  bi = this.BAM_source.get("", 3);
@@ -1454,12 +1502,12 @@ var Parser = class {
1454
1502
  }
1455
1503
  }
1456
1504
  F_content_type() {
1505
+ var b_start_tag;
1457
1506
  var b_serialized_language_tag;
1458
- var n_language_tag_bytes;
1507
+ var b_language_indicator;
1459
1508
  var language_tag_chunk;
1509
+ var n_language_tag_bytes;
1460
1510
  var language_tag_bytes;
1461
- var b_language_indicator;
1462
- var b_start_tag;
1463
1511
  {
1464
1512
  {
1465
1513
  this.content_classifier = this.BAM_source.get("", 3);
@@ -1505,19 +1553,19 @@ var Parser = class {
1505
1553
  }
1506
1554
  }
1507
1555
  F_ac4_substream_info_chan(asio_group_index, asio_gs_index, asio_b_substreams_present_chan) {
1508
- var substream_index;
1509
- var b_sf_multiplier;
1510
- var b_bitrate_info;
1511
1556
  var si_ch_mode;
1512
- var si_channel_mode;
1513
1557
  var top_channels_present;
1514
- var b_4_back_channels_present;
1515
1558
  var si_b_iframe;
1559
+ var si_channel_mode;
1560
+ var b_bitrate_info;
1561
+ var b_sf_multiplier;
1516
1562
  var b_center_present;
1563
+ var add_ch_base;
1564
+ var b_4_back_channels_present;
1565
+ var sf_multiplier;
1566
+ var substream_index;
1517
1567
  var b_lfe = null;
1518
1568
  var b_lfe;
1519
- var sf_multiplier;
1520
- var add_ch_base;
1521
1569
  {
1522
1570
  {
1523
1571
  this.F_define_channel_modes();
@@ -1754,18 +1802,18 @@ var Parser = class {
1754
1802
  }
1755
1803
  }
1756
1804
  F_ac4_substream_info(si_b_associated, si_b_dialog, si_ps_index) {
1757
- var substream_index;
1805
+ var sf_multiplier;
1806
+ var b_associated_content;
1758
1807
  var si_b_iframe;
1759
- var b_sf_multiplier;
1808
+ var si_channel_mode;
1760
1809
  var b_bitrate_info;
1810
+ var b_sf_multiplier;
1761
1811
  var b_dialog_content;
1762
- var si_channel_mode;
1812
+ var b_content_type;
1813
+ var add_ch_base;
1814
+ var substream_index;
1763
1815
  var b_lfe = null;
1764
1816
  var b_lfe;
1765
- var sf_multiplier;
1766
- var add_ch_base;
1767
- var b_associated_content;
1768
- var b_content_type;
1769
1817
  {
1770
1818
  {
1771
1819
  this.F_define_channel_modes();
@@ -1961,10 +2009,10 @@ var Parser = class {
1961
2009
  }
1962
2010
  }
1963
2011
  F_emdf_protection() {
1964
- var protection_bits_secondary;
2012
+ var protection_bits_primary;
1965
2013
  var protection_length_secondary;
2014
+ var protection_bits_secondary;
1966
2015
  var protection_length_primary;
1967
- var protection_bits_primary;
1968
2016
  {
1969
2017
  {
1970
2018
  protection_length_primary = this.BAM_source.get("", 2);
@@ -2148,17 +2196,17 @@ var Parser = class {
2148
2196
  }
2149
2197
  }
2150
2198
  F_oamd_common_data() {
2151
- var add_data_bits;
2152
- var ocd_p1;
2153
- var add_data;
2154
- var ocd_p0;
2155
- var bits_used;
2156
- var b_bed_object_chan_distribute;
2157
- var master_screen_size_ratio;
2158
2199
  var add_data_bytes_minus1;
2159
2200
  var add_data_bytes;
2160
2201
  var b_additional_data;
2202
+ var bits_used;
2203
+ var ocd_p1;
2204
+ var master_screen_size_ratio;
2205
+ var add_data;
2206
+ var b_bed_object_chan_distribute;
2207
+ var add_data_bits;
2161
2208
  var b_default_screen_size_ratio;
2209
+ var ocd_p0;
2162
2210
  {
2163
2211
  {
2164
2212
  b_default_screen_size_ratio = this.BAM_source.get("", 1);
@@ -2247,23 +2295,23 @@ var Parser = class {
2247
2295
  }
2248
2296
  }
2249
2297
  F_ac4_substream_info_ajoc(asio_group_index, asio_gs_index_ajoc, asio_b_substreams_present) {
2250
- var n_fullband_upmix_signals_minus1;
2251
- var substream_index;
2252
2298
  var b_oamd_common_data_present;
2299
+ var si_b_iframe;
2253
2300
  var b_sf_multiplier;
2301
+ var si_channel_mode_j;
2254
2302
  var b_bitrate_info;
2303
+ var sf_multiplier;
2304
+ var n_fullband_upmix_signals_minus1;
2305
+ var b_static_dmx;
2255
2306
  var n_fullband_dmx_signals;
2307
+ var n_fullband_dmx_signals_minus1;
2256
2308
  var n_fullband_upmix_signals;
2257
- var si_b_iframe;
2258
2309
  var num_objects_DYNAMIC = null;
2259
2310
  var num_objects_DYNAMIC;
2311
+ var substream_index;
2260
2312
  var ajoc_b_lfe;
2261
- var n_fullband_dmx_signals_minus1;
2262
2313
  var b_lfe = null;
2263
2314
  var b_lfe;
2264
- var si_channel_mode_j;
2265
- var b_static_dmx;
2266
- var sf_multiplier;
2267
2315
  {
2268
2316
  {
2269
2317
  num_objects_DYNAMIC = this.BAM_g_table6.slice(0);
@@ -2481,18 +2529,18 @@ var Parser = class {
2481
2529
  }
2482
2530
  }
2483
2531
  F_ac4_substream_group_info(si_group_index) {
2484
- var obj_index;
2485
- var b_dialog_content;
2486
- var sus;
2487
- var n_lf_substreams;
2488
- var b_substreams_present;
2489
2532
  var b_channel_coded;
2533
+ var sus_ver;
2490
2534
  var b_ajoc;
2535
+ var sus;
2536
+ var b_dialog_content;
2491
2537
  var n_lf_substreams_minus2;
2492
- var sus_ver;
2538
+ var obj_index;
2539
+ var b_associated_content;
2493
2540
  var b_oamd_substream;
2541
+ var n_lf_substreams;
2542
+ var b_substreams_present;
2494
2543
  var b_content_type;
2495
- var b_associated_content;
2496
2544
  {
2497
2545
  {
2498
2546
  b_substreams_present = this.BAM_source.get("", 1);
@@ -2721,8 +2769,8 @@ var Parser = class {
2721
2769
  }
2722
2770
  }
2723
2771
  F_oamd_substream_info(oamd_b_substreams_present) {
2724
- var substream_index;
2725
2772
  var b_iframe_oamd;
2773
+ var substream_index;
2726
2774
  {
2727
2775
  {
2728
2776
  this.F_define_oamd();
@@ -2774,32 +2822,32 @@ var Parser = class {
2774
2822
  }
2775
2823
  }
2776
2824
  F_ac4_substream_info_obj(asio_group_index, asio_gs_index, asio_gs_index_obj, asio_b_substreams_present) {
2777
- var obj_type;
2778
- var b_nonstd_bed_channel_assignment;
2779
- var res_bytes;
2780
- var b_bed_start;
2781
- var bed_chan_assign_code;
2782
- var j;
2825
+ var si_b_lfe;
2783
2826
  var si_b_iframe;
2784
- var n_objs;
2785
- var si_num_channels;
2786
2827
  var reserved_data;
2787
- var b_isf_start;
2788
2828
  var n_objects_code;
2789
- var isf_config;
2790
- var substream_index;
2829
+ var b_isf_start;
2791
2830
  var b_sf_multiplier;
2792
- var b_bed_objects;
2831
+ var obj_type;
2832
+ var b_bed_start;
2833
+ var j;
2834
+ var isf_config;
2835
+ var n_objs;
2836
+ var res_bytes;
2837
+ var b_ch_assign_code;
2793
2838
  var b_dynamic_objects;
2839
+ var std_bed_channel_assignment_mask;
2840
+ var nonstd_bed_channel_assignment_mask;
2794
2841
  var b_bitrate_info;
2842
+ var b_bed_objects;
2843
+ var bed_chan_assign_code;
2844
+ var sf_multiplier;
2845
+ var si_num_channels;
2795
2846
  var b_isf;
2796
- var nonstd_bed_channel_assignment_mask;
2797
- var b_ch_assign_code;
2847
+ var b_nonstd_bed_channel_assignment;
2848
+ var substream_index;
2798
2849
  var b_lfe = null;
2799
2850
  var b_lfe;
2800
- var std_bed_channel_assignment_mask;
2801
- var sf_multiplier;
2802
- var si_b_lfe;
2803
2851
  {
2804
2852
  {
2805
2853
  n_objs = 0;
@@ -3094,23 +3142,23 @@ var Parser = class {
3094
3142
  }
3095
3143
  }
3096
3144
  F_bed_dyn_obj_assignment(n_signals, b_upmix, bd_lfe) {
3145
+ var b_ch_assign_code;
3146
+ var b_chan_assign_mask;
3147
+ var std_bed_channel_assignment_mask;
3148
+ var lfe_signalled;
3149
+ var nonstd_bed_channel_assignment_mask;
3150
+ var obj_type;
3151
+ var b_is_isf;
3097
3152
  var n_isf;
3153
+ var bed_ch_bits;
3154
+ var b_dyn_objects_only;
3155
+ var nonstd_bed_channel_assignment;
3098
3156
  var isf_config;
3157
+ var bed_chan_assign_code;
3099
3158
  var oc_num_channels;
3100
- var obj_type;
3101
3159
  var n_bed_signals_minus1;
3102
- var b_nonstd_bed_channel_assignment;
3103
- var nonstd_bed_channel_assignment;
3104
- var bed_chan_assign_code;
3105
- var nonstd_bed_channel_assignment_mask;
3106
- var lfe_signalled;
3107
- var b_is_isf;
3108
3160
  var n_bed_signals;
3109
- var bed_ch_bits;
3110
- var b_ch_assign_code;
3111
- var std_bed_channel_assignment_mask;
3112
- var b_dyn_objects_only;
3113
- var b_chan_assign_mask;
3161
+ var b_nonstd_bed_channel_assignment;
3114
3162
  var b;
3115
3163
  {
3116
3164
  {
@@ -3258,11 +3306,11 @@ var Parser = class {
3258
3306
  }
3259
3307
  }
3260
3308
  F_ac4_presentation_substream_info(aps_presentation_version) {
3309
+ var b_alternative;
3310
+ var b_iframe_pres;
3261
3311
  var substream_index;
3262
3312
  var b_lfe = null;
3263
3313
  var b_lfe;
3264
- var b_alternative;
3265
- var b_iframe_pres;
3266
3314
  {
3267
3315
  {
3268
3316
  b_alternative = this.BAM_source.get("", 1);
@@ -3306,8 +3354,8 @@ var Parser = class {
3306
3354
  }
3307
3355
  }
3308
3356
  F_presentation_version() {
3309
- var val;
3310
3357
  var b_tmp;
3358
+ var val;
3311
3359
  {
3312
3360
  {
3313
3361
  val = 0;
@@ -3480,16 +3528,16 @@ var Parser = class {
3480
3528
  }
3481
3529
  }
3482
3530
  F_define_channel_modes() {
3483
- var CHANNEL_MODE_7X_34 = null;
3484
- var CHANNEL_MODE_7X_34;
3485
- var CHANNEL_MODE_7X_322 = null;
3486
- var CHANNEL_MODE_7X_322;
3487
- var CHANNEL_MODE_7X = null;
3488
- var CHANNEL_MODE_7X;
3489
3531
  var CHANNEL_MODE_7X_52 = null;
3490
3532
  var CHANNEL_MODE_7X_52;
3491
3533
  var CHANNEL_MODE_5X = null;
3492
3534
  var CHANNEL_MODE_5X;
3535
+ var CHANNEL_MODE_7X_34 = null;
3536
+ var CHANNEL_MODE_7X_34;
3537
+ var CHANNEL_MODE_7X = null;
3538
+ var CHANNEL_MODE_7X;
3539
+ var CHANNEL_MODE_7X_322 = null;
3540
+ var CHANNEL_MODE_7X_322;
3493
3541
  {
3494
3542
  {
3495
3543
  this.CHANNEL_MODE_MONO = 0;
@@ -3598,8 +3646,8 @@ var Parser = class {
3598
3646
  }
3599
3647
  }
3600
3648
  F_variable_bits(n_bits) {
3601
- var read;
3602
3649
  var value;
3650
+ var read;
3603
3651
  var b_read_more;
3604
3652
  {
3605
3653
  {
@@ -3637,9 +3685,9 @@ var Parser = class {
3637
3685
  }
3638
3686
  }
3639
3687
  F_raw_ac4_frame_toc_only() {
3640
- var ac4_toc_end;
3641
- var ac4_toc_begin;
3642
3688
  var frame_len_base;
3689
+ var ac4_toc_begin;
3690
+ var ac4_toc_end;
3643
3691
  {
3644
3692
  {
3645
3693
  ac4_toc_begin = this.BAM_g_position;
@@ -3864,16 +3912,16 @@ var Parser = class {
3864
3912
  }
3865
3913
  }
3866
3914
  F_substream_index_table() {
3867
- var b_size_present;
3868
3915
  var substream_type = null;
3869
3916
  var substream_type;
3917
+ var b_size_present;
3918
+ var n_substreams;
3870
3919
  var b_substream_type_known = null;
3871
3920
  var b_substream_type_known;
3872
3921
  var substream_size = null;
3873
3922
  var substream_size;
3874
- var n_substreams;
3875
- var s;
3876
3923
  var b_more_bits;
3924
+ var s;
3877
3925
  {
3878
3926
  {
3879
3927
  n_substreams = this.BAM_source.get("", 2);
@@ -4232,21 +4280,21 @@ var Parser = class {
4232
4280
  }
4233
4281
  }
4234
4282
  F_ac4_toc() {
4283
+ var payload_base;
4284
+ var program_uuid;
4235
4285
  var b_wait_frames;
4286
+ var b_program_uuid_present;
4287
+ var b_payload_base;
4288
+ var short_program_id;
4236
4289
  var payload_base_minus1;
4237
- var n_presentations;
4290
+ var sequence_counter;
4238
4291
  var wait_frames;
4239
- var b_payload_base;
4240
- var program_uuid;
4241
- var total_n_substream_groups;
4242
- var payload_base;
4243
- var b_program_uuid_present;
4244
- var b_single_presentation;
4245
4292
  var b_iframe_global;
4246
- var sequence_counter;
4247
- var b_program_id;
4248
4293
  var b_more_presentations;
4249
- var short_program_id;
4294
+ var total_n_substream_groups;
4295
+ var n_presentations;
4296
+ var b_program_id;
4297
+ var b_single_presentation;
4250
4298
  {
4251
4299
  {
4252
4300
  this.bitstream_version = this.BAM_source.get("", 2);
@@ -4365,6 +4413,7 @@ var Parser = class {
4365
4413
  }
4366
4414
  {
4367
4415
  payload_base += this.v;
4416
+ this.BAM_sink.after_add("payload_base", payload_base);
4368
4417
  }
4369
4418
  }
4370
4419
  }
@@ -4521,8 +4570,8 @@ var Parser = class {
4521
4570
  }
4522
4571
  }
4523
4572
  F_frame_rate_multiply_info() {
4524
- var multiplier_bit;
4525
4573
  var b_multiplier;
4574
+ var multiplier_bit;
4526
4575
  {
4527
4576
  if (this.BAM_g_table14.slice(0).indexOf(this.frame_rate_index) >= 0) {
4528
4577
  {
@@ -4566,9 +4615,9 @@ var Parser = class {
4566
4615
  }
4567
4616
  }
4568
4617
  F_frame_rate_fractions_info() {
4569
- var b_frame_rate_fraction_is_4;
4570
- var frame_rate_fraction;
4571
4618
  var b_frame_rate_fraction;
4619
+ var frame_rate_fraction;
4620
+ var b_frame_rate_fraction_is_4;
4572
4621
  {
4573
4622
  {
4574
4623
  frame_rate_fraction = 1;
@@ -4639,6 +4688,7 @@ var parseTocElements = (data, elements) => {
4639
4688
  try {
4640
4689
  parser.F_raw_ac4_frame_toc_only();
4641
4690
  } catch (err) {
4691
+ console.error(err);
4642
4692
  parsedElements = null;
4643
4693
  }
4644
4694
  return parsedElements;
@@ -4649,19 +4699,27 @@ var PRESENTATION_LEVEL_WIDTH = 3;
4649
4699
  var UNDECODABLE_PRESENTATION_LEVEL = 7;
4650
4700
  var BITS_TO_SHIFT_TO_DIVIDE_BY_8 = 3;
4651
4701
  var MINIMUM_PRESENTATIONS_AMOUNT = 2;
4652
- var DIALOG_GAIN_ADJUSTMENT_FACTOR = 256;
4702
+ var DIALOG_GAIN_ADJUSTMENT_FACTOR = 2;
4703
+ var MAX_PAYLOAD_BASE = 39;
4704
+ var PAYLOAD_BASE_EXTENDED_THRESHOLD = 31;
4705
+ var PAYLOAD_BASE_MINUS1_FIELD_WIDTH = 5;
4706
+ var PAYLOAD_BASE_EXTENSION_WIDTH = 3;
4707
+ var PAYLOAD_BASE_EXTENSION_RANGE_START = 32;
4708
+ var VARIABLE_BITS_CONTINUE_SIZE = 1;
4653
4709
  var elementsToParse = [
4654
4710
  PRESENTATION_LEVEL,
4655
4711
  B_PRESENTATION_ID,
4656
4712
  PRESENTATION_ID,
4657
4713
  PAYLOAD_BASE_MINUS1,
4658
4714
  BYTE_ALIGNMENT,
4659
- AC4_TOC_END
4715
+ AC4_TOC_END,
4716
+ PAYLOAD_BASE
4660
4717
  ];
4661
4718
  var processIsoBmffInitSegment = (parsedSegmentBuffer) => {
4662
4719
  var _a, _b, _c, _d;
4663
4720
  const movie = parsedSegmentBuffer.fetch(MOVIE);
4664
4721
  const meta = parsedSegmentBuffer.fetch(META);
4722
+ console.log("ALPS::processIsoBmffSegment - found init segment");
4665
4723
  const presentations = [];
4666
4724
  const groupsList = meta && meta.boxes.find((box) => box.type === GROUPS_LIST);
4667
4725
  const preselectionGroups = groupsList && groupsList.boxes.filter((box) => box.type === PRESELECTION_GROUP);
@@ -4709,21 +4767,32 @@ var processIsoBmffInitSegment = (parsedSegmentBuffer) => {
4709
4767
  }
4710
4768
  }
4711
4769
  } else {
4770
+ console.log("ALPS::processIsoBmffSegment - no preselection group found");
4712
4771
  }
4713
4772
  return presentations;
4714
4773
  };
4715
4774
  var processIsoBmffMediaSegment = (parsedSegmentBuffer, activePresentationId) => {
4775
+ var _a;
4776
+ console.log("ALPS::processIsoBmffSegment - processing moof media. ActivePresentation: ".concat(activePresentationId));
4716
4777
  const sampleOffsets = getSampleOffsets(parsedSegmentBuffer);
4778
+ console.log("ALPS::processIsoBmffSegment - obtained ".concat(sampleOffsets.length, " sample offsets"));
4717
4779
  for (const sampleOffset of sampleOffsets) {
4718
4780
  const sampleData = new DataView(parsedSegmentBuffer._raw.buffer, sampleOffset.offset, sampleOffset.size);
4719
4781
  const parsedElements = parseTocElements(sampleData, elementsToParse);
4720
4782
  if (parsedElements === null) {
4783
+ console.log("ALPS::processIsobmffSegment - parsing error");
4721
4784
  return null;
4722
4785
  }
4723
4786
  const payloadBaseMinus1 = parsedElements.find((element) => element.name === PAYLOAD_BASE_MINUS1);
4724
4787
  if (!payloadBaseMinus1) {
4788
+ console.log("ALPS::processIsobmffSegment - payloadBaseMinus1 field not found, returning unmodified buffer");
4725
4789
  return null;
4726
4790
  }
4791
+ let payloadBase = (_a = parsedElements.find((element) => element.name === PAYLOAD_BASE)) == null ? void 0 : _a.value;
4792
+ if (!payloadBase) {
4793
+ console.log("ALPS::processIsobmffSegment - payloadBase field not found");
4794
+ payloadBase = payloadBaseMinus1.value + 1;
4795
+ }
4727
4796
  let accumulatedShift = 0;
4728
4797
  const byteAlignment = parsedElements.find((element) => element.name === BYTE_ALIGNMENT);
4729
4798
  if (byteAlignment) {
@@ -4741,6 +4810,7 @@ var processIsoBmffMediaSegment = (parsedSegmentBuffer, activePresentationId) =>
4741
4810
  case PRESENTATION_ID: {
4742
4811
  const lastPresentationOffset = presentationOffsets[presentationOffsets.length - 1];
4743
4812
  if (presentationOffsets.length === 0) {
4813
+ console.error("Encountered a presentationID without a presentation");
4744
4814
  }
4745
4815
  if (element.handler === "before_call") {
4746
4816
  lastPresentationOffset.presentationIdPos = element.pos;
@@ -4758,38 +4828,56 @@ var processIsoBmffMediaSegment = (parsedSegmentBuffer, activePresentationId) =>
4758
4828
  break;
4759
4829
  }
4760
4830
  case PAYLOAD_BASE_MINUS1:
4831
+ case PAYLOAD_BASE:
4761
4832
  case BYTE_ALIGNMENT:
4762
4833
  case AC4_TOC_END: {
4763
4834
  break;
4764
4835
  }
4765
4836
  default: {
4837
+ console.error("Unknown TOC parsed element: ".concat(element.name));
4766
4838
  }
4767
4839
  }
4768
4840
  });
4769
4841
  if (presentationOffsets.length < MINIMUM_PRESENTATIONS_AMOUNT) {
4842
+ console.log("ALPS::processIsobmffSegment - less then 2 presentations found");
4770
4843
  return null;
4771
4844
  }
4772
4845
  if (presentationOffsets.some((presentation) => presentation.presentationId === void 0)) {
4846
+ console.error("Not every presentation carries an ID");
4773
4847
  return null;
4774
4848
  }
4775
4849
  if (presentationOffsets.every((offset) => offset.presentationId !== activePresentationId)) {
4850
+ console.log("ALPS::processIsobmffSegment - activePresentationId not found in TOC");
4851
+ return null;
4852
+ }
4853
+ const availableAdditionalBytes = accumulatedShift >>> BITS_TO_SHIFT_TO_DIVIDE_BY_8;
4854
+ const newPayloadBase = payloadBase + availableAdditionalBytes;
4855
+ if (newPayloadBase > MAX_PAYLOAD_BASE) {
4856
+ console.error(
4857
+ "ALPS::processIsoBmffMediaSegment - newPayloadBase (".concat(newPayloadBase, ") exceeds the maximum supported value of ").concat(MAX_PAYLOAD_BASE)
4858
+ );
4776
4859
  return null;
4777
4860
  }
4861
+ if (newPayloadBase > PAYLOAD_BASE_EXTENDED_THRESHOLD && payloadBase <= PAYLOAD_BASE_EXTENDED_THRESHOLD) {
4862
+ const newAccumulatedShift = accumulatedShift - (PAYLOAD_BASE_EXTENSION_WIDTH + VARIABLE_BITS_CONTINUE_SIZE);
4863
+ const newAvailableAdditionalBytes = newAccumulatedShift >>> BITS_TO_SHIFT_TO_DIVIDE_BY_8;
4864
+ const newPayloadBaseAfterShift = payloadBase + newAvailableAdditionalBytes;
4865
+ if (newPayloadBaseAfterShift <= PAYLOAD_BASE_EXTENDED_THRESHOLD) {
4866
+ console.error(
4867
+ "ALPS::processIsoBmffMediaSegment - inserting the 4-bit payload_base extension header reduces available shift such that extended encoding is no longer required (adjusted newPayloadBase=".concat(newPayloadBaseAfterShift, "); this indicates a stream conformance error")
4868
+ );
4869
+ return null;
4870
+ }
4871
+ }
4778
4872
  presentationOffsets.forEach((presentation) => {
4779
4873
  const presentationId = presentation.presentationId;
4780
4874
  if (presentation.width !== PRESENTATION_LEVEL_WIDTH) {
4875
+ console.warn("Presentation level has unexpected width: ".concat(presentation.width));
4781
4876
  }
4782
4877
  if (activePresentationId !== presentationId) {
4783
4878
  setBits(sampleData, presentation.pos, presentation.width, UNDECODABLE_PRESENTATION_LEVEL);
4784
4879
  }
4785
4880
  });
4786
- const availableAdditionalBytes = accumulatedShift >>> BITS_TO_SHIFT_TO_DIVIDE_BY_8;
4787
- setBits(
4788
- sampleData,
4789
- payloadBaseMinus1.pos,
4790
- payloadBaseMinus1.width,
4791
- payloadBaseMinus1.value + availableAdditionalBytes
4792
- );
4793
4881
  bPresentationIds.forEach((bPresentationId) => {
4794
4882
  setBits(sampleData, bPresentationId.pos, bPresentationId.width, 0);
4795
4883
  });
@@ -4797,7 +4885,47 @@ var processIsoBmffMediaSegment = (parsedSegmentBuffer, activePresentationId) =>
4797
4885
  const shiftWidth = ac4TocEnd.pos - presentation.presentationIdPos;
4798
4886
  shiftLeft(sampleData, presentation.presentationIdPos, shiftWidth, presentation.presentationIdWidth);
4799
4887
  });
4888
+ if (newPayloadBase <= PAYLOAD_BASE_EXTENDED_THRESHOLD) {
4889
+ setBits(
4890
+ sampleData,
4891
+ payloadBaseMinus1.pos,
4892
+ payloadBaseMinus1.width,
4893
+ payloadBaseMinus1.value + availableAdditionalBytes
4894
+ );
4895
+ } else if (payloadBase > PAYLOAD_BASE_EXTENDED_THRESHOLD) {
4896
+ setBits(
4897
+ sampleData,
4898
+ payloadBaseMinus1.pos + PAYLOAD_BASE_MINUS1_FIELD_WIDTH,
4899
+ PAYLOAD_BASE_EXTENSION_WIDTH,
4900
+ newPayloadBase - PAYLOAD_BASE_EXTENSION_RANGE_START
4901
+ );
4902
+ } else {
4903
+ const newAccumulatedShift = accumulatedShift - (PAYLOAD_BASE_EXTENSION_WIDTH + VARIABLE_BITS_CONTINUE_SIZE);
4904
+ const newAvailableAdditionalBytes = newAccumulatedShift >>> BITS_TO_SHIFT_TO_DIVIDE_BY_8;
4905
+ const newPayloadBaseAfterShift = payloadBase + newAvailableAdditionalBytes;
4906
+ const shiftWidth = ac4TocEnd.pos - payloadBaseMinus1.pos;
4907
+ shiftRight(
4908
+ sampleData,
4909
+ payloadBaseMinus1.pos,
4910
+ shiftWidth,
4911
+ PAYLOAD_BASE_EXTENSION_WIDTH + VARIABLE_BITS_CONTINUE_SIZE
4912
+ );
4913
+ setBits(sampleData, payloadBaseMinus1.pos, payloadBaseMinus1.width, PAYLOAD_BASE_EXTENDED_THRESHOLD);
4914
+ setBits(
4915
+ sampleData,
4916
+ payloadBaseMinus1.pos + PAYLOAD_BASE_MINUS1_FIELD_WIDTH,
4917
+ PAYLOAD_BASE_EXTENSION_WIDTH,
4918
+ newPayloadBaseAfterShift - PAYLOAD_BASE_EXTENSION_RANGE_START
4919
+ );
4920
+ setBits(
4921
+ sampleData,
4922
+ payloadBaseMinus1.pos + PAYLOAD_BASE_MINUS1_FIELD_WIDTH + PAYLOAD_BASE_EXTENSION_WIDTH,
4923
+ VARIABLE_BITS_CONTINUE_SIZE,
4924
+ 0
4925
+ );
4926
+ }
4800
4927
  }
4928
+ console.log("ALPS::processIsoBmffSegment - done");
4801
4929
  return activePresentationId;
4802
4930
  };
4803
4931
 
@@ -4809,7 +4937,7 @@ var SEGMENT_TYPES = {
4809
4937
  };
4810
4938
  import_codem_isoboxer.default.addBoxProcessor("diap", function() {
4811
4939
  this._procFullBox();
4812
- this._procField("dialog_gain", "int", 16);
4940
+ this._procField("dialog_gain", "int", 8);
4813
4941
  });
4814
4942
  var _streams, _presentationsChangedEventHandler, _Alps_instances, initializeStream_fn;
4815
4943
  var Alps = class {
@@ -4822,6 +4950,7 @@ var Alps = class {
4822
4950
  __privateAdd(this, _streams, {});
4823
4951
  /** @type {presentationsChangedCallback|undefined} */
4824
4952
  __privateAdd(this, _presentationsChangedEventHandler);
4953
+ console.log("ALPS::constructor");
4825
4954
  }
4826
4955
  /**
4827
4956
  * Get presentation and activePresentationId for all streams
@@ -4842,6 +4971,7 @@ var Alps = class {
4842
4971
  * @param {presentationsChangedCallback} presentationsChangedEventHandler Callback function that will be called if the list of presentations changes
4843
4972
  */
4844
4973
  setPresentationsChangedEventHandler(presentationsChangedEventHandler) {
4974
+ console.log("ALPS::setPresentationsChangedEventHandler");
4845
4975
  __privateSet(this, _presentationsChangedEventHandler, presentationsChangedEventHandler);
4846
4976
  }
4847
4977
  /**
@@ -4851,6 +4981,9 @@ var Alps = class {
4851
4981
  */
4852
4982
  getPresentations(streamId = null) {
4853
4983
  __privateMethod(this, _Alps_instances, initializeStream_fn).call(this, streamId);
4984
+ console.log(
4985
+ "ALPS::getPresentations - List of presentations: ".concat(JSON.stringify(__privateGet(this, _streams)[streamId].presentations))
4986
+ );
4854
4987
  return __privateGet(this, _streams)[streamId].presentations;
4855
4988
  }
4856
4989
  /**
@@ -4859,7 +4992,8 @@ var Alps = class {
4859
4992
  * @returns {number|undefined} The ID of the active presentation, -1 if no presentation is set, undefined if no stream data exists
4860
4993
  */
4861
4994
  getActivePresentationId(streamId = null) {
4862
- var _b;
4995
+ var _a, _b;
4996
+ console.log("ALPS::getActivePresentation - activePresentation: ".concat((_a = __privateGet(this, _streams)[streamId]) == null ? void 0 : _a.activePresentationId));
4863
4997
  return (_b = __privateGet(this, _streams)[streamId]) == null ? void 0 : _b.activePresentationId;
4864
4998
  }
4865
4999
  /**
@@ -4868,6 +5002,7 @@ var Alps = class {
4868
5002
  * @param {string|null} streamId The ID of the stream, null for non-multi-period use
4869
5003
  */
4870
5004
  setActivePresentationId(presentationId, streamId = null) {
5005
+ console.log("ALPS::setActivePresentation - new activePresentation: ".concat(presentationId));
4871
5006
  __privateMethod(this, _Alps_instances, initializeStream_fn).call(this, streamId);
4872
5007
  __privateGet(this, _streams)[streamId].activePresentationId = presentationId;
4873
5008
  }
@@ -4879,6 +5014,7 @@ var Alps = class {
4879
5014
  * @returns {ProcessIsoBmffSegmentResult} Data retrieved from processed segment
4880
5015
  */
4881
5016
  processIsoBmffSegment(segmentBuffer, streamId = null, activePresentationId = void 0) {
5017
+ console.log("ALPS::processIsoBmffSegment");
4882
5018
  let forcedPresentationId = null;
4883
5019
  let presentations = null;
4884
5020
  let segmentType = null;
@@ -4903,6 +5039,7 @@ var Alps = class {
4903
5039
  );
4904
5040
  segmentType = SEGMENT_TYPES.MEDIA;
4905
5041
  }
5042
+ console.log("ALPS::processIsoBmffSegment - done");
4906
5043
  return {
4907
5044
  forcedPresentationId,
4908
5045
  presentations,