Skip to content

Commit c65ac5e

Browse files
committed
fix: ogg continued packet logic, see eshaz/wasm-audio-decoders#82
1 parent 5234dd8 commit c65ac5e

15 files changed

+136893
-39420
lines changed

package-lock.json

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codec-parser",
3-
"version": "2.4.0",
3+
"version": "2.4.1",
44
"description": "Library that parses raw data from audio codecs into frames containing data, header values, duration, and other information.",
55
"main": "index.js",
66
"types": "index.d.ts",
@@ -37,8 +37,8 @@
3737
"sideEffects": false,
3838
"homepage": "https://github.com/eshaz/codec-parser#readme",
3939
"devDependencies": {
40-
"@types/jest": "^29.5.1",
40+
"@types/jest": "^29.5.2",
4141
"jest": "^29.5.0",
42-
"prettier": "^2.8.7"
42+
"prettier": "^2.8.8"
4343
}
4444
}

src/containers/ogg/OggParser.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -126,22 +126,25 @@ export default class OggParser extends Parser {
126126
oggPage[data][subarray](offset, (offset += segmentLength))
127127
);
128128

129+
// prepend any existing continued packet data
130+
if (this._continuedPacket[length]) {
131+
oggPageStore[segments][0] = concatBuffers(
132+
this._continuedPacket,
133+
oggPageStore[segments][0]
134+
);
135+
136+
this._continuedPacket = new uint8Array();
137+
}
138+
139+
// save any new continued packet data
129140
if (
130141
headerData[pageSegmentBytes][headerData[pageSegmentBytes][length] - 1] ===
131142
0xff
132143
) {
133-
// continued packet
134144
this._continuedPacket = concatBuffers(
135145
this._continuedPacket,
136146
oggPageStore[segments].pop()
137147
);
138-
} else if (this._continuedPacket[length]) {
139-
oggPageStore[segments][0] = concatBuffers(
140-
this._continuedPacket,
141-
oggPageStore[segments][0]
142-
);
143-
144-
this._continuedPacket = new uint8Array();
145148
}
146149

147150
if (this._codec || this._checkForIdentifier(oggPage)) {

test/CodecParser.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,11 @@ describe("CodecParser", () => {
247247

248248
describe("Ogg Flac", () => {
249249
testParser("ogg.flac", mimeType, "flac", 742, 0);
250-
testParser("ogg.flac.samplerate_50000", mimeType, "flac", 216, 0);
250+
testParser("ogg.flac.samplerate_50000", mimeType, "flac", 217, 0);
251251
testParser("ogg.flac.samplerate_12345", mimeType, "flac", 178, 0);
252252
testParser("ogg.flac.blocksize_65535", mimeType, "flac", 13, 0);
253253
testParser("ogg.flac.blocksize_64", mimeType, "flac", 13137, 0);
254-
testParser("ogg.flac.blocksize_variable_1", mimeType, "flac", 445, 0);
254+
testParser("ogg.flac.blocksize_variable_1", mimeType, "flac", 446, 0);
255255
testParser("ogg.flac.blocksize_variable_2", mimeType, "flac", 478, 0);
256256
testParser("ogg.flac.utf8_frame_number", mimeType, "flac", 106, 0);
257257
});
@@ -268,6 +268,7 @@ describe("CodecParser", () => {
268268
testParser("ogg.vorbis", mimeType, "vorbis", 2441, 0);
269269
testParser("ogg.vorbis.extra_metadata", mimeType, "vorbis", 1647);
270270
testParser("ogg.vorbis.fishead", mimeType, "vorbis", 1365);
271+
testParser("ogg.vorbis.continued", mimeType, "vorbis", 1151);
271272
});
272273
});
273274

0 commit comments

Comments
 (0)