Fixed a bug which prevented JPWL from working on multi-tiled images; added some more...
authorGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Mon, 5 Nov 2007 13:05:07 +0000 (13:05 +0000)
committerGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Mon, 5 Nov 2007 13:05:07 +0000 (13:05 +0000)
19 files changed:
ChangeLog
OPJViewer/Makefile
OPJViewer/OPJViewer.dsp
OPJViewer/source/OPJDialogs.cpp [new file with mode: 0644]
OPJViewer/source/OPJViewer.cpp
OPJViewer/source/OPJViewer.h
OPJViewer/source/build.h
OPJViewer/source/imagj2k.cpp
OPJViewer/source/imagj2k.h
codec/image_to_j2k.c
jpwl/LibOpenJPEG_JPWL.dsp
jpwl/Makefile
jpwl/jpwl.c
jpwl/jpwl.h
jpwl/jpwl_lib.c
libopenjpeg/j2k.c
libopenjpeg/openjpeg.c
libopenjpeg/openjpeg.h
mj2/wrap_j2k_in_mj2.c

index a16e2d3c6a521b33af1879b7dcac8b6db4783fb9..85af2acf4922f57f15f662ff7a63f2be3d1c317e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+November 5, 2007
+*+ [GB] Fixed a bug which prevented JPWL from working on multi-tiled images; added some more fields in the interface info structures (keep a list of markers, save start packet number for each tile)
+
 October 23, 2007
 * [GB] Improved success for the linux build; OPJViewer shows all the COM contents
  
index c626b06228248e17fc9610b2d531728d3979701d..75f57230aabb642eb8733093866fc96ca9ae4f3e 100644 (file)
@@ -13,18 +13,18 @@ MODULES = $(OPJV_SRCS:.cpp=.o)
 all: opjviewer lib\r
 \r
 .cpp.o:\r
-        $(CC) $(CFLAGS) -c $< -o $@\r
+       $(CC) $(CFLAGS) -c $< -o $@\r
 \r
 lib:\r
-        cd ../jpwl; make\r
+       cd ../jpwl; make\r
 \r
 opjviewer: $(OPJV_SRCS) lib\r
         $(CC) $(CFLAGS) -I .. $(OPJV_SRCS) -o OPJViewer -L ../jpwl -lopenjpeg_JPWL -lm -lstdc++ -ltiff $(shell wx-config-2.8 --libs)\r
 \r
 \r
 clean:\r
-        rm -f OPJViewer *.o *.a\r
-        cd ../libopenjpeg; rm -f *.o\r
+       rm -f OPJViewer *.o *.a\r
+       cd ../libopenjpeg; rm -f *.o\r
 \r
 \r
 \r
index 99b640e551adef3e7448a01d0faf1f425993bf37..d9521f4ce8594e4999cbd04c0a6a3d957f2d4e99 100644 (file)
@@ -111,6 +111,10 @@ SOURCE=.\source\imagmj2.cpp
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\source\OPJDialogs.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\source\OPJViewer.cpp\r
 # End Source File\r
 # Begin Source File\r
diff --git a/OPJViewer/source/OPJDialogs.cpp b/OPJViewer/source/OPJDialogs.cpp
new file mode 100644 (file)
index 0000000..063cec8
--- /dev/null
@@ -0,0 +1,1082 @@
+/*\r
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita'� degli studi di Perugia (UPG), Italy\r
+ * All rights reserved.\r
+ *\r
+ * Redistribution and use in source and binary forms, with or without\r
+ * modification, are permitted provided that the following conditions\r
+ * are met:\r
+ * 1. Redistributions of source code must retain the above copyright\r
+ *    notice, this list of conditions and the following disclaimer.\r
+ * 2. Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the\r
+ *    documentation and/or other materials provided with the distribution.\r
+ *\r
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'\r
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+ * POSSIBILITY OF SUCH DAMAGE.\r
+ */\r
+#include "OPJViewer.h"\r
+\r
+// ----------------------------------------------------------------------------\r
+// OPJDecoderDialog\r
+// ----------------------------------------------------------------------------\r
+\r
+IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)\r
+\r
+BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)\r
+#ifdef USE_JPWL\r
+       EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)\r
+       EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)\r
+#endif // USE_JPWL\r
+END_EVENT_TABLE()\r
+\r
+OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)\r
+{\r
+       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
+\r
+       Create(win, wxID_ANY, wxT("Decoder settings"),\r
+               wxDefaultPosition, wxDefaultSize,\r
+               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
+               );\r
+\r
+       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
+\r
+       m_settingsNotebook = GetBookCtrl();\r
+\r
+       wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
+       wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);\r
+       if (!wxGetApp().m_enabledeco)\r
+               jpeg2000Settings->Enable(false);\r
+       wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);\r
+       if (!wxGetApp().m_enabledeco)\r
+               mjpeg2000Settings->Enable(false);\r
+#ifdef USE_JPWL\r
+       wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
+       if (!wxGetApp().m_enabledeco)\r
+               jpwlSettings->Enable(false);\r
+#endif // USE_JPWL\r
+\r
+       m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);\r
+       m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
+       m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);\r
+#ifdef USE_JPWL\r
+       m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
+#endif // USE_JPWL\r
+\r
+       LayoutDialog();\r
+}\r
+\r
+OPJDecoderDialog::~OPJDecoderDialog()\r
+{\r
+}\r
+\r
+wxPanel* OPJDecoderDialog::CreateMainSettingsPage(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
+               // add decoding enabling check box\r
+               subtopSizer->Add(\r
+                       m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),\r
+                       0, wxGROW | wxALL, 5);\r
+               m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);\r
+\r
+               // add parsing enabling check box\r
+               subtopSizer->Add(\r
+                       m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),\r
+                       0, wxGROW | wxALL, 5);\r
+               m_enableparseCheck->SetValue(wxGetApp().m_enableparse);\r
+\r
+                       // resize settings, column\r
+                       wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};\r
+                       m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,\r
+                               wxT("Resize method"),\r
+                               wxDefaultPosition, wxDefaultSize,\r
+                               WXSIZEOF(choices),\r
+                               choices,\r
+                               1,\r
+                               wxRA_SPECIFY_ROWS);\r
+                       m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);\r
+\r
+               subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);\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* OPJDecoderDialog::CreatePart3SettingsPage(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
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+                       // frame settings, column\r
+                       wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));\r
+                       wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);\r
+\r
+                               // selected frame number, row\r
+                               wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               framenumSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               framenumSizer->Add(\r
+                                       m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_framenum),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               1, 100000, wxGetApp().m_framenum),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                       frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);\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* OPJDecoderDialog::CreatePart1SettingsPage(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
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+                       // resolutions settings, column\r
+                       wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));\r
+                       wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);\r
+\r
+                               // reduce factor sizer, row\r
+                               wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               reduceSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               reduceSizer->Add(\r
+                                       m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,\r
+                                       wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 10000, wxGetApp().m_reducefactor),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                       resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);\r
+\r
+                       // quality layer settings, column\r
+                       wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));\r
+                       wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
+\r
+                               // quality layers sizer, row\r
+                               wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               qualitySizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               qualitySizer->Add(\r
+                                       m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 100000, wxGetApp().m_qualitylayers),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                       layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);\r
+\r
+                       // component settings, column\r
+                       wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
+                       wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
+\r
+                               // quality layers sizer, row\r
+                               wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               numcompsSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               numcompsSizer->Add(\r
+                                       m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_components),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 100000, wxGetApp().m_components),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+                               m_numcompsCtrl->Enable(true);\r
+\r
+                       compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\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
+#ifdef USE_JPWL\r
+wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(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
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+               // add JPWL enabling check box\r
+               subtopSizer->Add(\r
+                       m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),\r
+                       0, wxGROW | wxALL, 5);\r
+               m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);\r
+\r
+                       // component settings, column\r
+                       wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
+                       wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
+\r
+                               // expected components sizer, row\r
+                               wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               expcompsSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               expcompsSizer->Add(\r
+                                       m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_expcomps),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               1, 100000, wxGetApp().m_expcomps),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+                               m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);\r
+\r
+                       compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
+\r
+                       // tiles settings, column\r
+                       wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
+                       wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
+\r
+                               // maximum tiles sizer, row\r
+                               wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               maxtileSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               maxtileSizer->Add(\r
+                                       m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               1, 100000, wxGetApp().m_maxtiles),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+                               m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);\r
+\r
+                       tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);\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
+void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)\r
+{\r
+       size_t pp;\r
+\r
+       if (event.IsChecked()) {\r
+               wxLogMessage(wxT("Decoding enabled"));\r
+               m_resizeBox->Enable(true);\r
+               // enable all tabs except ourselves\r
+               for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
+                       if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
+                               m_settingsNotebook->GetPage(pp)->Enable(true);\r
+               }\r
+       } else {\r
+               wxLogMessage(wxT("Decoding disabled"));\r
+               m_resizeBox->Enable(false);\r
+               // disable all tabs except ourselves\r
+               for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
+                       if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
+                               m_settingsNotebook->GetPage(pp)->Enable(false);\r
+               }\r
+       }\r
+\r
+}\r
+\r
+void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
+{\r
+       if (event.IsChecked()) {\r
+               wxLogMessage(wxT("JPWL enabled"));\r
+               m_expcompsCtrl->Enable(true);\r
+               m_maxtilesCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("JPWL disabled"));\r
+               m_expcompsCtrl->Enable(false);\r
+               m_maxtilesCtrl->Enable(false);\r
+       }\r
+\r
+}\r
+\r
+#endif // USE_JPWL\r
+\r
+bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)\r
+{\r
+    /*size_t nFiles = filenames.GetCount();\r
+    wxString str;\r
+    str.Printf( _T("%d files dropped\n"), (int)nFiles);\r
+    for ( size_t n = 0; n < nFiles; n++ ) {\r
+        str << filenames[n] << wxT("\n");\r
+    }\r
+    wxLogMessage(str);*/\r
+       m_pOwner->OpenFiles(filenames, filenames);\r
+\r
+    return true;\r
+}\r
+\r
+\r
+\r
+\r
+\r
+// ----------------------------------------------------------------------------\r
+// OPJEncoderDialog\r
+// ----------------------------------------------------------------------------\r
+\r
+IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)\r
+\r
+BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)\r
+#ifdef USE_JPWL\r
+       EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)\r
+       EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)\r
+       EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)\r
+       EVT_RADIOBUTTON(OPJENCO_RATERADIO, OPJEncoderDialog::OnRadioQualityRate)\r
+       EVT_RADIOBUTTON(OPJENCO_QUALITYRADIO, OPJEncoderDialog::OnRadioQualityRate)\r
+#endif // USE_JPWL\r
+END_EVENT_TABLE()\r
+\r
+OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)\r
+{\r
+       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
+\r
+       Create(win, wxID_ANY, wxT("Encoder settings"),\r
+               wxDefaultPosition, wxDefaultSize,\r
+               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
+               );\r
+\r
+       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
+\r
+       m_settingsNotebook = GetBookCtrl();\r
+\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(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
+\r
+OPJEncoderDialog::~OPJEncoderDialog()\r
+{\r
+}\r
+\r
+wxPanel* OPJEncoderDialog::CreateMainSettingsPage(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
+\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
+       // 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
+                       // image settings, column\r
+                       wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));\r
+                       wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);\r
+\r
+                               // subsampling factor sizer, row\r
+                               wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               subsSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               subsSizer->Add(\r
+                                       m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,\r
+                                                               wxGetApp().m_subsampling,\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // origin sizer, row\r
+                               wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               imorigSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               imorigSizer->Add(\r
+                                       m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,\r
+                                                               wxGetApp().m_origin,\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // layer settings, column\r
+                       wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));\r
+                       wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
+\r
+                               // rate factor sizer, row\r
+                               wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               /*rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/\r
+\r
+                               // add the radio button\r
+                               rateSizer->Add(\r
+                                       m_rateRadio = new wxRadioButton(panel, OPJENCO_RATERADIO, wxT("&Rate values"),\r
+                                                               wxDefaultPosition, wxDefaultSize,\r
+                                                               wxRB_GROUP),\r
+                                                               0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL\r
+                                                               );\r
+                               m_rateRadio->SetValue(!(wxGetApp().m_enablequality));\r
+\r
+                               // add some horizontal space\r
+                               rateSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               rateSizer->Add(\r
+                                       m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,\r
+                                                               wxGetApp().m_rates,\r
+                                                               wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+                               if (wxGetApp().m_enablequality == true)\r
+                                       m_rateCtrl->Enable(false);\r
+\r
+                       layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // quality factor sizer, row\r
+                               wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               /*qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/\r
+\r
+                               // add the radio button\r
+                               qualitySizer->Add(\r
+                                       m_qualityRadio = new wxRadioButton(panel, OPJENCO_QUALITYRADIO, wxT("&Quality values"),\r
+                                                               wxDefaultPosition, wxDefaultSize),\r
+                                                               0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL\r
+                                                               );\r
+                               m_qualityRadio->SetValue(wxGetApp().m_enablequality);\r
+\r
+                               // add some horizontal space\r
+                               qualitySizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               qualitySizer->Add(\r
+                                       m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,\r
+                                                               wxGetApp().m_quality,\r
+                                                               wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+                               if (wxGetApp().m_enablequality == false)\r
+                                       m_qualityCtrl->Enable(false);\r
+\r
+                       layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // wavelet settings, column\r
+                       wxStaticBox* transformBox = new wxStaticBox(panel, wxID_ANY, wxT("Transforms"));\r
+                       wxBoxSizer* transformSizer = new wxStaticBoxSizer(transformBox, wxVERTICAL);\r
+\r
+                       // multiple component check box\r
+                       transformSizer->Add(\r
+                               m_mctCheck = new wxCheckBox(panel, OPJENCO_ENABLEMCT, wxT("Multiple component"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       m_mctCheck->SetValue(wxGetApp().m_multicomp);\r
+\r
+                       // irreversible wavelet check box\r
+                       transformSizer->Add(\r
+                               m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible wavelet"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       m_irrevCheck->SetValue(wxGetApp().m_irreversible);\r
+\r
+                               // resolution number sizer, row\r
+                               wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               resnumSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               resnumSizer->Add(\r
+                                       m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_resolutions),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 256, 6),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       transformSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(transformSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // codestream settings, column\r
+                       wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));\r
+                       wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);\r
+\r
+                               // codeblock sizer, row\r
+                               wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               codeblockSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               codeblockSizer->Add(\r
+                                       m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,\r
+                                                               wxGetApp().m_cbsize,\r
+                                                               wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // precinct sizer, row\r
+                               wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               precinctSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               precinctSizer->Add(\r
+                                       m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,\r
+                                                               wxGetApp().m_prsize,\r
+                                                               wxDefaultPosition, wxSize(100, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // tile settings, column\r
+                       wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
+                       wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
+\r
+                               // tile size sizer, row\r
+                               wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               tilesizeSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               tilesizeSizer->Add(\r
+                                       m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,\r
+                                                               wxGetApp().m_tsize,\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // tile origin sizer, row\r
+                               wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               tilorigSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               tilorigSizer->Add(\r
+                                       m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,\r
+                                                               wxGetApp().m_torigin,\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);\r
+\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
+                       progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,\r
+                               wxT("Progression order/profile"),\r
+                               wxDefaultPosition, wxDefaultSize,\r
+                               WXSIZEOF(choices),\r
+                               choices,\r
+                               3,\r
+                               wxRA_SPECIFY_COLS);\r
+                       progressionBox->SetSelection(wxGetApp().m_progression);\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
+                               // resil2 sizer, row\r
+                               wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // SOP check box\r
+                               resil2Sizer->Add(\r
+                                       m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),\r
+                                               wxDefaultPosition, wxDefaultSize),\r
+                                               0, wxGROW | wxALL, 3);\r
+                               m_sopCheck->SetValue(wxGetApp().m_enablesop);\r
+\r
+                               // EPH check box\r
+                               resil2Sizer->Add(\r
+                                       m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),\r
+                                               wxDefaultPosition, wxDefaultSize),\r
+                                               0, wxGROW | wxALL, 3);\r
+                               m_ephCheck->SetValue(wxGetApp().m_enableeph);\r
+\r
+                       resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // separation\r
+                       resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);\r
+\r
+                               // resil3 sizer, row\r
+                               wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);\r
+\r
+                               // BYPASS check box\r
+                               resil3Sizer->Add(\r
+                                       m_enablebypassCheck = new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enablebypassCheck->SetValue(wxGetApp().m_enablebypass);\r
+\r
+                               // RESET check box\r
+                               resil3Sizer->Add(\r
+                                       m_enableresetCheck = new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enableresetCheck->SetValue(wxGetApp().m_enablereset);\r
+\r
+                               // RESTART check box\r
+                               resil3Sizer->Add(\r
+                                       m_enablerestartCheck = new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enablerestartCheck->SetValue(wxGetApp().m_enablerestart);\r
+\r
+                               // VSC check box\r
+                               resil3Sizer->Add(\r
+                                       m_enablevscCheck = new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enablevscCheck->SetValue(wxGetApp().m_enablevsc);\r
+\r
+                               // ERTERM check box\r
+                               resil3Sizer->Add(\r
+                                       m_enableertermCheck = new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enableertermCheck->SetValue(wxGetApp().m_enableerterm);\r
+\r
+                               // SEGMARK check box\r
+                               resil3Sizer->Add(\r
+                                       m_enablesegmarkCheck = new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),\r
+                                       wxDefaultPosition, wxDefaultSize),\r
+                                       0, wxGROW | wxALL, 3);\r
+                               m_enablesegmarkCheck->SetValue(wxGetApp().m_enablesegmark);\r
+\r
+                       resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // ROI settings, column\r
+                       wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));\r
+                       wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);\r
+\r
+                               // component number sizer, row\r
+                               wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               roicompSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               roicompSizer->Add(\r
+                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,\r
+                                                               wxT("0"),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 256, 0),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                               // upshift sizer, row\r
+                               wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               roishiftSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               roishiftSizer->Add(\r
+                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,\r
+                                                               wxT("0"),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               0, 37, 0),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                       roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // Index file settings, column\r
+                       wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));\r
+                       wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);\r
+\r
+                       // indexing check box\r
+                       indexSizer->Add(\r
+                               m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       m_enableidxCheck->SetValue(wxGetApp().m_enableidx);\r
+\r
+                               // index file sizer, row\r
+                               wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
+\r
+                               // add some horizontal space\r
+                               indexnameSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               indexnameSizer->Add(\r
+                                       m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,\r
+                                                               wxGetApp().m_index,\r
+                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
+                                                               wxTE_LEFT),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+                               m_indexCtrl->Enable(wxGetApp().m_enableidx);\r
+\r
+                       indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);\r
+\r
+               subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);\r
+\r
+                       // Comment settings, column\r
+                       wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));\r
+                       wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);\r
+\r
+                       // commenting check box\r
+                       commentSizer->Add(\r
+                               m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled (empty to reset)"),\r
+                               wxDefaultPosition, wxDefaultSize),\r
+                               0, wxGROW | wxALL, 3);\r
+                       m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);\r
+\r
+                       // add some horizontal space\r
+                       commentSizer->Add(3, 3, 1, wxALL, 0);\r
+\r
+                       // add the value control\r
+                       commentSizer->Add(\r
+                               m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,\r
+                                                       wxGetApp().m_comment,\r
+                                                       wxDefaultPosition, wxSize(wxDefaultCoord, 60),\r
+                                                       wxTE_LEFT | wxTE_MULTILINE),\r
+                               0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
+                       m_commentCtrl->Enable(wxGetApp().m_enablecomm);\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
+    panel->SetSizer(topSizer);\r
+    topSizer->Fit(panel);\r
+\r
+    return panel;\r
+}\r
+\r
+void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)\r
+{\r
+       if (event.IsChecked()) {\r
+               wxLogMessage(wxT("Comment enabled"));\r
+               m_commentCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("Comment disabled"));\r
+               m_commentCtrl->Enable(false);\r
+       }\r
+\r
+}\r
+\r
+void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)\r
+{\r
+       if (event.IsChecked()) {\r
+               wxLogMessage(wxT("Index enabled"));\r
+               m_indexCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("Index disabled"));\r
+               m_indexCtrl->Enable(false);\r
+       }\r
+\r
+}\r
+\r
+void OPJEncoderDialog::OnRadioQualityRate(wxCommandEvent& event)\r
+{\r
+       if (event.GetId() == OPJENCO_QUALITYRADIO) {\r
+               wxLogMessage(wxT("Quality selected"));\r
+               m_rateCtrl->Enable(false);\r
+               m_qualityCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("Rate selected"));\r
+               m_rateCtrl->Enable(true);\r
+               m_qualityCtrl->Enable(false);\r
+       }\r
+}\r
+\r
+#ifdef USE_JPWL\r
+void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
+{\r
+       /*if (event.IsChecked()) {\r
+               wxLogMessage(wxT("JPWL enabled"));\r
+               m_expcompsCtrl->Enable(true);\r
+               m_maxtilesCtrl->Enable(true);\r
+       } else {\r
+               wxLogMessage(wxT("JPWL disabled"));\r
+               m_expcompsCtrl->Enable(false);\r
+               m_maxtilesCtrl->Enable(false);\r
+       }*/\r
+\r
+}\r
+#endif // USE_JPWL\r
index 8783386cc0a5dc273b7c3f162357934168c5c539..61668e41a377a1fd63e27c05fae0716a50e261be 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy\r
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy\r
  * All rights reserved.\r
  *\r
  * Redistribution and use in source and binary forms, with or without\r
