@@ -6807,117 +6807,97 @@ def test_poppler(self):
6807
6807
@no_wasm64 ('MEMORY64 does not yet support SJLJ' )
6808
6808
@is_slow_test
6809
6809
def test_openjpeg (self ):
6810
- def do_test_openjpeg ():
6811
- def line_splitter (data ):
6812
- out = ''
6813
- counter = 0
6814
-
6815
- for ch in data :
6816
- out += ch
6817
- if ch == ' ' and counter > 60 :
6818
- out += '\n '
6819
- counter = 0
6820
- else :
6821
- counter += 1
6822
-
6823
- return out
6824
-
6825
- # remove -g, so we have one test without it by default
6826
- self .emcc_args = [x for x in self .emcc_args if x != '-g' ]
6827
-
6828
- original_j2k = test_file ('openjpeg/syntensity_lobby_s.j2k' )
6829
- image_bytes = list (bytearray (read_binary (original_j2k )))
6830
- create_file ('pre.js' , """
6831
- Module.preRun = () => FS.createDataFile('/', 'image.j2k', %s, true, false, false);
6832
- Module.postRun = () => {
6833
- out('Data: ' + JSON.stringify(Array.from(FS.readFile('image.raw'))));
6834
- };
6835
- """ % line_splitter (str (image_bytes )))
6836
-
6837
- # ensure libpng is built so that openjpeg's configure step can detect it.
6838
- # If we don't do this then we don't know what the state of the cache will be
6839
- # and this test would different non-deterministic results based on, for example,
6840
- # what other tests had previously run.
6841
- builder_cmd = [EMBUILDER , 'build' , 'libpng' ]
6842
- if self .get_setting ('MEMORY64' ):
6843
- builder_cmd .append ('--wasm64' )
6844
- self .emcc_args .append ('-Wno-pointer-to-int-cast' )
6845
- self .run_process (builder_cmd )
6846
- lib = self .get_library ('third_party/openjpeg' ,
6847
- [Path ('codec/CMakeFiles/j2k_to_image.dir/index.c.o' ),
6848
- Path ('codec/CMakeFiles/j2k_to_image.dir/convert.c.o' ),
6849
- Path ('codec/CMakeFiles/j2k_to_image.dir/__/common/color.c.o' ),
6850
- Path ('bin/libopenjpeg.a' )],
6851
- configure = ['cmake' , '.' ],
6852
- # configure_args=['--enable-tiff=no', '--enable-jp3d=no', '--enable-png=no'],
6853
- make_args = []) # no -j 2, since parallel builds can fail
6854
-
6855
- # We use doubles in JS, so we get slightly different values than native code. So we
6856
- # check our output by comparing the average pixel difference
6857
- def image_compare (output ):
6858
- # Get the image generated by JS, from the JSON.stringify'd array
6859
- m = re .search (r'\[[\d, -]*\]' , output )
6860
- self .assertIsNotNone (m , 'Failed to find proper image output in: ' + output )
6861
- # Evaluate the output as a python array
6862
- js_data = eval (m .group (0 ))
6863
-
6864
- js_data = [x if x >= 0 else 256 + x for x in js_data ] # Our output may be signed, so unsign it
6865
-
6866
- # Get the correct output
6867
- true_data = bytearray (read_binary (test_file ('openjpeg/syntensity_lobby_s.raw' )))
6868
-
6869
- # Compare them
6870
- self .assertEqual (len (js_data ), len (true_data ))
6871
- num = len (js_data )
6872
- diff_total = js_total = true_total = 0
6873
- for i in range (num ):
6874
- js_total += js_data [i ]
6875
- true_total += true_data [i ]
6876
- diff_total += abs (js_data [i ] - true_data [i ])
6877
- js_mean = js_total / float (num )
6878
- true_mean = true_total / float (num )
6879
- diff_mean = diff_total / float (num )
6880
-
6881
- image_mean = 83.265
6882
- # print '[image stats:', js_mean, image_mean, true_mean, diff_mean, num, ']'
6883
- assert abs (js_mean - image_mean ) < 0.01 , [js_mean , image_mean ]
6884
- assert abs (true_mean - image_mean ) < 0.01 , [true_mean , image_mean ]
6885
- assert diff_mean < 0.01 , diff_mean
6886
-
6887
- return output
6888
-
6889
- self .emcc_args += ['--minify=0' ] # to compare the versions
6890
- self .emcc_args += ['--pre-js' , 'pre.js' ]
6891
-
6892
- def do_test ():
6893
- self .do_runf ('third_party/openjpeg/codec/j2k_to_image.c' ,
6894
- 'Successfully generated' , # The real test for valid output is in image_compare
6895
- args = '-i image.j2k -o image.raw' .split (),
6896
- emcc_args = ['-sUSE_LIBPNG' ],
6897
- libraries = lib ,
6898
- includes = [test_file ('third_party/openjpeg/libopenjpeg' ),
6899
- test_file ('third_party/openjpeg/codec' ),
6900
- test_file ('third_party/openjpeg/common' ),
6901
- Path (self .get_build_dir (), 'third_party/openjpeg' )],
6902
- output_nicerizer = image_compare )
6903
-
6904
- do_test ()
6905
-
6906
- # extra testing
6907
- if self .get_setting ('ALLOW_MEMORY_GROWTH' ) == 1 :
6908
- print ('no memory growth' , file = sys .stderr )
6909
- self .set_setting ('ALLOW_MEMORY_GROWTH' , 0 )
6910
- do_test ()
6810
+ def line_splitter (data ):
6811
+ out = ''
6812
+ counter = 0
6813
+
6814
+ for ch in data :
6815
+ out += ch
6816
+ if ch == ' ' and counter > 60 :
6817
+ out += '\n '
6818
+ counter = 0
6819
+ else :
6820
+ counter += 1
6911
6821
6912
- if is_sanitizing (self .emcc_args ):
6913
- # In ASan mode we need a large initial memory (or else wasm-ld fails).
6914
- # The OpenJPEG CMake will build several executables (which we need parts
6915
- # of in our testing, see above), so we must enable the flag for them all.
6916
- with env_modify ({'EMCC_CFLAGS' : '-sINITIAL_MEMORY=300MB' }):
6917
- self .emcc_args .append ('-Wno-unused-command-line-argument' )
6918
- do_test_openjpeg ()
6919
- else :
6920
- do_test_openjpeg ()
6822
+ return out
6823
+
6824
+ # remove -g, so we have one test without it by default
6825
+ self .emcc_args = [x for x in self .emcc_args if x != '-g' ]
6826
+
6827
+ original_j2k = test_file ('openjpeg/syntensity_lobby_s.j2k' )
6828
+ image_bytes = list (bytearray (read_binary (original_j2k )))
6829
+ create_file ('pre.js' , """
6830
+ Module.preRun = () => FS.createDataFile('/', 'image.j2k', %s, true, false, false);
6831
+ Module.postRun = () => {
6832
+ out('Data: ' + JSON.stringify(Array.from(FS.readFile('image.raw'))));
6833
+ };
6834
+ """ % line_splitter (str (image_bytes )))
6835
+
6836
+ # ensure libpng is built so that openjpeg's configure step can detect it.
6837
+ # If we don't do this then we don't know what the state of the cache will be
6838
+ # and this test would different non-deterministic results based on, for example,
6839
+ # what other tests had previously run.
6840
+ builder_cmd = [EMBUILDER , 'build' , 'libpng' ]
6841
+ if self .get_setting ('MEMORY64' ):
6842
+ builder_cmd .append ('--wasm64' )
6843
+ self .emcc_args .append ('-Wno-pointer-to-int-cast' )
6844
+ self .run_process (builder_cmd )
6845
+ lib = self .get_library ('third_party/openjpeg' ,
6846
+ [Path ('codec/CMakeFiles/j2k_to_image.dir/index.c.o' ),
6847
+ Path ('codec/CMakeFiles/j2k_to_image.dir/convert.c.o' ),
6848
+ Path ('codec/CMakeFiles/j2k_to_image.dir/__/common/color.c.o' ),
6849
+ Path ('bin/libopenjpeg.a' )],
6850
+ configure = ['cmake' , '.' ],
6851
+ # configure_args=['--enable-tiff=no', '--enable-jp3d=no', '--enable-png=no'],
6852
+ make_args = []) # no -j 2, since parallel builds can fail
6853
+
6854
+ # We use doubles in JS, so we get slightly different values than native code. So we
6855
+ # check our output by comparing the average pixel difference
6856
+ def image_compare (output ):
6857
+ # Get the image generated by JS, from the JSON.stringify'd array
6858
+ m = re .search (r'\[[\d, -]*\]' , output )
6859
+
6860
+ self .assertIsNotNone (m , 'Failed to find proper image output in: ' + output )
6861
+ # Evaluate the output as a python array
6862
+ js_data = eval (m .group (0 ))
6863
+
6864
+ js_data = [x if x >= 0 else 256 + x for x in js_data ] # Our output may be signed, so unsign it
6865
+ # Get the correct output
6866
+ true_data = bytearray (read_binary (test_file ('openjpeg/syntensity_lobby_s.raw' )))
6867
+
6868
+ # Compare them
6869
+ self .assertEqual (len (js_data ), len (true_data ))
6870
+ num = len (js_data )
6871
+ diff_total = js_total = true_total = 0
6872
+ for i in range (num ):
6873
+ js_total += js_data [i ]
6874
+ true_total += true_data [i ]
6875
+ diff_total += abs (js_data [i ] - true_data [i ])
6876
+ js_mean = js_total / float (num )
6877
+ true_mean = true_total / float (num )
6878
+ diff_mean = diff_total / float (num )
6879
+
6880
+ image_mean = 83.265
6881
+ # print '[image stats:', js_mean, image_mean, true_mean, diff_mean, num, ']'
6882
+ assert abs (js_mean - image_mean ) < 0.01 , [js_mean , image_mean ]
6883
+ assert abs (true_mean - image_mean ) < 0.01 , [true_mean , image_mean ]
6884
+ assert diff_mean < 0.01 , diff_mean
6885
+
6886
+ return output
6887
+
6888
+ self .emcc_args += ['--minify=0' ] # to compare the versions
6889
+ self .emcc_args += ['--pre-js' , 'pre.js' ]
6890
+
6891
+ self .do_runf ('third_party/openjpeg/codec/j2k_to_image.c' ,
6892
+ 'Successfully generated' , # The real test for valid output is in image_compare
6893
+ args = '-i image.j2k -o image.raw' .split (),
6894
+ emcc_args = ['-sUSE_LIBPNG' ],
6895
+ libraries = lib ,
6896
+ includes = [test_file ('third_party/openjpeg/libopenjpeg' ),
6897
+ test_file ('third_party/openjpeg/codec' ),
6898
+ test_file ('third_party/openjpeg/common' ),
6899
+ Path (self .get_build_dir (), 'third_party/openjpeg' )],
6900
+ output_nicerizer = image_compare )
6921
6901
6922
6902
@also_with_standalone_wasm (impure = True )
6923
6903
@no_asan ('autodebug logging interferes with asan' )
0 commit comments