@ -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 ,