@@ -214,10 +214,10 @@ bool OPJViewerApp::OnInit(void)
        OPJconfig->Read(wxT("enabledeco"), &m_enabledeco, (bool) true);\r
        OPJconfig->Read(wxT("enableparse"), &m_enableparse, (bool) true);\r
        OPJconfig->Read(wxT("resizemethod"), &m_resizemethod, (long) 0);\r
-       OPJconfig->Read(wxT("reducefactor"), &m_reducefactor, (long) 0);\r
-       OPJconfig->Read(wxT("qualitylayers"), &m_qualitylayers, (long) 0);\r
-       OPJconfig->Read(wxT("components"), &m_components, (long) 0);\r
-       OPJconfig->Read(wxT("framenum"), &m_framenum, (long) 0);\r
+       OPJconfig->Read(wxT("xxxreducefactor"), &m_reducefactor, (long) 0);\r
+       OPJconfig->Read(wxT("xxxqualitylayers"), &m_qualitylayers, (long) 0);\r
+       OPJconfig->Read(wxT("xxxcomponents"), &m_components, (long) 0);\r
+       OPJconfig->Read(wxT("xxxframenum"), &m_framenum, (long) 0);\r
 #ifdef USE_JPWL\r
        OPJconfig->Read(wxT("enablejpwl"), &m_enablejpwl, (bool) true);\r
        OPJconfig->Read(wxT("expcomps"), &m_expcomps, (long) JPWL_EXPECTED_COMPONENTS);\r
@@ -241,14 +241,23 @@ bool OPJViewerApp::OnInit(void)
        OPJconfig->Read(wxT("origin"), &m_origin, (wxString) wxT("0,0"));\r
        OPJconfig->Read(wxT("rates"), &m_rates, (wxString) wxT("20,10,5"));\r
        OPJconfig->Read(wxT("quality"), &m_quality, (wxString) wxT("30,35,40"));\r
+       OPJconfig->Read(wxT("enablequality"), &m_enablequality, (bool) false);\r
+       OPJconfig->Read(wxT("multicomp"), &m_multicomp, (bool) false);  \r
        OPJconfig->Read(wxT("irreversible"), &m_irreversible, (bool) false);    \r
        OPJconfig->Read(wxT("resolutions"), &m_resolutions, (int) 6);   \r
+       OPJconfig->Read(wxT("progression"), &m_progression, (int) 0);   \r
        OPJconfig->Read(wxT("cbsize"), &m_cbsize, (wxString) wxT("32,32"));\r
        OPJconfig->Read(wxT("prsize"), &m_prsize, (wxString) wxT("[128,128],[128,128]"));\r
        OPJconfig->Read(wxT("tsize"), &m_tsize, (wxString) wxT(""));\r
        OPJconfig->Read(wxT("torigin"), &m_torigin, (wxString) wxT("0,0"));\r
        OPJconfig->Read(wxT("enablesop"), &m_enablesop, (bool) false);  \r
        OPJconfig->Read(wxT("enableeph"), &m_enableeph, (bool) false);  \r
