UNPKG

2.94 kBJavaScriptView Raw
1/**
2 * @file bin-utils.js
3 */
4
5/**
6 * convert a TimeRange to text
7 *
8 * @param {TimeRange} range the timerange to use for conversion
9 * @param {Number} i the iterator on the range to convert
10 */
11'use strict';
12
13Object.defineProperty(exports, '__esModule', {
14 value: true
15});
16var textRange = function textRange(range, i) {
17 return range.start(i) + '-' + range.end(i);
18};
19
20/**
21 * format a number as hex string
22 *
23 * @param {Number} e The number
24 * @param {Number} i the iterator
25 */
26var formatHexString = function formatHexString(e, i) {
27 var value = e.toString(16);
28
29 return '00'.substring(0, 2 - value.length) + value + (i % 2 ? ' ' : '');
30};
31var formatAsciiString = function formatAsciiString(e) {
32 if (e >= 0x20 && e < 0x7e) {
33 return String.fromCharCode(e);
34 }
35 return '.';
36};
37
38/**
39 * Creates an object for sending to a web worker modifying properties that are TypedArrays
40 * into a new object with seperated properties for the buffer, byteOffset, and byteLength.
41 *
42 * @param {Object} message
43 * Object of properties and values to send to the web worker
44 * @return {Object}
45 * Modified message with TypedArray values expanded
46 * @function createTransferableMessage
47 */
48var createTransferableMessage = function createTransferableMessage(message) {
49 var transferable = {};
50
51 Object.keys(message).forEach(function (key) {
52 var value = message[key];
53
54 if (ArrayBuffer.isView(value)) {
55 transferable[key] = {
56 bytes: value.buffer,
57 byteOffset: value.byteOffset,
58 byteLength: value.byteLength
59 };
60 } else {
61 transferable[key] = value;
62 }
63 });
64
65 return transferable;
66};
67
68/**
69 * Returns a unique string identifier for a media initialization
70 * segment.
71 */
72var initSegmentId = function initSegmentId(initSegment) {
73 var byterange = initSegment.byterange || {
74 length: Infinity,
75 offset: 0
76 };
77
78 return [byterange.length, byterange.offset, initSegment.resolvedUri].join(',');
79};
80
81/**
82 * utils to help dump binary data to the console
83 */
84var utils = {
85 hexDump: function hexDump(data) {
86 var bytes = Array.prototype.slice.call(data);
87 var step = 16;
88 var result = '';
89 var hex = undefined;
90 var ascii = undefined;
91
92 for (var j = 0; j < bytes.length / step; j++) {
93 hex = bytes.slice(j * step, j * step + step).map(formatHexString).join('');
94 ascii = bytes.slice(j * step, j * step + step).map(formatAsciiString).join('');
95 result += hex + ' ' + ascii + '\n';
96 }
97 return result;
98 },
99 tagDump: function tagDump(tag) {
100 return utils.hexDump(tag.bytes);
101 },
102 textRanges: function textRanges(ranges) {
103 var result = '';
104 var i = undefined;
105
106 for (i = 0; i < ranges.length; i++) {
107 result += textRange(ranges, i) + ' ';
108 }
109 return result;
110 },
111 createTransferableMessage: createTransferableMessage,
112 initSegmentId: initSegmentId
113};
114
115exports['default'] = utils;
116module.exports = exports['default'];
\No newline at end of file