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.
@@ -348,27 +348,16 @@ var SWIRL_HD_AUTHORING_WIDTH = 1920;
348
348
  var SWIRL_HD_AUTHORING_HEIGHT = 1080;
349
349
  var NAB_DEMO_NAME_PREFIX = "NAB Demo \u2014 ";
350
350
  function overlayAuthoringDimensions(overlay, decodeWidth, decodeHeight) {
351
- if (!decodeWidth || !decodeHeight) {
351
+ if (overlay.name.startsWith(NAB_DEMO_NAME_PREFIX)) {
352
352
  return {
353
- width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
354
- height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
355
- };
356
- }
357
- if (!overlay.visible) {
358
- return {
359
- width: decodeWidth,
360
- height: decodeHeight
353
+ width: SWIRL_HD_AUTHORING_WIDTH,
354
+ height: SWIRL_HD_AUTHORING_HEIGHT
361
355
  };
362
356
  }
363
- var extR = overlay.x + overlay.width;
364
- var extB = overlay.y + overlay.height;
365
- var EPS = 2;
366
- var exceedsDecode = extR > decodeWidth + EPS || extB > decodeHeight + EPS;
367
- var isNabDemo = overlay.name.startsWith(NAB_DEMO_NAME_PREFIX);
368
- if (exceedsDecode && isNabDemo) {
357
+ if (!decodeWidth || !decodeHeight) {
369
358
  return {
370
- width: SWIRL_HD_AUTHORING_WIDTH,
371
- height: SWIRL_HD_AUTHORING_HEIGHT
359
+ width: decodeWidth || SWIRL_HD_AUTHORING_WIDTH,
360
+ height: decodeHeight || SWIRL_HD_AUTHORING_HEIGHT
372
361
  };
373
362
  }
374
363
  return {
@@ -1812,11 +1801,19 @@ function hexToRgb(hex) {
1812
1801
  return "".concat(num >> 16 & 255, ",").concat(num >> 8 & 255, ",").concat(num & 255);
1813
1802
  }
1814
1803
  var FADE_DURATION_MS = 1e3;
1815
- var SHOWCASE_CYCLE_MS_DEFAULT = 6e4;
1816
- var SHOWCASE_POP_IN_MS = 420;
1817
- var SHOWCASE_STEADY_END_MS = 46e3;
1818
- var SHOWCASE_POP_OUT_MS = 450;
1819
- var SHOWCASE_POP_OUT_END_MS = SHOWCASE_STEADY_END_MS + SHOWCASE_POP_OUT_MS;
1804
+ var SHOWCASE_CYCLE_MS_DEFAULT = 36e3;
1805
+ var SHOWCASE_MIN_BEAT_MS = 6e3;
1806
+ var BEAT_POP_IN_MS = 520;
1807
+ var BEAT_POP_OUT_MS = 520;
1808
+ var SHOWCASE_PERSISTENT_TYPES = /* @__PURE__ */ new Set([
1809
+ "scroller",
1810
+ "breaking_news",
1811
+ "image",
1812
+ "text",
1813
+ "shape",
1814
+ "countdown",
1815
+ "qr_code"
1816
+ ]);
1820
1817
  function easeOutCubic(t) {
1821
1818
  var u = 1 - t;
1822
1819
  return 1 - u * u * u;
@@ -1829,38 +1826,108 @@ function easeOutBack(t) {
1829
1826
  var c3 = c1 + 1;
1830
1827
  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
1831
1828
  }
1832
- function showcaseOpacity(phase) {
1833
- if (phase < SHOWCASE_POP_IN_MS) return easeOutCubic(phase / SHOWCASE_POP_IN_MS);
1834
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1835
- return 1 - easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1829
+ function beatOpacity(phase, beatMs) {
1830
+ if (phase < BEAT_POP_IN_MS) return easeOutCubic(phase / BEAT_POP_IN_MS);
1831
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
1832
+ if (phase >= holdEnd) {
1833
+ return Math.max(0, 1 - easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS));
1836
1834
  }
1837
1835
  return 1;
1838
1836
  }
1839
- function showcaseScale(phase) {
1840
- if (phase < SHOWCASE_POP_IN_MS) {
1841
- return Math.min(1, 0.78 + 0.22 * easeOutBack(phase / SHOWCASE_POP_IN_MS));
1837
+ function beatScale(phase, beatMs) {
1838
+ if (phase < BEAT_POP_IN_MS) {
1839
+ return Math.min(1, 0.92 + 0.08 * easeOutBack(phase / BEAT_POP_IN_MS));
1842
1840
  }
1843
- if (phase >= SHOWCASE_STEADY_END_MS && phase < SHOWCASE_POP_OUT_END_MS) {
1844
- return 1 - 0.14 * easeInCubic((phase - SHOWCASE_STEADY_END_MS) / SHOWCASE_POP_OUT_MS);
1841
+ var holdEnd = beatMs - BEAT_POP_OUT_MS;
1842
+ if (phase >= holdEnd) {
1843
+ return 1 - 0.06 * easeInCubic((phase - holdEnd) / BEAT_POP_OUT_MS);
1845
1844
  }
1846
1845
  return 1;
1847
1846
  }
1848
- function useShowcasePhase(enabled, cycleMs) {
1849
- var _ref = _sliced_to_array((0, import_react.useState)(0), 2), phase = _ref[0], setPhase = _ref[1];
1847
+ function partitionShowcase(overlays) {
1848
+ var visible = overlays.filter(function(o) {
1849
+ return o.visible;
1850
+ });
1851
+ var persistent = [];
1852
+ var spotlight = [];
1853
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1854
+ try {
1855
+ for(var _iterator = visible[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1856
+ var o = _step.value;
1857
+ if (SHOWCASE_PERSISTENT_TYPES.has(o.type)) persistent.push(o);
1858
+ else spotlight.push(o);
1859
+ }
1860
+ } catch (err) {
1861
+ _didIteratorError = true;
1862
+ _iteratorError = err;
1863
+ } finally{
1864
+ try {
1865
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1866
+ _iterator.return();
1867
+ }
1868
+ } finally{
1869
+ if (_didIteratorError) {
1870
+ throw _iteratorError;
1871
+ }
1872
+ }
1873
+ }
1874
+ spotlight.sort(function(a, b) {
1875
+ return a.z_index - b.z_index || a.id - b.id;
1876
+ });
1877
+ var beats = [];
1878
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1879
+ try {
1880
+ for(var _iterator1 = spotlight[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1881
+ var o1 = _step1.value;
1882
+ beats.push([
1883
+ o1
1884
+ ]);
1885
+ }
1886
+ } catch (err) {
1887
+ _didIteratorError1 = true;
1888
+ _iteratorError1 = err;
1889
+ } finally{
1890
+ try {
1891
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1892
+ _iterator1.return();
1893
+ }
1894
+ } finally{
1895
+ if (_didIteratorError1) {
1896
+ throw _iteratorError1;
1897
+ }
1898
+ }
1899
+ }
1900
+ return {
1901
+ persistent: persistent,
1902
+ beats: beats
1903
+ };
1904
+ }
1905
+ function useShowcaseBeat(enabled, cycleMs, beats) {
1906
+ var safeBeats = Math.max(1, beats);
1907
+ var beatMs = Math.max(SHOWCASE_MIN_BEAT_MS, Math.floor(cycleMs / safeBeats));
1908
+ var totalMs = beatMs * safeBeats;
1909
+ var _ref = _sliced_to_array((0, import_react.useState)(function() {
1910
+ return Date.now();
1911
+ }), 2), now = _ref[0], setNow = _ref[1];
1850
1912
  (0, import_react.useEffect)(function() {
1851
1913
  if (!enabled) return;
1852
- setPhase(Date.now() % cycleMs);
1853
1914
  var id = window.setInterval(function() {
1854
- setPhase(Date.now() % cycleMs);
1855
- }, 48);
1915
+ return setNow(Date.now());
1916
+ }, 64);
1856
1917
  return function() {
1857
1918
  return clearInterval(id);
1858
1919
  };
1859
1920
  }, [
1860
- enabled,
1861
- cycleMs
1921
+ enabled
1862
1922
  ]);
1863
- return phase;
1923
+ var phase = now % totalMs;
1924
+ var beatIndex = Math.min(safeBeats - 1, Math.floor(phase / beatMs));
1925
+ var beatPhase = phase - beatIndex * beatMs;
1926
+ return {
1927
+ beatIndex: beatIndex,
1928
+ beatPhase: beatPhase,
1929
+ beatMs: beatMs
1930
+ };
1864
1931
  }
1865
1932
  var OverlayRenderer = function OverlayRenderer(param) {
1866
1933
  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;
@@ -1868,7 +1935,28 @@ var OverlayRenderer = function OverlayRenderer(param) {
1868
1935
  var rafRef = (0, import_react.useRef)(null);
1869
1936
  var _ref1 = _sliced_to_array((0, import_react.useState)(/* @__PURE__ */ new Map()), 2), fadeMap = _ref1[0], setFadeMap = _ref1[1];
1870
1937
  var removeTimers = (0, import_react.useRef)(/* @__PURE__ */ new Map());
1871
- var showcasePhase = useShowcasePhase(showcaseMode, showcaseCycleMs);
1938
+ var _ref2 = (0, import_react.useMemo)(function() {
1939
+ return partitionShowcase(overlays);
1940
+ }, [
1941
+ overlays
1942
+ ]), showcasePersistent = _ref2.persistent, showcaseBeats = _ref2.beats;
1943
+ var _useShowcaseBeat = useShowcaseBeat(showcaseMode, showcaseCycleMs, showcaseBeats.length), showcaseBeatIndex = _useShowcaseBeat.beatIndex, showcaseBeatPhase = _useShowcaseBeat.beatPhase, showcaseBeatMs = _useShowcaseBeat.beatMs;
1944
+ var showcasePersistentIds = (0, import_react.useMemo)(function() {
1945
+ return new Set(showcasePersistent.map(function(o) {
1946
+ return o.id;
1947
+ }));
1948
+ }, [
1949
+ showcasePersistent
1950
+ ]);
1951
+ var showcaseSpotlightIds = (0, import_react.useMemo)(function() {
1952
+ var beat = showcaseBeats[showcaseBeatIndex];
1953
+ return new Set((beat !== null && beat !== void 0 ? beat : []).map(function(o) {
1954
+ return o.id;
1955
+ }));
1956
+ }, [
1957
+ showcaseBeats,
1958
+ showcaseBeatIndex
1959
+ ]);
1872
1960
  var updateDims = (0, import_react.useCallback)(function() {
1873
1961
  var video = videoRef.current;
1874
1962
  if (video) {
@@ -1901,10 +1989,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1901
1989
  ]);
1902
1990
  var activeOverlays = (0, import_react.useMemo)(function() {
1903
1991
  if (showcaseMode) {
1904
- return overlays.filter(function(o) {
1905
- if (!o.visible) return false;
1906
- return showcasePhase < SHOWCASE_POP_OUT_END_MS;
1907
- });
1992
+ var _showcaseBeats_showcaseBeatIndex;
1993
+ var beat = (_showcaseBeats_showcaseBeatIndex = showcaseBeats[showcaseBeatIndex]) !== null && _showcaseBeats_showcaseBeatIndex !== void 0 ? _showcaseBeats_showcaseBeatIndex : [];
1994
+ return _to_consumable_array(showcasePersistent).concat(_to_consumable_array(beat));
1908
1995
  }
1909
1996
  return overlays.filter(function(o) {
1910
1997
  return isOverlayActive(o, currentTime);
@@ -1913,14 +2000,9 @@ var OverlayRenderer = function OverlayRenderer(param) {
1913
2000
  overlays,
1914
2001
  currentTime,
1915
2002
  showcaseMode,
1916
- showcasePhase
1917
- ]);
1918
- var activeBeatIds = (0, import_react.useMemo)(function() {
1919
- return new Set(activeOverlays.map(function(o) {
1920
- return o.id;
1921
- }));
1922
- }, [
1923
- activeOverlays
2003
+ showcasePersistent,
2004
+ showcaseBeats,
2005
+ showcaseBeatIndex
1924
2006
  ]);
1925
2007
  (0, import_react.useLayoutEffect)(function() {
1926
2008
  var activeIds = new Set(activeOverlays.map(function(o) {
@@ -2115,10 +2197,12 @@ var OverlayRenderer = function OverlayRenderer(param) {
2115
2197
  var width = overlay.width * scaleX;
2116
2198
  var height = overlay.height * scaleY;
2117
2199
  var baseOpacity = Math.max(0, Math.min(100, overlay.opacity)) / 100;
2118
- var inShowcaseBeat = showcaseMode && activeBeatIds.has(overlay.id);
2119
- var useShowcasePop = inShowcaseBeat;
2120
- var opacity = useShowcasePop ? baseOpacity * showcaseOpacity(showcasePhase) : visible ? baseOpacity : 0;
2121
- var popScale = useShowcasePop ? showcaseScale(showcasePhase) : 1;
2200
+ var isShowcasePersistent = showcaseMode && showcasePersistentIds.has(overlay.id);
2201
+ var isShowcaseSpotlight = showcaseMode && showcaseSpotlightIds.has(overlay.id);
2202
+ var isShowcaseDormant = showcaseMode && !isShowcasePersistent && !isShowcaseSpotlight;
2203
+ var useShowcasePop = isShowcaseSpotlight;
2204
+ var opacity = useShowcasePop ? baseOpacity * beatOpacity(showcaseBeatPhase, showcaseBeatMs) : isShowcaseDormant ? 0 : visible ? baseOpacity : 0;
2205
+ var popScale = useShowcasePop ? beatScale(showcaseBeatPhase, showcaseBeatMs) : 1;
2122
2206
  var sz = {
2123
2207
  w: width,
2124
2208
  h: height