+       OPJconfig->Read(wxT("enablebypass"), &m_enablebypass, (bool) false);    \r
+       OPJconfig->Read(wxT("enablereset"), &m_enablereset, (bool) false);      \r
+       OPJconfig->Read(wxT("enablerestart"), &m_enablerestart, (bool) false);  \r
+       OPJconfig->Read(wxT("enablevsc"), &m_enablevsc, (bool) false);  \r
+       OPJconfig->Read(wxT("enableerterm"), &m_enableerterm, (bool) false);    \r
+       OPJconfig->Read(wxT("enablesegmark"), &m_enablesegmark, (bool) false);  \r
        OPJconfig->Read(wxT("enablecomm"), &m_enablecomm, (bool) true); \r
        OPJconfig->Read(wxT("comment"), &m_comment, (wxString) wxT(""));\r
        OPJconfig->Read(wxT("enableidx"), &m_enableidx, (bool) false);  \r
@@ -281,14 +290,23 @@ bool OPJViewerApp::OnInit(void)
        m_origin = wxT("0,0");\r
        m_rates = wxT("20,10,5");\r
        m_quality = wxT("30,35,40");\r
+       m_enablequality = false;\r
+       m_multicomp = false;\r
        m_irreversible = false;\r
        m_resolutions = 6;\r
+       m_progression = 0;\r
        m_cbsize= wxT("32,32");\r
        m_prsize= wxT("[128,128],[128,128]");\r
        m_tsize = wxT("");\r
        m_torigin = wxT("0,0");\r
        m_enablesop = false;\r
        m_enableeph = false;\r
+       m_enablebypass = false;\r
+       m_enablereset = false;\r
+       m_enablerestart = false;\r
+       m_enablevsc = false;\r
+       m_enableerterm = false;\r
+       m_enablesegmark = false;\r
        m_enableidx = false;\r
        m_index = wxT("index.txt");\r
        m_enablecomm = true;\r
@@ -369,14 +387,23 @@ int OPJViewerApp::OnExit()
        OPJconfig->Write(wxT("origin"), m_origin);\r
        OPJconfig->Write(wxT("rates"), m_rates);\r
        OPJconfig->Write(wxT("quality"), m_quality);\r
+       OPJconfig->Write(wxT("enablequality"), m_enablequality);\r
+       OPJconfig->Write(wxT("multicomp"), m_multicomp);\r
        OPJconfig->Write(wxT("irreversible"), m_irreversible);\r
        OPJconfig->Write(wxT("resolutions"), m_resolutions);\r
+       OPJconfig->Write(wxT("progression"), m_progression);\r
        OPJconfig->Write(wxT("cbsize"), m_cbsize);\r
        OPJconfig->Write(wxT("prsize"), m_prsize);\r
        OPJconfig->Write(wxT("tiles"), m_tsize);\r
        OPJconfig->Write(wxT("torigin"), m_torigin);\r
        OPJconfig->Write(wxT("enablesop"), m_enablesop);\r
        OPJconfig->Write(wxT("enableeph"), m_enableeph);\r
+       OPJconfig->Write(wxT("enablebypass"), m_enablebypass);\r
+       OPJconfig->Write(wxT("enablereset"), m_enablereset);\r
+       OPJconfig->Write(wxT("enablerestart"), m_enablerestart);\r
+       OPJconfig->Write(wxT("enablevsc"), m_enablevsc);\r
+       OPJconfig->Write(wxT("enableerterm"), m_enableerterm);\r
+       OPJconfig->Write(wxT("enablesegmark"), m_enablesegmark);\r
        OPJconfig->Write(wxT("enableidx"), m_enableidx);\r
        OPJconfig->Write(wxT("index"), m_index);\r
        OPJconfig->Write(wxT("enablecomm"), m_enablecomm);\r
@@ -415,6 +442,15 @@ BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame)
     EVT_MENU(OPJFRAME_VIEWPREVFRAME, OPJFrame::OnPrevFrame)\r
     EVT_MENU(OPJFRAME_VIEWHOMEFRAME, OPJFrame::OnHomeFrame)\r
     EVT_MENU(OPJFRAME_VIEWNEXTFRAME, OPJFrame::OnNextFrame)\r
+    EVT_MENU(OPJFRAME_VIEWLESSLAYERS, OPJFrame::OnLessLayers)\r
+    EVT_MENU(OPJFRAME_VIEWALLLAYERS, OPJFrame::OnAllLayers)\r
+    EVT_MENU(OPJFRAME_VIEWMORELAYERS, OPJFrame::OnMoreLayers)\r
+    EVT_MENU(OPJFRAME_VIEWLESSRES, OPJFrame::OnLessRes)\r
+    EVT_MENU(OPJFRAME_VIEWFULLRES, OPJFrame::OnFullRes)\r
+    EVT_MENU(OPJFRAME_VIEWMORERES, OPJFrame::OnMoreRes)\r
+    EVT_MENU(OPJFRAME_VIEWPREVCOMP, OPJFrame::OnPrevComp)\r
+    EVT_MENU(OPJFRAME_VIEWALLCOMPS, OPJFrame::OnAllComps)\r
+    EVT_MENU(OPJFRAME_VIEWNEXTCOMP, OPJFrame::OnNextComp)\r
     EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser)\r
     EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker)\r
     EVT_MENU(OPJFRAME_FILETOGGLET, OPJFrame::OnToggleToolbar)\r
@@ -486,6 +522,39 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        view_menu->Append(OPJFRAME_VIEWNEXTFRAME, wxT("&Next frame\tRight"));\r
        view_menu->SetHelpString(OPJFRAME_VIEWNEXTFRAME, wxT("View next frame"));\r
 \r
