stormcloud-video-player 0.7.42 → 0.7.44

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/lib/index.js CHANGED
@@ -5705,27 +5705,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
5705
5705
  var SWIRL_HD_AUTHORING_HEIGHT = 1080;
5706
5706
  var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
5707
5707
  function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
5708
- if (!decodeWidth || !decodeHeight) {
5709
- return {
5710
- width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5711
- height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5712
- };
5713
- }
5714
- if (!overlay.visible) {
5708
+ if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
5715
5709
  return {
5716
- width: decodeWidth,
5717
- height: decodeHeight
5710
+ width: SWIRL_HD_AUTHORING_WIDTH,
5711
+ height: SWIRL_HD_AUTHORING_HEIGHT
5718
5712
  };
5719
5713
  }
5720
- var extR = overlay.x + overlay.width;
5721
- var extB = overlay.y + overlay.height;
5722
- var EPS = 2;
5723
- var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
5724
- var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
5725
- if (exceedsDecode && isNabDemo) {
5714
+ if (!decodeWidth || !decodeHeight) {
5726
5715
  return {
5727
- width: SWIRL_HD_AUTHORING_WIDTH,
5728
- height: SWIRL_HD_AUTHORING_HEIGHT
5716
+ width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
5717
+ height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
5729
5718
  };
5730
5719
  }
5731
5720
  return {
@@ -5790,6 +5779,59 @@ function swirlProjectHasNabDemoMixedWithOther(overlays) {
5790
5779
  }
5791
5780
  return hasNab && hasOther;
5792
5781
  }
5782
+ var STANDARD_16_9_LADDER = [
5783
+ {
5784
+ width: 384,
5785
+ height: 216
5786
+ },
5787
+ {
5788
+ width: 640,
5789
+ height: 360
5790
+ },
5791
+ {
5792
+ width: 854,
5793
+ height: 480
5794
+ },
5795
+ {
5796
+ width: 1280,
5797
+ height: 720
5798
+ },
5799
+ {
5800
+ width: 1920,
5801
+ height: 1080
5802
+ },
5803
+ {
5804
+ width: 2560,
5805
+ height: 1440
5806
+ },
5807
+ {
5808
+ width: 3840,
5809
+ height: 2160
5810
+ }
5811
+ ];
5812
+ function smallestLadderRungContaining(maxR, maxB, eps) {
5813
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
5814
+ try {
5815
+ for(var _iterator = STANDARD_16_9_LADDER[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
5816
+ var rung = _step.value;
5817
+ if (maxR <= rung.width + eps && maxB <= rung.height + eps) return rung;
5818
+ }
5819
+ } catch (err) {
5820
+ _didIteratorError = true;
5821
+ _iteratorError = err;
5822
+ } finally{
5823
+ try {
5824
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
5825
+ _iterator.return();
5826
+ }
5827
+ } finally{
5828
+ if (_didIteratorError) {
5829
+ throw _iteratorError;
5830
+ }
5831
+ }
5832
+ }
5833
+ return null;
5834
+ }
5793
5835
  function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
5794
5836
  if (!videoWidth || !videoHeight) {
5795
5837
  return {
@@ -5805,9 +5847,15 @@ function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
5805
5847
  }
5806
5848
  var _overlayExtents = overlayExtents(overlays), maxR = _overlayExtents.maxR, maxB = _overlayExtents.maxB;
5807
5849
  var EPS = 1;
5808
- var exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;
5809
- var fitsHdCanvas = maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS && maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;
5850
+ if (maxR <= 0 || maxB <= 0) {
5851
+ return {
5852
+ width: videoWidth,
5853
+ height: videoHeight
5854
+ };
5855
+ }
5810
5856
  var mixed = swirlProjectHasNabDemoMixedWithOther(overlays);
5857
+ var fitsHdCanvas = maxR <= SWIRL_HD_AUTHORING_WIDTH + EPS && maxB <= SWIRL_HD_AUTHORING_HEIGHT + EPS;
5858
+ var exceedsDecode = maxR > videoWidth + EPS || maxB > videoHeight + EPS;
5811
5859
  var decodeLargerThanHd = videoWidth > SWIRL_HD_AUTHORING_WIDTH + EPS || videoHeight > SWIRL_HD_AUTHORING_HEIGHT + EPS;
5812
5860
  if (fitsHdCanvas && (decodeLargerThanHd || exceedsDecode && !mixed)) {
5813
5861
  return {
@@ -5815,6 +5863,19 @@ function inferSwirlOverlayCoordinateSpace(overlays, videoWidth, videoHeight) {
5815
5863
  height: SWIRL_HD_AUTHORING_HEIGHT
5816
5864
  };
5817
5865
  }
5866
+ if (mixed) {
5867
+ return {
5868
+ width: videoWidth,
5869
+ height: videoHeight
5870
+ };
5871
+ }
5872
+ var rung = smallestLadderRungContaining(maxR, maxB, EPS);
5873
+ if (rung && rung.width < videoWidth - EPS && rung.height < videoHeight - EPS) {
5874
+ return {
5875
+ width: rung.width,
5876
+ height: rung.height
5877
+ };
5878
+ }
5818
5879
  return {
5819
5880
  width: videoWidth,
5820
5881
  height: videoHeight
@@ -7319,11 +7380,19 @@ function hexToRgb(hex) {
7319
7380
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
7320
7381
  }
7321
7382
  var FADE_DURATION_MS = 1e3;
7322
- var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
7323
- var SHOWCASE_POP_IN_MS = 420;
7324
- var SHOWCASE_STEADY_END_MS = 46e3;
7325
- var SHOWCASE_POP_OUT_MS = 450;
7326
- var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
7383
+ var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
7384
+ var SHOWCASE_MIN_BEAT_MS = 6e3;
7385
+ var BEAT_POP_IN_MS = 520;
7386
+ var BEAT_POP_OUT_MS = 520;
7387
+ var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
7388
+ "scroller",
7389
+ "breaking_news",
7390
+ "image",
7391
+ "text",
7392
+ "shape",
7393
+ "countdown",
7394
+ "qr_code"
7395
+ ]);
7327
7396
  function easeOutCubic(t) {
7328
7397
  var u = 1 - t;
7329
7398
  return 1 - u * u * u;
@@ -7336,38 +7405,108 @@ function easeOutBack(t) {
7336
7405
  var c3 = c1 + 1;
7337
7406
  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
7338
7407
  }
7339
- function showcaseOpacity(phase) {
7340
- if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
7341
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7342
- return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7408
+ function beatOpacity(phase, beatMs) {
7409
+ if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
7410
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7411
+ if (phase >= holdEnd) {
7412
+ return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
7343
7413
  }
7344
7414
  return 1;
7345
7415
  }
7346
- function showcaseScale(phase) {
7347
- if (phase < SHOWCASE_POP_IN_MS) {
7348
- return Math.min(1, 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS));
7416
+ function beatScale(phase, beatMs) {
7417
+ if (phase < BEAT_POP_IN_MS) {
7418
+ return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
7349
7419
  }
7350
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
7351
- return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
7420
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
7421
+ if (phase >= holdEnd) {
7422
+ return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
7352
7423
  }
7353
7424
  return 1;
7354
7425
  }
7355
- function useShowcasePhase(enabled, cycleMs) {
7356
- var _useState = _sliced_to_array(useState(0), 2), phase = _useState[0], setPhase = _useState[1];
7426
+ function partitionShowcase(overlays) {
7427
+ var visible = overlays.filter(function(o) {
7428
+ return o.visible;
7429
+ });
7430
+ var persistent = [];
7431
+ var spotlight = [];
7432
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
7433
+ try {
7434
+ for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
7435
+ var o = _step.value;
7436
+ if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
7437
+ else spotlight.push(o);
7438
+ }
7439
+ } catch (err) {
7440
+ _didIteratorError = true;
7441
+ _iteratorError = err;
7442
+ } finally{
7443
+ try {
7444
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
7445
+ _iterator.return();
7446
+ }
7447
+ } finally{
7448
+ if (_didIteratorError) {
7449
+ throw _iteratorError;
7450
+ }
7451
+ }
7452
+ }
7453
+ spotlight.sort(function(a, b) {
7454
+ return a.z_index - b.z_index || a.id - b.id;
7455
+ });
7456
+ var beats = [];
7457
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
7458
+ try {
7459
+ for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
7460
+ var o1 = _step1.value;
7461
+ beats.push([
7462
+ o1
7463
+ ]);
7464
+ }
7465
+ } catch (err) {
7466
+ _didIteratorError1 = true;
7467
+ _iteratorError1 = err;
7468
+ } finally{
7469
+ try {
7470
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
7471
+ _iterator1.return();
7472
+ }
7473
+ } finally{
7474
+ if (_didIteratorError1) {
7475
+ throw _iteratorError1;
7476
+ }
7477
+ }
7478
+ }
7479
+ return {
7480
+ persistent: persistent,
7481
+ beats: beats
7482
+ };
7483
+ }
7484
+ function useShowcaseBeat(enabled, cycleMs, beats) {
7485
+ var safeBeats = Math.max(1, beats);
7486
+ var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
7487
+ var totalMs = beatMs * safeBeats;
7488
+ var _useState = _sliced_to_array(useState(function() {
7489
+ return Date.now();
7490
+ }), 2), now = _useState[0], setNow = _useState[1];
7357
7491
  useEffect(function() {
7358
7492
  if (!enabled) return;
7359
- setPhase(Date.now() % cycleMs);
7360
7493
  var id = window.setInterval(function() {
7361
- setPhase(Date.now() % cycleMs);
7362
- }, 48);
7494
+ return setNow(Date.now());
7495
+ }, 64);
7363
7496
  return function() {
7364
7497
  return clearInterval(id);
7365
7498
  };
7366
7499
  }, [
7367
- enabled,
7368
- cycleMs
7500
+ enabled
7369
7501
  ]);
7370
- return phase;
7502
+ var phase = now % totalMs;
7503
+ var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
7504
+ var beatPhase = phase - beatIndex * beatMs;
7505
+ return {
7506
+ beatIndex: beatIndex,
7507
+ beatPhase: beatPhase,
7508
+ beatMs: beatMs
7509
+ };
7371
7510
  }
