First import of OPJ_Validate tool

This commit is contained in:
Francois-Olivier Devaux 2010-03-05 21:17:11 +00:00
parent 34c485169e
commit 20d5c4c1a8
15 changed files with 998 additions and 0 deletions

View File

@ -5,6 +5,9 @@ What's New for OpenJPEG
! : changed
+ : added
March 5, 2010
+ [FOD] First import of OPJ_Validate tool
February 18, 2010
* [FOD] JP3D Module. Fixed issue when computing the number of elements in an array that leads to crash (thanks Kristof). Updated JP3D makefiles.

2
OPJ_Validate/Makefile Normal file
View File

@ -0,0 +1,2 @@
OPJ_Validate_Makee: OPJ_Validate.c md5.c
gcc -o OPJ_Validate OPJ_Validate.c md5.c -I.

View File

@ -0,0 +1,100 @@
#Version 0.1 - February 9th 2007
#Usage: OPJ_Validate OpenJPEG_command_line
#Example: OPJ_Validate image_to_j2k.exe -i original/Bretagne1.ppm -o original/Bretagne1.j2k -r 200, 50, 10
#Attention: don't forget the *.exe extension for the executable file, and check the paths
image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_0.j2k -r 200,50,10
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.ppm
image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_0.j2k -c [128,128],[128,128],[128,128] -r 100,20,2 -t 640,480 -b 32,32
j2k_to_image.exe -i original/Bretagne2.j2k -o temp/Bretagne2.ppm -r 2
image_to_j2k.exe -i original/Cevennes1.bmp -o temp/Cevennes1.j2k -r 10
j2k_to_image.exe -i original/Cevennes1.j2k -o temp/Cevennes1.bmp -l 2
image_to_j2k.exe -i original/Cevennes2.ppm -o temp/Cevennes2.jp2 -r 50
j2k_to_image.exe -i original/Cevennes2.jp2 -o temp/Cevennes2.ppm
image_to_j2k.exe -i original/Rome.bmp -o temp/Rome.jp2 -q 30,35,50 -p LRCP -n 3
j2k_to_image.exe -i original/Rome.jp2 -o temp/Rome.ppm
image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_1.j2k -q 30,35,40 -n 2
image_to_j2k.exe -i original/Bretagne1.ppm -o temp/Bretagne1_2.j2k -q 30,35,40 -b 16,16 -c [101,101]
image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_1.j2k -t 127,127 -p PCRL
image_to_j2k.exe -i original/X_4_2K_24_185_CBR_WB_000.tif -o temp/X_4_2K_24_185_CBR_WB_000.j2k -cinema2K 24
image_to_j2k.exe -i original/X_5_2K_24_235_CBR_STEM24_000.tif -o temp/X_5_2K_24_235_CBR_STEM24_000.j2k -cinema2K 48
image_to_j2k.exe -i original/X_6_2K_24_FULL_CBR_CIRCLE_000.tif -o temp/X_6_2K_24_FULL_CBR_CIRCLE_000.j2k -cinema2K 24
#à remettre
#image_to_j2k.exe -i original/X_16_4K_24_185_CBR_WB_000.tif -o temp/X_16_4K_24_185_CBR_WB_000.j2k -cinema4K
j2k_to_image.exe -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif
j2k_to_image.exe -i original/B_5_2K_24_235_CBR_STEM24_000.j2k -o temp/B_5_2K_24_235_CBR_STEM24_000.tif
j2k_to_image.exe -i original/C_6_2K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_6_2K_24_FULL_CBR_CIRCLE_000.tif
#à remettre
#j2k_to_image.exe -i original/C_18_4K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_18_4K_24_FULL_CBR_CIRCLE_000.tif
j2k_to_image.exe -i original/p0_01.j2k -o temp/p0_01.tif
j2k_to_image.exe -i original/p0_02.j2k -o temp/p0_02.tif
j2k_to_image.exe -i original/p0_03.j2k -o temp/p0_03.tif
j2k_to_image.exe -i original/p0_04.j2k -o temp/p0_04.tif
#à remettre
#j2k_to_image.exe -i original/p0_07.j2k -o temp/p0_07.tif
j2k_to_image.exe -i original/p0_08.j2k -o temp/p0_08.tif
j2k_to_image.exe -i original/p0_09.j2k -o temp/p0_09.tif
j2k_to_image.exe -i original/p0_10.j2k -o temp/p0_10.tif
j2k_to_image.exe -i original/p0_11.j2k -o temp/p0_11.tif
j2k_to_image.exe -i original/p0_12.j2k -o temp/p0_12.tif
j2k_to_image.exe -i original/p0_14.j2k -o temp/p0_14.tif
j2k_to_image.exe -i original/p0_15.j2k -o temp/p0_15.tif
j2k_to_image.exe -i original/p0_16.j2k -o temp/p0_16.tif
j2k_to_image.exe -i original/p1_01.j2k -o temp/p1_01.tif
j2k_to_image.exe -i original/p1_02.j2k -o temp/p1_02.tif
j2k_to_image.exe -i original/p1_04.j2k -o temp/p1_04.tif
j2k_to_image.exe -i original/p1_05.j2k -o temp/p1_05.tif
j2k_to_image.exe -i original/p1_06.j2k -o temp/p1_06.tif
image_to_j2k.exe -i original/c0p0_01.pgx -o temp/c0p0_01.j2k
image_to_j2k.exe -i original/c0p0_02.pgx -o temp/c0p0_02.j2k
image_to_j2k.exe -i original/c0p0_03r0.pgx -o temp/c0p0_03r0.j2k
image_to_j2k.exe -i original/c0p0_03r1.pgx -o temp/c0p0_03r1.j2k
image_to_j2k.exe -i original/c0p0_04.pgx -o temp/c00_p04.j2k
image_to_j2k.exe -i original/c0p0_05.pgx -o temp/c0p0_05.j2k
image_to_j2k.exe -i original/c0p0_06.pgx -o temp/c0p0_06.j2k
image_to_j2k.exe -i original/c0p0_07.pgx -o temp/c0p0_07.j2k
image_to_j2k.exe -i original/c0p0_08.pgx -o temp/c0p0_08.j2k
image_to_j2k.exe -i original/c0p0_09.pgx -o temp/c0p0_09.j2k
image_to_j2k.exe -i original/c0p0_10.pgx -o temp/c0p0_10.j2k
image_to_j2k.exe -i original/c0p0_11.pgx -o temp/c0p0_11.j2k
image_to_j2k.exe -i original/c0p0_12.pgx -o temp/c0p0_12.j2k
image_to_j2k.exe -i original/c0p0_13.pgx -o temp/c0p0_13.j2k
image_to_j2k.exe -i original/c0p0_14.pgx -o temp/c0p0_14.j2k
image_to_j2k.exe -i original/c0p0_15r0.pgx -o temp/c0p0_15r0.j2k
image_to_j2k.exe -i original/c0p0_15r1.pgx -o temp/c0p0_15r1.j2k
image_to_j2k.exe -i original/c0p0_16.pgx -o temp/c0p0_16.j2k
image_to_j2k.exe -i original/c0p1_04r0.pgx -o temp/c0p1_04r0.j2k
image_to_j2k.exe -i original/c0p1_05.pgx -o temp/c0p1_05.j2k
image_to_j2k.exe -i original/c1p0_01_0.pgx -o temp/c1p0_01_0.j2k
image_to_j2k.exe -i original/c1p0_02_0.pgx -o temp/c1p0_02_0.j2k
image_to_j2k.exe -i original/c1p0_03_0.pgx -o temp/c1p0_03_0.j2k
image_to_j2k.exe -i original/c1p0_04_0.pgx -o temp/c1p0_04_0.j2k
image_to_j2k.exe -i original/c1p0_05_0.pgx -o temp/c1p0_05_0.j2k
image_to_j2k.exe -i original/c1p0_06_0.pgx -o temp/c1p0_06_0.j2k
image_to_j2k.exe -i original/c1p0_07_0.pgx -o temp/c1p0_07_0.j2k
image_to_j2k.exe -i original/c1p0_08_0.pgx -o temp/c1p0_08_0.j2k
image_to_j2k.exe -i original/c1p0_09_0.pgx -o temp/c1p0_09_0.j2k
image_to_j2k.exe -i original/c1p0_10_0.pgx -o temp/c1p0_10_0.j2k
image_to_j2k.exe -i original/c1p0_11_0.pgx -o temp/c1p0_11_0.j2k
image_to_j2k.exe -i original/c1p0_12_0.pgx -o temp/c1p0_12_0.j2k
image_to_j2k.exe -i original/c1p0_13_0.pgx -o temp/c1p0_13_0.j2k
image_to_j2k.exe -i original/c1p0_14_0.pgx -o temp/c1p0_14_0.j2k
image_to_j2k.exe -i original/c1p0_15_0.pgx -o temp/c1p0_15_0.j2k
image_to_j2k.exe -i original/c1p0_16_0.pgx -o temp/c1p0_16_0.j2k
image_to_j2k.exe -i original/c1p1_02_0.pgx -o temp/c1p1_02_0.j2k
image_to_j2k.exe -i original/c1p1_05_0.pgx -o temp/c1p1_05_0.j2k
image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_2.j2k -s 2,2 -SOP
image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_3.j2k -EPH -M 38
image_to_j2k.exe -i original/Bretagne2.ppm -o temp/Bretagne2_4.j2k -d 150,300 -r 800
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.bmp
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.bmp -r 2
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.tga
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.tga -r 2
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.pnm
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.pnm -r 2
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.ppm -r 2
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.raw
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.raw -r 2
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1.tif
j2k_to_image.exe -i original/Bretagne1.j2k -o temp/Bretagne1r2.tif -r 2
j2k_to_image.exe -i original/p0_03.j2k -o p0_03.pgx