+       view_menu->AppendSeparator();\r
+\r
+       view_menu->Append(OPJFRAME_VIEWLESSLAYERS, wxT("&Less layers\t-"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWLESSLAYERS, wxT("Remove a layer"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWALLLAYERS, wxT("&All layers\t0"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWALLLAYERS, wxT("Show all layers"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWMORELAYERS, wxT("&More layers\t+"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWMORELAYERS, wxT("Add a layer"));\r
+\r
+       view_menu->AppendSeparator();\r
+\r
+       view_menu->Append(OPJFRAME_VIEWLESSRES, wxT("&Less resolution\t<"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWLESSRES, wxT("Reduce the resolution"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWFULLRES, wxT("&Full resolution\tf"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWFULLRES, wxT("Full resolution"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWMORERES, wxT("&More resolution\t>"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWMORERES, wxT("Increase the resolution"));\r
+\r
+       view_menu->AppendSeparator();\r
+\r
+       view_menu->Append(OPJFRAME_VIEWPREVCOMP, wxT("&Prev component\tDown"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWPREVCOMP, wxT("View previous component"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWALLCOMPS, wxT("&All components\ta"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWALLCOMPS, wxT("View all components"));\r
+\r
+       view_menu->Append(OPJFRAME_VIEWNEXTCOMP, wxT("&Next component\tUp"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWNEXTCOMP, wxT("View next component"));\r
+\r
 \r
        // settings menu and its items\r
        wxMenu *sets_menu = new wxMenu;\r
@@ -539,6 +608,18 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
                                                                                                wxDefaultSize);\r
        wxBitmap bmpNextframe = wxArtProvider::GetBitmap(wxART_GO_FORWARD, wxART_TOOLBAR,\r
                                                                                                wxDefaultSize);\r
+       wxBitmap bmpLesslayers = bmpPrevframe;\r
+       wxBitmap bmpAlllayers = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,\r
+                                                                                               wxDefaultSize);\r
+       wxBitmap bmpMorelayers = bmpNextframe;\r
+       wxBitmap bmpLessres = bmpPrevframe;\r
+       wxBitmap bmpFullres = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,\r
+                                                                                               wxDefaultSize);\r
+       wxBitmap bmpMoreres = bmpNextframe;\r
+       wxBitmap bmpPrevcomp = bmpPrevframe;\r
+       wxBitmap bmpAllcomps = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,\r
+                                                                                               wxDefaultSize);\r
+       wxBitmap bmpNextcomp = bmpNextframe;\r
 \r
        tool_bar->AddTool(OPJFRAME_FILEOPEN, bmpOpen, wxT("Open"));\r
        tool_bar->AddTool(OPJFRAME_FILESAVEAS, bmpSaveAs, wxT("Save as "));\r
@@ -554,6 +635,18 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        tool_bar->AddTool(OPJFRAME_VIEWPREVFRAME, bmpPrevframe, wxT("Previous frame"));\r
        tool_bar->AddTool(OPJFRAME_VIEWHOMEFRAME, bmpHomeframe, wxT("Starting frame"));\r
        tool_bar->AddTool(OPJFRAME_VIEWNEXTFRAME, bmpNextframe, wxT("Next frame"));\r
+       tool_bar->AddSeparator();\r
+       tool_bar->AddTool(OPJFRAME_VIEWLESSLAYERS, bmpLesslayers, wxT("Remove a layer"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWALLLAYERS, bmpAlllayers, wxT("Show all layers"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWMORELAYERS, bmpMorelayers, wxT("Add a layer"));\r
+       tool_bar->AddSeparator();\r
+       tool_bar->AddTool(OPJFRAME_VIEWLESSRES, bmpLessres, wxT("Reduce the resolution"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWFULLRES, bmpFullres, wxT("Full resolution"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWMORERES, bmpMoreres, wxT("Increase the resolution"));\r
+       tool_bar->AddSeparator();\r
+       tool_bar->AddTool(OPJFRAME_VIEWPREVCOMP, bmpPrevcomp, wxT("Previous component"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWALLCOMPS, bmpAllcomps, wxT("All components"));\r
+       tool_bar->AddTool(OPJFRAME_VIEWNEXTCOMP, bmpNextcomp, wxT("Next component"));\r
        tool_bar->Realize();\r
        \r
        // associate the toolbar with the frame\r
@@ -702,14 +795,23 @@ void OPJFrame::OnSetsEnco(wxCommandEvent& event)
                wxGetApp().m_origin = dialog.m_originCtrl->GetValue();\r
                wxGetApp().m_rates = dialog.m_rateCtrl->GetValue();\r
                wxGetApp().m_quality = dialog.m_qualityCtrl->GetValue();\r
+               wxGetApp().m_enablequality = dialog.m_qualityRadio->GetValue();\r
+               wxGetApp().m_multicomp = dialog.m_mctCheck->GetValue();\r
                wxGetApp().m_irreversible = dialog.m_irrevCheck->GetValue();\r
                wxGetApp().m_resolutions = dialog.m_resolutionsCtrl->GetValue();\r
                wxGetApp().m_cbsize = dialog.m_cbsizeCtrl->GetValue();\r
                wxGetApp().m_prsize = dialog.m_prsizeCtrl->GetValue();\r
                wxGetApp().m_tsize = dialog.m_tsizeCtrl->GetValue();\r
                wxGetApp().m_torigin = dialog.m_toriginCtrl->GetValue();\r
+               wxGetApp().m_progression = dialog.progressionBox->GetSelection();\r
                wxGetApp().m_enablesop = dialog.m_sopCheck->GetValue();\r
                wxGetApp().m_enableeph = dialog.m_ephCheck->GetValue();\r
+               wxGetApp().m_enablebypass = dialog.m_enablebypassCheck->GetValue();\r
+               wxGetApp().m_enablereset = dialog.m_enableresetCheck->GetValue();\r
+               wxGetApp().m_enablerestart = dialog.m_enablerestartCheck->GetValue();\r
+               wxGetApp().m_enablevsc = dialog.m_enablevscCheck->GetValue();\r
+               wxGetApp().m_enableerterm = dialog.m_enableertermCheck->GetValue();\r
+               wxGetApp().m_enablesegmark = dialog.m_enablesegmarkCheck->GetValue();\r
                wxGetApp().m_enableidx = dialog.m_enableidxCheck->GetValue();\r
                wxGetApp().m_index = dialog.m_indexCtrl->GetValue();\r
                wxGetApp().m_enablecomm = dialog.m_enablecommCheck->GetValue();\r
@@ -850,7 +952,6 @@ void OPJFrame::OnPrevFrame(wxCommandEvent& event)
        if (--wxGetApp().m_framenum < 0)\r
                wxGetApp().m_framenum = 0;\r
 \r
-       //wxLogMessage(wxT("================Go prev, dude!======================="));\r
        wxCommandEvent e;\r
        OnReload(e);\r
 }\r
@@ -859,8 +960,6 @@ void OPJFrame::OnHomeFrame(wxCommandEvent& event)
 {\r
        wxGetApp().m_framenum = 0;\r
 \r
-       //wxLogMessage(wxT("================Go home, dude!======================="));\r
-\r
        wxCommandEvent e;\r
        OnReload(e);\r
 }\r
@@ -869,7 +968,81 @@ void OPJFrame::OnNextFrame(wxCommandEvent& event)
 {\r
        ++wxGetApp().m_framenum;\r
 \r
-       //wxLogMessage(wxT("================Go next, dude!======================="));\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnLessLayers(wxCommandEvent& event)\r
+{\r
+       if (--wxGetApp().m_qualitylayers < 1)\r
+               wxGetApp().m_qualitylayers = 1;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnAllLayers(wxCommandEvent& event)\r
+{\r
+       wxGetApp().m_qualitylayers = 0;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnMoreLayers(wxCommandEvent& event)\r
+{\r
+       ++wxGetApp().m_qualitylayers;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnLessRes(wxCommandEvent& event)\r
+{\r
+       ++wxGetApp().m_reducefactor;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnFullRes(wxCommandEvent& event)\r
+{\r
+       wxGetApp().m_reducefactor = 0;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnMoreRes(wxCommandEvent& event)\r
+{\r
+       if (--wxGetApp().m_reducefactor < 0)\r
+               wxGetApp().m_reducefactor = 0;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnPrevComp(wxCommandEvent& event)\r
+{\r
+       if (--wxGetApp().m_components < 1)\r
+               wxGetApp().m_components = 1;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnAllComps(wxCommandEvent& event)\r
+{\r
+       wxGetApp().m_components = 0;\r
+\r
+       wxCommandEvent e;\r
+       OnReload(e);\r
+}\r
+\r
+void OPJFrame::OnNextComp(wxCommandEvent& event)\r
+{\r
+       ++wxGetApp().m_components;\r
+\r
        wxCommandEvent e;\r
        OnReload(e);\r
 }\r
@@ -1860,7 +2033,7 @@ void OPJMarkerTree::OnSelChanged(wxTreeEvent& event)
                                        (buffer[pre_pos] == 0x0D) ||\r
                                        (buffer[pre_pos] == 0x0B))\r
                                        buffer[pre_pos] = ' ';\r
-                               text << wxString::Format(wxT("%c."), wxChar(buffer[pre_pos]));\r
+                               text << wxString::FromAscii((char) buffer[pre_pos]) << wxT(".");\r
                        } else\r
                                text << wxT("  ");\r
                        pre_pos++;\r
@@ -2321,14 +2494,23 @@ void *OPJEncoThread::Entry()
        j2kkkhandler->m_origin = wxGetApp().m_origin;\r
        j2kkkhandler->m_rates = wxGetApp().m_rates;\r
        j2kkkhandler->m_quality = wxGetApp().m_quality;\r
+       j2kkkhandler->m_enablequality = wxGetApp().m_enablequality;\r
+       j2kkkhandler->m_multicomp = wxGetApp().m_multicomp;\r
        j2kkkhandler->m_irreversible = wxGetApp().m_irreversible;\r
        j2kkkhandler->m_resolutions = wxGetApp().m_resolutions;\r
+       j2kkkhandler->m_progression = wxGetApp().m_progression;\r
        j2kkkhandler->m_cbsize = wxGetApp().m_cbsize;\r
        j2kkkhandler->m_prsize = wxGetApp().m_prsize;\r
        j2kkkhandler->m_tsize = wxGetApp().m_tsize;\r
        j2kkkhandler->m_torigin = wxGetApp().m_torigin;\r
        j2kkkhandler->m_enablesop = wxGetApp().m_enablesop;\r
        j2kkkhandler->m_enableeph = wxGetApp().m_enableeph;\r
+       j2kkkhandler->m_enablebypass = wxGetApp().m_enablebypass;\r
+       j2kkkhandler->m_enablerestart = wxGetApp().m_enablerestart;\r
+       j2kkkhandler->m_enablereset = wxGetApp().m_enablereset;\r
+       j2kkkhandler->m_enablesegmark = wxGetApp().m_enablesegmark;\r
+       j2kkkhandler->m_enableerterm = wxGetApp().m_enableerterm;\r
+       j2kkkhandler->m_enablevsc = wxGetApp().m_enablevsc;\r
        j2kkkhandler->m_enableidx = wxGetApp().m_enableidx;\r
        j2kkkhandler->m_index = m_canvas->m_savename.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) + wxGetApp().m_index;\r
        j2kkkhandler->m_enablecomm = wxGetApp().m_enablecomm;\r
@@ -2586,1014 +2768,3 @@ void *OPJParseThread::Entry()
 \r
 \r
 \r
-// ----------------------------------------------------------------------------\r
-// OPJDecoderDialog\r
-// ----------------------------------------------------------------------------\r
-\r
-IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)\r
-\r
-BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)\r
-#ifdef USE_JPWL\r
-       EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)\r
-       EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)\r
-#endif // USE_JPWL\r
-END_EVENT_TABLE()\r
-\r
-OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)\r
-{\r
-       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
-\r
-       Create(win, wxID_ANY, wxT("Decoder settings"),\r
-               wxDefaultPosition, wxDefaultSize,\r
-               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
-               );\r
-\r
-       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
-\r
-       m_settingsNotebook = GetBookCtrl();\r
-\r
-       wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);\r
-       wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);\r
-       if (!wxGetApp().m_enabledeco)\r
-               jpeg2000Settings->Enable(false);\r
-       wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);\r
-       if (!wxGetApp().m_enabledeco)\r
-               mjpeg2000Settings->Enable(false);\r
-#ifdef USE_JPWL\r
-       wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);\r
-       if (!wxGetApp().m_enabledeco)\r
-               jpwlSettings->Enable(false);\r
-#endif // USE_JPWL\r
-\r
-       m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);\r
-       m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
-       m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);\r
-#ifdef USE_JPWL\r
-       m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
-#endif // USE_JPWL\r
-\r
-       LayoutDialog();\r
-}\r
-\r
-OPJDecoderDialog::~OPJDecoderDialog()\r
-{\r
-}\r
-\r
-wxPanel* OPJDecoderDialog::CreateMainSettingsPage(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
-               // add decoding enabling check box\r
-               subtopSizer->Add(\r
-                       m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),\r
-                       0, wxGROW | wxALL, 5);\r
-               m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);\r
-\r
-               // add parsing enabling check box\r
-               subtopSizer->Add(\r
-                       m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),\r
-                       0, wxGROW | wxALL, 5);\r
-               m_enableparseCheck->SetValue(wxGetApp().m_enableparse);\r
-\r
-                       // resize settings, column\r
-                       wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};\r
-                       m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,\r
-                               wxT("Resize method"),\r
-                               wxDefaultPosition, wxDefaultSize,\r
-                               WXSIZEOF(choices),\r
-                               choices,\r
-                               1,\r
-                               wxRA_SPECIFY_ROWS);\r
-                       m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);\r
-\r
-               subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);\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* OPJDecoderDialog::CreatePart3SettingsPage(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
-               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
-\r
-                       // frame settings, column\r
-                       wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));\r
-                       wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);\r
-\r
-                               // selected frame number, row\r
-                               wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               framenumSizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               framenumSizer->Add(\r
-                                       m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_framenum),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               1, 100000, wxGetApp().m_framenum),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                       frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);\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* OPJDecoderDialog::CreatePart1SettingsPage(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
-               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
-\r
-                       // resolutions settings, column\r
-                       wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));\r
-                       wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);\r
-\r
-                               // reduce factor sizer, row\r
-                               wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               reduceSizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               reduceSizer->Add(\r
-                                       m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,\r
-                                       wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 10000, wxGetApp().m_reducefactor),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                       resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);\r
-\r
-                       // quality layer settings, column\r
-                       wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));\r
-                       wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
-\r
-                               // quality layers sizer, row\r
-                               wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               qualitySizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               qualitySizer->Add(\r
-                                       m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 100000, wxGetApp().m_qualitylayers),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                       layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);\r
-\r
-                       // component settings, column\r
-                       wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
-                       wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
-\r
-                               // quality layers sizer, row\r
-                               wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               numcompsSizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               numcompsSizer->Add(\r
-                                       m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_components),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 100000, wxGetApp().m_components),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-                               m_numcompsCtrl->Enable(true);\r
-\r
-                       compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\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
-#ifdef USE_JPWL\r
-wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(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
-               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
-\r
-               // add JPWL enabling check box\r
-               subtopSizer->Add(\r
-                       m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),\r
-                       0, wxGROW | wxALL, 5);\r
-               m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);\r
-\r
-                       // component settings, column\r
-                       wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));\r
-                       wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);\r
-\r
-                               // expected components sizer, row\r
-                               wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               expcompsSizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               expcompsSizer->Add(\r
-                                       m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_expcomps),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               1, 100000, wxGetApp().m_expcomps),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-                               m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);\r
-\r
-                       compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);\r
-\r
-                       // tiles settings, column\r
-                       wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
-                       wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
-\r
-                               // maximum tiles sizer, row\r
-                               wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
-\r
-                               // add some horizontal space\r
-                               maxtileSizer->Add(5, 5, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               maxtileSizer->Add(\r
-                                       m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               1, 100000, wxGetApp().m_maxtiles),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
-                               m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);\r
-\r
-                       tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);\r
-\r
-               subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);\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
-void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)\r
-{\r
-       size_t pp;\r
-\r
-       if (event.IsChecked()) {\r
-               wxLogMessage(wxT("Decoding enabled"));\r
-               m_resizeBox->Enable(true);\r
-               // enable all tabs except ourselves\r
-               for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
-                       if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
-                               m_settingsNotebook->GetPage(pp)->Enable(true);\r
-               }\r
-       } else {\r
-               wxLogMessage(wxT("Decoding disabled"));\r
-               m_resizeBox->Enable(false);\r
-               // disable all tabs except ourselves\r
-               for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {\r
-                       if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))\r
-                               m_settingsNotebook->GetPage(pp)->Enable(false);\r
-               }\r
-       }\r
-\r
-}\r
-\r
-void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
-{\r
-       if (event.IsChecked()) {\r
-               wxLogMessage(wxT("JPWL enabled"));\r
-               m_expcompsCtrl->Enable(true);\r
-               m_maxtilesCtrl->Enable(true);\r
-       } else {\r
-               wxLogMessage(wxT("JPWL disabled"));\r
-               m_expcompsCtrl->Enable(false);\r
-               m_maxtilesCtrl->Enable(false);\r
-       }\r
-\r
-}\r
-\r
-#endif // USE_JPWL\r
-\r
-bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)\r
-{\r
-    /*size_t nFiles = filenames.GetCount();\r
-    wxString str;\r
-    str.Printf( _T("%d files dropped\n"), (int)nFiles);\r
-    for ( size_t n = 0; n < nFiles; n++ ) {\r
-        str << filenames[n] << wxT("\n");\r
-    }\r
-    wxLogMessage(str);*/\r
-       m_pOwner->OpenFiles(filenames, filenames);\r
-\r
-    return true;\r
-}\r
-\r
-\r
-\r
-\r
-\r
-// ----------------------------------------------------------------------------\r
-// OPJEncoderDialog\r
-// ----------------------------------------------------------------------------\r
-\r
-IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)\r
-\r
-BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)\r
-#ifdef USE_JPWL\r
-       EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)\r
-       EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)\r
-       EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)\r
-#endif // USE_JPWL\r
-END_EVENT_TABLE()\r
-\r
-OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)\r
-{\r
-       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
-\r
-       Create(win, wxID_ANY, wxT("Encoder settings"),\r
-               wxDefaultPosition, wxDefaultSize,\r
-               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
-               );\r
-\r
-       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
-\r
-       m_settingsNotebook = GetBookCtrl();\r
-\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(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
-\r
-OPJEncoderDialog::~OPJEncoderDialog()\r
-{\r
-}\r
-\r
-wxPanel* OPJEncoderDialog::CreateMainSettingsPage(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
-\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
-       // 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
-                       // image settings, column\r
-                       wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));\r
-                       wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);\r
-\r
-                               // subsampling factor sizer, row\r
-                               wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               subsSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               subsSizer->Add(\r
-                                       m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,\r
-                                                               wxGetApp().m_subsampling,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                               // origin sizer, row\r
-                               wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               imorigSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               imorigSizer->Add(\r
-                                       m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,\r
-                                                               wxGetApp().m_origin,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // layer settings, column\r
-                       wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));\r
-                       wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);\r
-\r
-                               // rate factor sizer, row\r
-                               wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               rateSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               rateSizer->Add(\r
-                                       m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,\r
-                                                               wxGetApp().m_rates,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                               // quality factor sizer, row\r
-                               wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               qualitySizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               qualitySizer->Add(\r
-                                       m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,\r
-                                                               wxGetApp().m_quality,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // wavelet settings, column\r
-                       wxStaticBox* waveletBox = new wxStaticBox(panel, wxID_ANY, wxT("Wavelet transform"));\r
-                       wxBoxSizer* waveletSizer = new wxStaticBoxSizer(waveletBox, wxVERTICAL);\r
-\r
-                       // irreversible check box\r
-                       waveletSizer->Add(\r
-                               m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible"),\r
-                               wxDefaultPosition, wxDefaultSize),\r
-                               0, wxGROW | wxALL, 3);\r
-                       m_irrevCheck->SetValue(wxGetApp().m_irreversible);\r
-\r
-                               // resolution number sizer, row\r
-                               wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               resnumSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               resnumSizer->Add(\r
-                                       m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,\r
-                                                               wxString::Format(wxT("%d"), wxGetApp().m_resolutions),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 256, 6),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       waveletSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(waveletSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // codestream settings, column\r
-                       wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));\r
-                       wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);\r
-\r
-                               // codeblock sizer, row\r
-                               wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               codeblockSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               codeblockSizer->Add(\r
-                                       m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,\r
-                                                               wxGetApp().m_cbsize,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                               // precinct sizer, row\r
-                               wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               precinctSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               precinctSizer->Add(\r
-                                       m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,\r
-                                                               wxGetApp().m_prsize,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // tile settings, column\r
-                       wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));\r
-                       wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);\r
-\r
-                               // tile size sizer, row\r
-                               wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               tilesizeSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               tilesizeSizer->Add(\r
-                                       m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,\r
-                                                               wxGetApp().m_tsize,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                               // tile origin sizer, row\r
-                               wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               tilorigSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               tilorigSizer->Add(\r
-                                       m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,\r
-                                                               wxGetApp().m_torigin,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);\r
-\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/profile"),\r
-                               wxDefaultPosition, wxDefaultSize,\r
-                               WXSIZEOF(choices),\r
-                               choices,\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
-                               // resil2 sizer, row\r
-                               wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // SOP check box\r
-                               resil2Sizer->Add(\r
-                                       m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),\r
-                                               wxDefaultPosition, wxDefaultSize),\r
-                                               0, wxGROW | wxALL, 3);\r
-                               m_sopCheck->SetValue(wxGetApp().m_enablesop);\r
-\r
-                               // EPH check box\r
-                               resil2Sizer->Add(\r
-                                       m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),\r
-                                               wxDefaultPosition, wxDefaultSize),\r
-                                               0, wxGROW | wxALL, 3);\r
-                               m_ephCheck->SetValue(wxGetApp().m_enableeph);\r
-\r
-                       resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // separation\r
-                       resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);\r
-\r
-                               // resil3 sizer, row\r
-                               wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);\r
-\r
-                               // BYPASS check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                               // RESET check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                               // RESTART check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                               // VSC check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                               // ERTERM check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                               // SEGMARK check box\r
-                               resil3Sizer->Add(\r
-                                       /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),\r
-                                       wxDefaultPosition, wxDefaultSize),\r
-                                       0, wxGROW | wxALL, 3);\r
-                               /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/\r
-\r
-                       resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // ROI settings, column\r
-                       wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));\r
-                       wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);\r
-\r
-                               // component number sizer, row\r
-                               wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               roicompSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               roicompSizer->Add(\r
-                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,\r
-                                                               wxT("0"),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 256, 0),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                               // upshift sizer, row\r
-                               wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               roishiftSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               roishiftSizer->Add(\r
-                                       /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,\r
-                                                               wxT("0"),\r
-                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
-                                                               wxSP_ARROW_KEYS,\r
-                                                               0, 37, 0),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                       roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // Index file settings, column\r
-                       wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));\r
-                       wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);\r
-\r
-                       // indexing check box\r
-                       indexSizer->Add(\r
-                               m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),\r
-                               wxDefaultPosition, wxDefaultSize),\r
-                               0, wxGROW | wxALL, 3);\r
-                       m_enableidxCheck->SetValue(wxGetApp().m_enableidx);\r
-\r
-                               // index file sizer, row\r
-                               wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);\r
-\r
-                               // add some text\r
-                               indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),\r
-                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 3);\r
-\r
-                               // add some horizontal space\r
-                               indexnameSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                               // add the value control\r
-                               indexnameSizer->Add(\r
-                                       m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,\r
-                                                               wxGetApp().m_index,\r
-                                                               wxDefaultPosition, wxSize(120, wxDefaultCoord),\r
-                                                               wxTE_LEFT),\r
-                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-                               m_indexCtrl->Enable(wxGetApp().m_enableidx);\r
-\r
-                       indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);\r
-\r
-               subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);\r
-\r
-                       // Comment settings, column\r
-                       wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));\r
-                       wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);\r
-\r
-                       // commenting check box\r
-                       commentSizer->Add(\r
-                               m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled"),\r
-                               wxDefaultPosition, wxDefaultSize),\r
-                               0, wxGROW | wxALL, 3);\r
-                       m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);\r
-\r
-                       // add some horizontal space\r
-                       commentSizer->Add(3, 3, 1, wxALL, 0);\r
-\r
-                       // add the value control\r
-                       commentSizer->Add(\r
-                               m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,\r
-                                                       wxGetApp().m_comment,\r
-                                                       wxDefaultPosition, wxSize(wxDefaultCoord, 60),\r
-                                                       wxTE_LEFT | wxTE_MULTILINE),\r
-                               0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);\r
-                       m_commentCtrl->Enable(wxGetApp().m_enablecomm);\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
-    panel->SetSizer(topSizer);\r
-    topSizer->Fit(panel);\r
-\r
-    return panel;\r
-}\r
-\r
-void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)\r
-{\r
-       if (event.IsChecked()) {\r
-               wxLogMessage(wxT("Comment enabled"));\r
-               m_commentCtrl->Enable(true);\r
-       } else {\r
-               wxLogMessage(wxT("Comment disabled"));\r
-               m_commentCtrl->Enable(false);\r
-       }\r
-\r
-}\r
-\r
-void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)\r
-{\r
-       if (event.IsChecked()) {\r
-               wxLogMessage(wxT("Index enabled"));\r
-               m_indexCtrl->Enable(true);\r
-       } else {\r
-               wxLogMessage(wxT("Index disabled"));\r
-               m_indexCtrl->Enable(false);\r
-       }\r
-}\r
-\r
-#ifdef USE_JPWL\r
-void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)\r
-{\r
-       /*if (event.IsChecked()) {\r
-               wxLogMessage(wxT("JPWL enabled"));\r
-               m_expcompsCtrl->Enable(true);\r
-               m_maxtilesCtrl->Enable(true);\r
-       } else {\r
-               wxLogMessage(wxT("JPWL disabled"));\r
-               m_expcompsCtrl->Enable(false);\r
-               m_maxtilesCtrl->Enable(false);\r
-       }*/\r
-\r
-}\r
-#endif // USE_JPWL\r
index d861fac59b5329fb08c0048a4fe6a6eb4e4d9cc7..51b6badb974e4a046eebf9e2def0796a0a05dfea 100644 (file)
@@ -206,8 +206,11 @@ class OPJViewerApp: public wxApp
                // encoding engine parameters\r
                wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality;\r
                wxString m_cbsize, m_prsize, m_tsize, m_torigin;\r
