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:
Jacob Trimble
2019-08-20 11:44:29 -07:00
parent a2bcf7278d
commit ac4fdfd0cd
10 changed files with 37 additions and 52 deletions
-1
View File
@@ -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/'
}
+1 -3
View File
@@ -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(
+2 -5
View File
@@ -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.
+1 -3
View File
@@ -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
+1 -1
View File
@@ -22,7 +22,7 @@ goog.require('shaka.util.Iterables');
/**
* @summary A set of BufferSource utility functions.
* @exportDoc
* @exportInterface
*/
shaka.util.BufferUtils = class {
/**
+3 -3
View File
@@ -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_ =
+4 -5
View File
@@ -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);
}
+2 -5
View File
@@ -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 = {
+4 -8
View File
@@ -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', () => {
+19 -18
View File
@@ -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);