Assign the quantizationTables
after parsing the entire JPEG image, to prevent issues when the DQT (Define Quantization Tables) marker is encountered after SOF{n} (Start of Frame) markers (issue 7406)
This is a tentative patch that fixes 7406.
This commit is contained in:
parent
23b13d368e
commit
1bbc694ac3
@ -387,6 +387,10 @@ var JpegImage = (function jpegImage() {
|
|||||||
var p0, p1, p2, p3, p4, p5, p6, p7;
|
var p0, p1, p2, p3, p4, p5, p6, p7;
|
||||||
var t;
|
var t;
|
||||||
|
|
||||||
|
if (!qt) {
|
||||||
|
throw 'missing required Quantization Table.';
|
||||||
|
}
|
||||||
|
|
||||||
// inverse DCT on rows
|
// inverse DCT on rows
|
||||||
for (var row = 0; row < 64; row += 8) {
|
for (var row = 0; row < 64; row += 8) {
|
||||||
// gather block data
|
// gather block data
|
||||||
@ -738,7 +742,8 @@ var JpegImage = (function jpegImage() {
|
|||||||
l = frame.components.push({
|
l = frame.components.push({
|
||||||
h: h,
|
h: h,
|
||||||
v: v,
|
v: v,
|
||||||
quantizationTable: quantizationTables[qId]
|
quantizationId: qId,
|
||||||
|
quantizationTable: null, // See comment below.
|
||||||
});
|
});
|
||||||
frame.componentIds[componentId] = l - 1;
|
frame.componentIds[componentId] = l - 1;
|
||||||
offset += 3;
|
offset += 3;
|
||||||
@ -822,6 +827,15 @@ var JpegImage = (function jpegImage() {
|
|||||||
this.components = [];
|
this.components = [];
|
||||||
for (i = 0; i < frame.components.length; i++) {
|
for (i = 0; i < frame.components.length; i++) {
|
||||||
component = frame.components[i];
|
component = frame.components[i];
|
||||||
|
|
||||||
|
// Prevent errors when DQT markers are placed after SOF{n} markers,
|
||||||
|
// by assigning the `quantizationTable` entry after the entire image
|
||||||
|
// has been parsed (fixes issue7406.pdf).
|
||||||
|
var quantizationTable = quantizationTables[component.quantizationId];
|
||||||
|
if (quantizationTable) {
|
||||||
|
component.quantizationTable = quantizationTable;
|
||||||
|
}
|
||||||
|
|
||||||
this.components.push({
|
this.components.push({
|
||||||
output: buildComponentData(frame, component),
|
output: buildComponentData(frame, component),
|
||||||
scaleX: component.h / frame.maxH,
|
scaleX: component.h / frame.maxH,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user