-               bool m_enablecomm, m_enableidx, m_irreversible, m_enablesop, m_enableeph;\r
-               int m_resolutions;\r
+               bool m_enablecomm, m_enableidx, m_multicomp, m_irreversible, m_enablesop, m_enableeph;\r
+               bool m_enablebypass, m_enablereset, m_enablerestart, m_enablevsc, m_enableerterm;\r
+               bool m_enablesegmark;\r
+               bool m_enablequality;\r
+               int m_resolutions, m_progression;\r
 \r
                // some layout settings\r
                bool m_showtoolbar, m_showbrowser, m_showpeeker;\r
@@ -404,6 +407,15 @@ class OPJFrame: public wxMDIParentFrame
        void OnPrevFrame(wxCommandEvent& event);\r
        void OnHomeFrame(wxCommandEvent& event);\r
        void OnNextFrame(wxCommandEvent& event);\r
+       void OnLessLayers(wxCommandEvent& event);\r
+       void OnAllLayers(wxCommandEvent& event);\r
+       void OnMoreLayers(wxCommandEvent& event);\r
+       void OnLessRes(wxCommandEvent& event);\r
+       void OnFullRes(wxCommandEvent& event);\r
+       void OnMoreRes(wxCommandEvent& event);\r
+       void OnPrevComp(wxCommandEvent& event);\r
+       void OnAllComps(wxCommandEvent& event);\r
+       void OnNextComp(wxCommandEvent& event);\r
        void OnSetsEnco(wxCommandEvent& event);\r
        void OnSetsDeco(wxCommandEvent& event);\r
        void OnSashDrag(wxSashEvent& event);\r
@@ -475,6 +487,15 @@ enum {
        OPJFRAME_VIEWPREVFRAME,\r
        OPJFRAME_VIEWHOMEFRAME,\r
        OPJFRAME_VIEWNEXTFRAME,\r
+       OPJFRAME_VIEWLESSLAYERS,\r
+       OPJFRAME_VIEWALLLAYERS,\r
+       OPJFRAME_VIEWMORELAYERS,\r
+       OPJFRAME_VIEWLESSRES,\r
+       OPJFRAME_VIEWFULLRES,\r
+       OPJFRAME_VIEWMORERES,\r
+       OPJFRAME_VIEWPREVCOMP,\r
+       OPJFRAME_VIEWALLCOMPS,\r
+       OPJFRAME_VIEWNEXTCOMP,\r
        OPJFRAME_FILECLOSE,\r
        OPJFRAME_SETSENCO,\r
        OPJFRAME_SETSDECO,\r
@@ -638,14 +659,19 @@ public:
        void OnEnableJPWL(wxCommandEvent& event);\r
        void OnEnableComm(wxCommandEvent& event);\r
        void OnEnableIdx(wxCommandEvent& event);\r
+       void OnRadioQualityRate(wxCommandEvent& event);\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
+       wxRadioButton *m_rateRadio, *m_qualityRadio;\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
+       wxRadioBox *progressionBox;\r
+       wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_mctCheck, *m_irrevCheck;\r
+       wxCheckBox *m_sopCheck, *m_ephCheck, *m_enablebypassCheck, *m_enableresetCheck,\r
+               *m_enablerestartCheck, *m_enablevscCheck, *m_enableertermCheck, *m_enablesegmarkCheck;\r
        wxCheckBox *m_enablepocCheck;\r
        wxSpinCtrl *m_resolutionsCtrl;\r
 \r
@@ -654,7 +680,9 @@ protected:
     enum {\r
                OPJENCO_ENABLEJPWL = 100,\r
                OPJENCO_RATEFACTOR,\r
+               OPJENCO_RATERADIO,\r
                OPJENCO_QUALITYFACTOR,\r
+               OPJENCO_QUALITYRADIO,\r
                OPJENCO_RESNUMBER,\r
                OPJENCO_CODEBLOCKSIZE,\r
                OPJENCO_PRECINCTSIZE,\r
@@ -674,6 +702,7 @@ protected:
                OPJENCO_ROISHIFT,\r
                OPJENCO_IMORIG,\r
                OPJENCO_TILORIG,\r
+               OPJENCO_ENABLEMCT,\r
                OPJENCO_ENABLEIRREV,\r
                OPJENCO_ENABLEINDEX,\r
                OPJENCO_INDEXNAME,\r
index f23c5e96ae9376ee5fb47effaac65b7e8f0b1f32..654179bd86fa17be0d640087408bcdf0779deb07 100644 (file)
@@ -1 +1 @@
-wxT("242") \r
+wxT("292") \r
index 85b9acd55627594e806d774907ff6f722a75c50c..143a1c0c1dd15425350d3925af1b00f2ce202fdb 100644 (file)
@@ -231,6 +231,11 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
 \r
 }\r
 \r
+#define CINEMA_24_CS 1302083   /* Codestream length for 24fps */\r
+#define CINEMA_48_CS 651041            /* Codestream length for 48fps */\r
+#define COMP_24_CS 1041666             /* Maximum size per color component for 2K & 4K @ 24fps */\r
+#define COMP_48_CS 520833              /* Maximum size per color component for 2K @ 48fps */\r
+\r
 // save the j2k codestream\r
 bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbose )\r
 {\r
@@ -267,7 +272,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo
        }\r
 \r
        /* compression rates */\r
