41#include "gtest/gtest.h"
49#ifdef OJPH_COMPILER_MSVC
50 return _popen(command, modes);
52 return popen(command, modes);
62#ifdef OJPH_COMPILER_MSVC
63 return _pclose(stream);
65 return pclose(stream);
73int execute(
const std::string& cmd, std::string& result)
75 std::array<char, 128> buffer;
80 throw std::runtime_error(
"ojph_popen() failed!");
83 if (fgets(buffer.data(), 128, pipe) !=
nullptr)
84 result += buffer.data();
87 if (rc != EXIT_SUCCESS)
97#define SRC_FILE_DIR ".\\jp2k_test_codestreams\\openjph\\"
98#define OUT_FILE_DIR ".\\"
99#define REF_FILE_DIR ".\\jp2k_test_codestreams\\openjph\\references\\"
100#define MSE_PAE_PATH ".\\mse_pae"
101#define COMPARE_FILES_PATH ".\\compare_files"
102#define EXPAND_EXECUTABLE ".\\ojph_expand.exe"
103#define COMPRESS_EXECUTABLE ".\\ojph_compress.exe"
105#define SRC_FILE_DIR "./jp2k_test_codestreams/openjph/"
106#define OUT_FILE_DIR "./"
107#define REF_FILE_DIR "./jp2k_test_codestreams/openjph/references/"
108#define MSE_PAE_PATH "./mse_pae"
109#define COMPARE_FILES_PATH "./compare_files"
123#define EXPAND_EXECUTABLE "./ojph_expand"
124#define COMPRESS_EXECUTABLE "./ojph_compress"
132#define TOL_DOUBLE 0.01
139 const std::string& base_filename,
140 const std::string& extended_base_fname,
141 const std::string& out_ext,
142 const std::string& extra_options)
145 std::string result, command;
148 +
" -o " +
OUT_FILE_DIR + base_filename + extended_base_fname +
149 "." + out_ext +
" " + extra_options;
150 EXPECT_EQ(
execute(command, result), 0);
152 catch (
const std::runtime_error&
error) {
153 FAIL() <<
error.what();
161 const std::string& src_ext,
162 const std::string& out_ext)
165 std::string result, command;
168 +
" -o " +
OUT_FILE_DIR + base_filename +
"." + out_ext;
169 EXPECT_EQ(
execute(command, result), 0);
171 catch (
const std::runtime_error&
error) {
172 FAIL() <<
error.what();
180 const std::string& out_ext,
181 const std::string& decode_ext)
184 std::string result, command;
187 +
" -o " +
OUT_FILE_DIR + base_filename +
"." + decode_ext;
188 EXPECT_EQ(
execute(command, result), 0);
190 catch (
const std::runtime_error&
error) {
191 FAIL() <<
error.what();
199 const std::string& out_ext,
200 const std::string& ref_filename,
201 const std::string& yuv_specs,
202 int num_components,
double* mse,
int* pae)
205 std::string result, command;
207 +
" " +
OUT_FILE_DIR + base_filename +
"." + out_ext + yuv_specs
209 EXPECT_EQ(
execute(command, result), 0);
212 for (
int c = 0; c < num_components; ++c) {
213 if (pos < result.length()) {
214 double valf = atof(result.c_str() + pos);
218 FAIL() <<
"mse_pae result string does not have enough entries.";
220 pos = result.find(
" ", pos);
221 if (pos != std::string::npos)
223 if (pos < result.length()) {
224 int vali = atoi(result.c_str() + pos);
228 FAIL() <<
"mse_pae result string does not have enough entries.";
230 pos = result.find(
"\n", pos);
231 if (pos != std::string::npos)
235 catch (
const std::runtime_error&
error) {
236 FAIL() <<
error.what();
244 const std::string& extended_base_fname,
245 const std::string& ext)
248 std::string result, command;
250 +
" " +
OUT_FILE_DIR + base_filename + extended_base_fname +
"." + ext
252 EXPECT_EQ(
execute(command, result), 0);
254 catch (
const std::runtime_error&
error) {
255 FAIL() <<
error.what();
265TEST(TestExecutables, OpenJPHCompressNoArguments) {
270 catch (
const std::runtime_error&
error) {
271 FAIL() <<
error.what();
277TEST(TestExecutables, OpenJPHExpandNoArguments) {
282 catch (
const std::runtime_error&
error) {
283 FAIL() <<
error.what();
295TEST(TestExecutables, SimpleDecIrv9764x64) {
296 double mse[3] = { 39.2812, 36.3819, 47.642};
297 int pae[3] = { 74, 77, 73};
299 run_mse_pae(
"simple_dec_irv97_64x64",
"ppm",
"Malamute.ppm",
307TEST(TestExecutables, SimpleDecIrv9732x32) {
308 double mse[3] = { 18.6979, 17.1208, 22.7539};
309 int pae[3] = { 51, 48, 46};
311 run_mse_pae(
"simple_dec_irv97_32x32",
"ppm",
"Malamute.ppm",
319TEST(TestExecutables, SimpleDecIrv9716x16) {
320 double mse[3] = { 20.1706, 18.5427, 24.6146};
321 int pae[3] = { 53, 51, 47};
323 run_mse_pae(
"simple_dec_irv97_16x16",
"ppm",
"Malamute.ppm",
331TEST(TestExecutables, SimpleDecIrv974x4) {
332 double mse[3] = { 40.8623, 37.9308, 49.7276};
333 int pae[3] = { 75, 77, 80};
335 run_mse_pae(
"simple_dec_irv97_4x4",
"ppm",
"Malamute.ppm",
343TEST(TestExecutables, SimpleDecIrv971024x4) {
344 double mse[3] = { 19.8275, 18.2511, 24.2832};
345 int pae[3] = { 53, 52, 50};
347 run_mse_pae(
"simple_dec_irv97_1024x4",
"ppm",
"Malamute.ppm",
355TEST(TestExecutables, SimpleDecIrv974x1024) {
356 double mse[3] = { 19.9635, 18.4063, 24.1719};
357 int pae[3] = { 51, 48, 51};
359 run_mse_pae(
"simple_dec_irv97_4x1024",
"ppm",
"Malamute.ppm",
367TEST(TestExecutables, SimpleDecIrv97512x8) {
368 double mse[3] = { 18.7929, 17.2026, 22.9922};
369 int pae[3] = { 53, 52, 50};
371 run_mse_pae(
"simple_dec_irv97_512x8",
"ppm",
"Malamute.ppm",
379TEST(TestExecutables, SimpleDecIrv978x512) {
380 double mse[3] = { 19.3661, 17.8067, 23.4574};
381 int pae[3] = { 51, 48, 52};
383 run_mse_pae(
"simple_dec_irv97_8x512",
"ppm",
"Malamute.ppm",
391TEST(TestExecutables, SimpleDecIrv97256x16) {
392 double mse[3] = { 18.6355, 17.0963, 22.6076};
393 int pae[3] = { 54, 51, 48};
395 run_mse_pae(
"simple_dec_irv97_256x16",
"ppm",
"Malamute.ppm",
403TEST(TestExecutables, SimpleDecIrv9716x256) {
404 double mse[3] = { 18.5933, 17.0208, 22.5709};
405 int pae[3] = { 51, 48, 47};
407 run_mse_pae(
"simple_dec_irv97_16x256",
"ppm",
"Malamute.ppm",
415TEST(TestExecutables, SimpleDecIrv97128x32) {
416 double mse[3] = { 18.4443, 16.9133, 22.4193};
417 int pae[3] = { 52, 50, 46};
419 run_mse_pae(
"simple_dec_irv97_128x32",
"ppm",
"Malamute.ppm",
427TEST(TestExecutables, SimpleDecIrv9732x128) {
428 double mse[3] = { 18.4874, 16.9379, 22.4855};
429 int pae[3] = { 51, 48, 45};
431 run_mse_pae(
"simple_dec_irv97_32x128",
"ppm",
"Malamute.ppm",
439TEST(TestExecutables, SimpleDecRev5364x64) {
440 double mse[3] = { 0, 0, 0};
441 int pae[3] = { 0, 0, 0};
443 run_mse_pae(
"simple_dec_rev53_64x64",
"ppm",
"Malamute.ppm",
452TEST(TestExecutables, SimpleDecRev5332x32) {
453 double mse[3] = { 0, 0, 0};
454 int pae[3] = { 0, 0, 0};
456 run_mse_pae(
"simple_dec_rev53_32x32",
"ppm",
"Malamute.ppm",
465TEST(TestExecutables, SimpleDecRev534x4) {
466 double mse[3] = { 0, 0, 0};
467 int pae[3] = { 0, 0, 0};
469 run_mse_pae(
"simple_dec_rev53_4x4",
"ppm",
"Malamute.ppm",
478TEST(TestExecutables, SimpleDecRev531024x4) {
479 double mse[3] = { 0, 0, 0};
480 int pae[3] = { 0, 0, 0};
482 run_mse_pae(
"simple_dec_rev53_1024x4",
"ppm",
"Malamute.ppm",
491TEST(TestExecutables, SimpleDecRev534x1024) {
492 double mse[3] = { 0, 0, 0};
493 int pae[3] = { 0, 0, 0};
495 run_mse_pae(
"simple_dec_rev53_4x1024",
"ppm",
"Malamute.ppm",
506TEST(TestExecutables, SimpleDecIrv9764x64Yuv) {
507 double mse[3] = { 20.2778, 6.27912, 4.15937};
508 int pae[3] = { 52, 22, 31};
510 run_mse_pae(
"simple_dec_irv97_64x64_yuv",
"yuv",
"foreman_420.yuv",
511 ":352x288x8x420", 3, mse, pae);
521TEST(TestExecutables, SimpleDecRev5364x64Yuv) {
522 double mse[3] = { 0, 0, 0};
523 int pae[3] = { 0, 0, 0};
525 run_mse_pae(
"simple_dec_rev53_64x64_yuv",
"yuv",
"foreman_420.yuv",
526 ":352x288x8x420", 3, mse, pae);
536TEST(TestExecutables, SimpleDecIrv9764x64TilesYuv) {
537 double mse[3] = { 34.4972, 10.1112, 7.96331};
538 int pae[3] = { 67, 30, 39};
540 run_mse_pae(
"simple_dec_irv97_64x64_tiles_yuv",
"yuv",
"foreman_420.yuv",
541 ":352x288x8x420", 3, mse, pae);
551TEST(TestExecutables, SimpleDecRev5364x64TilesYuv) {
552 double mse[3] = { 0, 0, 0};
553 int pae[3] = { 0, 0, 0};
555 run_mse_pae(
"simple_dec_rev53_64x64_tiles_yuv",
"yuv",
"foreman_420.yuv",
556 ":352x288x8x420", 3, mse, pae);
565TEST(TestExecutables, SimpleDecIrv9764x64TilesLRCP) {
566 double mse[3] = { 71.8149, 68.7115, 89.4001};
567 int pae[3] = { 78, 78, 83};
569 run_mse_pae(
"simple_dec_irv97_64x64_tiles_LRCP",
"ppm",
"Malamute.ppm",
579TEST(TestExecutables, SimpleDecIrv9764x64TilesRLCP) {
580 double mse[3] = { 71.8149, 68.7115, 89.4001};
581 int pae[3] = { 78, 78, 83};
583 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RLCP",
"ppm",
"Malamute.ppm",
593TEST(TestExecutables, SimpleDecIrv9764x64TilesRPCL) {
594 double mse[3] = { 71.8149, 68.7115, 89.4001};
595 int pae[3] = { 78, 78, 83};
597 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RPCL",
"ppm",
"Malamute.ppm",
607TEST(TestExecutables, SimpleDecIrv9764x64TilesPCRL) {
608 double mse[3] = { 71.8149, 68.7115, 89.4001};
609 int pae[3] = { 78, 78, 83};
611 run_mse_pae(
"simple_dec_irv97_64x64_tiles_PCRL",
"ppm",
"Malamute.ppm",
621TEST(TestExecutables, SimpleDecIrv9764x64TilesCPRL) {
622 double mse[3] = { 71.8149, 68.7115, 89.4001};
623 int pae[3] = { 78, 78, 83};
625 run_mse_pae(
"simple_dec_irv97_64x64_tiles_CPRL",
"ppm",
"Malamute.ppm",
635TEST(TestExecutables, SimpleDecIrv9764x64TilesLRCP33) {
636 double mse[3] = { 56.2139, 51.4121, 69.0107};
637 int pae[3] = { 80, 81, 98};
639 run_mse_pae(
"simple_dec_irv97_64x64_tiles_LRCP33",
"ppm",
"Malamute.ppm",
649TEST(TestExecutables, SimpleDecIrv9764x64TilesRLCP33) {
650 double mse[3] = { 56.2139, 51.4121, 69.0107};
651 int pae[3] = { 80, 81, 98};
653 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RLCP33",
"ppm",
"Malamute.ppm",
663TEST(TestExecutables, SimpleDecIrv9764x64TilesRPCL33) {
664 double mse[3] = { 56.2139, 51.4121, 69.0107};
665 int pae[3] = { 80, 81, 98};
667 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RPCL33",
"ppm",
"Malamute.ppm",
677TEST(TestExecutables, SimpleDecIrv9764x64TilesPCRL33) {
678 double mse[3] = { 56.2139, 51.4121, 69.0107};
679 int pae[3] = { 80, 81, 98};
681 run_mse_pae(
"simple_dec_irv97_64x64_tiles_PCRL33",
"ppm",
"Malamute.ppm",
691TEST(TestExecutables, SimpleDecIrv9764x64TilesCPRL33) {
692 double mse[3] = { 56.2139, 51.4121, 69.0107};
693 int pae[3] = { 80, 81, 98};
695 run_mse_pae(
"simple_dec_irv97_64x64_tiles_CPRL33",
"ppm",
"Malamute.ppm",
705TEST(TestExecutables, SimpleDecIrv9764x64TilesLRCP33x33) {
706 double mse[3] = { 210.283, 210.214, 257.276};
707 int pae[3] = { 165, 161, 166};
708 run_ojph_expand(
"simple_dec_irv97_64x64_tiles_LRCP33x33",
"jph",
"ppm");
709 run_mse_pae(
"simple_dec_irv97_64x64_tiles_LRCP33x33",
"ppm",
"Malamute.ppm",
719TEST(TestExecutables, SimpleDecIrv9764x64TilesRLCP33x33) {
720 double mse[3] = { 210.283, 210.214, 257.276};
721 int pae[3] = { 165, 161, 166};
722 run_ojph_expand(
"simple_dec_irv97_64x64_tiles_RLCP33x33",
"jph",
"ppm");
723 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RLCP33x33",
"ppm",
"Malamute.ppm",
733TEST(TestExecutables, SimpleDecIrv9764x64TilesRPCL33x33) {
734 double mse[3] = { 210.283, 210.214, 257.276};
735 int pae[3] = { 165, 161, 166};
736 run_ojph_expand(
"simple_dec_irv97_64x64_tiles_RPCL33x33",
"jph",
"ppm");
737 run_mse_pae(
"simple_dec_irv97_64x64_tiles_RPCL33x33",
"ppm",
"Malamute.ppm",
747TEST(TestExecutables, SimpleDecIrv9764x64TilesPCRL33x33) {
748 double mse[3] = { 210.283, 210.214, 257.276};
749 int pae[3] = { 165, 161, 166};
750 run_ojph_expand(
"simple_dec_irv97_64x64_tiles_PCRL33x33",
"jph",
"ppm");
751 run_mse_pae(
"simple_dec_irv97_64x64_tiles_PCRL33x33",
"ppm",
"Malamute.ppm",
761TEST(TestExecutables, SimpleDecIrv9764x64TilesCPRL33x33) {
762 double mse[3] = { 210.283, 210.214, 257.276};
763 int pae[3] = { 165, 161, 166};
764 run_ojph_expand(
"simple_dec_irv97_64x64_tiles_CPRL33x33",
"jph",
"ppm");
765 run_mse_pae(
"simple_dec_irv97_64x64_tiles_CPRL33x33",
"ppm",
"Malamute.ppm",
774TEST(TestExecutables, SimpleDecRev5364x64GrayTiles) {
775 double mse[1] = { 0};
778 run_mse_pae(
"simple_dec_rev53_64x64_gray_tiles",
"pgm",
"monarch.pgm",
787TEST(TestExecutables, SimpleDecIrv9764x64GrayTiles) {
788 double mse[1] = { 18.9601};
791 run_mse_pae(
"simple_dec_irv97_64x64_gray_tiles",
"pgm",
"monarch.pgm",
799TEST(TestExecutables, SimpleDecIrv9764x6416bit) {
800 double mse[3] = { 60507.2, 36672.5, 64809.8};
801 int pae[3] = { 2547, 1974, 1922};
803 run_mse_pae(
"simple_dec_irv97_64x64_16bit",
"ppm",
"mm.ppm",
811TEST(TestExecutables, SimpleDecIrv9764x6416bitGray) {
812 double mse[1] = { 19382.9};
813 int pae[1] = { 1618};
815 run_mse_pae(
"simple_dec_irv97_64x64_16bit_gray",
"pgm",
"mm.pgm",
823TEST(TestExecutables, SimpleDecRev5364x6416bit) {
824 double mse[3] = { 0, 0, 0};
825 int pae[3] = { 0, 0, 0};
827 run_mse_pae(
"simple_dec_rev53_64x64_16bit",
"ppm",
"mm.ppm",
836TEST(TestExecutables, SimpleDecRev5364x6416bitGray) {
837 double mse[1] = { 0};
840 run_mse_pae(
"simple_dec_rev53_64x64_16bit_gray",
"pgm",
"mm.pgm",
852TEST(TestExecutables, SimpleDecIrv53BhvhbLowLatency) {
853 double mse[3] = { 5.52392, 4.01405, 6.8166};
854 int pae[3] = { 16, 17, 23};
856 run_mse_pae(
"simple_dec_irv53_bhvhb_low_latency",
"ppm",
"Malamute.ppm",
865TEST(TestExecutables, SimpleEncIrv9764x64) {
866 double mse[3] = { 46.2004, 43.622, 56.7452};
867 int pae[3] = { 48, 46, 52};
869 "simple_enc_irv97_64x64",
"",
"j2c",
873 "Malamute.ppm",
"", 3, mse, pae);
881TEST(TestExecutables, SimpleEncIrv9732x32) {
882 double mse[3] = { 1.78779, 1.26001, 2.38395};
883 int pae[3] = { 7, 6, 9};
885 "simple_enc_irv97_32x32",
"",
"j2c",
886 "-qstep 0.01 -block_size \"{32,32}\"");
889 "Malamute.ppm",
"", 3, mse, pae);
897TEST(TestExecutables, SimpleEncIrv9716x16) {
898 double mse[3] = { 1.78779, 1.26001, 2.38395};
899 int pae[3] = { 7, 6, 9};
901 "simple_enc_irv97_16x16",
"",
"j2c",
902 "-qstep 0.01 -block_size \"{16,16}\"");
905 "Malamute.ppm",
"", 3, mse, pae);
913TEST(TestExecutables, SimpleEncIrv974x4) {
914 double mse[3] = { 1.78779, 1.26001, 2.38395};
915 int pae[3] = { 7, 6, 9};
917 "simple_enc_irv97_4x4",
"",
"j2c",
918 "-qstep 0.01 -block_size \"{4,4}\"");
921 "Malamute.ppm",
"", 3, mse, pae);
929TEST(TestExecutables, SimpleEncIrv971024x4) {
930 double mse[3] = { 1.78779, 1.26001, 2.38395};
931 int pae[3] = { 7, 6, 9};
933 "simple_enc_irv97_1024x4",
"",
"j2c",
934 "-qstep 0.01 -block_size \"{4,1024}\"");
937 "Malamute.ppm",
"", 3, mse, pae);
945TEST(TestExecutables, SimpleEncIrv974x1024) {
946 double mse[3] = { 1.78779, 1.26001, 2.38395};
947 int pae[3] = { 7, 6, 9};
949 "simple_enc_irv97_4x1024",
"",
"j2c",
950 "-qstep 0.01 -block_size \"{1024,4}\"");
953 "Malamute.ppm",
"", 3, mse, pae);
961TEST(TestExecutables, SimpleEncIrv97512x8) {
962 double mse[3] = { 1.78779, 1.26001, 2.38395};
963 int pae[3] = { 7, 6, 9};
965 "simple_enc_irv97_512x8",
"",
"j2c",
966 "-qstep 0.01 -block_size \"{8,512}\"");
969 "Malamute.ppm",
"", 3, mse, pae);
977TEST(TestExecutables, SimpleEncIrv978x512) {
978 double mse[3] = { 1.78779, 1.26001, 2.38395};
979 int pae[3] = { 7, 6, 9};
981 "simple_enc_irv97_8x512",
"",
"j2c",
982 "-qstep 0.01 -block_size \"{512,8}\"");
985 "Malamute.ppm",
"", 3, mse, pae);
993TEST(TestExecutables, SimpleEncIrv97256x16) {
994 double mse[3] = { 1.78779, 1.26001, 2.38395};
995 int pae[3] = { 7, 6, 9};
997 "simple_enc_irv97_256x16",
"",
"j2c",
998 "-qstep 0.01 -block_size \"{16,256}\"");
1001 "Malamute.ppm",
"", 3, mse, pae);
1009TEST(TestExecutables, SimpleEncIrv9716x256) {
1010 double mse[3] = { 1.78779, 1.26001, 2.38395};
1011 int pae[3] = { 7, 6, 9};
1013 "simple_enc_irv97_16x256",
"",
"j2c",
1014 "-qstep 0.01 -block_size \"{256,16}\"");
1017 "Malamute.ppm",
"", 3, mse, pae);
1025TEST(TestExecutables, SimpleEncIrv97128x32) {
1026 double mse[3] = { 1.78779, 1.26001, 2.38395};
1027 int pae[3] = { 7, 6, 9};
1029 "simple_enc_irv97_128x32",
"",
"j2c",
1030 "-qstep 0.01 -block_size \"{32,128}\"");
1033 "Malamute.ppm",
"", 3, mse, pae);
1041TEST(TestExecutables, SimpleEncIrv9732x128) {
1042 double mse[3] = { 1.78779, 1.26001, 2.38395};
1043 int pae[3] = { 7, 6, 9};
1045 "simple_enc_irv97_32x128",
"",
"j2c",
1046 "-qstep 0.01 -block_size \"{128,32}\"");
1049 "Malamute.ppm",
"", 3, mse, pae);
1058TEST(TestExecutables, SimpleEncIrv9764x64Tiles33x33D5) {
1059 double mse[3] = { 1.88906, 1.30757, 2.5347};
1060 int pae[3] = { 9, 6, 10};
1062 "simple_enc_irv97_64x64_tiles_33x33_d5",
"",
"j2c",
1063 "-qstep 0.01 -tile_size \"{33,33}\" -num_decomps 5");
1065 run_mse_pae(
"simple_enc_irv97_64x64_tiles_33x33_d5",
"ppm",
1066 "Malamute.ppm",
"", 3, mse, pae);
1075TEST(TestExecutables, SimpleEncIrv9764x64Tiles33x33D6) {
1076 double mse[3] = { 1.88751, 1.30673, 2.53378};
1077 int pae[3] = { 8, 6, 10};
1079 "simple_enc_irv97_64x64_tiles_33x33_d6",
"",
"j2c",
1080 "-qstep 0.01 -tile_size \"{33,33}\" -num_decomps 6");
1082 run_mse_pae(
"simple_enc_irv97_64x64_tiles_33x33_d6",
"ppm",
1083 "Malamute.ppm",
"", 3, mse, pae);
1091TEST(TestExecutables, SimpleEncIrv9764x6416bit) {
1092 double mse[3] = { 51727.3, 32596.4, 45897.8};
1093 int pae[3] = { 1512, 1481, 1778};
1095 "simple_enc_irv97_64x64_16bit",
"",
"j2c",
1098 run_mse_pae(
"simple_enc_irv97_64x64_16bit",
"ppm",
1099 "mm.ppm",
"", 3, mse, pae);
1107TEST(TestExecutables, SimpleEncIrv9764x6416bitGray) {
1108 double mse[1] = { 25150.6};
1109 int pae[1] = { 1081};
1111 "simple_enc_irv97_64x64_16bit_gray",
"",
"j2c",
1114 run_mse_pae(
"simple_enc_irv97_64x64_16bit_gray",
"pgm",
1115 "mm.pgm",
"", 1, mse, pae);
1123TEST(TestExecutables, SimpleEncRev5364x6416bit) {
1124 double mse[3] = { 0, 0, 0};
1125 int pae[3] = { 0, 0, 0};
1127 "simple_enc_rev53_64x64_16bit",
"",
"j2c",
1128 "-reversible true");
1130 run_mse_pae(
"simple_enc_rev53_64x64_16bit",
"ppm",
1131 "mm.ppm",
"", 3, mse, pae);
1139TEST(TestExecutables, SimpleEncRev5364x6416bitGray) {
1140 double mse[1] = { 0};
1143 "simple_enc_rev53_64x64_16bit_gray",
"",
"j2c",
1144 "-reversible true");
1146 run_mse_pae(
"simple_enc_rev53_64x64_16bit_gray",
"pgm",
1147 "mm.pgm",
"", 1, mse, pae);
1155TEST(TestExecutables, SimpleEncRev5364x64) {
1156 double mse[3] = { 0, 0, 0};
1157 int pae[3] = { 0, 0, 0};
1159 "simple_enc_rev53_64x64",
"",
"j2c",
1160 "-reversible true");
1163 "Malamute.ppm",
"", 3, mse, pae);
1171TEST(TestExecutables, SimpleEncRev5332x32) {
1172 double mse[3] = { 0, 0, 0};
1173 int pae[3] = { 0, 0, 0};
1175 "simple_enc_rev53_32x32",
"",
"j2c",
1176 "-reversible true -block_size \"{32,32}\"");
1179 "Malamute.ppm",
"", 3, mse, pae);
1187TEST(TestExecutables, SimpleEncRev534x4) {
1188 double mse[3] = { 0, 0, 0};
1189 int pae[3] = { 0, 0, 0};
1191 "simple_enc_rev53_4x4",
"",
"j2c",
1192 "-reversible true -block_size \"{4,4}\"");
1195 "Malamute.ppm",
"", 3, mse, pae);
1203TEST(TestExecutables, SimpleEncRev531024x4) {
1204 double mse[3] = { 0, 0, 0};
1205 int pae[3] = { 0, 0, 0};
1207 "simple_enc_rev53_1024x4",
"",
"j2c",
1208 "-reversible true -block_size \"{4,1024}\"");
1211 "Malamute.ppm",
"", 3, mse, pae);
1219TEST(TestExecutables, SimpleEncRev534x1024) {
1220 double mse[3] = { 0, 0, 0};
1221 int pae[3] = { 0, 0, 0};
1223 "simple_enc_rev53_4x1024",
"",
"j2c",
1224 "-reversible true -block_size \"{1024,4}\"");
1227 "Malamute.ppm",
"", 3, mse, pae);
1236TEST(TestExecutables, SimpleEncRev5364x64Tiles33x33D5) {
1237 double mse[3] = { 0, 0, 0};
1238 int pae[3] = { 0, 0, 0};
1240 "simple_enc_rev53_64x64_tiles_33x33_d5",
"",
"j2c",
1241 "-reversible true -tile_size \"{32,32}\" -num_decomps 5");
1243 run_mse_pae(
"simple_enc_rev53_64x64_tiles_33x33_d5",
"ppm",
1244 "Malamute.ppm",
"", 3, mse, pae);
1253TEST(TestExecutables, SimpleEncRev5364x64Tiles33x33D6) {
1254 double mse[3] = { 0, 0, 0};
1255 int pae[3] = { 0, 0, 0};
1257 "simple_enc_rev53_64x64_tiles_33x33_d6",
"",
"j2c",
1258 "-reversible true -tile_size \"{32,32}\" -num_decomps 6");
1260 run_mse_pae(
"simple_enc_rev53_64x64_tiles_33x33_d6",
"ppm",
1261 "Malamute.ppm",
"", 3, mse, pae);
1270TEST(TestExecutables, SimpleEncIrv9764x64Yuv) {
1271 double mse[3] = { 30.3548, 7.69602, 5.22246};
1272 int pae[3] = { 49, 27, 26};
1274 "simple_enc_irv97_64x64_yuv",
"",
"j2c",
1275 "-qstep 0.1 -dims \"{352,288}\" -num_comps 3 -downsamp"
1276 " \"{1,1}\",\"{2,2}\",\"{2,2}\" -bit_depth 8,8,8"
1277 " -signed false,false,false");
1280 "foreman_420.yuv",
":352x288x8x420", 3, mse, pae);
1290TEST(TestExecutables, SimpleEncRev5364x64Yuv) {
1291 double mse[3] = { 0, 0, 0};
1292 int pae[3] = { 0, 0, 0};
1294 "simple_enc_rev53_64x64_yuv",
"",
"j2c",
1295 "-reversible true -qstep 0.1 -dims \"{352,288}\""
1296 " -num_comps 3 -downsamp \"{1,1}\",\"{2,2}\",\"{2,2}\""
1297 " -bit_depth 8,8,8 -signed false,false,false");
1300 "foreman_420.yuv",
":352x288x8x420", 3, mse, pae);
1308TEST(TestExecutables, SimpleEncIrv97TallNarrow) {
1309 double mse[3] = { 112.097, 79.2214, 71.1367};
1310 int pae[3] = { 56, 41, 32};
1312 "simple_enc_irv97_tall_narrow",
"",
"j2c",
1315 run_mse_pae(
"simple_enc_irv97_tall_narrow",
"ppm",
1316 "tall_narrow.ppm",
"", 3, mse, pae);
1324TEST(TestExecutables, SimpleEncIrv97TallNarrow1) {
1325 double mse[3] = { 100.906, 76.113, 72.8347};
1326 int pae[3] = { 39, 35, 34};
1328 "simple_enc_irv97_tall_narrow1",
"",
"j2c",
1329 "-image_offset \"{1,0}\" -qstep 0.1");
1331 run_mse_pae(
"simple_enc_irv97_tall_narrow1",
"ppm",
1332 "tall_narrow.ppm",
"", 3, mse, pae);
1340TEST(TestExecutables, SimpleEncRev53TallNarrow) {
1341 double mse[3] = { 0, 0, 0};
1342 int pae[3] = { 0, 0, 0};
1344 "simple_enc_rev53_tall_narrow",
"",
"j2c",
1345 "-reversible true");
1347 run_mse_pae(
"simple_enc_rev53_tall_narrow",
"ppm",
1348 "tall_narrow.ppm",
"", 3, mse, pae);
1356TEST(TestExecutables, SimpleEncRev53TallNarrow1) {
1357 double mse[3] = { 0, 0, 0};
1358 int pae[3] = { 0, 0, 0};
1360 "simple_enc_rev53_tall_narrow1",
"",
"j2c",
1361 "-image_offset \"{1,0}\" -reversible true");
1363 run_mse_pae(
"simple_enc_rev53_tall_narrow1",
"ppm",
1364 "tall_narrow.ppm",
"", 3, mse, pae);
1372TEST(TestExecutables, DpxEnc1280x72010bitLeNuke11) {
1373 double mse[3] = { 0, 0, 0};
1374 int pae[3] = { 0, 0, 0};
1376 "dpx_enc_1280x720_10bit_le_nuke11",
"",
"j2c",
1377 "-reversible true");
1379 run_mse_pae(
"dpx_enc_1280x720_10bit_le_nuke11",
"ppm",
1380 "dpx_1280x720_10bit.ppm",
"", 3, mse, pae);
1388TEST(TestExecutables, DpxEnc1280x72010bitBeNuke11) {
1389 double mse[3] = { 0, 0, 0};
1390 int pae[3] = { 0, 0, 0};
1392 "dpx_enc_1280x720_10bit_be_nuke11",
"",
"j2c",
1393 "-reversible true");
1395 run_mse_pae(
"dpx_enc_1280x720_10bit_be_nuke11",
"ppm",
1396 "dpx_1280x720_10bit.ppm",
"", 3, mse, pae);
1404TEST(TestExecutables, DpxEnc1280x72016bitLeNuke11) {
1405 double mse[3] = { 0, 0, 0};
1406 int pae[3] = { 0, 0, 0};
1408 "dpx_enc_1280x720_16bit_le_nuke11",
"",
"j2c",
1409 "-reversible true");
1411 run_mse_pae(
"dpx_enc_1280x720_16bit_le_nuke11",
"ppm",
1412 "dpx_1280x720_16bit.ppm",
"", 3, mse, pae);
1420TEST(TestExecutables, DpxEnc1280x72016bitBeNuke11) {
1421 double mse[3] = { 0, 0, 0};
1422 int pae[3] = { 0, 0, 0};
1424 "dpx_enc_1280x720_16bit_be_nuke11",
"",
"j2c",
1425 "-reversible true");
1427 run_mse_pae(
"dpx_enc_1280x720_16bit_be_nuke11",
"ppm",
1428 "dpx_1280x720_16bit.ppm",
"", 3, mse, pae);
1436TEST(TestExecutables, DpxEnc1280x72010bitResolve18) {
1437 double mse[3] = { 0, 0, 0};
1438 int pae[3] = { 0, 0, 0};
1440 "dpx_enc_1280x720_10bit_resolve18",
"",
"j2c",
1441 "-reversible true");
1443 run_mse_pae(
"dpx_enc_1280x720_10bit_resolve18",
"ppm",
1444 "dpx_1280x720_10bit.ppm",
"", 3, mse, pae);
1452TEST(TestExecutables, DpxEnc1280x72016bitResolve18) {
1453 double mse[3] = { 0, 0, 0};
1454 int pae[3] = { 0, 0, 0};
1456 "dpx_enc_1280x720_16bit_resolve18",
"",
"j2c",
1457 "-reversible true");
1459 run_mse_pae(
"dpx_enc_1280x720_16bit_resolve18",
"ppm",
1460 "dpx_1280x720_16bit.ppm",
"", 3, mse, pae);
1467 ::testing::InitGoogleTest(&argc, argv);
1468 return RUN_ALL_TESTS();
static int ojph_pclose(FILE *stream)
#define COMPRESS_EXECUTABLE
void run_ojph_compress_expand(const std::string &base_filename, const std::string &out_ext, const std::string &decode_ext)
#define COMPARE_FILES_PATH
int main(int argc, char **argv)
void run_ojph_expand(const std::string &base_filename, const std::string &src_ext, const std::string &out_ext)
static int execute(const std::string &cmd, std::string &result)
#define EXPAND_EXECUTABLE
static FILE * ojph_popen(const char *command, const char *modes)
void run_mse_pae(const std::string &base_filename, const std::string &out_ext, const std::string &ref_filename, const std::string &yuv_specs, int num_components, double *mse, int *pae)
void compare_files(const std::string &base_filename, const std::string &extended_base_fname, const std::string &ext)
TEST(TestExecutables, OpenJPHCompressNoArguments)
void run_ojph_compress(const std::string &ref_filename, const std::string &base_filename, const std::string &extended_base_fname, const std::string &out_ext, const std::string &extra_options)