mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-16 16:16:40 +03:00
Make the reader types more permissive of inputs.
Now the EbmlParser and DataViewReader types can accept BufferSource objects to avoid the caller having to convert it at each callsite. Change-Id: I527fbc638485214bfe976d7da89b79b6098033a8
This commit is contained in:
@@ -140,7 +140,6 @@ requirement: {
|
||||
'handle sub-arrays'
|
||||
whitelist_regexp: 'lib/util/buffer_utils.js'
|
||||
whitelist_regexp: 'lib/util/object_utils.js'
|
||||
whitelist_regexp: 'lib/util/uint8array_utils.js'
|
||||
whitelist_regexp: 'test/'
|
||||
}
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ goog.require('shaka.net.DataUriPlugin');
|
||||
goog.require('shaka.net.NetworkingEngine');
|
||||
goog.require('shaka.text.TextEngine');
|
||||
goog.require('shaka.util.ArrayUtils');
|
||||
goog.require('shaka.util.BufferUtils');
|
||||
goog.require('shaka.util.DataViewReader');
|
||||
goog.require('shaka.util.Error');
|
||||
goog.require('shaka.util.Functional');
|
||||
@@ -1736,8 +1735,7 @@ shaka.hls.HlsParser = class {
|
||||
*/
|
||||
getStartTimeFromTsSegment_(data) {
|
||||
const reader = new shaka.util.DataViewReader(
|
||||
shaka.util.BufferUtils.toDataView(data),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
data, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
|
||||
const fail = () => {
|
||||
throw new shaka.util.Error(
|
||||
|
||||
@@ -21,7 +21,6 @@ goog.require('goog.asserts');
|
||||
goog.require('shaka.log');
|
||||
goog.require('shaka.media.InitSegmentReference');
|
||||
goog.require('shaka.media.SegmentReference');
|
||||
goog.require('shaka.util.BufferUtils');
|
||||
goog.require('shaka.util.EbmlElement');
|
||||
goog.require('shaka.util.EbmlParser');
|
||||
goog.require('shaka.util.Error');
|
||||
@@ -46,8 +45,7 @@ shaka.media.WebmSegmentIndexParser = class {
|
||||
scaledPresentationTimeOffset) {
|
||||
const tuple =
|
||||
shaka.media.WebmSegmentIndexParser.parseWebmContainer_(initData);
|
||||
const parser = new shaka.util.EbmlParser(
|
||||
shaka.util.BufferUtils.toDataView(cuesData));
|
||||
const parser = new shaka.util.EbmlParser(cuesData);
|
||||
const cuesElement = parser.parseElement();
|
||||
if (cuesElement.id != shaka.media.WebmSegmentIndexParser.CUES_ID) {
|
||||
shaka.log.error('Not a Cues element.');
|
||||
@@ -75,8 +73,7 @@ shaka.media.WebmSegmentIndexParser = class {
|
||||
* @private
|
||||
*/
|
||||
static parseWebmContainer_(initData) {
|
||||
const parser = new shaka.util.EbmlParser(
|
||||
shaka.util.BufferUtils.toDataView(initData));
|
||||
const parser = new shaka.util.EbmlParser(initData);
|
||||
|
||||
// Check that the WebM container data starts with the EBML header, but
|
||||
// skip its contents.
|
||||
|
||||
@@ -22,7 +22,6 @@ goog.require('shaka.log');
|
||||
goog.require('shaka.text.Cue');
|
||||
goog.require('shaka.text.TextEngine');
|
||||
goog.require('shaka.text.VttTextParser');
|
||||
goog.require('shaka.util.BufferUtils');
|
||||
goog.require('shaka.util.DataViewReader');
|
||||
goog.require('shaka.util.Error');
|
||||
goog.require('shaka.util.Functional');
|
||||
@@ -214,8 +213,7 @@ shaka.text.Mp4VttParser = class {
|
||||
|
||||
/** @type {!shaka.util.DataViewReader} */
|
||||
const reader = new shaka.util.DataViewReader(
|
||||
shaka.util.BufferUtils.toDataView(rawPayload),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
rawPayload, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
|
||||
for (const presentation of presentations) {
|
||||
// If one presentation corresponds to multiple payloads, it is assumed
|
||||
|
||||
@@ -22,7 +22,7 @@ goog.require('shaka.util.Iterables');
|
||||
|
||||
/**
|
||||
* @summary A set of BufferSource utility functions.
|
||||
* @exportDoc
|
||||
* @exportInterface
|
||||
*/
|
||||
shaka.util.BufferUtils = class {
|
||||
/**
|
||||
|
||||
@@ -29,12 +29,12 @@ goog.require('shaka.util.StringUtils');
|
||||
*/
|
||||
shaka.util.DataViewReader = class {
|
||||
/**
|
||||
* @param {!DataView} dataView The DataView.
|
||||
* @param {BufferSource} data
|
||||
* @param {shaka.util.DataViewReader.Endianness} endianness The endianness.
|
||||
*/
|
||||
constructor(dataView, endianness) {
|
||||
constructor(data, endianness) {
|
||||
/** @private {!DataView} */
|
||||
this.dataView_ = dataView;
|
||||
this.dataView_ = shaka.util.BufferUtils.toDataView(data);
|
||||
|
||||
/** @private {boolean} */
|
||||
this.littleEndian_ =
|
||||
|
||||
@@ -31,16 +31,15 @@ goog.require('shaka.util.Iterables');
|
||||
*/
|
||||
shaka.util.EbmlParser = class {
|
||||
/**
|
||||
* @param {!DataView} dataView The EBML data.
|
||||
* @param {BufferSource} data
|
||||
*/
|
||||
constructor(dataView) {
|
||||
constructor(data) {
|
||||
/** @private {!DataView} */
|
||||
this.dataView_ = dataView;
|
||||
this.dataView_ = shaka.util.BufferUtils.toDataView(data);
|
||||
|
||||
/** @private {!shaka.util.DataViewReader} */
|
||||
this.reader_ = new shaka.util.DataViewReader(
|
||||
dataView,
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
this.dataView_, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ goog.provide('shaka.util.Mp4Parser');
|
||||
|
||||
goog.require('goog.asserts');
|
||||
goog.require('shaka.log');
|
||||
goog.require('shaka.util.BufferUtils');
|
||||
goog.require('shaka.util.DataViewReader');
|
||||
goog.require('shaka.util.Iterables');
|
||||
|
||||
@@ -94,8 +93,7 @@ shaka.util.Mp4Parser = class {
|
||||
*/
|
||||
parse(data, partialOkay) {
|
||||
const reader = new shaka.util.DataViewReader(
|
||||
shaka.util.BufferUtils.toDataView(data),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
data, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
|
||||
this.done_ = false;
|
||||
while (reader.hasMoreData() && !this.done_) {
|
||||
@@ -156,8 +154,7 @@ shaka.util.Mp4Parser = class {
|
||||
(payloadSize > 0) ? reader.readBytes(payloadSize) : new Uint8Array(0);
|
||||
|
||||
const payloadReader = new shaka.util.DataViewReader(
|
||||
shaka.util.BufferUtils.toDataView(payload),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
payload, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
|
||||
/** @type {shaka.extern.ParsedBox} */
|
||||
const box = {
|
||||
|
||||
@@ -38,17 +38,13 @@ describe('DataViewReader', () => {
|
||||
|
||||
beforeEach(() => {
|
||||
bigEndianReader = new shaka.util.DataViewReader(
|
||||
new DataView(data.buffer),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
data, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
bigEndianReader2 = new shaka.util.DataViewReader(
|
||||
new DataView(data2.buffer),
|
||||
shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
data2, shaka.util.DataViewReader.Endianness.BIG_ENDIAN);
|
||||
littleEndianReader = new shaka.util.DataViewReader(
|
||||
new DataView(data.buffer),
|
||||
shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN);
|
||||
data, shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN);
|
||||
littleEndianReader2 = new shaka.util.DataViewReader(
|
||||
new DataView(data2.buffer),
|
||||
shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN);
|
||||
data2, shaka.util.DataViewReader.Endianness.LITTLE_ENDIAN);
|
||||
});
|
||||
|
||||
it('reads a uint8 in big endian', () => {
|
||||
|
||||
@@ -23,7 +23,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Set size to 4 bytes.
|
||||
// Set the data to [0x01, 0x02, 0x03, 0x04].
|
||||
const data = new Uint8Array([0x81, 0x84, 0x01, 0x02, 0x03, 0x04]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const elem = parser.parseElement();
|
||||
expect(elem.id).toBe(0x81);
|
||||
@@ -43,9 +43,10 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Set ID to 0x2.
|
||||
// Set size to 4 bytes.
|
||||
// Set the data to [0x09, 0x08, 0x07, 0x06].
|
||||
const data = new Uint8Array([0x81, 0x84, 0x01, 0x02, 0x03, 0x04, 0x82, 0x84,
|
||||
0x09, 0x08, 0x07, 0x06]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const data = new Uint8Array([
|
||||
0x81, 0x84, 0x01, 0x02, 0x03, 0x04, 0x82, 0x84, 0x09, 0x08, 0x07, 0x06,
|
||||
]);
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const elem1 = parser.parseElement();
|
||||
expect(elem1.id).toBe(0x81);
|
||||
@@ -70,7 +71,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// The size should be 5 bytes.
|
||||
// Set the data to [0xaa, 0xbb, 0xcc, 0xdd, 0xee].
|
||||
const data = new Uint8Array([0x81, 0xff, 0xaa, 0xbb, 0xcc, 0xdd, 0xee]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const element = parser.parseElement();
|
||||
|
||||
expect(element).toBeTruthy();
|
||||
@@ -84,7 +85,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Extract the variable sized integer from |data|. Note that since
|
||||
// |data| contains exactly one variable sized integer, |vint| should be
|
||||
// identical to |data|.
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x41);
|
||||
@@ -95,7 +96,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 14-bit: 01|10 0001, 0001 1001
|
||||
const data = new Uint8Array([0x61, 0x19]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x2119);
|
||||
@@ -106,7 +107,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 21-bit: 001|1 0001, 0010 0001, 0001 0011
|
||||
const data = new Uint8Array([0x31, 0x21, 0x13]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x112113);
|
||||
@@ -117,7 +118,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 28-bit: 0001 | 1000, 0001 0001, 0001 0001, 0001 0101
|
||||
const data = new Uint8Array([0x18, 0x11, 0x11, 0x15]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x8111115);
|
||||
@@ -128,7 +129,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 35-bit: 0000 1|100, 0001 0001, 0001 0001, 0001 0001, 0001 1001
|
||||
const data = new Uint8Array([0x0c, 0x11, 0x11, 0x11, 0x19]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x411111119);
|
||||
@@ -140,7 +141,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 0001 1000
|
||||
const data = new Uint8Array([0x06, 0x12, 0x11, 0x11, 0x11, 0x18]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x21211111118);
|
||||
@@ -152,7 +153,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 0001 0001, 1001 0001
|
||||
const data = new Uint8Array([0x03, 0x12, 0x11, 0x11, 0x11, 0x11, 0x91]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x1121111111191);
|
||||
@@ -165,7 +166,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
const data =
|
||||
new Uint8Array([0x01, 0x12, 0x14, 0x18, 0x11, 0x11, 0x19, 0x31]);
|
||||
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
const vint = parser.parseVint_();
|
||||
|
||||
expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x12141811111931);
|
||||
@@ -184,7 +185,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// 0001 0001
|
||||
const data = new Uint8Array(
|
||||
[0x00, 0x81, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
parser.parseVint_();
|
||||
}).toThrow(expected);
|
||||
});
|
||||
@@ -223,7 +224,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
it('detects the end of input while reading a vint', () => {
|
||||
// 14-bit: 01|10 0001, 0001 0001
|
||||
const data = new Uint8Array([0x61]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const expected = Util.jasmineError(new shaka.util.Error(
|
||||
shaka.util.Error.Severity.CRITICAL,
|
||||
@@ -237,7 +238,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Set size to 4 bytes.
|
||||
// Set the data to [0x01, 0x02, 0x03, 0x04].
|
||||
const data = new Uint8Array([0x81, 0x84, 0x01, 0x02, 0x03, 0x04]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const elem = parser.parseElement();
|
||||
expect(elem.id).toBe(0x81);
|
||||
@@ -250,7 +251,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Set the data to [0x01, 0x02, 0x03, ..., 0x09].
|
||||
const data = new Uint8Array(
|
||||
[0x81, 0x89, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const elem = parser.parseElement();
|
||||
expect(elem.id).toBe(0x81);
|
||||
@@ -268,7 +269,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
|
||||
// Set the data to [0x2f, 0xff, 0xff, ..., 0xff].
|
||||
const data = new Uint8Array(
|
||||
[0x81, 0x88, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);
|
||||
const parser = new shaka.util.EbmlParser(new DataView(data.buffer));
|
||||
const parser = new shaka.util.EbmlParser(data);
|
||||
|
||||
const elem = parser.parseElement();
|
||||
expect(elem.id).toBe(0x81);
|
||||
|
||||
Reference in New Issue
Block a user