diff --git a/src/core/base_stream.js b/src/core/base_stream.js index 21333249b..86f9eb769 100644 --- a/src/core/base_stream.js +++ b/src/core/base_stream.js @@ -94,6 +94,13 @@ class BaseStream { makeSubStream(start, length, dict = null) { unreachable("Abstract method `makeSubStream` called"); } + + /** + * @returns {Array | null} + */ + getBaseStreams() { + return null; + } } export { BaseStream }; diff --git a/src/core/decode_stream.js b/src/core/decode_stream.js index 9c7424338..701d78dec 100644 --- a/src/core/decode_stream.js +++ b/src/core/decode_stream.js @@ -122,10 +122,7 @@ class DecodeStream extends BaseStream { } getBaseStreams() { - if (this.str && this.str.getBaseStreams) { - return this.str.getBaseStreams(); - } - return []; + return this.str ? this.str.getBaseStreams() : null; } } @@ -159,13 +156,14 @@ class StreamsSequenceStream extends DecodeStream { } getBaseStreams() { - const baseStreams = []; + const baseStreamsBuf = []; for (const stream of this.streams) { - if (stream.getBaseStreams) { - baseStreams.push(...stream.getBaseStreams()); + const baseStreams = stream.getBaseStreams(); + if (baseStreams) { + baseStreamsBuf.push(...baseStreams); } } - return baseStreams; + return baseStreamsBuf.length > 0 ? baseStreamsBuf : null; } } diff --git a/src/core/object_loader.js b/src/core/object_loader.js index 1812bd84c..b79e90320 100644 --- a/src/core/object_loader.js +++ b/src/core/object_loader.js @@ -108,18 +108,20 @@ class ObjectLoader { pendingRequests.push({ begin: ex.begin, end: ex.end }); } } - if (currentNode && currentNode.getBaseStreams) { + if (isStream(currentNode)) { const baseStreams = currentNode.getBaseStreams(); - let foundMissingData = false; - for (const stream of baseStreams) { - if (stream.isDataLoaded) { - continue; + if (baseStreams) { + let foundMissingData = false; + for (const stream of baseStreams) { + if (stream.isDataLoaded) { + continue; + } + foundMissingData = true; + pendingRequests.push({ begin: stream.start, end: stream.end }); + } + if (foundMissingData) { + nodesToRevisit.push(currentNode); } - foundMissingData = true; - pendingRequests.push({ begin: stream.start, end: stream.end }); - } - if (foundMissingData) { - nodesToRevisit.push(currentNode); } }