Merge pull request #5549 from MaMazav/Support_EPH_and_SOP_markers

Support EPH and SOP markers.
This commit is contained in:
Tim van der Meij 2014-12-17 22:23:36 +01:00
commit ee70aadb56

View File

@ -324,12 +324,6 @@ var JpxImage = (function JpxImageClosure() {
cod.precinctsSizes = precinctsSizes; cod.precinctsSizes = precinctsSizes;
} }
var unsupported = []; var unsupported = [];
if (cod.sopMarkerUsed) {
unsupported.push('sopMarkerUsed');
}
if (cod.ephMarkerUsed) {
unsupported.push('ephMarkerUsed');
}
if (cod.selectiveArithmeticCodingBypass) { if (cod.selectiveArithmeticCodingBypass) {
unsupported.push('selectiveArithmeticCodingBypass'); unsupported.push('selectiveArithmeticCodingBypass');
} }
@ -816,6 +810,21 @@ var JpxImage = (function JpxImageClosure() {
bufferSize -= count; bufferSize -= count;
return (buffer >>> bufferSize) & ((1 << count) - 1); return (buffer >>> bufferSize) & ((1 << count) - 1);
} }
function skipMarkerIfEqual(value) {
if (data[offset + position - 1] === 0xFF &&
data[offset + position] === value) {
skipBytes(1);
return true;
} else if (data[offset + position] === 0xFF &&
data[offset + position + 1] === value) {
skipBytes(2);
return true;
}
return false;
}
function skipBytes(count) {
position += count;
}
function alignToByte() { function alignToByte() {
bufferSize = 0; bufferSize = 0;
if (skipNextBit) { if (skipNextBit) {
@ -843,9 +852,15 @@ var JpxImage = (function JpxImageClosure() {
} }
var tileIndex = context.currentTile.index; var tileIndex = context.currentTile.index;
var tile = context.tiles[tileIndex]; var tile = context.tiles[tileIndex];
var sopMarkerUsed = context.COD.sopMarkerUsed;
var ephMarkerUsed = context.COD.ephMarkerUsed;
var packetsIterator = tile.packetsIterator; var packetsIterator = tile.packetsIterator;
while (position < dataLength) { while (position < dataLength) {
alignToByte(); alignToByte();
if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
// Skip also marker segment length and packet sequence ID
skipBytes(4);
}
if (!readBits(1)) { if (!readBits(1)) {
continue; continue;
} }
@ -928,6 +943,9 @@ var JpxImage = (function JpxImageClosure() {
}); });
} }
alignToByte(); alignToByte();
if (ephMarkerUsed) {
skipMarkerIfEqual(0x92);
}
while (queue.length > 0) { while (queue.length > 0) {
var packetItem = queue.shift(); var packetItem = queue.shift();
codeblock = packetItem.codeblock; codeblock = packetItem.codeblock;