244
OPJ_Validate/OPJ_Validate.c Normal file
View File

@ -0,0 +1,244 @@
/*
* Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
* Copyright (c) 2002-2007, Professor Benoit Macq
* Copyright (c) 2003-2007, Francois-Olivier Devaux
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifdef WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include <string.h>
#include "md5.h"
#define OPJ_Bin_Dir "OPJ_Binaries"
int doprocess(char programme[4096],char command_line[4096]) {
#ifdef WIN32
int exit=STILL_ACTIVE;
STARTUPINFO siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if(CreateProcess(programme, // Application name
command_line, // Application arguments
0,
0,
FALSE,
CREATE_DEFAULT_ERROR_MODE,
0,
0, // Working directory
&siStartupInfo,
&piProcessInfo) == FALSE)
return 1;
exit=STILL_ACTIVE;
while(exit==STILL_ACTIVE) {
Sleep(1000);
GetExitCodeProcess(piProcessInfo.hProcess,&exit);
}
return 0;
#else // #ifndef WIN32
printf("\n%s\n", command_line);
system(command_line);
return 0;
#endif
}
char MD5_process(char *input_filename, char *md5_filename) {
MD5_CTX mdContext;
int bytes;
unsigned char data[1024];
FILE *input_file, *md5_file;
input_file = fopen(input_filename, "rb");
if (!input_file) {
printf("Error opening file %s\n", input_filename);
return 1;
}
md5_file = fopen(md5_filename, "wb");
if (!md5_file) {
printf("Error opening file %s\n", md5_filename);
return 1;
}
MD5Init (&mdContext);
while ((bytes = fread (data, 1, 1024, input_file)) != 0)
MD5Update (&mdContext, data, bytes);
MD5Final (&mdContext);
fwrite(mdContext.digest,16,1,md5_file);
fclose(input_file);
fclose(md5_file);
return 0;
}
char fcompare(char *input_filename, char *output_filename) {
FILE *input_file, *output_file;
unsigned char input_buffer[17], output_buffer[17];
char comparison;
input_file = fopen(input_filename, "rb");
if (!input_file) {
printf("Error opening file %s\n", input_filename);
return -1;
}
output_file = fopen(output_filename, "rb");
if (!output_file) {
printf("Error opening file %s\n", output_filename);
return -1;
}
fread(input_buffer,16,1,input_file);
fread(output_buffer,16,1,output_file);
fclose(input_file);
fclose(output_file);
input_buffer[16] = 0;
output_buffer[16] = 0;
comparison = strcmp(input_buffer, output_buffer);
if (comparison)
return 1;
return 0;
}
int main(int argc, char* argv[]) {
FILE *param_file, *md5_file;
FILE *report_file;
char line[4096];
char md5_filename[4096], tempmd5_filename[4096], temp[4096], report_filename[4096];
char output_filename[4096];
char input_cmdline[4096];
char command_line[4096], exefile[4096];
int task_counter = 0, word_counter;
char bin_dir[4096];
unsigned int word_pointer;
char ch[4096];
char comparison;
int num_failed = 0;
int num_inexistant = 0;
int num_passed = 0;
if (argc != 3) {
printf("Error with command line. \nExpected: OPJ_Validate parameter_filename bin_directory\n Example: OPJ_Validate parameters_01.txt version1.1.a\n\n");
return 1;
}
param_file = fopen(argv[1],"rb");
if (!param_file) {
printf("Error opening parameter file %s\n",argv[1]);
return 1;
}
sprintf(bin_dir,"%s/%s",OPJ_Bin_Dir,argv[2]);
sprintf(tempmd5_filename,"temp/tempmd5.txt");
sprintf(report_filename,"%s/report.txt",bin_dir);
report_file = fopen(report_filename, "wb");
if (!report_file) {
printf("Unable to open report file %s", report_filename);
return 1;
}
while (fgets(line, 4096, param_file) != NULL) {
if (line[0] != '#' && line[0] != 0x0d) { // If not a comment line
sscanf(line, "%s", temp);
word_pointer = 0;
sprintf(input_cmdline,"");
sscanf(line+word_pointer,"%s",ch);
sprintf(exefile,"%s/%s",bin_dir,ch);
word_counter = 0;
while (sscanf(line+word_pointer,"%s",ch) > 0) {
if (word_counter == 4)
strcpy(output_filename, ch);
word_pointer += strlen(ch)+1;
sprintf(input_cmdline,"%s%s ",input_cmdline, ch);
word_counter++;
}
sprintf(md5_filename,"%s.md5",output_filename);
task_counter++;
sprintf(command_line,"%s/%s",bin_dir,input_cmdline);
printf("Task %d\nMD5 file: %s\nCommand line: \"%s\"\n",task_counter, md5_filename,command_line);
fprintf(report_file,"Task %d\n MD5 file: %s\n Command line: \"%s\"\n",task_counter, md5_filename,command_line);
if (doprocess(exefile,command_line)) {
printf("Error executing: \"%s\" \n", command_line);
fprintf(report_file,"Task %d failed because command line is not valid.\n\n", task_counter);
}
else {
// Check if MD5 reference exists
md5_file = fopen(md5_filename,"rb");
if (md5_file) {
fclose(md5_file);
if (MD5_process(output_filename, tempmd5_filename))
return 1;
comparison = fcompare(tempmd5_filename, md5_filename);
if (comparison == -1)
return 1;
else if (comparison) {
printf("ERROR: %s and %s are different.\nThe codec seems to behave differently.\n\n", tempmd5_filename, md5_filename);
fprintf(report_file,"ERROR: %s and %s are different.\nThe codec seems to behave differently.\n\n", tempmd5_filename, md5_filename);
num_failed++;
}
else {
printf("%s and %s are the same.\nTask %d OK\n\n",tempmd5_filename, md5_filename, task_counter);
fprintf(report_file," %s and %s are the same.\nTask %d OK\n\n",tempmd5_filename, md5_filename, task_counter);
num_passed++;
}
remove(tempmd5_filename);
}
else {
if (MD5_process(output_filename, md5_filename))
return 1;
printf("... MD5 of %s was inexistant. It has been created\n\n", output_filename);
fprintf(report_file,"MD5 of %s was inexistant. It has been created\n\n", output_filename);
num_inexistant++;
}
}
}
}
printf("\n\REPORT;\n%d tests num_passed\n%d tests num_failed\n%d MD5 were num_inexistant\n", num_passed, num_failed, num_inexistant);
fprintf(report_file,"\n\REPORT;\n%d tests num_passed\n%d tests num_failed\n%d MD5 were num_inexistant\n", num_passed, num_failed, num_inexistant);
fclose(param_file);
fclose(report_file);
}

View File

@ -0,0 +1,108 @@
# Microsoft Developer Studio Project File - Name="OPJ_Validate" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=OPJ_Validate - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "OPJ_Validate.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "OPJ_Validate.mak" CFG="OPJ_Validate - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "OPJ_Validate - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "OPJ_Validate - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "OPJ_Validate - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x80c /d "NDEBUG"
# ADD RSC /l 0x80c /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "OPJ_Validate - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c
# ADD BASE RSC /l 0x80c /d "_DEBUG"
# ADD RSC /l 0x80c /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "OPJ_Validate - Win32 Release"
# Name "OPJ_Validate - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\md5.c
# End Source File
# Begin Source File
SOURCE=.\OPJ_Validate.c
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\md5.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project

View File

@ -0,0 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "OPJ_Validate"=".\OPJ_Validate.dsp" - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@ -0,0 +1,8 @@
cd temp
erase *.ppm
erase *.j2k
erase *.bmp
erase *.tif
erase *.jp2
cd ..
OPJ_Validate.exe OPJ_Param_File_v0_1.txt testv2

View File

@ -0,0 +1,16 @@
#!/bin/bash
cd temp
erase *.ppm
erase *.j2k
erase *.bmp
erase *.tif
erase *.jp2
cd ..
echo
echo "Type the name of the directory (inside OPJ_Binaries) "
echo "containing your executables to compared with reference, followed by [ENTER] (example: rev101):"
read compdir
./OPJ_Validate linux_OPJ_Param_File_v0_1.txt $compdir
echo

View File

@ -0,0 +1,4 @@
cd temp
erase *.md5
cd ..
OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev490

View File

@ -0,0 +1,13 @@
#!/bin/bash
#Create Reference images and hash
echo
echo "Type the name of the directory (inside OPJ_Binaries) "
echo "containing your reference executables, followed by [ENTER] (example: rev100):"
read refdir
cd temp
rm *.md5
cd ..
./OPJ_Validate linux_OPJ_Param_File_v0_1.txt $refdir
echo

46
OPJ_Validate/README.txt Normal file
View File

@ -0,0 +1,46 @@
Initialization
--------------
Download the source images into the /original directory from http://www.openjpeg.org/OPJ_Validate_OriginalImages.7z
Usage
-----
Usage: OPJ_Validate batch_text_file bin_directory
Example: OPJ_Validate OPJ_Param_File_v0_1.txt v1.1.a
where OPJ_Param_File_v0_1.txt is a file containing a list of compression and decompression parameters
and v1.1.a is a directory inside the directory OPJ_Binaries containing the openjpeg executables (j2k_to_image.exe and image_to_j2k.exe)
Example with batch file: You consider revision 490 (/rev490) as stable, and would like to compare it a new version, revision 493 (rev493).
Batch mode
----------
1) Calculate the reference by running the "OPJ_Validate_Create_Ref rev490" file (.sh or .bat depending on your os)
2) Compare the candidate revision with ther reference by running the "OPJ_Validate_Candidate_vs_Ref rev493" file
3) The results of the comparison are given at the end of the processing. They are also available in the bin directory OPJ_Binaries/rev493/report.txt
Manual mode
-----------
1) Put the j2k_to_image.exe and image_to_j2k.exe binaries of both revisions in the OPJ_Binaries directory (OPJ_Binaries/rev490 and OPJ_Binaries/rev493)
2) Start by initializing the validation with revision 490.
a) Modify OPJ_Validate_init.bat and set the last line to "OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev490"
b) Execute OPJ_Validate_init.bat
3) Compare the reference files generated in the previous step with files generated with revision 493
a) Modify OPJ_Validate_run.bat and set the last line to "OPJ_Validate.exe OPJ_Param_File_v0_1.txt rev493"
b) Execute OPJ_Validate_run.bat
4) Read the results in the binaries directory of revision 493 (OPJ_Binaries/rev493/report.txt)
Search for the word "ERROR:" in that file.
If this word is not present in the report, this means that both codecs of rev490 and rev493 gave the same results.
Otherwise, it means that for certain encoding/decoding parameters, the codecs behave differently.
Example of error
Task 17
MD5 file: temp/A_4_2K_24_185_CBR_WB_000.tif.md5
Command line: "OPJ_Binaries/rev473/j2k_to_image.exe -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif "
ERROR: temp/tempmd5.txt and temp/A_4_2K_24_185_CBR_WB_000.tif.md5 are different.
The codec seems to behave differently.
This means that the rev490 and rev493 created two different versions of file A_4_2K_24_185_CBR_WB_000.tif with the command line given above.
An error might have been caused by switching to this new revision.
Warning: Do not take the last line of the report.txt file into account ( Cool. All files passed the tests !) as it is a bug. Search for the word "ERROR:" to detect potential errors.
5) If no error is detected, you can commit the changes to the OpenJPEG repository

View File

@ -0,0 +1,89 @@
#OPJ Parameter file
#Version 0.1 - February 9th 2007
#Usage: OPJ_Validate OpenJPEG_command_line
#Example: OPJ_Validate image_to_j2k.exe -i original/Bretagne1.ppm -o original/Bretagne1.j2k -r 200, 50, 10
#Attention: don't forget the *.exe extension for the executable file, and check the paths
#
image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_0.j2k -r 200,50,10
j2k_to_image -i original/Bretagne1.j2k -o temp/Bretagne1.ppm
image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_0.j2k -c [128,128],[128,128],[128,128] -r 100,20,2 -t 640,480 -b 32,32
j2k_to_image -i original/Bretagne2.j2k -o temp/Bretagne2.ppm -r 2
image_to_j2k -i original/Cevennes1.bmp -o temp/Cevennes1.j2k -r 10
j2k_to_image -i original/Cevennes1.j2k -o temp/Cevennes1.bmp -l 2
image_to_j2k -i original/Cevennes2.ppm -o temp/Cevennes2.jp2 -r 50
j2k_to_image -i original/Cevennes2.jp2 -o temp/Cevennes2.ppm
image_to_j2k -i original/Rome.bmp -o temp/Rome.jp2 -q 30,35,50 -p LRCP -n 3
j2k_to_image -i original/Rome.jp2 -o temp/Rome.ppm
image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_1.j2k -q 30,35,40 -n 2
image_to_j2k -i original/Bretagne1.ppm -o temp/Bretagne1_2.j2k -q 30,35,40 -b 16,16 -c [101,101]
image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_1.j2k -t 127,127 -p PCRL
image_to_j2k -i original/X_4_2K_24_185_CBR_WB_000.tif -o temp/X_4_2K_24_185_CBR_WB_000.j2k -cinema2K 24
image_to_j2k -i original/X_5_2K_24_235_CBR_STEM24_000.tif -o temp/X_5_2K_24_235_CBR_STEM24_000.j2k -cinema2K 48
image_to_j2k -i original/X_6_2K_24_FULL_CBR_CIRCLE_000.tif -o temp/X_6_2K_24_FULL_CBR_CIRCLE_000.j2k -cinema2K 24
#à remettre
#image_to_j2k -i original/X_16_4K_24_185_CBR_WB_000.tif -o temp/X_16_4K_24_185_CBR_WB_000.j2k -cinema4K
j2k_to_image -i original/A_4_2K_24_185_CBR_WB_000.j2k -o temp/A_4_2K_24_185_CBR_WB_000.tif
j2k_to_image -i original/B_5_2K_24_235_CBR_STEM24_000.j2k -o temp/B_5_2K_24_235_CBR_STEM24_000.tif
j2k_to_image -i original/C_6_2K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_6_2K_24_FULL_CBR_CIRCLE_000.tif
#à remettre
#j2k_to_image -i original/C_18_4K_24_FULL_CBR_CIRCLE_000.j2k -o temp/C_18_4K_24_FULL_CBR_CIRCLE_000.tif
j2k_to_image -i original/p0_01.j2k -o temp/p0_01.tif
j2k_to_image -i original/p0_02.j2k -o temp/p0_02.tif
j2k_to_image -i original/p0_03.j2k -o temp/p0_03.tif
j2k_to_image -i original/p0_04.j2k -o temp/p0_04.tif
#a remettre
#j2k_to_image -i original/p0_07.j2k -o temp/p0_07.tif
j2k_to_image -i original/p0_08.j2k -o temp/p0_08.tif
j2k_to_image -i original/p0_09.j2k -o temp/p0_09.tif
j2k_to_image -i original/p0_10.j2k -o temp/p0_10.tif
j2k_to_image -i original/p0_11.j2k -o temp/p0_11.tif
j2k_to_image -i original/p0_12.j2k -o temp/p0_12.tif
j2k_to_image -i original/p0_14.j2k -o temp/p0_14.tif
j2k_to_image -i original/p0_15.j2k -o temp/p0_15.tif
j2k_to_image -i original/p0_16.j2k -o temp/p0_16.tif
j2k_to_image -i original/p1_01.j2k -o temp/p1_01.tif
j2k_to_image -i original/p1_02.j2k -o temp/p1_02.tif
j2k_to_image -i original/p1_04.j2k -o temp/p1_04.tif
j2k_to_image -i original/p1_05.j2k -o temp/p1_05.tif
j2k_to_image -i original/p1_06.j2k -o temp/p1_06.tif
image_to_j2k -i original/c0p0_01.pgx -o temp/c0p0_01.j2k
image_to_j2k -i original/c0p0_02.pgx -o temp/c0p0_02.j2k
image_to_j2k -i original/c0p0_03r0.pgx -o temp/c0p0_03r0.j2k
image_to_j2k -i original/c0p0_03r1.pgx -o temp/c0p0_03r1.j2k
image_to_j2k -i original/c0p0_04.pgx -o temp/c00_p04.j2k
image_to_j2k -i original/c0p0_05.pgx -o temp/c0p0_05.j2k
image_to_j2k -i original/c0p0_06.pgx -o temp/c0p0_06.j2k
image_to_j2k -i original/c0p0_07.pgx -o temp/c0p0_07.j2k
image_to_j2k -i original/c0p0_08.pgx -o temp/c0p0_08.j2k
image_to_j2k -i original/c0p0_09.pgx -o temp/c0p0_09.j2k
image_to_j2k -i original/c0p0_10.pgx -o temp/c0p0_10.j2k
image_to_j2k -i original/c0p0_11.pgx -o temp/c0p0_11.j2k
image_to_j2k -i original/c0p0_12.pgx -o temp/c0p0_12.j2k
image_to_j2k -i original/c0p0_13.pgx -o temp/c0p0_13.j2k
image_to_j2k -i original/c0p0_14.pgx -o temp/c0p0_14.j2k
image_to_j2k -i original/c0p0_15r0.pgx -o temp/c0p0_15r0.j2k
image_to_j2k -i original/c0p0_15r1.pgx -o temp/c0p0_15r1.j2k
image_to_j2k -i original/c0p0_16.pgx -o temp/c0p0_16.j2k
image_to_j2k -i original/c0p1_04r0.pgx -o temp/c0p1_04r0.j2k
image_to_j2k -i original/c0p1_05.pgx -o temp/c0p1_05.j2k
image_to_j2k -i original/c1p0_01_0.pgx -o temp/c1p0_01_0.j2k
image_to_j2k -i original/c1p0_02_0.pgx -o temp/c1p0_02_0.j2k
image_to_j2k -i original/c1p0_03_0.pgx -o temp/c1p0_03_0.j2k
image_to_j2k -i original/c1p0_04_0.pgx -o temp/c1p0_04_0.j2k
image_to_j2k -i original/c1p0_05_0.pgx -o temp/c1p0_05_0.j2k
image_to_j2k -i original/c1p0_06_0.pgx -o temp/c1p0_06_0.j2k
image_to_j2k -i original/c1p0_07_0.pgx -o temp/c1p0_07_0.j2k
image_to_j2k -i original/c1p0_08_0.pgx -o temp/c1p0_08_0.j2k
image_to_j2k -i original/c1p0_09_0.pgx -o temp/c1p0_09_0.j2k
image_to_j2k -i original/c1p0_10_0.pgx -o temp/c1p0_10_0.j2k
image_to_j2k -i original/c1p0_11_0.pgx -o temp/c1p0_11_0.j2k
image_to_j2k -i original/c1p0_12_0.pgx -o temp/c1p0_12_0.j2k
image_to_j2k -i original/c1p0_13_0.pgx -o temp/c1p0_13_0.j2k
image_to_j2k -i original/c1p0_14_0.pgx -o temp/c1p0_14_0.j2k
image_to_j2k -i original/c1p0_15_0.pgx -o temp/c1p0_15_0.j2k
image_to_j2k -i original/c1p0_16_0.pgx -o temp/c1p0_16_0.j2k
image_to_j2k -i original/c1p1_02_0.pgx -o temp/c1p1_02_0.j2k
image_to_j2k -i original/c1p1_05_0.pgx -o temp/c1p1_05_0.j2k
image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_2.j2k -s 2,2 -SOP
image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_3.j2k -EPH -M 38
image_to_j2k -i original/Bretagne2.ppm -o temp/Bretagne2_4.j2k -d 150,300 -r 800

276
OPJ_Validate/md5.c Normal file
View File

@ -0,0 +1,276 @@
/*
**********************************************************************
** md5.c **
** RSA Data Security, Inc. MD5 Message Digest Algorithm **
** Created: 2/17/90 RLR **
** Revised: 1/91 SRD,AJ,BSK,JT Reference C Version **
**********************************************************************
*/
/*
**********************************************************************
** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
** **
** License to copy and use this software is granted provided that **
** it is identified as the "RSA Data Security, Inc. MD5 Message **
** Digest Algorithm" in all material mentioning or referencing this **
** software or this function. **
** **
** License is also granted to make and use derivative works **
** provided that such works are identified as "derived from the RSA **
** Data Security, Inc. MD5 Message Digest Algorithm" in all **
** material mentioning or referencing the derived work. **
** **
** RSA Data Security, Inc. makes no representations concerning **
** either the merchantability of this software or the suitability **
** of this software for any particular purpose. It is provided "as **
** is" without express or implied warranty of any kind. **
** **
** These notices must be retained in any copies of any part of this **
** documentation and/or software. **
**********************************************************************
*/
/* -- include the following line if the md5.h header file is separate -- */
#include "md5.h"
/* forward declaration */
static void Transform ();
static unsigned char PADDING[64] = {
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
/* F, G and H are basic MD5 functions: selection, majority, parity */
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
/* ROTATE_LEFT rotates x left n bits */
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4 */
/* Rotation is separate from addition to prevent recomputation */
#define FF(a, b, c, d, x, s, ac) \
{(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) \
{(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) \
{(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) \
{(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
void MD5Init (mdContext)
MD5_CTX *mdContext;
{
mdContext->i[0] = mdContext->i[1] = (UINT4)0;
/* Load magic initialization constants.
*/
mdContext->buf[0] = (UINT4)0x67452301;
mdContext->buf[1] = (UINT4)0xefcdab89;
mdContext->buf[2] = (UINT4)0x98badcfe;
mdContext->buf[3] = (UINT4)0x10325476;
}
void MD5Update (mdContext, inBuf, inLen)
MD5_CTX *mdContext;
unsigned char *inBuf;
unsigned int inLen;
{
UINT4 in[16];
int mdi;
unsigned int i, ii;
/* compute number of bytes mod 64 */
mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
/* update number of bits */
if ((mdContext->i[0] + ((UINT4)inLen << 3)) < mdContext->i[0])
mdContext->i[1]++;
mdContext->i[0] += ((UINT4)inLen << 3);
mdContext->i[1] += ((UINT4)inLen >> 29);
while (inLen--) {
/* add new character to buffer, increment mdi */
mdContext->in[mdi++] = *inBuf++;
/* transform if necessary */
if (mdi == 0x40) {
for (i = 0, ii = 0; i < 16; i++, ii += 4)
in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
(((UINT4)mdContext->in[ii+2]) << 16) |
(((UINT4)mdContext->in[ii+1]) << 8) |
((UINT4)mdContext->in[ii]);
Transform (mdContext->buf, in);
mdi = 0;
}
}
}
void MD5Final (mdContext)
MD5_CTX *mdContext;
{
UINT4 in[16];
int mdi;
unsigned int i, ii;
unsigned int padLen;
/* save number of bits */
in[14] = mdContext->i[0];
in[15] = mdContext->i[1];
/* compute number of bytes mod 64 */
mdi = (int)((mdContext->i[0] >> 3) & 0x3F);
/* pad out to 56 mod 64 */
padLen = (mdi < 56) ? (56 - mdi) : (120 - mdi);
MD5Update (mdContext, PADDING, padLen);
/* append length in bits and transform */
for (i = 0, ii = 0; i < 14; i++, ii += 4)
in[i] = (((UINT4)mdContext->in[ii+3]) << 24) |
(((UINT4)mdContext->in[ii+2]) << 16) |
(((UINT4)mdContext->in[ii+1]) << 8) |
((UINT4)mdContext->in[ii]);
Transform (mdContext->buf, in);
/* store buffer in digest */
for (i = 0, ii = 0; i < 4; i++, ii += 4) {
mdContext->digest[ii] = (unsigned char)(mdContext->buf[i] & 0xFF);
mdContext->digest[ii+1] =
(unsigned char)((mdContext->buf[i] >> 8) & 0xFF);
mdContext->digest[ii+2] =
(unsigned char)((mdContext->buf[i] >> 16) & 0xFF);
mdContext->digest[ii+3] =
(unsigned char)((mdContext->buf[i] >> 24) & 0xFF);
}
}
/* Basic MD5 step. Transform buf based on in.
*/
static void Transform (buf, in)
UINT4 *buf;
UINT4 *in;
{
UINT4 a = buf[0], b = buf[1], c = buf[2], d = buf[3];
/* Round 1 */
#define S11 7
#define S12 12
#define S13 17
#define S14 22
FF ( a, b, c, d, in[ 0], S11, 3614090360); /* 1 */
FF ( d, a, b, c, in[ 1], S12, 3905402710); /* 2 */
FF ( c, d, a, b, in[ 2], S13, 606105819); /* 3 */
FF ( b, c, d, a, in[ 3], S14, 3250441966); /* 4 */
FF ( a, b, c, d, in[ 4], S11, 4118548399); /* 5 */
FF ( d, a, b, c, in[ 5], S12, 1200080426); /* 6 */
FF ( c, d, a, b, in[ 6], S13, 2821735955); /* 7 */
FF ( b, c, d, a, in[ 7], S14, 4249261313); /* 8 */
FF ( a, b, c, d, in[ 8], S11, 1770035416); /* 9 */
FF ( d, a, b, c, in[ 9], S12, 2336552879); /* 10 */
FF ( c, d, a, b, in[10], S13, 4294925233); /* 11 */
FF ( b, c, d, a, in[11], S14, 2304563134); /* 12 */
FF ( a, b, c, d, in[12], S11, 1804603682); /* 13 */
FF ( d, a, b, c, in[13], S12, 4254626195); /* 14 */
FF ( c, d, a, b, in[14], S13, 2792965006); /* 15 */
FF ( b, c, d, a, in[15], S14, 1236535329); /* 16 */
/* Round 2 */
#define S21 5
#define S22 9
#define S23 14
#define S24 20
GG ( a, b, c, d, in[ 1], S21, 4129170786); /* 17 */
GG ( d, a, b, c, in[ 6], S22, 3225465664); /* 18 */
GG ( c, d, a, b, in[11], S23, 643717713); /* 19 */
GG ( b, c, d, a, in[ 0], S24, 3921069994); /* 20 */
GG ( a, b, c, d, in[ 5], S21, 3593408605); /* 21 */
GG ( d, a, b, c, in[10], S22, 38016083); /* 22 */
GG ( c, d, a, b, in[15], S23, 3634488961); /* 23 */
GG ( b, c, d, a, in[ 4], S24, 3889429448); /* 24 */
GG ( a, b, c, d, in[ 9], S21, 568446438); /* 25 */
GG ( d, a, b, c, in[14], S22, 3275163606); /* 26 */
GG ( c, d, a, b, in[ 3], S23, 4107603335); /* 27 */
GG ( b, c, d, a, in[ 8], S24, 1163531501); /* 28 */
GG ( a, b, c, d, in[13], S21, 2850285829); /* 29 */
GG ( d, a, b, c, in[ 2], S22, 4243563512); /* 30 */
GG ( c, d, a, b, in[ 7], S23, 1735328473); /* 31 */
GG ( b, c, d, a, in[12], S24, 2368359562); /* 32 */
/* Round 3 */
#define S31 4
#define S32 11
#define S33 16
#define S34 23
HH ( a, b, c, d, in[ 5], S31, 4294588738); /* 33 */
HH ( d, a, b, c, in[ 8], S32, 2272392833); /* 34 */
HH ( c, d, a, b, in[11], S33, 1839030562); /* 35 */
HH ( b, c, d, a, in[14], S34, 4259657740); /* 36 */
HH ( a, b, c, d, in[ 1], S31, 2763975236); /* 37 */
HH ( d, a, b, c, in[ 4], S32, 1272893353); /* 38 */
HH ( c, d, a, b, in[ 7], S33, 4139469664); /* 39 */
HH ( b, c, d, a, in[10], S34, 3200236656); /* 40 */
HH ( a, b, c, d, in[13], S31, 681279174); /* 41 */
HH ( d, a, b, c, in[ 0], S32, 3936430074); /* 42 */
HH ( c, d, a, b, in[ 3], S33, 3572445317); /* 43 */
HH ( b, c, d, a, in[ 6], S34, 76029189); /* 44 */
HH ( a, b, c, d, in[ 9], S31, 3654602809); /* 45 */
HH ( d, a, b, c, in[12], S32, 3873151461); /* 46 */
HH ( c, d, a, b, in[15], S33, 530742520); /* 47 */
HH ( b, c, d, a, in[ 2], S34, 3299628645); /* 48 */
/* Round 4 */
#define S41 6
#define S42 10
#define S43 15
#define S44 21
II ( a, b, c, d, in[ 0], S41, 4096336452); /* 49 */
II ( d, a, b, c, in[ 7], S42, 1126891415); /* 50 */
II ( c, d, a, b, in[14], S43, 2878612391); /* 51 */
II ( b, c, d, a, in[ 5], S44, 4237533241); /* 52 */
II ( a, b, c, d, in[12], S41, 1700485571); /* 53 */
II ( d, a, b, c, in[ 3], S42, 2399980690); /* 54 */
II ( c, d, a, b, in[10], S43, 4293915773); /* 55 */
II ( b, c, d, a, in[ 1], S44, 2240044497); /* 56 */
II ( a, b, c, d, in[ 8], S41, 1873313359); /* 57 */
II ( d, a, b, c, in[15], S42, 4264355552); /* 58 */
II ( c, d, a, b, in[ 6], S43, 2734768916); /* 59 */
II ( b, c, d, a, in[13], S44, 1309151649); /* 60 */
II ( a, b, c, d, in[ 4], S41, 4149444226); /* 61 */
II ( d, a, b, c, in[11], S42, 3174756917); /* 62 */
II ( c, d, a, b, in[ 2], S43, 718787259); /* 63 */
II ( b, c, d, a, in[ 9], S44, 3951481745); /* 64 */
buf[0] += a;
buf[1] += b;
buf[2] += c;
buf[3] += d;
}
/*
**********************************************************************
** End of md5.c **
******************************* (cut) ********************************
*/

59
OPJ_Validate/md5.h Normal file
View File

@ -0,0 +1,59 @@
/*
**********************************************************************
** md5.h -- Header file for implementation of MD5 **
** RSA Data Security, Inc. MD5 Message Digest Algorithm **
** Created: 2/17/90 RLR **
** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version **
** Revised (for MD5): RLR 4/27/91 **
** -- G modified to have y&~z instead of y&z **
** -- FF, GG, HH modified to add in last register done **
** -- Access pattern: round 2 works mod 5, round 3 works mod 3 **
** -- distinct additive constant for each step **
** -- round 4 added, working mod 7 **
**********************************************************************
*/
/*
**********************************************************************
** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. **
** **
** License to copy and use this software is granted provided that **
** it is identified as the "RSA Data Security, Inc. MD5 Message **
** Digest Algorithm" in all material mentioning or referencing this **
** software or this function. **
** **
** License is also granted to make and use derivative works **
** provided that such works are identified as "derived from the RSA **
** Data Security, Inc. MD5 Message Digest Algorithm" in all **
** material mentioning or referencing the derived work. **
** **
** RSA Data Security, Inc. makes no representations concerning **
** either the merchantability of this software or the suitability **
** of this software for any particular purpose. It is provided "as **
** is" without express or implied warranty of any kind. **
** **
** These notices must be retained in any copies of any part of this **
** documentation and/or software. **
**********************************************************************
*/
/* typedef a 32 bit type */
typedef unsigned long int UINT4;
/* Data structure for MD5 (Message Digest) computation */
typedef struct {
UINT4 i[2]; /* number of _bits_ handled mod 2^64 */
UINT4 buf[4]; /* scratch buffer */
unsigned char in[64]; /* input buffer */
unsigned char digest[16]; /* actual digest after MD5Final call */
} MD5_CTX;
void MD5Init ();
void MD5Update ();
void MD5Final ();
/*
**********************************************************************
** End of md5.h **
******************************* (cut) ********************************
*/

View File

@ -0,0 +1 @@
Download the source images into this directory from http://www.openjpeg.org/OPJ_Validate_OriginalImages.7z