mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-14 15:56:38 +03:00
64896d70b0
This reflects changes in Google's policy on JavaScript license headers, which should be smaller to avoid increasing the size of the binary unnecessarily. This also updates the company name from "Google, Inc" to "Google LLC". Change-Id: I3f8b9ed3700b6351f43173d50c94d35c333e82b4
124 lines
3.1 KiB
JavaScript
124 lines
3.1 KiB
JavaScript
/** @license
|
|
* Copyright 2016 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
goog.provide('shaka.util.Uint8ArrayUtils');
|
|
|
|
goog.require('shaka.util.BufferUtils');
|
|
goog.require('shaka.util.Iterables');
|
|
goog.require('shaka.util.StringUtils');
|
|
|
|
|
|
/**
|
|
* @summary A set of Uint8Array utility functions.
|
|
* @exportDoc
|
|
*/
|
|
shaka.util.Uint8ArrayUtils = class {
|
|
/**
|
|
* Convert a buffer to a base64 string. The output will be standard
|
|
* alphabet as opposed to base64url safe alphabet.
|
|
* @param {BufferSource} data
|
|
* @return {string}
|
|
* @export
|
|
*/
|
|
static toStandardBase64(data) {
|
|
const bytes = shaka.util.StringUtils.fromCharCode(
|
|
shaka.util.BufferUtils.toUint8(data));
|
|
return btoa(bytes);
|
|
}
|
|
|
|
/**
|
|
* Convert a buffer to a base64 string. The output will always use the
|
|
* alternate encoding/alphabet also known as "base64url".
|
|
* @param {BufferSource} data
|
|
* @param {boolean=} padding If true, pad the output with equals signs.
|
|
* Defaults to true.
|
|
* @return {string}
|
|
* @export
|
|
*/
|
|
static toBase64(data, padding) {
|
|
padding = (padding == undefined) ? true : padding;
|
|
const base64 = shaka.util.Uint8ArrayUtils.toStandardBase64(data)
|
|
.replace(/\+/g, '-').replace(/\//g, '_');
|
|
return padding ? base64 : base64.replace(/[=]*$/, '');
|
|
}
|
|
|
|
/**
|
|
* Convert a base64 string to a Uint8Array. Accepts either the standard
|
|
* alphabet or the alternate "base64url" alphabet.
|
|
* @param {string} str
|
|
* @return {!Uint8Array}
|
|
* @export
|
|
*/
|
|
static fromBase64(str) {
|
|
// atob creates a "raw string" where each character is interpreted as a
|
|
// byte.
|
|
const bytes = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));
|
|
const result = new Uint8Array(bytes.length);
|
|
const enumerate = (it) => shaka.util.Iterables.enumerate(it);
|
|
for (const {i, item} of enumerate(bytes)) {
|
|
result[i] = item.charCodeAt(0);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
/**
|
|
* Convert a hex string to a Uint8Array.
|
|
* @param {string} str
|
|
* @return {!Uint8Array}
|
|
* @export
|
|
*/
|
|
static fromHex(str) {
|
|
const size = str.length / 2;
|
|
const arr = new Uint8Array(size);
|
|
for (const i of shaka.util.Iterables.range(size)) {
|
|
arr[i] = window.parseInt(str.substr(i * 2, 2), 16);
|
|
}
|
|
return arr;
|
|
}
|
|
|
|
|
|
/**
|
|
* Convert a buffer to a hex string.
|
|
* @param {BufferSource} data
|
|
* @return {string}
|
|
* @export
|
|
*/
|
|
static toHex(data) {
|
|
const arr = shaka.util.BufferUtils.toUint8(data);
|
|
let hex = '';
|
|
for (let value of arr) {
|
|
value = value.toString(16);
|
|
if (value.length == 1) {
|
|
value = '0' + value;
|
|
}
|
|
hex += value;
|
|
}
|
|
return hex;
|
|
}
|
|
|
|
|
|
/**
|
|
* Concatenate buffers.
|
|
* @param {...BufferSource} varArgs
|
|
* @return {!Uint8Array}
|
|
* @export
|
|
*/
|
|
static concat(...varArgs) {
|
|
let totalLength = 0;
|
|
for (const arr of varArgs) {
|
|
totalLength += arr.byteLength;
|
|
}
|
|
|
|
const result = new Uint8Array(totalLength);
|
|
let offset = 0;
|
|
for (const arr of varArgs) {
|
|
result.set(shaka.util.BufferUtils.toUint8(arr), offset);
|
|
offset += arr.byteLength;
|
|
}
|
|
return result;
|
|
}
|
|
};
|