-       if (m_rates != wxT("")) {\r
+       if ((m_rates != wxT("")) && (!m_enablequality)) {\r
                const char *s1 = m_rates.ToAscii();\r
                wxLogMessage(wxT("rates %s"), s1);\r
                while (sscanf(s1, "%f", &(parameters.tcp_rates[parameters.tcp_numlayers])) == 1) {\r
@@ -284,7 +289,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo
        }\r
 \r
        /* image quality, dB */\r
-       if (m_rates == wxT("")) {\r
+       if ((m_quality != wxT("")) && (m_enablequality)) {\r
                const char *s2 = m_quality.ToAscii();\r
                wxLogMessage(wxT("qualities %s"), s2);\r
                while (sscanf(s2, "%f", &parameters.tcp_distoratio[parameters.tcp_numlayers]) == 1) {\r
@@ -382,14 +387,103 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo
        if (m_enableeph)\r
                parameters.csty |= 0x04;\r
 \r
+       /* multiple component transform */\r
+       if (m_multicomp)\r
+               parameters.tcp_mct = 1;\r
+       else\r
+               parameters.tcp_mct = 0;\r
+\r
+       /* mode switch */\r
+       parameters.mode = (m_enablebypass ? 1 : 0) + (m_enablereset ? 2 : 0)\r
+               + (m_enablerestart ? 4 : 0) + (m_enablevsc ? 8 : 0)\r
+               + (m_enableerterm ? 16 : 0) + (m_enablesegmark ? 32 : 0);\r
+\r
+       /* progression order */\r
+       switch (m_progression) {\r
+\r
+               /* LRCP */\r
+       case 0:\r
+               parameters.prog_order = LRCP;\r
+               break;\r
+\r
+               /* RLCP */\r
+       case 1:\r
+               parameters.prog_order = RLCP;\r
+               break;\r
+\r
+               /* RPCL */\r
+       case 2:\r
+               parameters.prog_order = RPCL;\r
+               break;\r
+\r
+               /* PCRL */\r
+       case 3:\r
+               parameters.prog_order = PCRL;\r
+               break;\r
+\r
+               /* CPRL */\r
+       case 4:\r
+               parameters.prog_order = CPRL;\r
+               break;\r
+\r
+               /* DCI2K24 */\r
+       case 5:\r
+               parameters.cp_cinema = CINEMA2K_24;\r
+               parameters.cp_rsiz = CINEMA2K;\r
+               break;\r
+\r
+               /* DCI2K48 */\r
+       case 6:\r
+               parameters.cp_cinema = CINEMA2K_48;\r
+               parameters.cp_rsiz = CINEMA2K;\r
+               break;\r
+\r
+               /* DCI4K */\r
+       case 7:\r
+               parameters.cp_cinema = CINEMA4K_24;\r
+               parameters.cp_rsiz = CINEMA4K;\r
+               break;\r
+\r
+       default:\r
+               break;\r
+       }\r
+\r
+       /* check cinema */\r
+       if (parameters.cp_cinema) {\r
+\r
+               /* set up */\r
+               parameters.tile_size_on = false;\r
+               parameters.cp_tdx=1;\r
+               parameters.cp_tdy=1;\r
+               \r
+               /*Tile part*/\r
+               parameters.tp_flag = 'C';\r
+               parameters.tp_on = 1;\r
+\r
+               /*Tile and Image shall be at (0,0)*/\r
+               parameters.cp_tx0 = 0;\r
+               parameters.cp_ty0 = 0;\r
+               parameters.image_offset_x0 = 0;\r
+               parameters.image_offset_y0 = 0;\r
+\r
+               /*Codeblock size= 32*32*/\r
+               parameters.cblockw_init = 32;   \r
+               parameters.cblockh_init = 32;\r
+               parameters.csty |= 0x01;\r
 \r
+               /*The progression order shall be CPRL*/\r
+               parameters.prog_order = CPRL;\r
 \r
-       /* compression settings */\r
-       //parameters.tcp_numlayers = 1;\r
-       //parameters.tcp_rates[0] = 10.0;\r
-       //parameters.cp_disto_alloc = 1;\r
-       //parameters.irreversible = 1;\r
-       parameters.tcp_mct = 1;\r
+               /* No ROI */\r
+               parameters.roi_compno = -1;\r
+\r
+               parameters.subsampling_dx = 1;\r
+               parameters.subsampling_dy = 1;\r
+\r
+               /* 9-7 transform */\r
+               parameters.irreversible = 1;\r
+\r
+       }                               \r
 \r
        /* convert wx image into opj image */\r
        cmptparm = (opj_image_cmptparm_t*) malloc(3 * sizeof(opj_image_cmptparm_t));\r
@@ -429,6 +523,103 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo
                        oimage->comps[2].data[i] = *(value++);\r
        }\r
 \r
+       /* check cinema again */\r
+       if (parameters.cp_cinema) {\r
+               int i;\r
+               float temp_rate;\r
+               opj_poc_t *POC = NULL;\r
+\r
+               switch (parameters.cp_cinema) {\r
+\r
+               case CINEMA2K_24:\r
+               case CINEMA2K_48:\r
+                       if (parameters.numresolution > 6) {\r
+                               parameters.numresolution = 6;\r
+                       }\r
+                       if (!((oimage->comps[0].w == 2048) | (oimage->comps[0].h == 1080))) {\r
+                               wxLogWarning(wxT("Image coordinates %d x %d is not 2K compliant. JPEG Digital Cinema Profile-3 "\r
+                                       "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080"),\r
+                                       oimage->comps[0].w, oimage->comps[0].h);\r
+                               parameters.cp_rsiz = STD_RSIZ;\r
+                       }\r
+               break;\r
+               \r
+               case CINEMA4K_24:\r
+                       if (parameters.numresolution < 1) {\r
+                                       parameters.numresolution = 1;\r
+                       } else if (parameters.numresolution > 7) {\r
+                                       parameters.numresolution = 7;\r
+                       }\r
+                       if (!((oimage->comps[0].w == 4096) | (oimage->comps[0].h == 2160))) {\r
+                               wxLogWarning(wxT("Image coordinates %d x %d is not 4K compliant. JPEG Digital Cinema Profile-4" \r
+                                       "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160"),\r
+                                       oimage->comps[0].w, oimage->comps[0].h);\r
+                               parameters.cp_rsiz = STD_RSIZ;\r
+                       }\r
+                       parameters.POC[0].tile  = 1; \r
+                       parameters.POC[0].resno0  = 0; \r
+                       parameters.POC[0].compno0 = 0;\r
+                       parameters.POC[0].layno1  = 1;\r
+                       parameters.POC[0].resno1  = parameters.numresolution - 1;\r
+                       parameters.POC[0].compno1 = 3;\r
+                       parameters.POC[0].prg1 = CPRL;\r
+                       parameters.POC[1].tile  = 1;\r
+                       parameters.POC[1].resno0  = parameters.numresolution - 1; \r
+                       parameters.POC[1].compno0 = 0;\r
+                       parameters.POC[1].layno1  = 1;\r
+                       parameters.POC[1].resno1  = parameters.numresolution;\r
+                       parameters.POC[1].compno1 = 3;\r
+                       parameters.POC[1].prg1 = CPRL;\r
+                       parameters.numpocs = 2;\r
+                       break;\r
+               }\r
+\r
+               switch (parameters.cp_cinema) {\r
+               case CINEMA2K_24:\r
+               case CINEMA4K_24:\r
+                       for (i = 0 ; i < parameters.tcp_numlayers; i++) {\r
+                               temp_rate = 0;\r
+                               if (parameters.tcp_rates[i] == 0) {\r
+                                       parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                       (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                               }else{\r
+                                       temp_rate = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                               (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                                       if (temp_rate > CINEMA_24_CS ) {\r
+                                               parameters.tcp_rates[i]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                               (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                                       } else {\r
+                                               /* do nothing */\r
+                                       }\r
+                               }\r
+                       }\r
+                       parameters.max_comp_size = COMP_24_CS;\r
+                       break;\r
+                       \r
+               case CINEMA2K_48:\r
+                       for (i = 0; i < parameters.tcp_numlayers; i++) {\r
+                               temp_rate = 0 ;\r
+                               if (parameters.tcp_rates[i] == 0) {\r
+                                       parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                       (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                               }else{\r
+                                       temp_rate =((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                               (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                                       if (temp_rate > CINEMA_48_CS ){\r
+                                               parameters.tcp_rates[0]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) / \r
+                                               (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);\r
+                                       }else{\r
+                                               /* do nothing */\r
+                                       }\r
+                               }\r
+                       }\r
+                       parameters.max_comp_size = COMP_48_CS;\r
+                       break;\r
+               }\r
+\r
+               parameters.cp_disto_alloc = 1;\r
+       }\r
+       \r
        /* get a J2K compressor handle */\r
        opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);\r
 \r
@@ -480,7 +671,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo
        /* Write the index to disk */\r
        if (*indexfilename) {\r
                bSuccess = write_index_file(&cstr_info, indexfilename);\r
-               if (bSuccess) {\r
+               if (!bSuccess) {\r
                        wxLogError(wxT("Failed to output index file"));\r
                }\r
        }\r
index be1c913927b72526c04be92a0b7f4f208d905363..af70392e0d4ef5dc3efefd86454ed40fa11e3395 100644 (file)
@@ -82,8 +82,11 @@ public:
                m_origin = wxT("0,0");\r
                m_rates = wxT("20,10,5");\r
                m_quality = wxT("30,35,40");\r
+               m_enablequality = false;\r
+               m_multicomp = false;\r
                m_irreversible = false;\r
                m_resolutions = 6;\r
+               m_progression = 0;\r
                m_cbsize = wxT("32,32");\r
                m_prsize = wxT("[128,128],[128,128]");\r
                m_tsize = wxT("");\r
@@ -92,6 +95,12 @@ public:
                m_resilience*/\r
                m_enablesop = false;\r
                m_enableeph = false;\r
+               m_enablereset = false;\r
+               m_enablesegmark = false;\r
+               m_enablevsc = false;\r
+               m_enablerestart = false;\r
+               m_enableerterm = false;\r
+               m_enablebypass = false;\r
                /*m_roicompo\r
                m_roiup\r
                m_indexfname*/\r
@@ -127,8 +136,11 @@ public:
        wxString m_origin;\r
        wxString m_rates;\r
        wxString m_quality;\r
+       bool m_enablequality;\r
+       bool m_multicomp;\r
        bool m_irreversible;\r
        int m_resolutions;\r
+       int m_progression;\r
        wxString m_cbsize;\r
        wxString m_prsize;\r
        wxString m_tsize;\r
@@ -137,6 +149,12 @@ public:
        m_resilience*/\r
        bool m_enablesop;\r
        bool m_enableeph;\r
+       bool m_enablebypass;\r
+       bool m_enableerterm;\r
+       bool m_enablerestart;\r
+       bool m_enablereset;\r
+       bool m_enablesegmark;\r
+       bool m_enablevsc;\r
        /*m_roicompo\r
        m_roiup\r
        m_indexfname*/\r
index 470bd1195a20c06a4624cf077ddd59ff48ff5023..54ca14a1a5c47bc5bd42a691b662d4cf60653e61 100644 (file)
@@ -639,10 +639,11 @@ int write_index_file(opj_codestream_info_t *cstr_info, char *index) {
                }       
 
                fprintf(stream, "\nTILE %d DETAILS\n", tileno); 
-               fprintf(stream, "part_nb tileno  num_packs  start_pos end_tph_pos   end_pos\n");
+               fprintf(stream, "part_nb tileno  start_pack num_packs  start_pos end_tph_pos   end_pos\n");
                for (tilepartno = 0; tilepartno < cstr_info->tile[tileno].num_tps; tilepartno++)
-                       fprintf(stream, "%4d %9d  %9d  %9d %11d %9d\n",
+                       fprintf(stream, "%4d %9d   %9d %9d  %9d %11d %9d\n",
                                tilepartno, tileno,
+                               cstr_info->tile[tileno].tp[tilepartno].tp_start_pack,
                                cstr_info->tile[tileno].tp[tilepartno].tp_numpacks,
                                cstr_info->tile[tileno].tp[tilepartno].tp_start_pos,
                                cstr_info->tile[tileno].tp[tilepartno].tp_end_header,
@@ -824,6 +825,14 @@ int write_index_file(opj_codestream_info_t *cstr_info, char *index) {
        
        fprintf(stream, "%8e\n", cstr_info->D_max); /* SE max */
        fprintf(stream, "%.8e\n", total_disto); /* SE totale */
+/* UniPG>> */
+       /* print the markers' list */
+       fprintf(stream, "\nMARKER LIST\n");
+       fprintf(stream, "%d\n", cstr_info->marknum);
+       fprintf(stream, "type\tstart_pos    length\n");
+       for (x = 0; x < cstr_info->marknum; x++)
+               fprintf(stream, "%X\t%9d %9d\n", cstr_info->marker[x].type, cstr_info->marker[x].pos, cstr_info->marker[x].len);
+/* <<UniPG */
        fclose(stream);
 
        fprintf(stderr,"Generated index file %s\n", index);
index 73f4889e0904b296029a3d58a68e5f78d73f56fa..e41673747cd0db59a9cecbd7c13d316e83ac09f0 100644 (file)
@@ -245,6 +245,10 @@ SOURCE=..\libopenjpeg\opj_includes.h
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=..\libopenjpeg\opj_malloc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=..\libopenjpeg\pi.h\r
 # End Source File\r
 # Begin Source File\r
index 9dc17bff065af3ee8a98e6086e7ed91051fb0a12..4c4bb1053922fd35a1e094a18958eee8ca87f381 100755 (executable)
@@ -37,56 +37,47 @@ default: all
 all: OpenJPEG_JPWL JPWL_image_to_j2k JPWL_j2k_to_image\r
 \r
 dist: OpenJPEG_JPWL\r
-        install -d dist\r
-        install -m 644 $(STATICLIB) dist\r
-        install -m 755 $(SHAREDLIB) dist\r
-        ln -sf $(SHAREDLIB) dist/$(LIBNAME)\r
-        install libopenjpeg/openjpeg.h dist\r
+       install -d dist\r
+       install -m 644 $(STATICLIB) dist\r
+       install -m 755 $(SHAREDLIB) dist\r
+       ln -sf $(SHAREDLIB) dist/$(LIBNAME)\r
+       install libopenjpeg/openjpeg.h dist\r
 \r
 dos2unix:\r
-        @$(DOS2UNIX) $(SRCS) $(INCLS)\r
+       @$(DOS2UNIX) $(SRCS) $(INCLS)\r
 \r
 OpenJPEG_JPWL: $(STATICLIB) $(SHAREDLIB)\r
 \r
 JPWL_codec: JPWL_j2k_to_image JPWL_image_to_j2k $(STATICLIB)\r
 \r
 .c.o:\r
-        $(CC) $(CFLAGS) -c $< -o $@\r
+       $(CC) $(CFLAGS) -c $< -o $@\r
 \r
 $(STATICLIB): $(MODULES)\r
-        $(AR) r $@ $(MODULES)\r
+       $(AR) r $@ $(MODULES)\r
 \r
 $(SHAREDLIB): $(MODULES)\r
-        $(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES)\r
+       $(CC) -s -shared -Wl,-soname,$(LIBNAME) -o $@ $(MODULES) $(LIBRARIES)\r
 \r
 JPWL_j2k_to_image: ../codec/j2k_to_image.c\r
-        gcc $(CFLAGS) ../codec/convert.c ../codec/j2k_to_image.c -o JPWL_j2k_to_image -I ../libopenjpeg/ -L . -lopenjpeg_JPWL -lm -ltiff\r
+       gcc $(CFLAGS) ../codec/convert.c ../codec/j2k_to_image.c -o JPWL_j2k_to_image -I ../libopenjpeg/ -L . -lopenjpeg_JPWL -lm -ltiff\r
 \r
 JPWL_image_to_j2k: ../codec/image_to_j2k.c\r
-        gcc $(CFLAGS) ../codec/convert.c ../codec/image_to_j2k.c -o JPWL_image_to_j2k -I ../libopenjpeg/ -L . -lopenjpeg_JPWL -lm -ltiff\r
+       gcc $(CFLAGS) ../codec/convert.c ../codec/image_to_j2k.c -o JPWL_image_to_j2k -I ../libopenjpeg/ -L . -lopenjpeg_JPWL -lm -ltiff\r
 \r
 install: OpenJPEG\r
-        install -d '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)'\r
-        install -m 644 -o root -g root $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'\r
-        ranlib '$(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB)'\r
-        install -m 755 -o root -g root $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'\r
-        ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)'\r
-        install -m 644 -o root -g root libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)'\r
-        -ldconfig\r
+       install -d '$(DESTDIR)$(INSTALL_LIBDIR)' '$(DESTDIR)$(INSTALL_INCLUDE)'\r
+       install -m 644 -o root -g root $(STATICLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'\r
+       ranlib '$(DESTDIR)$(INSTALL_LIBDIR)/$(STATICLIB)'\r
+       install -m 755 -o root -g root $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)'\r
+       ln -sf $(SHAREDLIB) '$(DESTDIR)$(INSTALL_LIBDIR)/$(LIBNAME)'\r
+       install -m 644 -o root -g root libopenjpeg/openjpeg.h '$(DESTDIR)$(INSTALL_INCLUDE)'\r
+       -ldconfig\r
 \r
 cleanlib:\r
-        rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)\r
+       rm -rf core dist/ u2dtmp* $(MODULES) $(STATICLIB) $(SHAREDLIB) $(LIBNAME)\r
 \r
 cleancodec:\r
-        rm -f JPWL_j2k_to_image JPWL_image_to_j2k JPWL_j2k_to_image.o JPWL_image_to_j2k.o\r
+       rm -f JPWL_j2k_to_image JPWL_image_to_j2k JPWL_j2k_to_image.o JPWL_image_to_j2k.o\r
 \r
-clean: cleanlib cleancodec\r
-\r
-osx:\r
-        make -f Makefile.osx\r
-\r
-osxinstall:\r
-        make -f Makefile.osx install\r
-\r
-osxclean:\r
-        make -f Makefile.osx clean\r
+clean: cleanlib cleancodec
\ No newline at end of file
index 894e7d3fd2c7f11f345c4f9acf372d95af134d9e..5b424235b287f7dd736e1ad3de0f4926e73a7287 100644 (file)
@@ -88,22 +88,25 @@ their relevant wishlist position
 int jpwl_markcomp(const void *arg1, const void *arg2);\r
 \r
 /** write an EPB MS to a buffer\r
+@param j2k J2K compressor handle\r
 @param epbmark pointer to the EPB MS\r
 @param buf pointer to the memory buffer\r
 */\r
-void jpwl_epb_write(jpwl_epb_ms_t *epbmark, unsigned char *buf);\r
+void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epbmark, unsigned char *buf);\r
 \r
 /** write an EPC MS to a buffer\r
+@param j2k J2K compressor handle\r
 @param epcmark pointer to the EPC MS\r
 @param buf pointer to the memory buffer\r
 */\r
-void jpwl_epc_write(jpwl_epc_ms_t *epcmark, unsigned char *buf);\r
+void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epcmark, unsigned char *buf);\r
 \r
 /** write an ESD MS to a buffer\r
+@param j2k J2K compressor handle\r
 @param esdmark pointer to the ESD MS\r
 @param buf pointer to the memory buffer\r
 */\r
-void jpwl_esd_write(jpwl_esd_ms_t *esdmark, unsigned char *buf);\r
+void jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark, unsigned char *buf);\r
 \r
 /*-----------------------------------------------------------------*/\r
 \r
@@ -157,6 +160,24 @@ void jpwl_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
 \r
 }\r
 \r
+void j2k_add_marker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len) {\r
+\r
+       if (!cstr_info)\r
+               return;\r
+\r
+       /* expand the list? */\r
+       if ((cstr_info->marknum + 1) > cstr_info->maxmarknum) {\r
+               cstr_info->maxmarknum = 100 + (int) ((float) cstr_info->maxmarknum * 1.0F);\r
+               cstr_info->marker = opj_realloc(cstr_info->marker, cstr_info->maxmarknum);\r
+       }\r
+\r
+       /* add the marker */\r
+       cstr_info->marker[cstr_info->marknum].type = type;\r
+       cstr_info->marker[cstr_info->marknum].pos = pos;\r
+       cstr_info->marker[cstr_info->marknum].len = len;\r
+       cstr_info->marknum++;\r
+\r
+}\r
 \r
 void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {\r
 \r
@@ -170,7 +191,7 @@ void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
        jpwl_epc_ms_t *epc_mark;\r
        jpwl_esd_ms_t *esd_mark;\r
 \r
-       /* find SOC + SIZ length */\r
+       /* find (SOC + SIZ) length */\r
        /* I assume SIZ is always the first marker after SOC */\r
        cio_seek(cio, soc_pos + 4);\r
        socsiz_len = (unsigned short int) cio_read(cio, 2) + 4; /* add the 2 marks length itself */\r
@@ -544,7 +565,8 @@ void jpwl_prepare_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
                        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[tpno - 1].tp_numpacks) : 0;\r
+                       /*first_tp_pack = (tpno > 0) ? (first_tp_pack + j2k->cstr_info->tile[tileno].tp[tpno - 1].tp_numpacks) : 0;*/\r
+                       first_tp_pack = j2k->cstr_info->tile[tileno].tp[tpno].tp_start_pack;\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
@@ -706,7 +728,7 @@ void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
        }\r
 \r
        /* allocate a new buffer of proper size */\r
-       if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t) new_size * sizeof (unsigned char)))) {\r
+       if (!(jpwl_buf = (unsigned char *) opj_malloc((size_t) (new_size + soc_pos) * sizeof(unsigned char)))) {\r
                opj_event_msg(j2k->cinfo, EVT_ERROR, "Could not allocate room for JPWL codestream buffer\n");\r
                exit(1);\r
        };\r
@@ -736,15 +758,15 @@ void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
                switch (jwmarker[mm].id) {\r
 \r
                case J2K_MS_EPB:\r
-                       jpwl_epb_write(jwmarker[mm].epbmark, jpwl_buf);\r
+                       jpwl_epb_write(j2k, jwmarker[mm].epbmark, jpwl_buf);\r
                        break;\r
 \r
                case J2K_MS_EPC:\r
-                       jpwl_epc_write(jwmarker[mm].epcmark, jpwl_buf);\r
+                       jpwl_epc_write(j2k, jwmarker[mm].epcmark, jpwl_buf);\r
                        break;\r
 \r
                case J2K_MS_ESD:\r
-                       jpwl_esd_write(jwmarker[mm].esdmark, jpwl_buf);\r
+                       jpwl_esd_write(j2k, jwmarker[mm].esdmark, jpwl_buf);\r
                        break;\r
 \r
                case J2K_MS_RED:\r
@@ -755,6 +777,10 @@ void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
                        break;\r
                };\r
 \r
+               /* we update the markers struct */\r
+               if (j2k->cstr_info)\r
+                       j2k->cstr_info->marker[j2k->cstr_info->marknum - 1].pos = (jpwl_buf - orig_buf);\r
+               \r
                /* we set the marker dpos to the new position in the JPWL codestream */\r
                jwmarker[mm].dpos = (double) (jpwl_buf - orig_buf);\r
 \r
@@ -863,14 +889,13 @@ void jpwl_dump_marks(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image) {
 \r
        /* free original cio buffer and set it to the JPWL one */\r
        opj_free(cio->buffer);\r
-       /*cio->cinfo;*/ /* no change */\r
-       /*cio->openmode;*/ /* no change */\r
-       /*cio->buffer = jpwl_buf - new_size - soc_pos;*/\r
+       cio->cinfo = cio->cinfo; /* no change */\r
+       cio->openmode = cio->openmode; /* no change */\r
        cio->buffer = orig_buf;\r
        cio->length = new_size + soc_pos;\r
-       cio->start = jpwl_buf - new_size - soc_pos;\r
-       cio->end = jpwl_buf - 1;\r
-       cio->bp = jpwl_buf - new_size - soc_pos;\r
+       cio->start = cio->buffer;\r
+       cio->end = cio->buffer + cio->length;\r
+       cio->bp = cio->buffer;\r
        cio_seek(cio, soc_pos + new_size);\r
 \r
 }\r
@@ -982,6 +1007,10 @@ void j2k_write_epc(opj_j2k_t *j2k) {
                cio_write(cio, Pcrc, 2);\r
 \r
        cio_seek(cio, Lepcp + Lepc);\r
+\r
+       /* marker struct update */\r
+       j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, Lepcp - 2, Lepc + 2);\r
+\r
 }\r
 \r
 void j2k_read_epb(opj_j2k_t *j2k) {\r
@@ -1130,6 +1159,9 @@ void j2k_write_epb(opj_j2k_t *j2k) {
        cio_write(cio, Lepb, 2);                /* Lepb */\r
 \r
        cio_seek(cio, Lepbp + Lepb);\r
+\r
+       /* marker struct update */\r
+       j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, Lepbp - 2, Lepb + 2);\r
 }\r
 \r
 void j2k_read_esd(opj_j2k_t *j2k) {\r
index 65edce777f141cf5a2fa49b521d8006a6b30f33b..a58f2882eda834fea24420c40356e2bb84865716 100644 (file)
@@ -334,6 +334,8 @@ bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esdmark, unsigned char *buf);
 
 bool jpwl_epb_fill(opj_j2k_t *j2k, jpwl_epb_ms_t *epbmark, unsigned char *buf, unsigned char *post_buf);
 
