diff options
Diffstat (limited to 'OPJViewer/source')
| -rw-r--r-- | OPJViewer/source/OPJDialogs.cpp | 1082 | ||||
| -rw-r--r-- | OPJViewer/source/OPJViewer.cpp | 1213 | ||||
| -rw-r--r-- | OPJViewer/source/OPJViewer.h | 35 | ||||
| -rw-r--r-- | OPJViewer/source/build.h | 2 | ||||
| -rw-r--r-- | OPJViewer/source/imagj2k.cpp | 209 | ||||
| -rw-r--r-- | OPJViewer/source/imagj2k.h | 18 |
6 files changed, 1525 insertions, 1034 deletions
diff --git a/OPJViewer/source/OPJDialogs.cpp b/OPJViewer/source/OPJDialogs.cpp new file mode 100644 index 00000000..063cec8b --- /dev/null +++ b/OPJViewer/source/OPJDialogs.cpp @@ -0,0 +1,1082 @@ +/*
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "OPJViewer.h"
+
+// ----------------------------------------------------------------------------
+// OPJDecoderDialog
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)
+
+BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)
+#ifdef USE_JPWL
+ EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)
+ EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)
+#endif // USE_JPWL
+END_EVENT_TABLE()
+
+OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)
+{
+ SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
+
+ Create(win, wxID_ANY, wxT("Decoder settings"),
+ wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
+ );
+
+ CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
+
+ m_settingsNotebook = GetBookCtrl();
+
+ wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
+ wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);
+ if (!wxGetApp().m_enabledeco)
+ jpeg2000Settings->Enable(false);
+ wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);
+ if (!wxGetApp().m_enabledeco)
+ mjpeg2000Settings->Enable(false);
+#ifdef USE_JPWL
+ wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
+ if (!wxGetApp().m_enabledeco)
+ jpwlSettings->Enable(false);
+#endif // USE_JPWL
+
+ m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);
+ m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);
+ m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);
+#ifdef USE_JPWL
+ m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
+#endif // USE_JPWL
+
+ LayoutDialog();
+}
+
+OPJDecoderDialog::~OPJDecoderDialog()
+{
+}
+
+wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add decoding enabling check box
+ subtopSizer->Add(
+ m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 5);
+ m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);
+
+ // add parsing enabling check box
+ subtopSizer->Add(
+ m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 5);
+ m_enableparseCheck->SetValue(wxGetApp().m_enableparse);
+
+ // resize settings, column
+ wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};
+ m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,
+ wxT("Resize method"),
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(choices),
+ choices,
+ 1,
+ wxRA_SPECIFY_ROWS);
+ m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);
+
+ subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add some space
+ //topSizer->AddSpacer(5);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ // frame settings, column
+ wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));
+ wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);
+
+ // selected frame number, row
+ wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ framenumSizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ framenumSizer->Add(
+ m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,
+ wxString::Format(wxT("%d"), wxGetApp().m_framenum),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 1, 100000, wxGetApp().m_framenum),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+
+ frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add some space
+ //topSizer->AddSpacer(5);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ // resolutions settings, column
+ wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));
+ wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);
+
+ // reduce factor sizer, row
+ wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ reduceSizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ reduceSizer->Add(
+ m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,
+ wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 10000, wxGetApp().m_reducefactor),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+
+ resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);
+
+ // quality layer settings, column
+ wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));
+ wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
+
+ // quality layers sizer, row
+ wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ qualitySizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ qualitySizer->Add(
+ m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,
+ wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 100000, wxGetApp().m_qualitylayers),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+
+ layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);
+
+ // component settings, column
+ wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
+ wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
+
+ // quality layers sizer, row
+ wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ numcompsSizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ numcompsSizer->Add(
+ m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,
+ wxString::Format(wxT("%d"), wxGetApp().m_components),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 100000, wxGetApp().m_components),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+ m_numcompsCtrl->Enable(true);
+
+ compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+#ifdef USE_JPWL
+wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add some space
+ //topSizer->AddSpacer(5);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add JPWL enabling check box
+ subtopSizer->Add(
+ m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 5);
+ m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);
+
+ // component settings, column
+ wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
+ wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
+
+ // expected components sizer, row
+ wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ expcompsSizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ expcompsSizer->Add(
+ m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,
+ wxString::Format(wxT("%d"), wxGetApp().m_expcomps),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 1, 100000, wxGetApp().m_expcomps),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+ m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);
+
+ compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
+
+ // tiles settings, column
+ wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
+ wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
+
+ // maximum tiles sizer, row
+ wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
+
+ // add some horizontal space
+ maxtileSizer->Add(5, 5, 1, wxALL, 0);
+
+ // add the value control
+ maxtileSizer->Add(
+ m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,
+ wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 1, 100000, wxGetApp().m_maxtiles),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
+ m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);
+
+ tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);
+
+ subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)
+{
+ size_t pp;
+
+ if (event.IsChecked()) {
+ wxLogMessage(wxT("Decoding enabled"));
+ m_resizeBox->Enable(true);
+ // enable all tabs except ourselves
+ for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
+ if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
+ m_settingsNotebook->GetPage(pp)->Enable(true);
+ }
+ } else {
+ wxLogMessage(wxT("Decoding disabled"));
+ m_resizeBox->Enable(false);
+ // disable all tabs except ourselves
+ for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
+ if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
+ m_settingsNotebook->GetPage(pp)->Enable(false);
+ }
+ }
+
+}
+
+void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)
+{
+ if (event.IsChecked()) {
+ wxLogMessage(wxT("JPWL enabled"));
+ m_expcompsCtrl->Enable(true);
+ m_maxtilesCtrl->Enable(true);
+ } else {
+ wxLogMessage(wxT("JPWL disabled"));
+ m_expcompsCtrl->Enable(false);
+ m_maxtilesCtrl->Enable(false);
+ }
+
+}
+
+#endif // USE_JPWL
+
+bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
+{
+ /*size_t nFiles = filenames.GetCount();
+ wxString str;
+ str.Printf( _T("%d files dropped\n"), (int)nFiles);
+ for ( size_t n = 0; n < nFiles; n++ ) {
+ str << filenames[n] << wxT("\n");
+ }
+ wxLogMessage(str);*/
+ m_pOwner->OpenFiles(filenames, filenames);
+
+ return true;
+}
+
+
+
+
+
+// ----------------------------------------------------------------------------
+// OPJEncoderDialog
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)
+
+BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)
+#ifdef USE_JPWL
+ EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)
+ EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)
+ EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)
+ EVT_RADIOBUTTON(OPJENCO_RATERADIO, OPJEncoderDialog::OnRadioQualityRate)
+ EVT_RADIOBUTTON(OPJENCO_QUALITYRADIO, OPJEncoderDialog::OnRadioQualityRate)
+#endif // USE_JPWL
+END_EVENT_TABLE()
+
+OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)
+{
+ SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
+
+ Create(win, wxID_ANY, wxT("Encoder settings"),
+ wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
+ );
+
+ CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
+
+ m_settingsNotebook = GetBookCtrl();
+
+ wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook);
+ wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook);
+ wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
+#ifdef USE_JPWL
+ wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
+#endif // USE_JPWL
+
+ m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false);
+ m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false);
+ m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);
+#ifdef USE_JPWL
+ m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
+#endif // USE_JPWL
+
+ LayoutDialog();
+}
+
+OPJEncoderDialog::~OPJEncoderDialog()
+{
+}
+
+wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+#ifdef USE_JPWL
+wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // sub top sizer
+ wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+#endif // USE_JPWL
+
+wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add some space
+ //topSizer->AddSpacer(5);
+
+ // sub top sizer
+ wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
+
+ // image settings, column
+ wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));
+ wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);
+
+ // subsampling factor sizer, row
+ wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ subsSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ subsSizer->Add(
+ m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,
+ wxGetApp().m_subsampling,
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);
+
+ // origin sizer, row
+ wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ imorigSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ imorigSizer->Add(
+ m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,
+ wxGetApp().m_origin,
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);
+
+ // layer settings, column
+ wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));
+ wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
+
+ // rate factor sizer, row
+ wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ /*rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/
+
+ // add the radio button
+ rateSizer->Add(
+ m_rateRadio = new wxRadioButton(panel, OPJENCO_RATERADIO, wxT("&Rate values"),
+ wxDefaultPosition, wxDefaultSize,
+ wxRB_GROUP),
+ 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL
+ );
+ m_rateRadio->SetValue(!(wxGetApp().m_enablequality));
+
+ // add some horizontal space
+ rateSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ rateSizer->Add(
+ m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,
+ wxGetApp().m_rates,
+ wxDefaultPosition, wxSize(100, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+ if (wxGetApp().m_enablequality == true)
+ m_rateCtrl->Enable(false);
+
+ layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);
+
+ // quality factor sizer, row
+ wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ /*qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);*/
+
+ // add the radio button
+ qualitySizer->Add(
+ m_qualityRadio = new wxRadioButton(panel, OPJENCO_QUALITYRADIO, wxT("&Quality values"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL
+ );
+ m_qualityRadio->SetValue(wxGetApp().m_enablequality);
+
+ // add some horizontal space
+ qualitySizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ qualitySizer->Add(
+ m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,
+ wxGetApp().m_quality,
+ wxDefaultPosition, wxSize(100, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+ if (wxGetApp().m_enablequality == false)
+ m_qualityCtrl->Enable(false);
+
+ layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);
+
+ // wavelet settings, column
+ wxStaticBox* transformBox = new wxStaticBox(panel, wxID_ANY, wxT("Transforms"));
+ wxBoxSizer* transformSizer = new wxStaticBoxSizer(transformBox, wxVERTICAL);
+
+ // multiple component check box
+ transformSizer->Add(
+ m_mctCheck = new wxCheckBox(panel, OPJENCO_ENABLEMCT, wxT("Multiple component"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_mctCheck->SetValue(wxGetApp().m_multicomp);
+
+ // irreversible wavelet check box
+ transformSizer->Add(
+ m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible wavelet"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_irrevCheck->SetValue(wxGetApp().m_irreversible);
+
+ // resolution number sizer, row
+ wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ resnumSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ resnumSizer->Add(
+ m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,
+ wxString::Format(wxT("%d"), wxGetApp().m_resolutions),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 256, 6),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ transformSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(transformSizer, 0, wxGROW | wxALL, 3);
+
+ // codestream settings, column
+ wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));
+ wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);
+
+ // codeblock sizer, row
+ wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ codeblockSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ codeblockSizer->Add(
+ m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,
+ wxGetApp().m_cbsize,
+ wxDefaultPosition, wxSize(100, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);
+
+ // precinct sizer, row
+ wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ precinctSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ precinctSizer->Add(
+ m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,
+ wxGetApp().m_prsize,
+ wxDefaultPosition, wxSize(100, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);
+
+ // tile settings, column
+ wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
+ wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
+
+ // tile size sizer, row
+ wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ tilesizeSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ tilesizeSizer->Add(
+ m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,
+ wxGetApp().m_tsize,
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);
+
+ // tile origin sizer, row
+ wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ tilorigSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ tilorigSizer->Add(
+ m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,
+ wxGetApp().m_torigin,
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);
+
+ // progression and profile settings, column
+ wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"),
+ wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")};
+ progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,
+ wxT("Progression order/profile"),
+ wxDefaultPosition, wxDefaultSize,
+ WXSIZEOF(choices),
+ choices,
+ 3,
+ wxRA_SPECIFY_COLS);
+ progressionBox->SetSelection(wxGetApp().m_progression);
+
+ subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ // top sizer
+ wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
+
+ // add some space
+ //topSizer->AddSpacer(5);
+
+ // sub top sizer
+ wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
+
+ // resilience settings, column
+ wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience"));
+ wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);
+
+ // resil2 sizer, row
+ wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // SOP check box
+ resil2Sizer->Add(
+ m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_sopCheck->SetValue(wxGetApp().m_enablesop);
+
+ // EPH check box
+ resil2Sizer->Add(
+ m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_ephCheck->SetValue(wxGetApp().m_enableeph);
+
+ resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);
+
+ // separation
+ resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);
+
+ // resil3 sizer, row
+ wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);
+
+ // BYPASS check box
+ resil3Sizer->Add(
+ m_enablebypassCheck = new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablebypassCheck->SetValue(wxGetApp().m_enablebypass);
+
+ // RESET check box
+ resil3Sizer->Add(
+ m_enableresetCheck = new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enableresetCheck->SetValue(wxGetApp().m_enablereset);
+
+ // RESTART check box
+ resil3Sizer->Add(
+ m_enablerestartCheck = new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablerestartCheck->SetValue(wxGetApp().m_enablerestart);
+
+ // VSC check box
+ resil3Sizer->Add(
+ m_enablevscCheck = new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablevscCheck->SetValue(wxGetApp().m_enablevsc);
+
+ // ERTERM check box
+ resil3Sizer->Add(
+ m_enableertermCheck = new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enableertermCheck->SetValue(wxGetApp().m_enableerterm);
+
+ // SEGMARK check box
+ resil3Sizer->Add(
+ m_enablesegmarkCheck = new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablesegmarkCheck->SetValue(wxGetApp().m_enablesegmark);
+
+ resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);
+
+ // ROI settings, column
+ wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));
+ wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);
+
+ // component number sizer, row
+ wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ roicompSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ roicompSizer->Add(
+ /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,
+ wxT("0"),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 256, 0),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);
+
+ // upshift sizer, row
+ wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ roishiftSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ roishiftSizer->Add(
+ /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,
+ wxT("0"),
+ wxDefaultPosition, wxSize(80, wxDefaultCoord),
+ wxSP_ARROW_KEYS,
+ 0, 37, 0),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+
+ roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);
+
+ // Index file settings, column
+ wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));
+ wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);
+
+ // indexing check box
+ indexSizer->Add(
+ m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enableidxCheck->SetValue(wxGetApp().m_enableidx);
+
+ // index file sizer, row
+ wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ indexnameSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ indexnameSizer->Add(
+ m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,
+ wxGetApp().m_index,
+ wxDefaultPosition, wxSize(120, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+ m_indexCtrl->Enable(wxGetApp().m_enableidx);
+
+ indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);
+
+ // Comment settings, column
+ wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));
+ wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);
+
+ // commenting check box
+ commentSizer->Add(
+ m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled (empty to reset)"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);
+
+ // add some horizontal space
+ commentSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ commentSizer->Add(
+ m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,
+ wxGetApp().m_comment,
+ wxDefaultPosition, wxSize(wxDefaultCoord, 60),
+ wxTE_LEFT | wxTE_MULTILINE),
+ 0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+ m_commentCtrl->Enable(wxGetApp().m_enablecomm);
+
+ subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3);
+
+ // POC settings, column
+ wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC"));
+ wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL);
+
+ // POC check box
+ pocSizer->Add(
+ m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled"),
+ wxDefaultPosition, wxDefaultSize),
+ 0, wxGROW | wxALL, 3);
+ m_enablepocCheck->SetValue(/*wxGetApp().m_enableidx*/true);
+
+ // POC sizer, row
+ wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL);
+
+ // add some text
+ pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")),
+ 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
+
+ // add some horizontal space
+ pocspecSizer->Add(3, 3, 1, wxALL, 0);
+
+ // add the value control
+ pocspecSizer->Add(
+ m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC,
+ /*wxGetApp().m_index*/wxT("RRRR"),
+ wxDefaultPosition, wxSize(120, wxDefaultCoord),
+ wxTE_LEFT),
+ 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
+ m_pocCtrl->Enable(/*wxGetApp().m_enableidx*/true);
+
+ pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3);
+
+ subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3);
+
+ topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
+
+ // assign top and fit it
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)
+{
+ if (event.IsChecked()) {
+ wxLogMessage(wxT("Comment enabled"));
+ m_commentCtrl->Enable(true);
+ } else {
+ wxLogMessage(wxT("Comment disabled"));
+ m_commentCtrl->Enable(false);
+ }
+
+}
+
+void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)
+{
+ if (event.IsChecked()) {
+ wxLogMessage(wxT("Index enabled"));
+ m_indexCtrl->Enable(true);
+ } else {
+ wxLogMessage(wxT("Index disabled"));
+ m_indexCtrl->Enable(false);
+ }
+
+}
+
+void OPJEncoderDialog::OnRadioQualityRate(wxCommandEvent& event)
+{
+ if (event.GetId() == OPJENCO_QUALITYRADIO) {
+ wxLogMessage(wxT("Quality selected"));
+ m_rateCtrl->Enable(false);
+ m_qualityCtrl->Enable(true);
+ } else {
+ wxLogMessage(wxT("Rate selected"));
+ m_rateCtrl->Enable(true);
+ m_qualityCtrl->Enable(false);
+ }
+}
+
+#ifdef USE_JPWL
+void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)
+{
+ /*if (event.IsChecked()) {
+ wxLogMessage(wxT("JPWL enabled"));
+ m_expcompsCtrl->Enable(true);
+ m_maxtilesCtrl->Enable(true);
+ } else {
+ wxLogMessage(wxT("JPWL disabled"));
+ m_expcompsCtrl->Enable(false);
+ m_maxtilesCtrl->Enable(false);
+ }*/
+
+}
+#endif // USE_JPWL
diff --git a/OPJViewer/source/OPJViewer.cpp b/OPJViewer/source/OPJViewer.cpp index 8783386c..61668e41 100644 --- a/OPJViewer/source/OPJViewer.cpp +++ b/OPJViewer/source/OPJViewer.cpp @@ -1,5 +1,5 @@ /*
- * Copyright (c) 2007, Digital Signal Processing Laboratory, Università degli studi di Perugia (UPG), Italy
+ * Copyright (c) 2007, Digital Signal Processing Laboratory, Universita' degli studi di Perugia (UPG), Italy
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -214,10 +214,10 @@ bool OPJViewerApp::OnInit(void) OPJconfig->Read(wxT("enabledeco"), &m_enabledeco, (bool) true);
OPJconfig->Read(wxT("enableparse"), &m_enableparse, (bool) true);
OPJconfig->Read(wxT("resizemethod"), &m_resizemethod, (long) 0);
- OPJconfig->Read(wxT("reducefactor"), &m_reducefactor, (long) 0);
- OPJconfig->Read(wxT("qualitylayers"), &m_qualitylayers, (long) 0);
- OPJconfig->Read(wxT("components"), &m_components, (long) 0);
- OPJconfig->Read(wxT("framenum"), &m_framenum, (long) 0);
+ OPJconfig->Read(wxT("xxxreducefactor"), &m_reducefactor, (long) 0);
+ OPJconfig->Read(wxT("xxxqualitylayers"), &m_qualitylayers, (long) 0);
+ OPJconfig->Read(wxT("xxxcomponents"), &m_components, (long) 0);
+ OPJconfig->Read(wxT("xxxframenum"), &m_framenum, (long) 0);
#ifdef USE_JPWL
OPJconfig->Read(wxT("enablejpwl"), &m_enablejpwl, (bool) true);
OPJconfig->Read(wxT("expcomps"), &m_expcomps, (long) JPWL_EXPECTED_COMPONENTS);
@@ -241,14 +241,23 @@ bool OPJViewerApp::OnInit(void) OPJconfig->Read(wxT("origin"), &m_origin, (wxString) wxT("0,0"));
OPJconfig->Read(wxT("rates"), &m_rates, (wxString) wxT("20,10,5"));
OPJconfig->Read(wxT("quality"), &m_quality, (wxString) wxT("30,35,40"));
+ OPJconfig->Read(wxT("enablequality"), &m_enablequality, (bool) false);
+ OPJconfig->Read(wxT("multicomp"), &m_multicomp, (bool) false);
OPJconfig->Read(wxT("irreversible"), &m_irreversible, (bool) false);
OPJconfig->Read(wxT("resolutions"), &m_resolutions, (int) 6);
+ OPJconfig->Read(wxT("progression"), &m_progression, (int) 0);
OPJconfig->Read(wxT("cbsize"), &m_cbsize, (wxString) wxT("32,32"));
OPJconfig->Read(wxT("prsize"), &m_prsize, (wxString) wxT("[128,128],[128,128]"));
OPJconfig->Read(wxT("tsize"), &m_tsize, (wxString) wxT(""));
OPJconfig->Read(wxT("torigin"), &m_torigin, (wxString) wxT("0,0"));
OPJconfig->Read(wxT("enablesop"), &m_enablesop, (bool) false);
OPJconfig->Read(wxT("enableeph"), &m_enableeph, (bool) false);
+ OPJconfig->Read(wxT("enablebypass"), &m_enablebypass, (bool) false);
+ OPJconfig->Read(wxT("enablereset"), &m_enablereset, (bool) false);
+ OPJconfig->Read(wxT("enablerestart"), &m_enablerestart, (bool) false);
+ OPJconfig->Read(wxT("enablevsc"), &m_enablevsc, (bool) false);
+ OPJconfig->Read(wxT("enableerterm"), &m_enableerterm, (bool) false);
+ OPJconfig->Read(wxT("enablesegmark"), &m_enablesegmark, (bool) false);
OPJconfig->Read(wxT("enablecomm"), &m_enablecomm, (bool) true);
OPJconfig->Read(wxT("comment"), &m_comment, (wxString) wxT(""));
OPJconfig->Read(wxT("enableidx"), &m_enableidx, (bool) false);
@@ -281,14 +290,23 @@ bool OPJViewerApp::OnInit(void) m_origin = wxT("0,0");
m_rates = wxT("20,10,5");
m_quality = wxT("30,35,40");
+ m_enablequality = false;
+ m_multicomp = false;
m_irreversible = false;
m_resolutions = 6;
+ m_progression = 0;
m_cbsize= wxT("32,32");
m_prsize= wxT("[128,128],[128,128]");
m_tsize = wxT("");
m_torigin = wxT("0,0");
m_enablesop = false;
m_enableeph = false;
+ m_enablebypass = false;
+ m_enablereset = false;
+ m_enablerestart = false;
+ m_enablevsc = false;
+ m_enableerterm = false;
+ m_enablesegmark = false;
m_enableidx = false;
m_index = wxT("index.txt");
m_enablecomm = true;
@@ -369,14 +387,23 @@ int OPJViewerApp::OnExit() OPJconfig->Write(wxT("origin"), m_origin);
OPJconfig->Write(wxT("rates"), m_rates);
OPJconfig->Write(wxT("quality"), m_quality);
+ OPJconfig->Write(wxT("enablequality"), m_enablequality);
+ OPJconfig->Write(wxT("multicomp"), m_multicomp);
OPJconfig->Write(wxT("irreversible"), m_irreversible);
OPJconfig->Write(wxT("resolutions"), m_resolutions);
+ OPJconfig->Write(wxT("progression"), m_progression);
OPJconfig->Write(wxT("cbsize"), m_cbsize);
OPJconfig->Write(wxT("prsize"), m_prsize);
OPJconfig->Write(wxT("tiles"), m_tsize);
OPJconfig->Write(wxT("torigin"), m_torigin);
OPJconfig->Write(wxT("enablesop"), m_enablesop);
OPJconfig->Write(wxT("enableeph"), m_enableeph);
+ OPJconfig->Write(wxT("enablebypass"), m_enablebypass);
+ OPJconfig->Write(wxT("enablereset"), m_enablereset);
+ OPJconfig->Write(wxT("enablerestart"), m_enablerestart);
+ OPJconfig->Write(wxT("enablevsc"), m_enablevsc);
+ OPJconfig->Write(wxT("enableerterm"), m_enableerterm);
+ OPJconfig->Write(wxT("enablesegmark"), m_enablesegmark);
OPJconfig->Write(wxT("enableidx"), m_enableidx);
OPJconfig->Write(wxT("index"), m_index);
OPJconfig->Write(wxT("enablecomm"), m_enablecomm);
@@ -415,6 +442,15 @@ BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame) EVT_MENU(OPJFRAME_VIEWPREVFRAME, OPJFrame::OnPrevFrame)
EVT_MENU(OPJFRAME_VIEWHOMEFRAME, OPJFrame::OnHomeFrame)
EVT_MENU(OPJFRAME_VIEWNEXTFRAME, OPJFrame::OnNextFrame)
+ EVT_MENU(OPJFRAME_VIEWLESSLAYERS, OPJFrame::OnLessLayers)
+ EVT_MENU(OPJFRAME_VIEWALLLAYERS, OPJFrame::OnAllLayers)
+ EVT_MENU(OPJFRAME_VIEWMORELAYERS, OPJFrame::OnMoreLayers)
+ EVT_MENU(OPJFRAME_VIEWLESSRES, OPJFrame::OnLessRes)
+ EVT_MENU(OPJFRAME_VIEWFULLRES, OPJFrame::OnFullRes)
+ EVT_MENU(OPJFRAME_VIEWMORERES, OPJFrame::OnMoreRes)
+ EVT_MENU(OPJFRAME_VIEWPREVCOMP, OPJFrame::OnPrevComp)
+ EVT_MENU(OPJFRAME_VIEWALLCOMPS, OPJFrame::OnAllComps)
+ EVT_MENU(OPJFRAME_VIEWNEXTCOMP, OPJFrame::OnNextComp)
EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser)
EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker)
EVT_MENU(OPJFRAME_FILETOGGLET, OPJFrame::OnToggleToolbar)
@@ -486,6 +522,39 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, view_menu->Append(OPJFRAME_VIEWNEXTFRAME, wxT("&Next frame\tRight"));
view_menu->SetHelpString(OPJFRAME_VIEWNEXTFRAME, wxT("View next frame"));
+ view_menu->AppendSeparator();
+
+ view_menu->Append(OPJFRAME_VIEWLESSLAYERS, wxT("&Less layers\t-"));
+ view_menu->SetHelpString(OPJFRAME_VIEWLESSLAYERS, wxT("Remove a layer"));
+
+ view_menu->Append(OPJFRAME_VIEWALLLAYERS, wxT("&All layers\t0"));
+ view_menu->SetHelpString(OPJFRAME_VIEWALLLAYERS, wxT("Show all layers"));
+
+ view_menu->Append(OPJFRAME_VIEWMORELAYERS, wxT("&More layers\t+"));
+ view_menu->SetHelpString(OPJFRAME_VIEWMORELAYERS, wxT("Add a layer"));
+
+ view_menu->AppendSeparator();
+
+ view_menu->Append(OPJFRAME_VIEWLESSRES, wxT("&Less resolution\t<"));
+ view_menu->SetHelpString(OPJFRAME_VIEWLESSRES, wxT("Reduce the resolution"));
+
+ view_menu->Append(OPJFRAME_VIEWFULLRES, wxT("&Full resolution\tf"));
+ view_menu->SetHelpString(OPJFRAME_VIEWFULLRES, wxT("Full resolution"));
+
+ view_menu->Append(OPJFRAME_VIEWMORERES, wxT("&More resolution\t>"));
+ view_menu->SetHelpString(OPJFRAME_VIEWMORERES, wxT("Increase the resolution"));
+
+ view_menu->AppendSeparator();
+
+ view_menu->Append(OPJFRAME_VIEWPREVCOMP, wxT("&Prev component\tDown"));
+ view_menu->SetHelpString(OPJFRAME_VIEWPREVCOMP, wxT("View previous component"));
+
+ view_menu->Append(OPJFRAME_VIEWALLCOMPS, wxT("&All components\ta"));
+ view_menu->SetHelpString(OPJFRAME_VIEWALLCOMPS, wxT("View all components"));
+
+ view_menu->Append(OPJFRAME_VIEWNEXTCOMP, wxT("&Next component\tUp"));
+ view_menu->SetHelpString(OPJFRAME_VIEWNEXTCOMP, wxT("View next component"));
+
// settings menu and its items
wxMenu *sets_menu = new wxMenu;
@@ -539,6 +608,18 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, wxDefaultSize);
wxBitmap bmpNextframe = wxArtProvider::GetBitmap(wxART_GO_FORWARD, wxART_TOOLBAR,
wxDefaultSize);
+ wxBitmap bmpLesslayers = bmpPrevframe;
+ wxBitmap bmpAlllayers = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
+ wxDefaultSize);
+ wxBitmap bmpMorelayers = bmpNextframe;
+ wxBitmap bmpLessres = bmpPrevframe;
+ wxBitmap bmpFullres = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
+ wxDefaultSize);
+ wxBitmap bmpMoreres = bmpNextframe;
+ wxBitmap bmpPrevcomp = bmpPrevframe;
+ wxBitmap bmpAllcomps = wxArtProvider::GetBitmap(wxART_GO_TO_PARENT, wxART_TOOLBAR,
+ wxDefaultSize);
+ wxBitmap bmpNextcomp = bmpNextframe;
tool_bar->AddTool(OPJFRAME_FILEOPEN, bmpOpen, wxT("Open"));
tool_bar->AddTool(OPJFRAME_FILESAVEAS, bmpSaveAs, wxT("Save as "));
@@ -554,6 +635,18 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, tool_bar->AddTool(OPJFRAME_VIEWPREVFRAME, bmpPrevframe, wxT("Previous frame"));
tool_bar->AddTool(OPJFRAME_VIEWHOMEFRAME, bmpHomeframe, wxT("Starting frame"));
tool_bar->AddTool(OPJFRAME_VIEWNEXTFRAME, bmpNextframe, wxT("Next frame"));
+ tool_bar->AddSeparator();
+ tool_bar->AddTool(OPJFRAME_VIEWLESSLAYERS, bmpLesslayers, wxT("Remove a layer"));
+ tool_bar->AddTool(OPJFRAME_VIEWALLLAYERS, bmpAlllayers, wxT("Show all layers"));
+ tool_bar->AddTool(OPJFRAME_VIEWMORELAYERS, bmpMorelayers, wxT("Add a layer"));
+ tool_bar->AddSeparator();
+ tool_bar->AddTool(OPJFRAME_VIEWLESSRES, bmpLessres, wxT("Reduce the resolution"));
+ tool_bar->AddTool(OPJFRAME_VIEWFULLRES, bmpFullres, wxT("Full resolution"));
+ tool_bar->AddTool(OPJFRAME_VIEWMORERES, bmpMoreres, wxT("Increase the resolution"));
+ tool_bar->AddSeparator();
+ tool_bar->AddTool(OPJFRAME_VIEWPREVCOMP, bmpPrevcomp, wxT("Previous component"));
+ tool_bar->AddTool(OPJFRAME_VIEWALLCOMPS, bmpAllcomps, wxT("All components"));
+ tool_bar->AddTool(OPJFRAME_VIEWNEXTCOMP, bmpNextcomp, wxT("Next component"));
tool_bar->Realize();
// associate the toolbar with the frame
@@ -702,14 +795,23 @@ void OPJFrame::OnSetsEnco(wxCommandEvent& event) wxGetApp().m_origin = dialog.m_originCtrl->GetValue();
wxGetApp().m_rates = dialog.m_rateCtrl->GetValue();
wxGetApp().m_quality = dialog.m_qualityCtrl->GetValue();
+ wxGetApp().m_enablequality = dialog.m_qualityRadio->GetValue();
+ wxGetApp().m_multicomp = dialog.m_mctCheck->GetValue();
wxGetApp().m_irreversible = dialog.m_irrevCheck->GetValue();
wxGetApp().m_resolutions = dialog.m_resolutionsCtrl->GetValue();
wxGetApp().m_cbsize = dialog.m_cbsizeCtrl->GetValue();
wxGetApp().m_prsize = dialog.m_prsizeCtrl->GetValue();
wxGetApp().m_tsize = dialog.m_tsizeCtrl->GetValue();
wxGetApp().m_torigin = dialog.m_toriginCtrl->GetValue();
+ wxGetApp().m_progression = dialog.progressionBox->GetSelection();
wxGetApp().m_enablesop = dialog.m_sopCheck->GetValue();
wxGetApp().m_enableeph = dialog.m_ephCheck->GetValue();
+ wxGetApp().m_enablebypass = dialog.m_enablebypassCheck->GetValue();
+ wxGetApp().m_enablereset = dialog.m_enableresetCheck->GetValue();
+ wxGetApp().m_enablerestart = dialog.m_enablerestartCheck->GetValue();
+ wxGetApp().m_enablevsc = dialog.m_enablevscCheck->GetValue();
+ wxGetApp().m_enableerterm = dialog.m_enableertermCheck->GetValue();
+ wxGetApp().m_enablesegmark = dialog.m_enablesegmarkCheck->GetValue();
wxGetApp().m_enableidx = dialog.m_enableidxCheck->GetValue();
wxGetApp().m_index = dialog.m_indexCtrl->GetValue();
wxGetApp().m_enablecomm = dialog.m_enablecommCheck->GetValue();
@@ -850,7 +952,6 @@ void OPJFrame::OnPrevFrame(wxCommandEvent& event) if (--wxGetApp().m_framenum < 0)
wxGetApp().m_framenum = 0;
- //wxLogMessage(wxT("================Go prev, dude!======================="));
wxCommandEvent e;
OnReload(e);
}
@@ -859,8 +960,6 @@ void OPJFrame::OnHomeFrame(wxCommandEvent& event) {
wxGetApp().m_framenum = 0;
- //wxLogMessage(wxT("================Go home, dude!======================="));
-
wxCommandEvent e;
OnReload(e);
}
@@ -869,7 +968,81 @@ void OPJFrame::OnNextFrame(wxCommandEvent& event) {
++wxGetApp().m_framenum;
- //wxLogMessage(wxT("================Go next, dude!======================="));
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnLessLayers(wxCommandEvent& event)
+{
+ if (--wxGetApp().m_qualitylayers < 1)
+ wxGetApp().m_qualitylayers = 1;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnAllLayers(wxCommandEvent& event)
+{
+ wxGetApp().m_qualitylayers = 0;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnMoreLayers(wxCommandEvent& event)
+{
+ ++wxGetApp().m_qualitylayers;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnLessRes(wxCommandEvent& event)
+{
+ ++wxGetApp().m_reducefactor;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnFullRes(wxCommandEvent& event)
+{
+ wxGetApp().m_reducefactor = 0;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnMoreRes(wxCommandEvent& event)
+{
+ if (--wxGetApp().m_reducefactor < 0)
+ wxGetApp().m_reducefactor = 0;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnPrevComp(wxCommandEvent& event)
+{
+ if (--wxGetApp().m_components < 1)
+ wxGetApp().m_components = 1;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnAllComps(wxCommandEvent& event)
+{
+ wxGetApp().m_components = 0;
+
+ wxCommandEvent e;
+ OnReload(e);
+}
+
+void OPJFrame::OnNextComp(wxCommandEvent& event)
+{
+ ++wxGetApp().m_components;
+
wxCommandEvent e;
OnReload(e);
}
@@ -1860,7 +2033,7 @@ void OPJMarkerTree::OnSelChanged(wxTreeEvent& event) (buffer[pre_pos] == 0x0D) ||
(buffer[pre_pos] == 0x0B))
buffer[pre_pos] = ' ';
- text << wxString::Format(wxT("%c."), wxChar(buffer[pre_pos]));
+ text << wxString::FromAscii((char) buffer[pre_pos]) << wxT(".");
} else
text << wxT(" ");
pre_pos++;
@@ -2321,14 +2494,23 @@ void *OPJEncoThread::Entry() j2kkkhandler->m_origin = wxGetApp().m_origin;
j2kkkhandler->m_rates = wxGetApp().m_rates;
j2kkkhandler->m_quality = wxGetApp().m_quality;
+ j2kkkhandler->m_enablequality = wxGetApp().m_enablequality;
+ j2kkkhandler->m_multicomp = wxGetApp().m_multicomp;
j2kkkhandler->m_irreversible = wxGetApp().m_irreversible;
j2kkkhandler->m_resolutions = wxGetApp().m_resolutions;
+ j2kkkhandler->m_progression = wxGetApp().m_progression;
j2kkkhandler->m_cbsize = wxGetApp().m_cbsize;
j2kkkhandler->m_prsize = wxGetApp().m_prsize;
j2kkkhandler->m_tsize = wxGetApp().m_tsize;
j2kkkhandler->m_torigin = wxGetApp().m_torigin;
j2kkkhandler->m_enablesop = wxGetApp().m_enablesop;
j2kkkhandler->m_enableeph = wxGetApp().m_enableeph;
+ j2kkkhandler->m_enablebypass = wxGetApp().m_enablebypass;
+ j2kkkhandler->m_enablerestart = wxGetApp().m_enablerestart;
+ j2kkkhandler->m_enablereset = wxGetApp().m_enablereset;
+ j2kkkhandler->m_enablesegmark = wxGetApp().m_enablesegmark;
+ j2kkkhandler->m_enableerterm = wxGetApp().m_enableerterm;
+ j2kkkhandler->m_enablevsc = wxGetApp().m_enablevsc;
j2kkkhandler->m_enableidx = wxGetApp().m_enableidx;
j2kkkhandler->m_index = m_canvas->m_savename.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR) + wxGetApp().m_index;
j2kkkhandler->m_enablecomm = wxGetApp().m_enablecomm;
@@ -2586,1014 +2768,3 @@ void *OPJParseThread::Entry() -// ----------------------------------------------------------------------------
-// OPJDecoderDialog
-// ----------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(OPJDecoderDialog, wxPropertySheetDialog)
-
-BEGIN_EVENT_TABLE(OPJDecoderDialog, wxPropertySheetDialog)
-#ifdef USE_JPWL
- EVT_CHECKBOX(OPJDECO_ENABLEDECO, OPJDecoderDialog::OnEnableDeco)
- EVT_CHECKBOX(OPJDECO_ENABLEJPWL, OPJDecoderDialog::OnEnableJPWL)
-#endif // USE_JPWL
-END_EVENT_TABLE()
-
-OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)
-{
- SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
-
- Create(win, wxID_ANY, wxT("Decoder settings"),
- wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
- );
-
- CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
-
- m_settingsNotebook = GetBookCtrl();
-
- wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
- wxPanel* jpeg2000Settings = CreatePart1SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- jpeg2000Settings->Enable(false);
- wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- mjpeg2000Settings->Enable(false);
-#ifdef USE_JPWL
- wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
- if (!wxGetApp().m_enabledeco)
- jpwlSettings->Enable(false);
-#endif // USE_JPWL
-
- m_settingsNotebook->AddPage(mainSettings, wxT("Display"), false);
- m_settingsNotebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);
- m_settingsNotebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);
-#ifdef USE_JPWL
- m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
-#endif // USE_JPWL
-
- LayoutDialog();
-}
-
-OPJDecoderDialog::~OPJDecoderDialog()
-{
-}
-
-wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // add decoding enabling check box
- subtopSizer->Add(
- m_enabledecoCheck = new wxCheckBox(panel, OPJDECO_ENABLEDECO, wxT("Enable decoding"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);
-
- // add parsing enabling check box
- subtopSizer->Add(
- m_enableparseCheck = new wxCheckBox(panel, OPJDECO_ENABLEPARSE, wxT("Enable parsing"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enableparseCheck->SetValue(wxGetApp().m_enableparse);
-
- // resize settings, column
- wxString choices[] = {wxT("Don't resize"), wxT("Low quality"), wxT("High quality")};
- m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,
- wxT("Resize method"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(choices),
- choices,
- 1,
- wxRA_SPECIFY_ROWS);
- m_resizeBox->SetSelection(wxGetApp().m_resizemethod + 1);
-
- subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // frame settings, column
- wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));
- wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);
-
- // selected frame number, row
- wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- framenumSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- framenumSizer->Add(
- m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,
- wxString::Format(wxT("%d"), wxGetApp().m_framenum),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_framenum),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // resolutions settings, column
- wxStaticBox* resolutionBox = new wxStaticBox(panel, wxID_ANY, wxT("Resolutions"));
- wxBoxSizer* resolutionSizer = new wxStaticBoxSizer(resolutionBox, wxVERTICAL);
-
- // reduce factor sizer, row
- wxBoxSizer* reduceSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- reduceSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Reduce factor:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- reduceSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- reduceSizer->Add(
- m_reduceCtrl = new wxSpinCtrl(panel, OPJDECO_REDUCEFACTOR,
- wxString::Format(wxT("%d"), wxGetApp().m_reducefactor),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 10000, wxGetApp().m_reducefactor),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- resolutionSizer->Add(reduceSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(resolutionSizer, 0, wxGROW | wxALL, 5);
-
- // quality layer settings, column
- wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers"));
- wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
-
- // quality layers sizer, row
- wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality layers:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- qualitySizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- qualitySizer->Add(
- m_layerCtrl = new wxSpinCtrl(panel, OPJDECO_QUALITYLAYERS,
- wxString::Format(wxT("%d"), wxGetApp().m_qualitylayers),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 100000, wxGetApp().m_qualitylayers),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
-
- layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 5);
-
- // component settings, column
- wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
- wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
-
- // quality layers sizer, row
- wxBoxSizer* numcompsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- numcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component displayed:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- numcompsSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- numcompsSizer->Add(
- m_numcompsCtrl = new wxSpinCtrl(panel, OPJDECO_NUMCOMPS,
- wxString::Format(wxT("%d"), wxGetApp().m_components),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 100000, wxGetApp().m_components),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_numcompsCtrl->Enable(true);
-
- compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-#ifdef USE_JPWL
-wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- // add JPWL enabling check box
- subtopSizer->Add(
- m_enablejpwlCheck = new wxCheckBox(panel, OPJDECO_ENABLEJPWL, wxT("Enable JPWL"), wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 5);
- m_enablejpwlCheck->SetValue(wxGetApp().m_enablejpwl);
-
- // component settings, column
- wxStaticBox* compoBox = new wxStaticBox(panel, wxID_ANY, wxT("Components"));
- wxBoxSizer* compoSizer = new wxStaticBoxSizer(compoBox, wxVERTICAL);
-
- // expected components sizer, row
- wxBoxSizer* expcompsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- expcompsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Expected comps.:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- expcompsSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- expcompsSizer->Add(
- m_expcompsCtrl = new wxSpinCtrl(panel, OPJDECO_EXPCOMPS,
- wxString::Format(wxT("%d"), wxGetApp().m_expcomps),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_expcomps),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_expcompsCtrl->Enable(wxGetApp().m_enablejpwl);
-
- compoSizer->Add(expcompsSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(compoSizer, 0, wxGROW | wxALL, 5);
-
- // tiles settings, column
- wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
- wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
-
- // maximum tiles sizer, row
- wxBoxSizer* maxtileSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- maxtileSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Max. no. of tiles:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 5);
-
- // add some horizontal space
- maxtileSizer->Add(5, 5, 1, wxALL, 0);
-
- // add the value control
- maxtileSizer->Add(
- m_maxtilesCtrl = new wxSpinCtrl(panel, OPJDECO_MAXTILES,
- wxString::Format(wxT("%d"), wxGetApp().m_maxtiles),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 1, 100000, wxGetApp().m_maxtiles),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);
- m_maxtilesCtrl->Enable(wxGetApp().m_enablejpwl);
-
- tileSizer->Add(maxtileSizer, 0, wxGROW | wxALL, 5);
-
- subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 5);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-void OPJDecoderDialog::OnEnableDeco(wxCommandEvent& event)
-{
- size_t pp;
-
- if (event.IsChecked()) {
- wxLogMessage(wxT("Decoding enabled"));
- m_resizeBox->Enable(true);
- // enable all tabs except ourselves
- for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
- if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
- m_settingsNotebook->GetPage(pp)->Enable(true);
- }
- } else {
- wxLogMessage(wxT("Decoding disabled"));
- m_resizeBox->Enable(false);
- // disable all tabs except ourselves
- for (pp = 0; pp < m_settingsNotebook->GetPageCount(); pp++) {
- if (m_settingsNotebook->GetPageText(pp) != wxT("Display"))
- m_settingsNotebook->GetPage(pp)->Enable(false);
- }
- }
-
-}
-
-void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("JPWL enabled"));
- m_expcompsCtrl->Enable(true);
- m_maxtilesCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("JPWL disabled"));
- m_expcompsCtrl->Enable(false);
- m_maxtilesCtrl->Enable(false);
- }
-
-}
-
-#endif // USE_JPWL
-
-bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
-{
- /*size_t nFiles = filenames.GetCount();
- wxString str;
- str.Printf( _T("%d files dropped\n"), (int)nFiles);
- for ( size_t n = 0; n < nFiles; n++ ) {
- str << filenames[n] << wxT("\n");
- }
- wxLogMessage(str);*/
- m_pOwner->OpenFiles(filenames, filenames);
-
- return true;
-}
-
-
-
-
-
-// ----------------------------------------------------------------------------
-// OPJEncoderDialog
-// ----------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(OPJEncoderDialog, wxPropertySheetDialog)
-
-BEGIN_EVENT_TABLE(OPJEncoderDialog, wxPropertySheetDialog)
-#ifdef USE_JPWL
- EVT_CHECKBOX(OPJENCO_ENABLEJPWL, OPJEncoderDialog::OnEnableJPWL)
- EVT_CHECKBOX(OPJENCO_ENABLECOMM, OPJEncoderDialog::OnEnableComm)
- EVT_CHECKBOX(OPJENCO_ENABLEINDEX, OPJEncoderDialog::OnEnableIdx)
-#endif // USE_JPWL
-END_EVENT_TABLE()
-
-OPJEncoderDialog::OPJEncoderDialog(wxWindow* win, int dialogType)
-{
- SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
-
- Create(win, wxID_ANY, wxT("Encoder settings"),
- wxDefaultPosition, wxDefaultSize,
- wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)
- );
-
- CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));
-
- m_settingsNotebook = GetBookCtrl();
-
- wxPanel* jpeg2000_1Settings = CreatePart1_1SettingsPage(m_settingsNotebook);
- wxPanel* jpeg2000_2Settings = CreatePart1_2SettingsPage(m_settingsNotebook);
- wxPanel* mainSettings = CreateMainSettingsPage(m_settingsNotebook);
-#ifdef USE_JPWL
- wxPanel* jpwlSettings = CreatePart11SettingsPage(m_settingsNotebook);
-#endif // USE_JPWL
-
- m_settingsNotebook->AddPage(jpeg2000_1Settings, wxT("JPEG 2000 - 1"), false);
- m_settingsNotebook->AddPage(jpeg2000_2Settings, wxT("JPEG 2000 - 2"), false);
- m_settingsNotebook->AddPage(mainSettings, wxT("General"), false);
-#ifdef USE_JPWL
- m_settingsNotebook->AddPage(jpwlSettings, wxT("JPWL"), false);
-#endif // USE_JPWL
-
- LayoutDialog();
-}
-
-OPJEncoderDialog::~OPJEncoderDialog()
-{
-}
-
-wxPanel* OPJEncoderDialog::CreateMainSettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-#ifdef USE_JPWL
-wxPanel* OPJEncoderDialog::CreatePart11SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // sub top sizer
- wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-#endif // USE_JPWL
-
-wxPanel* OPJEncoderDialog::CreatePart1_1SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
-
- // image settings, column
- wxStaticBox* imageBox = new wxStaticBox(panel, wxID_ANY, wxT("Image"));
- wxBoxSizer* imageSizer = new wxStaticBoxSizer(imageBox, wxVERTICAL);
-
- // subsampling factor sizer, row
- wxBoxSizer* subsSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- subsSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Subsampling:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- subsSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- subsSizer->Add(
- m_subsamplingCtrl = new wxTextCtrl(panel, OPJENCO_SUBSAMPLING,
- wxGetApp().m_subsampling,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- imageSizer->Add(subsSizer, 0, wxGROW | wxALL, 3);
-
- // origin sizer, row
- wxBoxSizer* imorigSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- imorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- imorigSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- imorigSizer->Add(
- m_originCtrl = new wxTextCtrl(panel, OPJENCO_IMORIG,
- wxGetApp().m_origin,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- imageSizer->Add(imorigSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(imageSizer, 0, wxGROW | wxALL, 3);
-
- // layer settings, column
- wxStaticBox* layerBox = new wxStaticBox(panel, wxID_ANY, wxT("Layers/compression"));
- wxBoxSizer* layerSizer = new wxStaticBoxSizer(layerBox, wxVERTICAL);
-
- // rate factor sizer, row
- wxBoxSizer* rateSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- rateSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Rate values:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- rateSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- rateSizer->Add(
- m_rateCtrl = new wxTextCtrl(panel, OPJENCO_RATEFACTOR,
- wxGetApp().m_rates,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- layerSizer->Add(rateSizer, 0, wxGROW | wxALL, 3);
-
- // quality factor sizer, row
- wxBoxSizer* qualitySizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- qualitySizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Quality values:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- qualitySizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- qualitySizer->Add(
- m_qualityCtrl = new wxTextCtrl(panel, OPJENCO_QUALITYFACTOR,
- wxGetApp().m_quality,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- layerSizer->Add(qualitySizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(layerSizer, 0, wxGROW | wxALL, 3);
-
- // wavelet settings, column
- wxStaticBox* waveletBox = new wxStaticBox(panel, wxID_ANY, wxT("Wavelet transform"));
- wxBoxSizer* waveletSizer = new wxStaticBoxSizer(waveletBox, wxVERTICAL);
-
- // irreversible check box
- waveletSizer->Add(
- m_irrevCheck = new wxCheckBox(panel, OPJENCO_ENABLEIRREV, wxT("Irreversible"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_irrevCheck->SetValue(wxGetApp().m_irreversible);
-
- // resolution number sizer, row
- wxBoxSizer* resnumSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- resnumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Resolutions:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- resnumSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- resnumSizer->Add(
- m_resolutionsCtrl = new wxSpinCtrl(panel, OPJENCO_RESNUMBER,
- wxString::Format(wxT("%d"), wxGetApp().m_resolutions),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 256, 6),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- waveletSizer->Add(resnumSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(waveletSizer, 0, wxGROW | wxALL, 3);
-
- // codestream settings, column
- wxStaticBox* codestreamBox = new wxStaticBox(panel, wxID_ANY, wxT("Codestream"));
- wxBoxSizer* codestreamSizer = new wxStaticBoxSizer(codestreamBox, wxVERTICAL);
-
- // codeblock sizer, row
- wxBoxSizer* codeblockSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- codeblockSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Codeblocks size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- codeblockSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- codeblockSizer->Add(
- m_cbsizeCtrl = new wxTextCtrl(panel, OPJENCO_CODEBLOCKSIZE,
- wxGetApp().m_cbsize,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- codestreamSizer->Add(codeblockSizer, 0, wxGROW | wxALL, 3);
-
- // precinct sizer, row
- wxBoxSizer* precinctSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- precinctSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Precincts size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- precinctSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- precinctSizer->Add(
- m_prsizeCtrl = new wxTextCtrl(panel, OPJENCO_PRECINCTSIZE,
- wxGetApp().m_prsize,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- codestreamSizer->Add(precinctSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(codestreamSizer, 0, wxGROW | wxALL, 3);
-
- // tile settings, column
- wxStaticBox* tileBox = new wxStaticBox(panel, wxID_ANY, wxT("Tiles"));
- wxBoxSizer* tileSizer = new wxStaticBoxSizer(tileBox, wxVERTICAL);
-
- // tile size sizer, row
- wxBoxSizer* tilesizeSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- tilesizeSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Size:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- tilesizeSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilesizeSizer->Add(
- m_tsizeCtrl = new wxTextCtrl(panel, OPJENCO_TILESIZE,
- wxGetApp().m_tsize,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- tileSizer->Add(tilesizeSizer, 0, wxGROW | wxALL, 3);
-
- // tile origin sizer, row
- wxBoxSizer* tilorigSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- tilorigSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Origin:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- tilorigSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- tilorigSizer->Add(
- m_toriginCtrl = new wxTextCtrl(panel, OPJENCO_TILORIG,
- wxGetApp().m_torigin,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- tileSizer->Add(tilorigSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(tileSizer, 0, wxGROW | wxALL, 3);
-
- // progression and profile settings, column
- wxString choices[] = {wxT("LRCP"), wxT("RLCP"), wxT("RPCL"), wxT("PCRL"), wxT("CPRL"),
- wxT("DCI2K24"), wxT("DCI2K48"), wxT("DCI4K")};
- wxRadioBox *progressionBox = new wxRadioBox(panel, OPJENCO_PROGRESSION,
- wxT("Progression order/profile"),
- wxDefaultPosition, wxDefaultSize,
- WXSIZEOF(choices),
- choices,
- 3,
- wxRA_SPECIFY_COLS);
- progressionBox->SetSelection(0);
-
- subtopSizer->Add(progressionBox, 0, wxGROW | wxALL, 3);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-wxPanel* OPJEncoderDialog::CreatePart1_2SettingsPage(wxWindow* parent)
-{
- wxPanel* panel = new wxPanel(parent, wxID_ANY);
-
- // top sizer
- wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
-
- // add some space
- //topSizer->AddSpacer(5);
-
- // sub top sizer
- wxFlexGridSizer *subtopSizer = new wxFlexGridSizer(2, 3, 3);
-
- // resilience settings, column
- wxStaticBox* resilBox = new wxStaticBox(panel, wxID_ANY, wxT("Error resilience"));
- wxBoxSizer* resilSizer = new wxStaticBoxSizer(resilBox, wxVERTICAL);
-
- // resil2 sizer, row
- wxBoxSizer* resil2Sizer = new wxBoxSizer(wxHORIZONTAL);
-
- // SOP check box
- resil2Sizer->Add(
- m_sopCheck = new wxCheckBox(panel, OPJENCO_ENABLESOP, wxT("SOP"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_sopCheck->SetValue(wxGetApp().m_enablesop);
-
- // EPH check box
- resil2Sizer->Add(
- m_ephCheck = new wxCheckBox(panel, OPJENCO_ENABLEEPH, wxT("EPH"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_ephCheck->SetValue(wxGetApp().m_enableeph);
-
- resilSizer->Add(resil2Sizer, 0, wxGROW | wxALL, 3);
-
- // separation
- resilSizer->Add(new wxStaticLine(panel, wxID_ANY), 0, wxEXPAND | wxLEFT | wxRIGHT, 3);
-
- // resil3 sizer, row
- wxFlexGridSizer* resil3Sizer = new wxFlexGridSizer(3, 3, 3);
-
- // BYPASS check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEBYPASS, wxT("BYPASS"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- // RESET check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESET, wxT("RESET"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- // RESTART check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLERESTART, wxT("RESTART"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- // VSC check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEVSC, wxT("VSC"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- // ERTERM check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLEERTERM, wxT("ERTERM"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- // SEGMARK check box
- resil3Sizer->Add(
- /*m_enabledecoCheck =*/ new wxCheckBox(panel, OPJENCO_ENABLESEGMARK, wxT("SEGMARK"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- /*m_enabledecoCheck->SetValue(wxGetApp().m_enabledeco);*/
-
- resilSizer->Add(resil3Sizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(resilSizer, 0, wxGROW | wxALL, 3);
-
- // ROI settings, column
- wxStaticBox* roiBox = new wxStaticBox(panel, wxID_ANY, wxT("Region Of Interest"));
- wxBoxSizer* roiSizer = new wxStaticBoxSizer(roiBox, wxVERTICAL);
-
- // component number sizer, row
- wxBoxSizer* roicompSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- roicompSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Component:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- roicompSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- roicompSizer->Add(
- /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROICOMP,
- wxT("0"),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 256, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- roiSizer->Add(roicompSizer, 0, wxGROW | wxALL, 3);
-
- // upshift sizer, row
- wxBoxSizer* roishiftSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- roishiftSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Upshift:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- roishiftSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- roishiftSizer->Add(
- /*m_layerCtrl =*/ new wxSpinCtrl(panel, OPJENCO_ROISHIFT,
- wxT("0"),
- wxDefaultPosition, wxSize(80, wxDefaultCoord),
- wxSP_ARROW_KEYS,
- 0, 37, 0),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
-
- roiSizer->Add(roishiftSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(roiSizer, 0, wxGROW | wxALL, 3);
-
- // Index file settings, column
- wxStaticBox* indexBox = new wxStaticBox(panel, wxID_ANY, wxT("Indexing"));
- wxBoxSizer* indexSizer = new wxStaticBoxSizer(indexBox, wxVERTICAL);
-
- // indexing check box
- indexSizer->Add(
- m_enableidxCheck = new wxCheckBox(panel, OPJENCO_ENABLEINDEX, wxT("Enabled"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enableidxCheck->SetValue(wxGetApp().m_enableidx);
-
- // index file sizer, row
- wxBoxSizer* indexnameSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- indexnameSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&File name:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- indexnameSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- indexnameSizer->Add(
- m_indexCtrl = new wxTextCtrl(panel, OPJENCO_INDEXNAME,
- wxGetApp().m_index,
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_indexCtrl->Enable(wxGetApp().m_enableidx);
-
- indexSizer->Add(indexnameSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(indexSizer, 0, wxGROW | wxALL, 3);
-
- // Comment settings, column
- wxStaticBox* commentBox = new wxStaticBox(panel, wxID_ANY, wxT("Comment"));
- wxBoxSizer* commentSizer = new wxStaticBoxSizer(commentBox, wxVERTICAL);
-
- // commenting check box
- commentSizer->Add(
- m_enablecommCheck = new wxCheckBox(panel, OPJENCO_ENABLECOMM, wxT("Enabled"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablecommCheck->SetValue(wxGetApp().m_enablecomm);
-
- // add some horizontal space
- commentSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- commentSizer->Add(
- m_commentCtrl = new wxTextCtrl(panel, OPJENCO_COMMENTTEXT,
- wxGetApp().m_comment,
- wxDefaultPosition, wxSize(wxDefaultCoord, 60),
- wxTE_LEFT | wxTE_MULTILINE),
- 0, wxGROW | wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_commentCtrl->Enable(wxGetApp().m_enablecomm);
-
- subtopSizer->Add(commentSizer, 0, wxGROW | wxALL, 3);
-
- // POC settings, column
- wxStaticBox* pocBox = new wxStaticBox(panel, wxID_ANY, wxT("POC"));
- wxBoxSizer* pocSizer = new wxStaticBoxSizer(pocBox, wxVERTICAL);
-
- // POC check box
- pocSizer->Add(
- m_enablepocCheck = new wxCheckBox(panel, OPJENCO_ENABLEPOC, wxT("Enabled"),
- wxDefaultPosition, wxDefaultSize),
- 0, wxGROW | wxALL, 3);
- m_enablepocCheck->SetValue(/*wxGetApp().m_enableidx*/true);
-
- // POC sizer, row
- wxBoxSizer* pocspecSizer = new wxBoxSizer(wxHORIZONTAL);
-
- // add some text
- pocspecSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Changes:")),
- 0, wxALL | wxALIGN_CENTER_VERTICAL, 3);
-
- // add some horizontal space
- pocspecSizer->Add(3, 3, 1, wxALL, 0);
-
- // add the value control
- pocspecSizer->Add(
- m_pocCtrl = new wxTextCtrl(panel, OPJENCO_POCSPEC,
- /*wxGetApp().m_index*/wxT("RRRR"),
- wxDefaultPosition, wxSize(120, wxDefaultCoord),
- wxTE_LEFT),
- 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 3);
- m_pocCtrl->Enable(/*wxGetApp().m_enableidx*/true);
-
- pocSizer->Add(pocspecSizer, 0, wxGROW | wxALL, 3);
-
- subtopSizer->Add(pocSizer, 0, wxGROW | wxALL, 3);
-
- topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);
-
- // assign top and fit it
- panel->SetSizer(topSizer);
- topSizer->Fit(panel);
-
- return panel;
-}
-
-void OPJEncoderDialog::OnEnableComm(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("Comment enabled"));
- m_commentCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("Comment disabled"));
- m_commentCtrl->Enable(false);
- }
-
-}
-
-void OPJEncoderDialog::OnEnableIdx(wxCommandEvent& event)
-{
- if (event.IsChecked()) {
- wxLogMessage(wxT("Index enabled"));
- m_indexCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("Index disabled"));
- m_indexCtrl->Enable(false);
- }
-}
-
-#ifdef USE_JPWL
-void OPJEncoderDialog::OnEnableJPWL(wxCommandEvent& event)
-{
- /*if (event.IsChecked()) {
- wxLogMessage(wxT("JPWL enabled"));
- m_expcompsCtrl->Enable(true);
- m_maxtilesCtrl->Enable(true);
- } else {
- wxLogMessage(wxT("JPWL disabled"));
- m_expcompsCtrl->Enable(false);
- m_maxtilesCtrl->Enable(false);
- }*/
-
-}
-#endif // USE_JPWL
diff --git a/OPJViewer/source/OPJViewer.h b/OPJViewer/source/OPJViewer.h index d861fac5..51b6badb 100644 --- a/OPJViewer/source/OPJViewer.h +++ b/OPJViewer/source/OPJViewer.h @@ -206,8 +206,11 @@ class OPJViewerApp: public wxApp // encoding engine parameters
wxString m_subsampling, m_origin, m_rates, m_comment, m_index, m_quality;
wxString m_cbsize, m_prsize, m_tsize, m_torigin;
- bool m_enablecomm, m_enableidx, m_irreversible, m_enablesop, m_enableeph;
- int m_resolutions;
+ bool m_enablecomm, m_enableidx, m_multicomp, m_irreversible, m_enablesop, m_enableeph;
+ bool m_enablebypass, m_enablereset, m_enablerestart, m_enablevsc, m_enableerterm;
+ bool m_enablesegmark;
+ bool m_enablequality;
+ int m_resolutions, m_progression;
// some layout settings
bool m_showtoolbar, m_showbrowser, m_showpeeker;
@@ -404,6 +407,15 @@ class OPJFrame: public wxMDIParentFrame void OnPrevFrame(wxCommandEvent& event);
void OnHomeFrame(wxCommandEvent& event);
void OnNextFrame(wxCommandEvent& event);
+ void OnLessLayers(wxCommandEvent& event);
+ void OnAllLayers(wxCommandEvent& event);
+ void OnMoreLayers(wxCommandEvent& event);
+ void OnLessRes(wxCommandEvent& event);
+ void OnFullRes(wxCommandEvent& event);
+ void OnMoreRes(wxCommandEvent& event);
+ void OnPrevComp(wxCommandEvent& event);
+ void OnAllComps(wxCommandEvent& event);
+ void OnNextComp(wxCommandEvent& event);
void OnSetsEnco(wxCommandEvent& event);
void OnSetsDeco(wxCommandEvent& event);
void OnSashDrag(wxSashEvent& event);
@@ -475,6 +487,15 @@ enum { OPJFRAME_VIEWPREVFRAME,
OPJFRAME_VIEWHOMEFRAME,
OPJFRAME_VIEWNEXTFRAME,
+ OPJFRAME_VIEWLESSLAYERS,
+ OPJFRAME_VIEWALLLAYERS,
+ OPJFRAME_VIEWMORELAYERS,
+ OPJFRAME_VIEWLESSRES,
+ OPJFRAME_VIEWFULLRES,
+ OPJFRAME_VIEWMORERES,
+ OPJFRAME_VIEWPREVCOMP,
+ OPJFRAME_VIEWALLCOMPS,
+ OPJFRAME_VIEWNEXTCOMP,
OPJFRAME_FILECLOSE,
OPJFRAME_SETSENCO,
OPJFRAME_SETSDECO,
@@ -638,14 +659,19 @@ public: void OnEnableJPWL(wxCommandEvent& event);
void OnEnableComm(wxCommandEvent& event);
void OnEnableIdx(wxCommandEvent& event);
+ void OnRadioQualityRate(wxCommandEvent& event);
wxPanel* CreatePart11SettingsPage(wxWindow* parent);
/*wxCheckBox *m_enablejpwlCheck;*/
#endif // USE_JPWL
wxTextCtrl *m_subsamplingCtrl, *m_originCtrl, *m_rateCtrl, *m_commentCtrl;
+ wxRadioButton *m_rateRadio, *m_qualityRadio;
wxTextCtrl *m_indexCtrl, *m_qualityCtrl, *m_cbsizeCtrl, *m_prsizeCtrl, *m_pocCtrl;
wxTextCtrl *m_tsizeCtrl, *m_toriginCtrl;
- wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_irrevCheck, *m_sopCheck, *m_ephCheck;
+ wxRadioBox *progressionBox;
+ wxCheckBox *m_enablecommCheck, *m_enableidxCheck, *m_mctCheck, *m_irrevCheck;
+ wxCheckBox *m_sopCheck, *m_ephCheck, *m_enablebypassCheck, *m_enableresetCheck,
+ *m_enablerestartCheck, *m_enablevscCheck, *m_enableertermCheck, *m_enablesegmarkCheck;
wxCheckBox *m_enablepocCheck;
wxSpinCtrl *m_resolutionsCtrl;
@@ -654,7 +680,9 @@ protected: enum {
OPJENCO_ENABLEJPWL = 100,
OPJENCO_RATEFACTOR,
+ OPJENCO_RATERADIO,
OPJENCO_QUALITYFACTOR,
+ OPJENCO_QUALITYRADIO,
OPJENCO_RESNUMBER,
OPJENCO_CODEBLOCKSIZE,
OPJENCO_PRECINCTSIZE,
@@ -674,6 +702,7 @@ protected: OPJENCO_ROISHIFT,
OPJENCO_IMORIG,
OPJENCO_TILORIG,
+ OPJENCO_ENABLEMCT,
OPJENCO_ENABLEIRREV,
OPJENCO_ENABLEINDEX,
OPJENCO_INDEXNAME,
diff --git a/OPJViewer/source/build.h b/OPJViewer/source/build.h index f23c5e96..654179bd 100644 --- a/OPJViewer/source/build.h +++ b/OPJViewer/source/build.h @@ -1 +1 @@ -wxT("242")
+wxT("292")
diff --git a/OPJViewer/source/imagj2k.cpp b/OPJViewer/source/imagj2k.cpp index 85b9acd5..143a1c0c 100644 --- a/OPJViewer/source/imagj2k.cpp +++ b/OPJViewer/source/imagj2k.cpp @@ -231,6 +231,11 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose, }
+#define CINEMA_24_CS 1302083 /* Codestream length for 24fps */
+#define CINEMA_48_CS 651041 /* Codestream length for 48fps */
+#define COMP_24_CS 1041666 /* Maximum size per color component for 2K & 4K @ 24fps */
+#define COMP_48_CS 520833 /* Maximum size per color component for 2K @ 48fps */
+
// save the j2k codestream
bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbose )
{
@@ -267,7 +272,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo }
/* compression rates */
- if (m_rates != wxT("")) {
+ if ((m_rates != wxT("")) && (!m_enablequality)) {
const char *s1 = m_rates.ToAscii();
wxLogMessage(wxT("rates %s"), s1);
while (sscanf(s1, "%f", &(parameters.tcp_rates[parameters.tcp_numlayers])) == 1) {
@@ -284,7 +289,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo }
/* image quality, dB */
- if (m_rates == wxT("")) {
+ if ((m_quality != wxT("")) && (m_enablequality)) {
const char *s2 = m_quality.ToAscii();
wxLogMessage(wxT("qualities %s"), s2);
while (sscanf(s2, "%f", ¶meters.tcp_distoratio[parameters.tcp_numlayers]) == 1) {
@@ -382,14 +387,103 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo if (m_enableeph)
parameters.csty |= 0x04;
+ /* multiple component transform */
+ if (m_multicomp)
+ parameters.tcp_mct = 1;
+ else
+ parameters.tcp_mct = 0;
+
+ /* mode switch */
+ parameters.mode = (m_enablebypass ? 1 : 0) + (m_enablereset ? 2 : 0)
+ + (m_enablerestart ? 4 : 0) + (m_enablevsc ? 8 : 0)
+ + (m_enableerterm ? 16 : 0) + (m_enablesegmark ? 32 : 0);
+
+ /* progression order */
+ switch (m_progression) {
+
+ /* LRCP */
+ case 0:
+ parameters.prog_order = LRCP;
+ break;
+
+ /* RLCP */
+ case 1:
+ parameters.prog_order = RLCP;
+ break;
+
+ /* RPCL */
+ case 2:
+ parameters.prog_order = RPCL;
+ break;
+
+ /* PCRL */
+ case 3:
+ parameters.prog_order = PCRL;
+ break;
+
+ /* CPRL */
+ case 4:
+ parameters.prog_order = CPRL;
+ break;
+
+ /* DCI2K24 */
+ case 5:
+ parameters.cp_cinema = CINEMA2K_24;
+ parameters.cp_rsiz = CINEMA2K;
+ break;
+
+ /* DCI2K48 */
+ case 6:
+ parameters.cp_cinema = CINEMA2K_48;
+ parameters.cp_rsiz = CINEMA2K;
+ break;
+
+ /* DCI4K */
+ case 7:
+ parameters.cp_cinema = CINEMA4K_24;
+ parameters.cp_rsiz = CINEMA4K;
+ break;
+
+ default:
+ break;
+ }
+
+ /* check cinema */
+ if (parameters.cp_cinema) {
+
+ /* set up */
+ parameters.tile_size_on = false;
+ parameters.cp_tdx=1;
+ parameters.cp_tdy=1;
+
+ /*Tile part*/
+ parameters.tp_flag = 'C';
+ parameters.tp_on = 1;
+
+ /*Tile and Image shall be at (0,0)*/
+ parameters.cp_tx0 = 0;
+ parameters.cp_ty0 = 0;
+ parameters.image_offset_x0 = 0;
+ parameters.image_offset_y0 = 0;
+
+ /*Codeblock size= 32*32*/
+ parameters.cblockw_init = 32;
+ parameters.cblockh_init = 32;
+ parameters.csty |= 0x01;
+ /*The progression order shall be CPRL*/
+ parameters.prog_order = CPRL;
- /* compression settings */
- //parameters.tcp_numlayers = 1;
- //parameters.tcp_rates[0] = 10.0;
- //parameters.cp_disto_alloc = 1;
- //parameters.irreversible = 1;
- parameters.tcp_mct = 1;
+ /* No ROI */
+ parameters.roi_compno = -1;
+
+ parameters.subsampling_dx = 1;
+ parameters.subsampling_dy = 1;
+
+ /* 9-7 transform */
+ parameters.irreversible = 1;
+
+ }
/* convert wx image into opj image */
cmptparm = (opj_image_cmptparm_t*) malloc(3 * sizeof(opj_image_cmptparm_t));
@@ -429,6 +523,103 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo oimage->comps[2].data[i] = *(value++);
}
+ /* check cinema again */
+ if (parameters.cp_cinema) {
+ int i;
+ float temp_rate;
+ opj_poc_t *POC = NULL;
+
+ switch (parameters.cp_cinema) {
+
+ case CINEMA2K_24:
+ case CINEMA2K_48:
+ if (parameters.numresolution > 6) {
+ parameters.numresolution = 6;
+ }
+ if (!((oimage->comps[0].w == 2048) | (oimage->comps[0].h == 1080))) {
+ wxLogWarning(wxT("Image coordinates %d x %d is not 2K compliant. JPEG Digital Cinema Profile-3 "
+ "(2K profile) compliance requires that at least one of coordinates match 2048 x 1080"),
+ oimage->comps[0].w, oimage->comps[0].h);
+ parameters.cp_rsiz = STD_RSIZ;
+ }
+ break;
+
+ case CINEMA4K_24:
+ if (parameters.numresolution < 1) {
+ parameters.numresolution = 1;
+ } else if (parameters.numresolution > 7) {
+ parameters.numresolution = 7;
+ }
+ if (!((oimage->comps[0].w == 4096) | (oimage->comps[0].h == 2160))) {
+ wxLogWarning(wxT("Image coordinates %d x %d is not 4K compliant. JPEG Digital Cinema Profile-4"
+ "(4K profile) compliance requires that at least one of coordinates match 4096 x 2160"),
+ oimage->comps[0].w, oimage->comps[0].h);
+ parameters.cp_rsiz = STD_RSIZ;
+ }
+ parameters.POC[0].tile = 1;
+ parameters.POC[0].resno0 = 0;
+ parameters.POC[0].compno0 = 0;
+ parameters.POC[0].layno1 = 1;
+ parameters.POC[0].resno1 = parameters.numresolution - 1;
+ parameters.POC[0].compno1 = 3;
+ parameters.POC[0].prg1 = CPRL;
+ parameters.POC[1].tile = 1;
+ parameters.POC[1].resno0 = parameters.numresolution - 1;
+ parameters.POC[1].compno0 = 0;
+ parameters.POC[1].layno1 = 1;
+ parameters.POC[1].resno1 = parameters.numresolution;
+ parameters.POC[1].compno1 = 3;
+ parameters.POC[1].prg1 = CPRL;
+ parameters.numpocs = 2;
+ break;
+ }
+
+ switch (parameters.cp_cinema) {
+ case CINEMA2K_24:
+ case CINEMA4K_24:
+ for (i = 0 ; i < parameters.tcp_numlayers; i++) {
+ temp_rate = 0;
+ if (parameters.tcp_rates[i] == 0) {
+ parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ }else{
+ temp_rate = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ if (temp_rate > CINEMA_24_CS ) {
+ parameters.tcp_rates[i]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (CINEMA_24_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ } else {
+ /* do nothing */
+ }
+ }
+ }
+ parameters.max_comp_size = COMP_24_CS;
+ break;
+
+ case CINEMA2K_48:
+ for (i = 0; i < parameters.tcp_numlayers; i++) {
+ temp_rate = 0 ;
+ if (parameters.tcp_rates[i] == 0) {
+ parameters.tcp_rates[0] = ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ }else{
+ temp_rate =((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (parameters.tcp_rates[i] * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ if (temp_rate > CINEMA_48_CS ){
+ parameters.tcp_rates[0]= ((float) (oimage->numcomps * oimage->comps[0].w * oimage->comps[0].h * oimage->comps[0].prec)) /
+ (CINEMA_48_CS * 8 * oimage->comps[0].dx * oimage->comps[0].dy);
+ }else{
+ /* do nothing */
+ }
+ }
+ }
+ parameters.max_comp_size = COMP_48_CS;
+ break;
+ }
+
+ parameters.cp_disto_alloc = 1;
+ }
+
/* get a J2K compressor handle */
opj_cinfo_t* cinfo = opj_create_compress(CODEC_J2K);
@@ -480,7 +671,7 @@ bool wxJ2KHandler::SaveFile( wxImage *wimage, wxOutputStream& stream, bool verbo /* Write the index to disk */
if (*indexfilename) {
bSuccess = write_index_file(&cstr_info, indexfilename);
- if (bSuccess) {
+ if (!bSuccess) {
wxLogError(wxT("Failed to output index file"));
}
}
diff --git a/OPJViewer/source/imagj2k.h b/OPJViewer/source/imagj2k.h index be1c9139..af70392e 100644 --- a/OPJViewer/source/imagj2k.h +++ b/OPJViewer/source/imagj2k.h @@ -82,8 +82,11 @@ public: m_origin = wxT("0,0");
m_rates = wxT("20,10,5");
m_quality = wxT("30,35,40");
+ m_enablequality = false;
+ m_multicomp = false;
m_irreversible = false;
m_resolutions = 6;
+ m_progression = 0;
m_cbsize = wxT("32,32");
m_prsize = wxT("[128,128],[128,128]");
m_tsize = wxT("");
@@ -92,6 +95,12 @@ public: m_resilience*/
m_enablesop = false;
m_enableeph = false;
+ m_enablereset = false;
+ m_enablesegmark = false;
+ m_enablevsc = false;
+ m_enablerestart = false;
+ m_enableerterm = false;
+ m_enablebypass = false;
/*m_roicompo
m_roiup
m_indexfname*/
@@ -127,8 +136,11 @@ public: wxString m_origin;
wxString m_rates;
wxString m_quality;
+ bool m_enablequality;
+ bool m_multicomp;
bool m_irreversible;
int m_resolutions;
+ int m_progression;
wxString m_cbsize;
wxString m_prsize;
wxString m_tsize;
@@ -137,6 +149,12 @@ public: m_resilience*/
bool m_enablesop;
bool m_enableeph;
+ bool m_enablebypass;
+ bool m_enableerterm;
+ bool m_enablerestart;
+ bool m_enablereset;
+ bool m_enablesegmark;
+ bool m_enablevsc;
/*m_roicompo
m_roiup
m_indexfname*/
|
