! : 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
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
# 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
--- /dev/null
+/*\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
/*\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
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
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
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
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
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
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
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
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
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
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
{\r
wxGetApp().m_framenum = 0;\r
\r
- //wxLogMessage(wxT("================Go home, dude!======================="));\r
-\r
wxCommandEvent e;\r
OnReload(e);\r
}\r
{\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
(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
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
\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
// 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
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
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
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
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
OPJENCO_ROISHIFT,\r
OPJENCO_IMORIG,\r
OPJENCO_TILORIG,\r
+ OPJENCO_ENABLEMCT,\r
OPJENCO_ENABLEIRREV,\r
OPJENCO_ENABLEINDEX,\r
OPJENCO_INDEXNAME,\r
-wxT("242") \r
+wxT("292") \r
\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
}\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
}\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", ¶meters.tcp_distoratio[parameters.tcp_numlayers]) == 1) {\r
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
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
/* 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
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_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
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
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
}
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,
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);
# 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
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
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
\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
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
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
}\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
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
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
\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
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
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
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
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);
/* 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);
+
};
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);
/* 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,
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);
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) {
/* 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 */
/* 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 */
}
}
+ /* reorder the markers list */
+
return true;
}
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) {
"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;
}
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) {
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 */
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) {
opj_tcd_t *tcd = NULL; /* TCD component */
- /* UniPG>> */
- int acc_pack_num = 0;
- /* <<UniPG */
-
j2k->cio = cio;
j2k->image = image;
}
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 */
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);
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;
opj_free(tile_info->tp);
}
opj_free(cstr_info->tile);
+ opj_free(cstr_info->marker);
}
}
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;
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;
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