Skip to content

Commit

Permalink
build: Move EBML parser to dash to improve the build size (#8189)
Browse files Browse the repository at this point in the history
  • Loading branch information
avelad authored Feb 28, 2025
1 parent 4e05551 commit be12a7f
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 48 deletions.
1 change: 0 additions & 1 deletion build/types/core
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@
+../../lib/util/delayed_tick.js
+../../lib/util/destroyer.js
+../../lib/util/dom_utils.js
+../../lib/util/ebml_parser.js
+../../lib/util/error.js
+../../lib/util/event_manager.js
+../../lib/util/exp_golomb.js
Expand Down
1 change: 1 addition & 0 deletions build/types/dash
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

+../../lib/dash/content_protection.js
+../../lib/dash/dash_parser.js
+../../lib/dash/ebml_parser.js
+../../lib/dash/mp4_segment_index_parser.js
+../../lib/dash/mpd_utils.js
+../../lib/dash/segment_base.js
Expand Down
16 changes: 8 additions & 8 deletions lib/util/ebml_parser.js → lib/dash/ebml_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/

goog.provide('shaka.util.EbmlElement');
goog.provide('shaka.util.EbmlParser');
goog.provide('shaka.dash.EbmlParser');

goog.require('goog.asserts');
goog.require('shaka.util.BufferUtils');
Expand All @@ -17,7 +17,7 @@ goog.require('shaka.util.Error');
* @summary
* Extensible Binary Markup Language (EBML) parser.
*/
shaka.util.EbmlParser = class {
shaka.dash.EbmlParser = class {
/**
* @param {BufferSource} data
*/
Expand Down Expand Up @@ -51,12 +51,12 @@ shaka.util.EbmlParser = class {
// Parse the element's size.
const vint = this.parseVint_();
let size;
if (shaka.util.EbmlParser.isDynamicSizeValue_(vint)) {
if (shaka.dash.EbmlParser.isDynamicSizeValue_(vint)) {
// If this has an unknown size, assume that it takes up the rest of the
// data.
size = this.dataView_.byteLength - this.reader_.getPosition();
} else {
size = shaka.util.EbmlParser.getVintValue_(vint);
size = shaka.dash.EbmlParser.getVintValue_(vint);
}

// Note that if the element's size is larger than the buffer then we are
Expand Down Expand Up @@ -182,7 +182,7 @@ shaka.util.EbmlParser = class {
* @private
*/
static isDynamicSizeValue_(vint) {
const EbmlParser = shaka.util.EbmlParser;
const EbmlParser = shaka.dash.EbmlParser;
const BufferUtils = shaka.util.BufferUtils;

for (const dynamicSizeConst of EbmlParser.DYNAMIC_SIZES) {
Expand All @@ -200,7 +200,7 @@ shaka.util.EbmlParser = class {
* A list of EBML dynamic size constants.
* @const {!Array<!Array<number>>}
*/
shaka.util.EbmlParser.DYNAMIC_SIZES = [
shaka.dash.EbmlParser.DYNAMIC_SIZES = [
[0xff],
[0x7f, 0xff],
[0x3f, 0xff, 0xff],
Expand Down Expand Up @@ -237,10 +237,10 @@ shaka.util.EbmlElement = class {

/**
* Interpret the element's data as a list of sub-elements.
* @return {!shaka.util.EbmlParser} A parser over the sub-elements.
* @return {!shaka.dash.EbmlParser} A parser over the sub-elements.
*/
createParser() {
return new shaka.util.EbmlParser(this.dataView_);
return new shaka.dash.EbmlParser(this.dataView_);
}


Expand Down
6 changes: 3 additions & 3 deletions lib/dash/webm_segment_index_parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ goog.require('shaka.log');
goog.require('shaka.media.InitSegmentReference');
goog.require('shaka.media.SegmentReference');
goog.require('shaka.util.EbmlElement');
goog.require('shaka.util.EbmlParser');
goog.require('shaka.dash.EbmlParser');
goog.require('shaka.util.Error');


Expand All @@ -35,7 +35,7 @@ shaka.dash.WebmSegmentIndexParser = class {
appendWindowStart, appendWindowEnd) {
const tuple =
shaka.dash.WebmSegmentIndexParser.parseWebmContainer_(initData);
const parser = new shaka.util.EbmlParser(cuesData);
const parser = new shaka.dash.EbmlParser(cuesData);
const cuesElement = parser.parseElement();
if (cuesElement.id != shaka.dash.WebmSegmentIndexParser.CUES_ID) {
shaka.log.error('Not a Cues element.');
Expand Down Expand Up @@ -63,7 +63,7 @@ shaka.dash.WebmSegmentIndexParser = class {
* @private
*/
static parseWebmContainer_(initData) {
const parser = new shaka.util.EbmlParser(initData);
const parser = new shaka.dash.EbmlParser(initData);

// Check that the WebM container data starts with the EBML header, but
// skip its contents.
Expand Down
72 changes: 36 additions & 36 deletions test/util/ebml_parser_unit.js → test/dash/ebml_parser_unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,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(data);
const parser = new shaka.dash.EbmlParser(data);

const elem = parser.parseElement();
expect(elem.id).toBe(0x81);
Expand All @@ -35,7 +35,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
const data = new Uint8Array([
0x81, 0x84, 0x01, 0x02, 0x03, 0x04, 0x82, 0x84, 0x09, 0x08, 0x07, 0x06,
]);
const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);

const elem1 = parser.parseElement();
expect(elem1.id).toBe(0x81);
Expand All @@ -60,7 +60,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(data);
const parser = new shaka.dash.EbmlParser(data);
const element = parser.parseElement();

expect(element).toBeTruthy();
Expand All @@ -74,79 +74,79 @@ 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(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x41);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x41);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x41);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x41);
});

it('parses a 2 byte vint', () => {
// 14-bit: 01|10 0001, 0001 1001
const data = new Uint8Array([0x61, 0x19]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x2119);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x2119);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x2119);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x2119);
});

it('parses a 3 byte vint', () => {
// 21-bit: 001|1 0001, 0010 0001, 0001 0011
const data = new Uint8Array([0x31, 0x21, 0x13]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x112113);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x112113);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x112113);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x112113);
});

it('parses a 4 byte vint', () => {
// 28-bit: 0001 | 1000, 0001 0001, 0001 0001, 0001 0101
const data = new Uint8Array([0x18, 0x11, 0x11, 0x15]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x8111115);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x8111115);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x8111115);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x8111115);
});

it('parses a 5 byte vint', () => {
// 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(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x411111119);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x411111119);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x411111119);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x411111119);
});

it('parses a 6 byte vint', () => {
// 42-bit: 0000 01|10, 0001 0010, 0001 0001, 0001 0001, 0001 0001,
// 0001 1000
const data = new Uint8Array([0x06, 0x12, 0x11, 0x11, 0x11, 0x18]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x21211111118);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x21211111118);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x21211111118);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x21211111118);
});