+void j2k_add_marker(opj_codestream_info_t *cstr_info, unsigned short int type, int pos, int len);
+
 /** corrects the data in the JPWL codestream
 @param j2k J2K compressor handle
 @return true if correction is performed correctly
index 7839249c2e42fa843c8ef39231e27b41f1c30da0..5ee53603f8155186985d3e07e5507c934d018c7b 100644 (file)
@@ -295,7 +295,7 @@ jpwl_epb_ms_t *jpwl_epb_create(opj_j2k_t *j2k, bool latest, bool packed, int til
        return epb;
 }
 
-void jpwl_epb_write(jpwl_epb_ms_t *epb, unsigned char *buf) {
+void jpwl_epb_write(opj_j2k_t *j2k, jpwl_epb_ms_t *epb, unsigned char *buf) {
 
        /* Marker */
        *(buf++) = (unsigned char) (J2K_MS_EPB >> 8); 
@@ -323,6 +323,10 @@ void jpwl_epb_write(jpwl_epb_ms_t *epb, unsigned char *buf) {
        /* Data */
        /*memcpy(buf, epb->data, (size_t) epb->Lepb - 11);*/
        memset(buf, 0, (size_t) epb->Lepb - 11);
+
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_EPB, -1, epb->Lepb + 2);
+
 };
 
 
