! : changed
+ : added
+September 8, 2007
+* [GB] Adapted the JPWL and OPJViewer code to new interface; fixed a samll bug in JPWL which created large EPBs even when null protection was specified
+
September 7, 2007
+ [FOD] Indexes can now be generated when decoding J2K codestreams.
* [Mathieu Malaterre] Upon failure, properly return error code (!=0).
# PROP Ignore_Export_Lib 0\r
# PROP Target_Dir ""\r
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "d:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "d:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /D "OPJ_HTMLABOUT" /D "OPJ_MANYFORMATS" /D "OPJ_INICONFIG" /FR /FD /c\r
+# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /D "OPJ_HTMLABOUT" /D "OPJ_MANYFORMATS" /D "OPJ_INICONFIG" /FR /FD /c\r
# ADD BASE RSC /l 0x410 /d "NDEBUG"\r
-# ADD RSC /l 0x409 /i "d:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
+# ADD RSC /l 0x409 /i "c:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
BSC32=bscmake.exe\r
# ADD BASE BSC32 /nologo\r
# ADD BSC32 /nologo\r
LINK32=link.exe\r
# 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 /nologo /subsystem:console /machine:I386\r
-# 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 comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"d:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Release" /IGNORE:4089\r
+# 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 comctl32.lib rpcrt4.lib wsock32.lib wxzlib.lib wxregex.lib wxpng.lib wxjpeg.lib wxbase28.lib wxmsw28_core.lib wxmsw28_html.lib wxmsw28_adv.lib wxmsw28_core.lib wxbase28.lib wxtiff.lib wxjpeg.lib wxpng.lib wxzlib.lib wxregex.lib wxexpat.lib LibOpenJPEG_JPWL.lib /nologo /subsystem:windows /machine:I386 /nodefaultlib:"libcmt.lib" /libpath:"c:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Release" /IGNORE:4089\r
# SUBTRACT LINK32 /pdb:none\r
# Begin Special Build Tool\r
SOURCE="$(InputPath)"\r
# PROP Ignore_Export_Lib 0\r
# PROP Target_Dir ""\r
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "c:\Programmi\wxWidgets-2.8.0\INCLUDE" /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "d:\Programmi\wxWidgets-2.8.0\INCLUDE" /I "d:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /GZ /c\r
# ADD BASE RSC /l 0x410 /d "_DEBUG"\r
-# ADD RSC /l 0x410 /i "c:\programmi\wxWidgets-2.8.0\include" /d "_DEBUG"\r
+# ADD RSC /l 0x410 /i "d:\programmi\wxWidgets-2.8.0\include" /d "_DEBUG"\r
BSC32=bscmake.exe\r
# ADD BASE BSC32 /nologo\r
# ADD BSC32 /nologo\r
LINK32=link.exe\r
# 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 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
-# 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 comctl32.lib rpcrt4.lib wsock32.lib wxzlibd.lib wxregexd.lib wxpngd.lib wxjpegd.lib wxtiffd.lib wxbase28d.lib wxmsw28d_core.lib wxmsw28d_html.lib wxmsw28d_adv.lib LibOpenJPEG_JPWLd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept /libpath:"c:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Debug"\r
+# 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 comctl32.lib rpcrt4.lib wsock32.lib wxzlibd.lib wxregexd.lib wxpngd.lib wxjpegd.lib wxtiffd.lib wxbase28d.lib wxmsw28d_core.lib wxmsw28d_html.lib wxmsw28d_adv.lib LibOpenJPEG_JPWLd.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libcmtd.lib" /pdbtype:sept /libpath:"d:\programmi\wxWidgets-2.8.0\lib\vc_lib" /libpath:"..\jpwl\Debug"\r
# SUBTRACT LINK32 /pdb:none\r
\r
!ENDIF \r
\r
m_settingsNotebook = GetBookCtrl();\r
\r
- wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);\r
+ wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook);\r
+ wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook);\r
wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
+#ifdef USE_JPWL\r
+ wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
+#endif // USE_JPWL\r
\r
- m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
+ m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false);\r
+ m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false);\r
m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);\r
+#ifdef USE_JPWL\r
+ m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
+#endif // USE_JPWL\r
\r
LayoutDialog();\r
}\r
return panel;\r
}\r
\r
-wxPanel* OPJEncoderDialog::CreatePart1SettingsPage(wxWindow* parent)\r
+#ifdef USE_JPWL\r
+wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ // top sizer\r
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // sub top sizer\r
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+ // assign top and fit it\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}\r
+#endif // USE_JPWL\r
+\r
+wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent)\r
{\r
wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
\r
//topSizer->AddSpacer(5);\r
\r
// sub top sizer\r
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(4, 3, 3);\r
+ wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
\r
// image settings, column\r
wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));\r
\r
subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);\r
\r
- // progression settings, column\r
- wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL")};\r
+ // progression and profile settings, column\r
+ wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"),\r
+ wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")};\r
wxRadioBox *progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,\r
- wxT("Progression order"),\r
+ wxT("Progression order/profile"),\r
wxDefaultPosition, wxDefaultSize,\r
WXSIZEOF(choices),\r
choices,\r
- 4,\r
+ 3,\r
wxRA_SPECIFY_COLS);\r
progressionBox->SetSelection(0);\r
\r
subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);\r
\r
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+ // assign top and fit it\r
+ panel->SetSizer(topSizer);\r
+ topSizer->Fit(panel);\r
+\r
+ return panel;\r
+}\r
+\r
+wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent)\r
+{\r
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+ // top sizer\r
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+ // add some space\r
+ //topSizer->AddSpacer(5);\r
+\r
+ // sub top sizer\r
+ wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);\r
+ \r
// resilience settings, column\r
wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience"));\r
wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);\r
\r
subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);\r
\r
- // ROI settings, column\r
+ // Index file settings, column\r
wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));\r
wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);\r
\r
\r
subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3);\r
\r
+ // POC settings, column\r
+ wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC"));\r
+ wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL);\r
+\r
+ // POC check box\r
+ pocSizer->Add(\r
+ m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled"),\r
+ wxDefaultPosition, wxDefaultSize),\r
+ 0, wxGROW | wxALL, 3);\r
+ m_enablepocCheck->SetValue(/*wxGetApp().m_enableidx*/true);\r
+\r
+ // POC sizer, row\r
+ wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+ // add some text\r
+ pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")),\r
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+ // add some horizontal space\r
+ pocspecSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+ // add the value control\r
+ pocspecSizer->Add(\r
+ m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC,\r
+ /*wxGetApp().m_index*/wxT("RRRR"),\r
+ wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+ wxTE_LEFT),\r
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+ m_pocCtrl->Enable(/*wxGetApp().m_enableidx*/true);\r
+\r
+ pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3);\r
+\r
+ subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3);\r
+\r
topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
\r
// assign top and fit it\r
wxBookCtrlBase* m_settingsNotebook;\r
\r
wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
- wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
+ wxPanel* CreatePart1_1SettingsPage(wxWindow* parent);\r
+ wxPanel* CreatePart1_2SettingsPage(wxWindow* parent);\r
/* wxPanel* CreatePart3SettingsPage(wxWindow* parent);*/\r
#ifdef USE_JPWL\r
void OnEnableJPWL(wxCommandEvent& event);\r
void OnEnableComm(wxCommandEvent& event);\r
void OnEnableIdx(wxCommandEvent& event);\r
-/* wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
- wxCheckBox *m_enablejpwlCheck;*/\r
+ wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
+ /*wxCheckBox *m_enablejpwlCheck;*/\r
#endif // USE_JPWL\r
\r
wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl;\r
- wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl;\r
+ wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl, *m_pocCtrl;\r
wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl;\r
wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_irrevCheck, *m_sopCheck, *m_ephCheck;\r
+ wxCheckBox *m_enablepocCheck;\r
wxSpinCtrl *m_resolutionsCtrl;\r
\r
protected:\r
OPJENCO_ENABLEVSC,\r
OPJENCO_ENABLEERTERM,\r
OPJENCO_ENABLESEGMARK,\r
+ OPJENCO_ENABLEPOC,\r
OPJENCO_ROICOMP,\r
OPJENCO_ROISHIFT,\r
OPJENCO_IMORIG,\r
OPJENCO_ENABLEIRREV,\r
OPJENCO_ENABLEINDEX,\r
OPJENCO_INDEXNAME,\r
+ OPJENCO_POCSPEC,\r
OPJENCO_ENABLECOMM,\r
OPJENCO_COMMENTTEXT\r
};\r
-wxT("207") \r
+wxT("219") \r
unsigned char *src = NULL;\r
unsigned char *ptr;\r
int file_length;\r
+ opj_codestream_info_t cstr_info; /* Codestream information structure */\r
\r
// destroy the image\r
image->Destroy();\r
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);\r
\r
/* decode the stream and fill the image structure */\r
- opjimage = opj_decode(dinfo, cio);\r
+ opjimage = opj_decode(dinfo, cio, &cstr_info);\r
if (!opjimage) {\r
#ifndef __WXGTK__ \r
wxMutexGuiEnter();\r
int codestream_length;\r
bool bSuccess;\r
int i;\r
+ char indexfilename[OPJ_PATH_LEN] = ""; /* index file name */\r
\r
/*\r
configure the event callbacks (not required)\r
\r
/* indexing file */\r
if (m_enableidx) {\r
- strncpy(parameters.index, m_index.c_str(), m_index.Len());\r
- wxLogMessage("index file is %s", parameters.index);\r
- parameters.index_on = 1;\r
- } else {\r
- parameters.index_on = 0;\r
+ strncpy(indexfilename, m_index.c_str(), OPJ_PATH_LEN);\r
+ wxLogMessage("index file is %s", indexfilename);\r
}\r
\r
/* if no rate entered, lossless by default */\r
opj_cio_close(cio);\r
\r
/* Write the index to disk */\r
- if (parameters.index_on) {\r
- bSuccess = write_index_file(&cstr_info, parameters.index);\r
+ if (*indexfilename) {\r
+ bSuccess = write_index_file(&cstr_info, indexfilename);\r
if (bSuccess) {\r
wxLogError(wxT("Failed to output index file"));\r
}\r
bool wxJ2KHandler::write_index_file(opj_codestream_info_t *cstr_info, char *index) {\r
int tileno, compno, layno, resno, precno, pack_nb, x, y;\r
FILE *stream = NULL;\r
- double total_disto = 0;\r
+ int tilepartno;\r
\r
if (!cstr_info) \r
- return false;\r
+ return 1;\r
\r
stream = fopen(index, "w");\r
if (!stream) {\r
- wxLogError(wxT("failed to open index file [%s] for writing"), index);\r
- return false;\r
+ fprintf(stderr, "failed to open index file [%s] for writing\n", index);\r
+ return 1;\r
}\r
\r
fprintf(stream, "%d %d\n", cstr_info->image_w, cstr_info->image_h);\r
fprintf(stream, "%d\n", cstr_info->prog);\r
fprintf(stream, "%d %d\n", cstr_info->tile_x, cstr_info->tile_y);\r
fprintf(stream, "%d %d\n", cstr_info->tw, cstr_info->th);\r
- fprintf(stream, "%d\n", cstr_info->comp);\r
- fprintf(stream, "%d\n", cstr_info->layer);\r
- fprintf(stream, "%d\n", cstr_info->decomposition);\r
+ fprintf(stream, "%d\n", cstr_info->numcomps);\r
+ fprintf(stream, "%d\n", cstr_info->numlayers);\r
+ fprintf(stream, "%d\n", cstr_info->numdecompos);\r
\r
- for (resno = cstr_info->decomposition; resno >= 0; resno--) {\r
+ for (resno = cstr_info->numdecompos; resno >= 0; resno--) {\r
fprintf(stream, "[%d,%d] ", \r
(1 << cstr_info->tile[0].pdx[resno]), (1 << cstr_info->tile[0].pdx[resno])); /* based on tile 0 */\r
}\r
fprintf(stream, "\n");\r
+ fprintf(stream, "%d\n", cstr_info->main_head_start);\r
fprintf(stream, "%d\n", cstr_info->main_head_end);\r
fprintf(stream, "%d\n", cstr_info->codestream_size);\r
\r
fprintf(stream, "\nINFO ON TILES\n");\r
- fprintf(stream, "tileno start_pos end_hd end_tile disto nbpix disto/nbpix\n");\r
+ fprintf(stream, "tileno start_pos end_hd end_tile nbparts\n");\r
for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {\r
- fprintf(stream, "%4d %9d %9d %9d %9e %9d %9e\n",\r
- cstr_info->tile[tileno].num_tile,\r
+ fprintf(stream, "%4d %9d %9d %9d %9d\n",\r
+ cstr_info->tile[tileno].tileno,\r
cstr_info->tile[tileno].start_pos,\r
cstr_info->tile[tileno].end_header,\r
cstr_info->tile[tileno].end_pos,\r
- cstr_info->tile[tileno].distotile, cstr_info->tile[tileno].nbpix,\r
- cstr_info->tile[tileno].distotile / cstr_info->tile[tileno].nbpix);\r
+ cstr_info->tile[tileno].num_tps);\r
}\r
\r
for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {\r
int start_pos, end_ph_pos, end_pos;\r
- double disto = 0;\r
pack_nb = 0;\r
\r
- fprintf(stream, "\nTILE %d DETAILS\n", tileno); \r
+ fprintf(stream, "\nTILE %d DETAILS\n", tileno); \r
+ fprintf(stream, "part_nb tileno num_packs start_pos end_tph_pos end_pos\n");\r
+ for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)\r
+ fprintf(stream, "%4d %9d %9d %9d %11d %9d\n",\r
+ tilepartno, tileno,\r
+ cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,\r
+ cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,\r
+ cstr_info->tile[tileno].tp[tilepartno].tp_end_header,\r
+ cstr_info->tile[tileno].tp[tilepartno].tp_end_pos\r
+ );\r
if (cstr_info->prog == LRCP) { /* LRCP */\r
+ fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos\n");\r
\r
- fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");\r
-\r
- for (layno = 0; layno < cstr_info->layer; layno++) {\r
- for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {\r
- for (compno = 0; compno < cstr_info->comp; compno++) {\r
+ for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
+ for (resno = 0; resno < cstr_info->numdecompos + 1; resno++) {\r
+ for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
for (precno = 0; precno < prec_max; precno++) {\r
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d %8e\n",\r
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos, disto);\r
- total_disto += disto;\r
+ fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d\n",\r
+ pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos);\r
pack_nb++;\r
}\r
}\r
} /* LRCP */\r
else if (cstr_info->prog == RLCP) { /* RLCP */\r
\r
- fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos disto\n");\r
+ fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos\n");\r
\r
- for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {\r
- for (layno = 0; layno < cstr_info->layer; layno++) {\r
- for (compno = 0; compno < cstr_info->comp; compno++) {\r
+ for (resno = 0; resno < cstr_info->numdecompos + 1; resno++) {\r
+ for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
+ for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
for (precno = 0; precno < prec_max; precno++) {\r
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d %8e\n",\r
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos, disto);\r
- total_disto += disto;\r
+ fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d\n",\r
+ pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos);\r
pack_nb++;\r
}\r
}\r
} /* RLCP */\r
else if (cstr_info->prog == RPCL) { /* RPCL */\r
\r
- fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos disto\n"); \r
+ fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos\n"); \r
\r
- for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {\r
+ for (resno = 0; resno < cstr_info->numdecompos + 1; resno++) {\r
/* I suppose components have same XRsiz, YRsiz */\r
int x0 = cstr_info->tile_Ox + tileno - (int)floor((float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;\r
int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;\r
int x1 = x0 + cstr_info->tile_x;\r
int y1 = y0 + cstr_info->tile_y;\r
- for (compno = 0; compno < cstr_info->comp; compno++) {\r
+ for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
for (precno = 0; precno < prec_max; precno++) {\r
int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->decomposition - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->decomposition - resno );\r
+ int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos - resno );\r
+ int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos - resno );\r
int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
int precno_y = (int) floor( (float)precno/(float)pcnx );\r
for(y = y0; y < y1; y++) { \r
if (precno_y*pcy == y ) {\r
for (x = x0; x < x1; x++) { \r
if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->layer; layno++) {\r
+ for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d %8e\n",\r
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos, disto); \r
- total_disto += disto;\r
+ fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d\n",\r
+ pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos); \r
pack_nb++; \r
}\r
}\r
int x1 = x0 + cstr_info->tile_x;\r
int y1 = y0 + cstr_info->tile_y;\r
\r
- fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos disto\n"); \r
+ fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos\n"); \r
\r
- for (compno = 0; compno < cstr_info->comp; compno++) {\r
- for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {\r
+ for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
+ for (resno = 0; resno < cstr_info->numdecompos + 1; resno++) {\r
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
for (precno = 0; precno < prec_max; precno++) {\r
int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->decomposition - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->decomposition - resno );\r
+ int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos - resno );\r
+ int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos - resno );\r
int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
int precno_y = (int) floor( (float)precno/(float)pcnx );\r
for(y = y0; y < y1; y++) { \r
if (precno_y*pcy == y ) {\r
for (x = x0; x < x1; x++) { \r
if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->layer; layno++) {\r
+ for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d %8e\n",\r
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos, disto); \r
- total_disto += disto;\r
+ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d\n",\r
+ pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos); \r
pack_nb++; \r
}\r
}\r
} /* PCRL */\r
else { /* CPRL */\r
\r
- fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos disto\n"); \r
+ fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos\n"); \r
\r
- for (compno = 0; compno < cstr_info->comp; compno++) {\r
+ for (compno = 0; compno < cstr_info->numcomps; compno++) {\r
/* I suppose components have same XRsiz, YRsiz */\r
int x0 = cstr_info->tile_Ox + tileno - (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tw * cstr_info->tile_x;\r
int y0 = cstr_info->tile_Ox + (int)floor( (float)tileno/(float)cstr_info->tw ) * cstr_info->tile_y;\r
int x1 = x0 + cstr_info->tile_x;\r
int y1 = y0 + cstr_info->tile_y;\r
\r
- for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {\r
+ for (resno = 0; resno < cstr_info->numdecompos + 1; resno++) {\r
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];\r
for (precno = 0; precno < prec_max; precno++) {\r
int pcnx = cstr_info->tile[tileno].pw[resno];\r
- int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->decomposition - resno );\r
- int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->decomposition - resno );\r
+ int pcx = (int) pow( 2, cstr_info->tile[tileno].pdx[resno] + cstr_info->numdecompos - resno );\r
+ int pcy = (int) pow( 2, cstr_info->tile[tileno].pdy[resno] + cstr_info->numdecompos - resno );\r
int precno_x = precno - (int) floor( (float)precno/(float)pcnx ) * pcnx;\r
int precno_y = (int) floor( (float)precno/(float)pcnx );\r
for(y = y0; y < y1; y++) {\r
if (precno_y*pcy == y ) {\r
for (x = x0; x < x1; x++) {\r
if (precno_x*pcx == x ) {\r
- for (layno = 0; layno < cstr_info->layer; layno++) {\r
+ for (layno = 0; layno < cstr_info->numlayers; layno++) {\r
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;\r
end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;\r
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;\r
- disto = cstr_info->tile[tileno].packet[pack_nb].disto;\r
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d %8e\n",\r
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos, disto); \r
- total_disto += disto;\r
+ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d\n",\r
+ pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos); \r
pack_nb++; \r
}\r
}\r
} /* CPRL */ \r
} /* tileno */\r
\r
- fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */\r
- fprintf(stream, "%.8e\n", total_disto); /* SE totale */\r
fclose(stream);\r
\r
- wxLogError(wxT("Generated index file %s"), index);\r
+ fprintf(stderr,"Generated index file %s\n", index);\r
\r
return true;\r
}\r
unsigned char *src = NULL;\r
unsigned char *ptr;\r
int file_length;\r
+ opj_codestream_info_t cstr_info; /* Codestream information structure */\r
\r
// destroy the image\r
image->Destroy();\r
cio = opj_cio_open((opj_common_ptr)dinfo, src, file_length);\r
\r
/* decode the stream and fill the image structure */\r
- opjimage = opj_decode(dinfo, cio);\r
+ opjimage = opj_decode(dinfo, cio, &cstr_info);\r
if (!opjimage) {\r
#ifndef __WXGTK__ \r
wxMutexGuiEnter();\r
unsigned char *ptr;\r
int file_length, jp2c_point, jp2h_point;\r
unsigned long int jp2hboxlen, jp2cboxlen;\r
+ opj_codestream_info_t cstr_info; /* Codestream information structure */\r
\r
// destroy the image\r
image->Destroy();\r
cio = opj_cio_open((opj_common_ptr)dinfo, src, my_jPheadSIZE + jp2hboxlen + jp2cboxlen);\r
\r
/* decode the stream and fill the image structure */\r
- opjimage = opj_decode(dinfo, cio);\r
+ opjimage = opj_decode(dinfo, cio, &cstr_info);\r
if (!opjimage) {\r
wxMutexGuiEnter();\r
wxLogError(wxT("MJ2: failed to decode image!"));\r
/* we need to enable indexing */
if (!indexfilename) {
- strncpy(parameters->index, JPWL_PRIVATEINDEX_NAME, sizeof(parameters->index)-1);
+ strncpy(indexfilename, JPWL_PRIVATEINDEX_NAME, OPJ_PATH_LEN);
}
/* search for different protection methods */
unsigned long int left_THmarks_len;\r
\r
/******* sot_pos = j2k->cstr_info->tile[tileno].start_pos; */\r
- sot_pos = j2k->cstr_info->tile[tileno].tp_start_pos[tpno];\r
+ sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;\r
cio_seek(cio, sot_pos + 2); \r
sot_len = cio_read(cio, 2); /* SOT Len */\r
cio_skip(cio, 2);\r
Psot = cio_read(cio, 4); /* tile length */\r
\r
/******* post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */\r
- post_sod_pos = j2k->cstr_info->tile[tileno].tp_end_header[tpno] + 1;\r
+ post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;\r
left_THmarks_len = post_sod_pos - sot_pos;\r
\r
/* add all the lengths of the markers which are len-ready and stay within SOT and SOD */\r
jwmarker[jwmarker_num].id = J2K_MS_ESD; /* its type */\r
jwmarker[jwmarker_num].esdmark = esd_mark; /* the EPB */\r
/****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */\r
- jwmarker[jwmarker_num].pos = soc_pos + j2k->cstr_info->tile[tileno].tp_start_pos[tpno] + sot_len + 2; /* after SOT */\r
+ jwmarker[jwmarker_num].pos = soc_pos + j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */\r
jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos + 0.2; /* not first at all! */\r
jwmarker[jwmarker_num].len = esd_mark->Lesd; /* its length */\r
jwmarker[jwmarker_num].len_ready = true; /* ready, yet */\r
int sot_len, Psot, Psotp, mm, epb_index = 0, prot_len = 0;\r
unsigned long sot_pos, post_sod_pos;\r
unsigned long int left_THmarks_len, epbs_len = 0;\r
- int startpack = 0, stoppack = j2k->cstr_info->num;\r
+ int startpack = 0, stoppack = j2k->cstr_info->packno;\r
int first_tp_pack, last_tp_pack;\r
jpwl_epb_ms_t *tph_epb = NULL;\r
\r
/****** sot_pos = j2k->cstr_info->tile[tileno].start_pos; */\r
- sot_pos = j2k->cstr_info->tile[tileno].tp_start_pos[tpno];\r
+ sot_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos;\r
cio_seek(cio, sot_pos + 2); \r
sot_len = cio_read(cio, 2); /* SOT Len */\r
cio_skip(cio, 2);\r
\r
/* a-priori length of the data dwelling between SOT and SOD */\r
/****** post_sod_pos = j2k->cstr_info->tile[tileno].end_header + 1; */\r
- post_sod_pos = j2k->cstr_info->tile[tileno].tp_end_header[tpno] + 1;\r
+ post_sod_pos = j2k->cstr_info->tile[tileno].tp[tpno].tp_end_header + 1;\r
left_THmarks_len = post_sod_pos - (sot_pos + sot_len + 2);\r
\r
/* add all the lengths of the JPWL markers which are len-ready and stay within SOT and SOD */\r
jwmarker[jwmarker_num].id = J2K_MS_EPB; /* its type */\r
jwmarker[jwmarker_num].epbmark = epb_mark; /* the EPB */\r
/****** jwmarker[jwmarker_num].pos = j2k->cstr_info->tile[tileno].start_pos + sot_len + 2; */ /* after SOT */\r
- jwmarker[jwmarker_num].pos = soc_pos + j2k->cstr_info->tile[tileno].tp_start_pos[tpno] + sot_len + 2; /* after SOT */\r
+ jwmarker[jwmarker_num].pos = soc_pos + j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2; /* after SOT */\r
jwmarker[jwmarker_num].dpos = (double) jwmarker[jwmarker_num].pos; /* first first first! */\r
jwmarker[jwmarker_num].len = epb_mark->Lepb; /* its length */\r
jwmarker[jwmarker_num].len_ready = true; /* ready */\r
startpack = 0;\r
/* EPB MSs for UEP packet data protection in Tile Parts */\r
/****** for (packno = 0; packno < j2k->cstr_info->num; packno++) { */\r
- first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp_num[tpno - 1]) : 0;\r
- last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp_num[tpno] - 1;\r
- for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp_num[tpno]; packno++) {\r
+ first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;\r
+ last_tp_pack = first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks - 1;\r
+ for (packno = 0; packno < j2k->cstr_info->tile[tileno].tp[tpno].tp_numpacks; packno++) {\r
\r
/******** if ((packspec < JPWL_MAX_NO_PACKSPECS) &&\r
(j2k->cp->pprot_tileno[packspec] == tileno) && (j2k->cp->pprot_packno[packspec] == packno)) { */\r
&epb_index, /* pointer to EPB index */\r
pprot, /* protection type */\r
/****** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001, */ /* position */\r
- (double) (j2k->cstr_info->tile[tileno].tp_start_pos[tpno] + sot_len + 2) + 0.0001, /* position */\r
+ (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */\r
tileno, /* number of tile */\r
0, /* length of pre-data */\r
prot_len /*4000*/ /* length of post-data */\r
&epb_index, /* pointer to EPB index */\r
pprot, /* protection type */\r
/***** (double) (j2k->cstr_info->tile[tileno].start_pos + sot_len + 2) + 0.0001,*/ /* position */\r
- (double) (j2k->cstr_info->tile[tileno].tp_start_pos[tpno] + sot_len + 2) + 0.0001, /* position */\r
+ (double) (j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pos + sot_len + 2) + 0.0001, /* position */\r
tileno, /* number of tile */\r
0, /* length of pre-data */\r
prot_len /*4000*/ /* length of post-data */\r
#ifdef USE_JPWL
#include "../libopenjpeg/opj_includes.h"
+#include <limits.h>
/** Minimum and maximum values for the double->pfp conversion */
#define MIN_V1 0.0
/* (message word size) * (number of containable parity words) */
max_postlen = k_post * (unsigned long int) floor((double) JPWL_MAXIMUM_EPB_ROOM / (double) (n_post - k_post));
+ /* null protection case */
+ /* the max post length can be as large as the LDPepb field can host */
+ if (hprot == 0)
+ max_postlen = INT_MAX;
+
/* length to use */
dL4 = min(max_postlen, post_len);
j2k->state = J2K_STATE_MHSOC;
/* cycle all over the markers */
- while (cio_tell(cio) < cio->length) {
+ while ((unsigned int) cio_tell(cio) < cio->length) {
/* read the marker */
mark_pos = cio_tell(cio);
/* auto sense address size */
if (ad_size == 0)
/* if there are more than 2^16 - 1 packets, switch to 4 bytes */
- ad_size = (j2k->cstr_info->num > 65535) ? 4 : 2;
+ ad_size = (j2k->cstr_info->packno > 65535) ? 4 : 2;
esd->sensval_size = ad_size + ad_size + se_size;
break;
/* just based on the portions of a codestream */
case (0):
/* MH + no. of THs + no. of packets */
- svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) * (1 + j2k->cstr_info->num);
+ svalnum = 1 + (j2k->cstr_info->tw * j2k->cstr_info->th) * (1 + j2k->cstr_info->packno);
break;
/* all the ones that are based on the packets */
default:
if (tileno < 0)
/* MH: all the packets and all the tiles info is written */
- svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->num;
+ svalnum = j2k->cstr_info->tw * j2k->cstr_info->th * j2k->cstr_info->packno;
else
/* TPH: only that tile info is written */
- svalnum = j2k->cstr_info->num;
+ svalnum = j2k->cstr_info->packno;
break;
}
buf += 7;
/* let's fill the data fields */
- for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->num * esd->tileno); vv < esd->svalnum; vv++) {
+ for (vv = (esd->tileno < 0) ? 0 : (j2k->cstr_info->packno * esd->tileno); vv < esd->svalnum; vv++) {
- int thistile = vv / j2k->cstr_info->num, thispacket = vv % j2k->cstr_info->num;
+ int thistile = vv / j2k->cstr_info->packno, thispacket = vv % j2k->cstr_info->packno;
/* skip for the hack some lines below */
if (thistile == j2k->cstr_info->tw * j2k->cstr_info->th)
/* starting tile distortion */
if (thispacket == 0) {
TSE = j2k->cstr_info->tile[thistile].distotile;
- oldMSE = TSE / j2k->cstr_info->tile[thistile].nbpix;
+ oldMSE = TSE / j2k->cstr_info->tile[thistile].numpix;
oldPSNR = 10.0 * log10(Omax2 / oldMSE);
}
TSE -= j2k->cstr_info->tile[thistile].packet[thispacket].disto;
/* MSE */
- MSE = TSE / j2k->cstr_info->tile[thistile].nbpix;
+ MSE = TSE / j2k->cstr_info->tile[thistile].numpix;
/* PSNR */
PSNR = 10.0 * log10(Omax2 / MSE);
else
/* packet: first is most important, and then in decreasing order
down to the last, which counts for 1 */
- dvalue = jpwl_pfp_to_double((unsigned short) (j2k->cstr_info->num - thispacket), esd->se_size);
+ dvalue = jpwl_pfp_to_double((unsigned short) (j2k->cstr_info->packno - thispacket), esd->se_size);
break;
/* MSE */
unsigned long int addlen;
opj_codestream_info_t *info = j2k->cstr_info;
- int tileno, tpno, packno, numtiles = info->th * info->tw, numpacks = info->num;
+ int tileno, tpno, packno, numtiles = info->th * info->tw, numpacks = info->packno;
if (!j2k || !jwmarker ) {
opj_event_msg(j2k->cinfo, EVT_ERROR, "J2K handle or JPWL markers list badly allocated\n");
/* start_pos: increment with markers before SOT */
addlen = 0;
for (mm = 0; mm < jwmarker_num; mm++)
- if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp_start_pos[tpno])
+ if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_start_pos)
addlen += jwmarker[mm].len + 2;
- info->tile[tileno].tp_start_pos[tpno] += addlen;
+ info->tile[tileno].tp[tpno].tp_start_pos += addlen;
/* end_header: increment with markers before of it */
addlen = 0;
for (mm = 0; mm < jwmarker_num; mm++)
- if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp_end_header[tpno])
+ if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_header)
addlen += jwmarker[mm].len + 2;
- info->tile[tileno].tp_end_header[tpno] += addlen;
+ info->tile[tileno].tp[tpno].tp_end_header += addlen;
/* end_pos: increment with markers before the end of this tile part */
addlen = 0;
for (mm = 0; mm < jwmarker_num; mm++)
- if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp_end_pos[tpno])
+ if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].tp[tpno].tp_end_pos)
addlen += jwmarker[mm].len + 2;
- info->tile[tileno].tp_end_pos[tpno] += addlen;
+ info->tile[tileno].tp[tpno].tp_end_pos += addlen;
}