7372
7511
  var OverlayRenderer = function OverlayRenderer(param) {
7373
7512
  var overlays = param.overlays, currentTime = param.currentTime, videoRef = param.videoRef, coordinateSpace = param.coordinateSpace, _param_showcaseMode = param.showcaseMode, showcaseMode = _param_showcaseMode === void 0 ? false : _param_showcaseMode, _param_showcaseCycleMs = param.showcaseCycleMs, showcaseCycleMs = _param_showcaseCycleMs === void 0 ? SHOWCASE_CYCLE_MS_DEFAULT : _param_showcaseCycleMs;
@@ -7375,7 +7514,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
7375
7514
  var rafRef = useRef(null);
7376
7515
  var _useState1 = _sliced_to_array(useState(/* @__PURE__ */ new Map()), 2), fadeMap = _useState1[0], setFadeMap = _useState1[1];
7377
7516
  var removeTimers = useRef(/* @__PURE__ */ new Map());
7378
- var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
7517
+ var _useMemo = useMemo(function() {
7518
+ return partitionShowcase(overlays);
7519
+ }, [
7520
+ overlays
7521
+ ]), showcasePersistent = _useMemo.persistent, showcaseBeats = _useMemo.beats;
7522
+ var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
7523
+ var showcasePersistentIds = useMemo(function() {
7524
+ return new Set(showcasePersistent.map(function(o) {
7525
+ return o.id;
7526
+ }));
7527
+ }, [
7528
+ showcasePersistent
7529
+ ]);
7530
+ var showcaseSpotlightIds = useMemo(function() {
7531
+ var beat = showcaseBeats[showcaseBeatIndex];
7532
+ return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
7533
+ return o.id;
7534
+ }));
7535
+ }, [
7536
+ showcaseBeats,
7537
+ showcaseBeatIndex
7538
+ ]);
7379
7539
  var updateDims = useCallback(function() {
7380
7540
  var video = videoRef.current;
7381
7541
  if (video) {
@@ -7408,10 +7568,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7408
7568
  ]);
7409
7569
  var activeOverlays = useMemo(function() {
7410
7570
  if (showcaseMode) {
7411
- return overlays.filter(function(o) {
7412
- if (!o.visible) return false;
7413
- return showcasePhase < SHOWCASE_POP_OUT_END_MS;
7414
- });
7571
+ var _showcaseBeats_showcaseBeatIndex;
7572
+ var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
7573
+ return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
7415
7574
  }
7416
7575
  return overlays.filter(function(o) {
7417
7576
  return isOverlayActive(o, currentTime);
@@ -7420,14 +7579,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
7420
7579
  overlays,
7421
7580
  currentTime,
7422
7581
  showcaseMode,
7423
- showcasePhase
7424
- ]);
7425
- var activeBeatIds = useMemo(function() {
7426
- return new Set(activeOverlays.map(function(o) {
7427
- return o.id;
7428
- }));
7429
- }, [
7430
- activeOverlays
7582
+ showcasePersistent,
7583
+ showcaseBeats,
7584
+ showcaseBeatIndex
7431
7585
  ]);
7432
7586
  useLayoutEffect(function() {
7433
7587
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -7622,10 +7776,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
7622
7776
  var width = overlay.width * scaleX;
7623
7777
  var height = overlay.height * scaleY;
7624
7778
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
7625
- var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
7626
- var useShowcasePop = inShowcaseBeat;
7627
- var opacity = useShowcasePop ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
7628
- var popScale = useShowcasePop ? showcaseScale(showcasePhase) : 1;
7779
+ var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
7780
+ var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
7781
+ var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
7782
+ var useShowcasePop = isShowcaseSpotlight;
7783
+ var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
7784
+ var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
7629
7785
  var sz = {
7630
7786
  w: width,
7631
7787
  h: height