@@ -1145,7 +1149,7 @@ bool jpwl_epb_correct(opj_j2k_t *j2k, unsigned char *buffer, int type, int pre_l
        return true;
 }
 
-void jpwl_epc_write(jpwl_epc_ms_t *epc, unsigned char *buf) {
+void jpwl_epc_write(opj_j2k_t *j2k, jpwl_epc_ms_t *epc, unsigned char *buf) {
 
        /* Marker */
        *(buf++) = (unsigned char) (J2K_MS_EPC >> 8); 
@@ -1171,6 +1175,10 @@ void jpwl_epc_write(jpwl_epc_ms_t *epc, unsigned char *buf) {
        /* Data */
        /*memcpy(buf, epc->data, (size_t) epc->Lepc - 9);*/
        memset(buf, 0, (size_t) epc->Lepc - 9);
+
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_EPC, -1, epc->Lepc + 2);
+
 };
 
 int jpwl_esds_add(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int *jwmarker_num,
@@ -1561,7 +1569,7 @@ bool jpwl_esd_fill(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) {
        return true;
 }
 
-void jpwl_esd_write(jpwl_esd_ms_t *esd, unsigned char *buf) {
+void jpwl_esd_write(opj_j2k_t *j2k, jpwl_esd_ms_t *esd, unsigned char *buf) {
 
        /* Marker */
        *(buf++) = (unsigned char) (J2K_MS_ESD >> 8); 
@@ -1586,6 +1594,10 @@ void jpwl_esd_write(jpwl_esd_ms_t *esd, unsigned char *buf) {
        else
                memset(buf, 0xAA, (size_t) esd->Lesd - 5);
                /*memcpy(buf, esd->data, (size_t) esd->Lesd - 5);*/
+
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_ESD, -1, esd->Lesd + 2);
+
 }
 
 unsigned short int jpwl_double_to_pfp(double V, int bytes) {
@@ -1703,10 +1715,10 @@ bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num)
 
                /* end_pos: increment with markers before the end of this tile */
                /* code is disabled, since according to JPWL no markers can be beyond TPH */
-               /*addlen = 0;
+               addlen = 0;
                for (mm = 0; mm < jwmarker_num; mm++)
                        if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].end_pos)
-                               addlen += jwmarker[mm].len + 2;*/
+                               addlen += jwmarker[mm].len + 2;
                info->tile[tileno].end_pos += addlen;
 
                /* navigate through all the tile parts */
@@ -1740,11 +1752,19 @@ bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num)
                        
                        /* start_pos: increment with markers before the packet */
                        /* disabled for the same reason as before */
+                       addlen = 0;
+                       for (mm = 0; mm < jwmarker_num; mm++)
+                               if (jwmarker[mm].pos <= (unsigned long int) info->tile[tileno].packet[packno].start_pos)
+                                       addlen += jwmarker[mm].len + 2;
+                       info->tile[tileno].packet[packno].start_pos += addlen;
+
+                       /* end_ph_pos: increment with markers before the packet */
+                       /* disabled for the same reason as before */
                        /*addlen = 0;
                        for (mm = 0; mm < jwmarker_num; mm++)
-                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].start_pos)
+                               if (jwmarker[mm].pos < (unsigned long int) info->tile[tileno].packet[packno].end_ph_pos)
                                        addlen += jwmarker[mm].len + 2;*/
-                       info->tile[tileno].packet[packno].start_pos += addlen;
+                       info->tile[tileno].packet[packno].end_ph_pos += addlen;
 
                        /* end_pos: increment if marker is before the end of packet */
                        /* disabled for the same reason as before */
@@ -1757,6 +1777,8 @@ bool jpwl_update_info(opj_j2k_t *j2k, jpwl_marker_t *jwmarker, int jwmarker_num)
                }
        }
 
+       /* reorder the markers list */
+
        return true;
 }
 
index 114ee9ecdf73d44955ad580defa7e7eb131ca89e..dfa8286c88b6726c38b6bcd657ad677e185a26a4 100644 (file)
@@ -434,6 +434,15 @@ int j2k_calculate_tp(opj_cp_t *cp,int img_numcomp,opj_image_t *image,opj_j2k_t *
 static void j2k_write_soc(opj_j2k_t *j2k) {
        opj_cio_t *cio = j2k->cio;
        cio_write(cio, J2K_MS_SOC, 2);
+
+/* UniPG>> */
+#ifdef USE_JPWL
+
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_SOC, cio_tell(cio) - 2, 2);
+
+#endif /* USE_JPWL */
+/* <<UniPG */
 }
 
 static void j2k_read_soc(opj_j2k_t *j2k) {     
@@ -1199,7 +1208,7 @@ static void j2k_read_ppm(opj_j2k_t *j2k) {
                                                "JPWL: failed memory allocation during PPM marker parsing (pos. %x)\n",
                                                cio_tell(cio));
                                        if (!JPWL_ASSUME || JPWL_ASSUME) {
-                                               free(cp->ppm_data);
+                                               opj_free(cp->ppm_data);
                                                opj_event_msg(j2k->cinfo, EVT_ERROR, "JPWL: giving up\n");
                                                return;
                                        }
@@ -1279,6 +1288,13 @@ static void j2k_write_sot(opj_j2k_t *j2k) {
        cio_seek(cio, lenp);
        cio_write(cio, len, 2);                         /* Lsot */
        cio_seek(cio, lenp + len);
+
+       /* UniPG>> */
+#ifdef USE_JPWL
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_SOT, j2k->sot_start, len + 2);
+#endif /* USE_JPWL */
+       /* <<UniPG */
 }
 
 static void j2k_read_sot(opj_j2k_t *j2k) {
@@ -1436,6 +1452,12 @@ static void j2k_write_sod(opj_j2k_t *j2k, void *tile_coder) {
                        if(cstr_info->tile[j2k->curtileno].packet[cstr_info->packno - 1].end_pos < cio_tell(cio))
                                cstr_info->tile[j2k->curtileno].packet[cstr_info->packno].start_pos = cio_tell(cio);
                }
+               /* UniPG>> */
+#ifdef USE_JPWL
+               /* update markers struct */
+               j2k_add_marker(j2k->cstr_info, J2K_MS_SOD, j2k->sod_start, 2);
+#endif /* USE_JPWL */
+               /* <<UniPG */
        }
        /* << INDEX */
        
@@ -1557,6 +1579,13 @@ static void j2k_write_eoc(opj_j2k_t *j2k) {
        opj_cio_t *cio = j2k->cio;
        /* opj_event_msg(j2k->cinfo, "%.8x: EOC\n", cio_tell(cio) + j2k->pos_correction); */
        cio_write(cio, J2K_MS_EOC, 2);
+
+/* UniPG>> */
+#ifdef USE_JPWL
+       /* update markers struct */
+       j2k_add_marker(j2k->cstr_info, J2K_MS_EOC, cio_tell(cio) - 2, 2);
+#endif /* USE_JPWL */
+/* <<UniPG */
 }
 
 static void j2k_read_eoc(opj_j2k_t *j2k) {
@@ -2276,10 +2305,6 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
 
        opj_tcd_t *tcd = NULL;  /* TCD component */
 
-       /* UniPG>> */
-       int acc_pack_num = 0;
-       /* <<UniPG */
-
        j2k->cio = cio; 
        j2k->image = image;
 
@@ -2309,6 +2334,9 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
                }
                cstr_info->D_max = 0.0;         /* ADD Marcela */
                cstr_info->main_head_start = cio_tell(cio); /* position of SOC */
+               cstr_info->maxmarknum = 100;
+               cstr_info->marker = (opj_marker_info_t *) opj_malloc(cstr_info->maxmarknum * sizeof(opj_marker_info_t));
+               cstr_info->marknum = 0;
        }
        /* << INDEX */
 
@@ -2359,6 +2387,10 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
        for (tileno = 0; tileno < cp->tw * cp->th; tileno++) {
                int pino;
                int tilepartno=0;
+               /* UniPG>> */
+               int acc_pack_num = 0;
+               /* <<UniPG */
+
 
                opj_tcp_t *tcp = &cp->tcps[tileno];
                opj_event_msg(j2k->cinfo, EVT_INFO, "tile number %d / %d\n", tileno + 1, cp->tw * cp->th);
@@ -2418,6 +2450,8 @@ bool j2k_encode(opj_j2k_t *j2k, opj_cio_t *cio, opj_image_t *image, opj_codestre
                                if(cstr_info) {
                                        cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_end_pos =
                                                cio_tell(cio) + j2k->pos_correction - 1;
+                                       cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_start_pack =
+                                               acc_pack_num;
                                        cstr_info->tile[j2k->curtileno].tp[j2k->cur_tp_num].tp_numpacks =
                                                cstr_info->packno - acc_pack_num;
                                        acc_pack_num = cstr_info->packno;
index 356d2ca9e6a841266dca2168ff796612e8628e87..96fa0ad57e5d4e3ef9d1803d1f7c2900c9c06e71 100644 (file)
@@ -324,5 +324,6 @@ void OPJ_CALLCONV opj_destroy_cstr_info(opj_codestream_info_t *cstr_info) {
                        opj_free(tile_info->tp);
                }
                opj_free(cstr_info->tile);
+               opj_free(cstr_info->marker);
        }
 }
index b58d39f92e4f91c10feddff8a5165a84b2ba8df3..015c255411d647e910bf959820febe889ad4a803 100644 (file)
@@ -606,6 +606,8 @@ typedef struct opj_tp_info {
        int tp_end_header;
        /** end position of tile part */
        int tp_end_pos;
+       /** start packet of tile part */
+       int tp_start_pack;
        /** number of packets of tile part */
        int tp_numpacks;
 } opj_tp_info_t;
@@ -697,6 +699,8 @@ typedef struct opj_codestream_info {
        int marknum;
        /** list of markers */
        opj_marker_info_t *marker;
+       /** actual size of markers array */
+       int maxmarknum;
 /* <<UniPG */
        /** main header position */
        int main_head_start;
index dd2af757bd57c65b4e936afdbd360d3a8fe4af71..eb2845208cd0dfb195dae3063058f0e5fa4b8182 100644 (file)
@@ -271,7 +271,7 @@ int main(int argc, char *argv[]) {
   while(1)
   {
     sample = &movie->tk[0].sample[snum];
-    sprintf(j2kfilename,"%s_%05d.j2k",argv[1],snum);
+    sprintf(j2kfilename,"%05d.j2k",/*argv[1],*/snum + 7111);
     j2kfile = fopen(j2kfilename, "rb");
     if (!j2kfile) {
       if (snum==0) {  // Could not open a single codestream