@@ -254,8 +254,7 @@ var JpxImage = (function JpxImageClosure() {
254
254
cod .selectiveArithmeticCodingBypass ||
255
255
cod .resetContextProbabilities ||
256
256
cod .terminationOnEachCodingPass ||
257
- cod .verticalyStripe || cod .predictableTermination ||
258
- cod .segmentationSymbolUsed )
257
+ cod .verticalyStripe || cod .predictableTermination )
259
258
throw 'Unsupported COD options: ' + uneval (cod );
260
259
261
260
if (context .mainHeader )
@@ -832,7 +831,8 @@ var JpxImage = (function JpxImageClosure() {
832
831
return position ;
833
832
}
834
833
function copyCoefficients (coefficients , x0 , y0 , width , height ,
835
- delta , mb , codeblocks , transformation ) {
834
+ delta , mb , codeblocks , transformation ,
835
+ segmentationSymbolUsed ) {
836
836
var r = 0.5 ; // formula (E-6)
837
837
for (var i = 0 , ii = codeblocks .length ; i < ii ; ++i ) {
838
838
var codeblock = codeblocks [i ];
@@ -876,6 +876,8 @@ var JpxImage = (function JpxImageClosure() {
876
876
break ;
877
877
case 2 :
878
878
bitModel .runCleanupPass ();
879
+ if (segmentationSymbolUsed )
880
+ bitModel .checkSegmentationSymbol ();
879
881
break ;
880
882
}
881
883
currentCodingpassType = (currentCodingpassType + 1 ) % 3 ;
@@ -912,6 +914,7 @@ var JpxImage = (function JpxImageClosure() {
912
914
var scalarExpounded = quantizationParameters .scalarExpounded ;
913
915
var guardBits = quantizationParameters .guardBits ;
914
916
var transformation = codingStyleParameters .transformation ;
917
+ var segmentationSymbolUsed = codingStyleParameters .segmentationSymbolUsed ;
915
918
var precision = context .components [c ].precision ;
916
919
917
920
var subbandCoefficients = [];
@@ -942,7 +945,8 @@ var JpxImage = (function JpxImageClosure() {
942
945
943
946
var coefficients = new Float32Array (width * height );
944
947
copyCoefficients (coefficients , subband .tbx0 , subband .tby0 ,
945
- width , height , delta , mb , subband .codeblocks , transformation );
948
+ width , height , delta , mb , subband .codeblocks , transformation ,
949
+ segmentationSymbolUsed );
946
950
947
951
subbandCoefficients .push ({
948
952
width : width ,
@@ -1645,6 +1649,14 @@ var JpxImage = (function JpxImageClosure() {
1645
1649
}
1646
1650
}
1647
1651
}
1652
+ },
1653
+ checkSegmentationSymbol : function BitModel_checkSegmentationSymbol () {
1654
+ var decoder = this .decoder ;
1655
+ var cx = this .uniformContext ;
1656
+ var symbol = (decoder .readBit (cx ) << 3 ) | (decoder .readBit (cx ) << 2 ) |
1657
+ (decoder .readBit (cx ) << 1 ) | decoder .readBit (cx );
1658
+ if (symbol != 0xA )
1659
+ throw 'Invalid segmentation symbol' ;
1648
1660
}
1649
1661
};
1650
1662
0 commit comments