[Pkg-javascript-commits] [pdf.js] 36/116: Refactor searching for end of inline (EI) JPEG image streams
David Prévot
taffit at moszumanska.debian.org
Fri Mar 6 16:19:58 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository pdf.js.
commit eac168f3cc4df2e8f3f7790c6ca60426b96dcc54
Author: Jonas Jenwald <jonas.jenwald at gmail.com>
Date: Sun Dec 21 16:07:07 2014 +0100
Refactor searching for end of inline (EI) JPEG image streams
This patch changes searching for EI image streams to rely on the EOI (end-of-image) marker for DCTDecode filters (i.e. JPEG images).
---
src/core/parser.js | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 99 insertions(+), 1 deletion(-)
diff --git a/src/core/parser.js b/src/core/parser.js
index 212d1d0..d68fb5f 100644
--- a/src/core/parser.js
+++ b/src/core/parser.js
@@ -165,6 +165,102 @@ var Parser = (function ParserClosure() {
return ((stream.pos - 4) - startPos);
},
/**
+ * Find the EOI (end-of-image) marker 0xFFD9 of the stream.
+ * @returns {number} The inline stream length.
+ */
+ findDCTDecodeInlineStreamEnd:
+ function Parser_findDCTDecodeInlineStreamEnd(stream) {
+ var startPos = stream.pos, foundEOI = false, b, markerLength, length;
+ while ((b = stream.getByte()) !== -1) {
+ if (b !== 0xFF) { // Not a valid marker.
+ continue;
+ }
+ switch (stream.getByte()) {
+ case 0x00: // Byte stuffing.
+ // 0xFF00 appears to be a very common byte sequence in JPEG images.
+ break;
+
+ case 0xFF: // Fill byte.
+ // Avoid skipping a valid marker, resetting the stream position.
+ stream.skip(-1);
+ break;
+
+ case 0xD9: // EOI
+ foundEOI = true;
+ break;
+
+ case 0xC0: // SOF0
+ case 0xC1: // SOF1
+ case 0xC2: // SOF2
+ case 0xC3: // SOF3
+
+ case 0xC5: // SOF5
+ case 0xC6: // SOF6
+ case 0xC7: // SOF7
+
+ case 0xC9: // SOF9
+ case 0xCA: // SOF10
+ case 0xCB: // SOF11
+
+ case 0xCD: // SOF13
+ case 0xCE: // SOF14
+ case 0xCF: // SOF15
+
+ case 0xC4: // DHT
+ case 0xCC: // DAC
+
+ case 0xDA: // SOS
+ case 0xDB: // DQT
+ case 0xDC: // DNL
+ case 0xDD: // DRI
+ case 0xDE: // DHP
+ case 0xDF: // EXP
+
+ case 0xE0: // APP0
+ case 0xE1: // APP1
+ case 0xE2: // APP2
+ case 0xE3: // APP3
+ case 0xE4: // APP4
+ case 0xE5: // APP5
+ case 0xE6: // APP6
+ case 0xE7: // APP7
+ case 0xE8: // APP8
+ case 0xE9: // APP9
+ case 0xEA: // APP10
+ case 0xEB: // APP11
+ case 0xEC: // APP12
+ case 0xED: // APP13
+ case 0xEE: // APP14
+ case 0xEF: // APP15
+
+ case 0xFE: // COM
+ // The marker should be followed by the length of the segment.
+ markerLength = stream.getUint16();
+ if (markerLength > 2) {
+ // |markerLength| contains the byte length of the marker segment,
+ // including its own length (2 bytes) and excluding the marker.
+ stream.skip(markerLength - 2); // Jump to the next marker.
+ } else {
+ // The marker length is invalid, resetting the stream position.
+ stream.skip(-2);
+ }
+ break;
+ }
+ if (foundEOI) {
+ break;
+ }
+ }
+ length = stream.pos - startPos;
+ if (b === -1) {
+ warn('Inline DCTDecode image stream: ' +
+ 'EOI marker not found, searching for /EI/ instead.');
+ stream.skip(-length); // Reset the stream position.
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+ this.inlineStreamSkipEI(stream);
+ return length;
+ },
+ /**
* Find the EOD (end-of-data) marker '~>' (i.e. TILDE + GT) of the stream.
* @returns {number} The inline stream length.
*/
@@ -255,7 +351,9 @@ var Parser = (function ParserClosure() {
// Parse image stream.
var startPos = stream.pos, length, i, ii;
- if (filterName === 'ASCII85Decide' || filterName === 'A85') {
+ if (filterName === 'DCTDecode' || filterName === 'DCT') {
+ length = this.findDCTDecodeInlineStreamEnd(stream);
+ } else if (filterName === 'ASCII85Decide' || filterName === 'A85') {
length = this.findASCII85DecodeInlineStreamEnd(stream);
} else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') {
length = this.findASCIIHexDecodeInlineStreamEnd(stream);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git
More information about the Pkg-javascript-commits
mailing list