it('parses a 7 byte vint', () => {
// 49-bit: 0000 001|1, 0001 0010, 0001 0001, 0001 0001, 0001 0001,
// 0001 0001, 1001 0001
const data = new Uint8Array([0x03, 0x12, 0x11, 0x11, 0x11, 0x11, 0x91]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x1121111111191);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x1121111111191);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x1121111111191);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x1121111111191);
});

it('parses a 8 byte vint', () => {
Expand All @@ -155,11 +155,11 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
const data =
new Uint8Array([0x01, 0x12, 0x14, 0x18, 0x11, 0x11, 0x19, 0x31]);

const parser = new shaka.util.EbmlParser(data);
const parser = new shaka.dash.EbmlParser(data);
const vint = parser.parseVint_();

expect(shaka.util.EbmlParser.getVintValue_(data)).toBe(0x12141811111931);
expect(shaka.util.EbmlParser.getVintValue_(vint)).toBe(0x12141811111931);
expect(shaka.dash.EbmlParser.getVintValue_(data)).toBe(0x12141811111931);
expect(shaka.dash.EbmlParser.getVintValue_(vint)).toBe(0x12141811111931);
});

it('detects vints with too many bytes', () => {
Expand All @@ -174,7 +174,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(data);
const parser = new shaka.dash.EbmlParser(data);
parser.parseVint_();
}).toThrow(expected);
});
Expand All @@ -190,30 +190,30 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
// 0001 0001, 0001 0001, 0001 0001
const data = new Uint8Array(
[0x01, 0x81, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]);
shaka.util.EbmlParser.getVintValue_(data);
shaka.dash.EbmlParser.getVintValue_(data);
}).toThrow(expected);

expect(() => {
// 56-bit: 0000 0001 | 0100 0001, 0001 0001, 0001 0001, 0001 0001,
// 0001 0001, 0001 0001, 0001 0001
const data = new Uint8Array(
[0x01, 0x41, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]);
shaka.util.EbmlParser.getVintValue_(data);
shaka.dash.EbmlParser.getVintValue_(data);
}).toThrow(expected);

expect(() => {
// 56-bit: 0000 0001 | 0010 0001, 0001 0001, 0001 0001, 0001 0001,
// 0001 0001, 0001 0001, 0001 0001
const data = new Uint8Array(
[0x01, 0x21, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]);
shaka.util.EbmlParser.getVintValue_(data);
shaka.dash.EbmlParser.getVintValue_(data);
}).toThrow(expected);
});

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(data);
const parser = new shaka.dash.EbmlParser(data);

const expected = Util.jasmineError(new shaka.util.Error(
shaka.util.Error.Severity.CRITICAL,
Expand All @@ -227,7 +227,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(data);
const parser = new shaka.dash.EbmlParser(data);

const elem = parser.parseElement();
expect(elem.id).toBe(0x81);
Expand All @@ -240,7 +240,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(data);
const parser = new shaka.dash.EbmlParser(data);

const elem = parser.parseElement();
expect(elem.id).toBe(0x81);
Expand All @@ -258,7 +258,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(data);
const parser = new shaka.dash.EbmlParser(data);

const elem = parser.parseElement();
expect(elem.id).toBe(0x81);
Expand All @@ -282,7 +282,7 @@ describe('EbmlParser', /** @suppress {accessControls} */ () => {
new Uint8Array([0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]),
];

const EbmlParser = shaka.util.EbmlParser;
const EbmlParser = shaka.dash.EbmlParser;

expect(EbmlParser.isDynamicSizeValue_(dynamicSizes[0])).toBe(true);
expect(EbmlParser.isDynamicSizeValue_(dynamicSizes[1])).toBe(true);
Expand Down

0 comments on commit be12a7f

Please sign in to comment.