]> granicus.if.org Git - openjpeg/commitdiff
Improved parsing in OPJViewer, as well some aesthetic modifications; support for...
authorGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Tue, 27 Mar 2007 12:48:17 +0000 (12:48 +0000)
committerGiuseppe Baruffa <gbaruffa@users.noreply.github.com>
Tue, 27 Mar 2007 12:48:17 +0000 (12:48 +0000)
16 files changed:
ChangeLog
OPJViewer/OPJViewer.dsp
OPJViewer/OPJViewer.iss
OPJViewer/Readme.txt
OPJViewer/about/about.htm
OPJViewer/source/OPJViewer.cpp
OPJViewer/source/OPJViewer.h
OPJViewer/source/about_htm.h [new file with mode: 0644]
OPJViewer/source/imagj2k.cpp
OPJViewer/source/imagmj2.cpp
OPJViewer/source/imagmj2.h
OPJViewer/source/opj_logo.xpm [new file with mode: 0644]
OPJViewer/source/wxj2kparser.cpp
OPJViewer/source/wxjp2parser.cpp
jpwl/LibOpenJPEG_JPWL.dsp
jpwl/rs.h

index 490a330bdf36671d03977f13d2f37f4511c396a4..97032c68682ab15ddda7de6688e930756671ee7d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
+March 27, 2007
++ [GB] Improved parsing in OPJViewer, as well some minor aesthetic modifications; support for image rendering with bit depths lower than 8 bits; can display an arbitrary frame of an MJ2 file (only in B/W, though); can reload a file; better resizing capabilities
+
 March 23, 2007
 * [antonin] Fixed Makefile.osx and changed Readme.osx accordingly
 
index 2188d5dd5ae6e6b5fc4823f30403ae3f6ef0b5e6..61414207b93a0598f46eabfcb3107ce5bfb109b3 100644 (file)
@@ -42,7 +42,7 @@ RSC=rc.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
-# ADD CPP /nologo /G6 /MD /GX /O2 /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /c\r
+# ADD CPP /nologo /G6 /MD /W3 /GX /O2 /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /c\r
 # ADD BASE RSC /l 0x410 /d "NDEBUG"\r
 # ADD RSC /l 0x409 /i "c:\programmi\wxWidgets-2.8.0\include" /d "NDEBUG"\r
 BSC32=bscmake.exe\r
@@ -67,7 +67,7 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MDd /Gm /GX /Zi /Od /I "C:\Programmi\wxWidgets-2.8.0\INCLUDE" /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /GZ /c\r
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "C:\Programmi\wxWidgets-2.8.0\INCLUDE" /I "c:\programmi\wxWidgets-2.8.0\lib\vc_lib\msw" /I "c:\programmi\wxWidgets-2.8.0\include" /I ".." /D "_DEBUG" /D "__WXDEBUG__" /D WXDEBUG=1 /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WINDOWS" /D WINVER=0x400 /D "_MT" /D wxUSE_GUI=1 /D "wxUSE_LIBOPENJPEG" /D "OPJ_STATIC" /D "USE_JPWL" /D "OPJ_HTMLABOUT" /FR /FD /GZ /c\r
 # SUBTRACT CPP /YX\r
 # ADD BASE RSC /l 0x410 /d "_DEBUG"\r
 # ADD RSC /l 0x410 /i "c:\programmi\wxWidgets-2.8.0\include" /d "_DEBUG"\r
@@ -118,6 +118,10 @@ SOURCE=.\source\wxjp2parser.cpp
 # PROP Default_Filter "h;hpp;hxx;hm;inl"\r
 # Begin Source File\r
 \r
+SOURCE=.\source\about_htm.h\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\source\imagj2k.h\r
 # End Source File\r
 # Begin Source File\r
@@ -158,6 +162,10 @@ SOURCE=.\source\icon5.xpm
 # End Source File\r
 # Begin Source File\r
 \r
+SOURCE=.\source\opj_logo.xpm\r
+# End Source File\r
+# Begin Source File\r
+\r
 SOURCE=.\source\OPJChild.ico\r
 # End Source File\r
 # Begin Source File\r
index 00f121c9b740bac6ce61c33585fb8eb60db11ec8..ed8e9b71582191c32767f664448fe3cffac8797d 100644 (file)
@@ -31,8 +31,8 @@ Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:Ad
 \r
 [Files]\r
 Source: Release\OPJViewer.exe; DestDir: {app}; Flags: ignoreversion\r
-Source: about\about.htm; DestDir: {app}/about; Flags: ignoreversion\r
-Source: about\opj_logo.png; DestDir: {app}/about; Flags: ignoreversion\r
+;Source: about\about.htm; DestDir: {app}/about; Flags: ignoreversion\r
+;Source: about\opj_logo.png; DestDir: {app}/about; Flags: ignoreversion\r
 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files\r
 \r
 [Icons]\r
index 053bf81ab0579fc222387026ba9691d6fedbef5c..957113492873272d740ceac4fe8b35918db06f54 100644 (file)
@@ -17,8 +17,7 @@ This document describes the installation and use of the OPJViewer in the framewo
 \r
 This implementation has been developed using the OpenJPEG library as decoding engine and wxWidgets 2.8.0 as GUI engine.\r
 \r
-If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jpwl@diei.unipg.it
-\r
+If you find some bugs or if you have problems using the encoder/decoder, please send an e-mail to jpwl@diei.unipg.it\r
 \r
 2. Installing the viewer\r
 ==========================\r
@@ -94,4 +93,3 @@ The log/peek pane is shared among two different subpanels:
 ------------------\r
 \r
 * For mj2 files, only the first frame is displayed, and only in B/W\r
-* There is no zooming function\r
index 88da55b360efbb6425df703ca736aea45c7dd4f2..fec6028fb44ffb46c5c938fd51d028d6028ae22e 100644 (file)
@@ -27,8 +27,8 @@ useful for the JPIP protocol, JPWL-tools for error-resilience, ...</font>
 </tr>\r
 <tr>\r
 <td colspan=2>\r
-<font size=-2 color="#444">OpenJPEG is &copy; 2002-2007 <a href="http://www.tele.ucl.ac.be/">TELE</a> - <a href="http://www.uclouvain.be/">Université Catholique de Louvain</a></font><br>\r
-<font size=-2 color="#444">OPJViewer is also &copy; 2005-2007 <a href="http://dsplab.diei.unipg.it/">DSPLab</a> - <a href="http://www.unipg.it/">Università degli studi di Perugia</a></font>\r
+<font size=-2 color="#444444">OpenJPEG is &copy; 2002-2007 <a href="http://www.tele.ucl.ac.be/">TELE</a> - <a href="http://www.uclouvain.be/">Université Catholique de Louvain</a></font><br>\r
+<font size=-2 color="#444444">OPJViewer is also &copy; 2005-2007 <a href="http://dsplab.diei.unipg.it/">DSPLab</a> - <a href="http://www.unipg.it/">Università degli studi di Perugia</a></font>\r
 </td>\r
 </tr>\r
 </table>\r
index b06ba2d9b8423aded5afa6e358e9b576f352c98a..ea075dcc29d2d6aca40cc3e39f3d33ac1705542e 100644 (file)
@@ -193,13 +193,18 @@ bool OPJViewerApp::OnInit(void)
   wxImage::AddHandler( new wxJP2Handler );\r
   wxImage::AddHandler( new wxMJ2Handler );\r
 #endif\r
-    // we use a PNG image in our HTML page\r
-    wxImage::AddHandler(new wxPNGHandler);\r
+    // we use a XPM image in our HTML page\r
+    wxImage::AddHandler(new wxXPMHandler);\r
+\r
+       // memory file system\r
+    wxFileSystem::AddHandler(new wxMemoryFSHandler);\r
 \r
        // set decoding engine parameters\r
+       m_resizemethod = 0;\r
        m_reducefactor = 0;\r
        m_qualitylayers = 0;\r
        m_components = 0;\r
+       m_framenum = 0;\r
 #ifdef USE_JPWL\r
        m_enablejpwl = true;\r
        m_expcomps = JPWL_EXPECTED_COMPONENTS;\r
@@ -225,7 +230,7 @@ bool OPJViewerApp::OnInit(void)
        if (!(m_filelist.IsEmpty())) {\r
                //wxLogMessage(wxT("Habemus files!!!"));\r
                wxArrayString paths, filenames;\r
-               for (int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) {\r
+               for (unsigned int f = 0; f < wxGetApp().m_filelist.GetCount(); f++) {\r
                        paths.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullPath());\r
                        filenames.Add(wxFileName(wxGetApp().m_filelist[f]).GetFullName());\r
                }\r
@@ -258,7 +263,9 @@ BEGIN_EVENT_TABLE(OPJFrame, wxMDIParentFrame)
     EVT_MENU(OPJFRAME_FILECLOSE, OPJFrame::OnClose)\r
     EVT_MENU(OPJFRAME_VIEWZOOM, OPJFrame::OnZoom)\r
     EVT_MENU(OPJFRAME_VIEWFIT, OPJFrame::OnFit)\r
-    EVT_MENU(OPJFRAME_FILETOGGLE, OPJFrame::OnToggleWindow)\r
+    EVT_MENU(OPJFRAME_VIEWRELOAD, OPJFrame::OnReload)\r
+    EVT_MENU(OPJFRAME_FILETOGGLEB, OPJFrame::OnToggleBrowser)\r
+    EVT_MENU(OPJFRAME_FILETOGGLEP, OPJFrame::OnTogglePeeker)\r
     EVT_MENU(OPJFRAME_SETSDECO, OPJFrame::OnSetsDeco)\r
     EVT_SASH_DRAGGED_RANGE(OPJFRAME_BROWSEWIN, OPJFRAME_LOGWIN, OPJFrame::OnSashDrag)\r
     EVT_NOTEBOOK_PAGE_CHANGED(LEFT_NOTEBOOK_ID, OPJFrame::OnNotebook)\r
@@ -275,8 +282,11 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        file_menu->Append(OPJFRAME_FILEOPEN, wxT("&Open\tCtrl+O"));\r
        file_menu->SetHelpString(OPJFRAME_FILEOPEN, wxT("Open one or more files"));\r
 \r
-       file_menu->Append(OPJFRAME_FILETOGGLE, wxT("&Toggle browser\tCtrl+T"));\r
-       file_menu->SetHelpString(OPJFRAME_FILETOGGLE, wxT("Toggle the left browsing pane"));\r
+       file_menu->Append(OPJFRAME_FILETOGGLEB, wxT("Toggle &browser\tCtrl+B"));\r
+       file_menu->SetHelpString(OPJFRAME_FILETOGGLEB, wxT("Toggle the left browsing pane"));\r
+\r
+       file_menu->Append(OPJFRAME_FILETOGGLEP, wxT("Toggle &peeker\tCtrl+P"));\r
+       file_menu->SetHelpString(OPJFRAME_FILETOGGLEP, wxT("Toggle the bottom peeking pane"));\r
 \r
        file_menu->Append(OPJFRAME_FILECLOSE, wxT("&Close\tCtrl+C"));\r
        file_menu->SetHelpString(OPJFRAME_FILECLOSE, wxT("Close current image"));\r
@@ -293,6 +303,9 @@ OPJFrame::OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title,
        view_menu->Append(OPJFRAME_VIEWFIT, wxT("Zoom to &fit\tCtrl+F"));\r
        view_menu->SetHelpString(OPJFRAME_VIEWFIT, wxT("Fit the image in canvas"));\r
 \r
+       view_menu->Append(OPJFRAME_VIEWRELOAD, wxT("&Reload image\tCtrl+R"));\r
+       view_menu->SetHelpString(OPJFRAME_VIEWRELOAD, wxT("Reload the current image"));\r
+\r
        // settings menu and its items\r
        wxMenu *sets_menu = new wxMenu;\r
 \r
@@ -435,9 +448,11 @@ void OPJFrame::OnSetsDeco(wxCommandEvent& event)
     if (dialog.ShowModal() == wxID_OK) {\r
 \r
                // load settings\r
+               wxGetApp().m_resizemethod = dialog.m_resizeBox->GetSelection();\r
                wxGetApp().m_reducefactor = dialog.m_reduceCtrl->GetValue();\r
                wxGetApp().m_qualitylayers = dialog.m_layerCtrl->GetValue();\r
                wxGetApp().m_components = dialog.m_numcompsCtrl->GetValue();\r
+               wxGetApp().m_framenum = dialog.m_framenumCtrl->GetValue();\r
 #ifdef USE_JPWL\r
                wxGetApp().m_enablejpwl = dialog.m_enablejpwlCheck->GetValue();\r
                wxGetApp().m_expcomps = dialog.m_expcompsCtrl->GetValue();\r
@@ -512,7 +527,7 @@ void OPJFrame::Rescale(int zooml, OPJChildFrame *currframe)
        if (zooml != 100)\r
                new_image.Rescale((int) ((double) zooml * (double) new_image.GetWidth() / 100.0),\r
                        (int) ((double) zooml * (double) new_image.GetHeight() / 100.0),\r
-                       wxIMAGE_QUALITY_NORMAL);\r
+                       wxGetApp().m_resizemethod ? wxIMAGE_QUALITY_HIGH : wxIMAGE_QUALITY_NORMAL);\r
     currframe->m_canvas->m_image = wxBitmap(new_image);\r
        currframe->m_canvas->SetScrollbars(20,\r
                                                                                20,\r
@@ -526,21 +541,44 @@ void OPJFrame::Rescale(int zooml, OPJChildFrame *currframe)
 }\r
 \r
 \r
+void OPJFrame::OnReload(wxCommandEvent& event)\r
+{\r
+       OPJChildFrame *currframe = (OPJChildFrame *) GetActiveChild();\r
+\r
+    OPJDecoThread *dthread = currframe->m_canvas->CreateDecoThread();\r
+\r
+    if (dthread->Run() != wxTHREAD_NO_ERROR)\r
+        wxLogMessage(wxT("Can't start deco thread!"));\r
+    else\r
+               wxLogMessage(wxT("New deco thread started."));\r
+\r
+       currframe->m_canvas->Refresh();\r
+\r
+       // update zoom\r
+       //currframe->m_canvas->m_zooml = zooml;\r
+}\r
+\r
+\r
 // about window for the frame\r
 void OPJFrame::OnAbout(wxCommandEvent& WXUNUSED(event))\r
 {\r
 #ifdef OPJ_HTMLABOUT\r
+#include "about_htm.h"\r
+#include "opj_logo.xpm"\r
 \r
     wxBoxSizer *topsizer;\r
     wxHtmlWindow *html;\r
     wxDialog dlg(this, wxID_ANY, wxString(_("About")));\r
 \r
+    wxMemoryFSHandler::AddFile("opj_logo.xpm", wxBitmap(opj_logo), wxBITMAP_TYPE_XPM);\r
+\r
     topsizer = new wxBoxSizer(wxVERTICAL);\r
 \r
-    html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(350, 250), wxHW_SCROLLBAR_NEVER);\r
+    html = new wxHtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(320, 250), wxHW_SCROLLBAR_NEVER);\r
     html->SetBorders(0);\r
-    html->LoadPage(wxT("about/about.htm"));\r
+    //html->LoadPage(wxT("about/about.htm"));\r
        //html->SetPage("<html><body>Hello, world!</body></html>");\r
+       html->SetPage(htmlaboutpage);\r
     html->SetSize(html->GetInternalRepresentation()->GetWidth(),\r
                     html->GetInternalRepresentation()->GetHeight());\r
 \r
@@ -578,7 +616,7 @@ void OPJFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 \r
 }\r
 \r
-void OPJFrame::OnToggleWindow(wxCommandEvent& WXUNUSED(event))\r
+void OPJFrame::OnToggleBrowser(wxCommandEvent& WXUNUSED(event))\r
 {\r
     if (markerTreeWindow->IsShown())\r
         markerTreeWindow->Show(false);\r
@@ -589,6 +627,17 @@ void OPJFrame::OnToggleWindow(wxCommandEvent& WXUNUSED(event))
     layout.LayoutMDIFrame(this);\r
 }\r
 \r
+void OPJFrame::OnTogglePeeker(wxCommandEvent& WXUNUSED(event))\r
+{\r
+    if (loggingWindow->IsShown())\r
+        loggingWindow->Show(false);\r
+    else\r
+        loggingWindow->Show(true);\r
+\r
+    wxLayoutAlgorithm layout;\r
+    layout.LayoutMDIFrame(this);\r
+}\r
+\r
 void OPJFrame::OnSashDrag(wxSashEvent& event)\r
 {\r
     if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE)\r
@@ -640,14 +689,14 @@ void OPJFrame::OpenFiles(wxArrayString paths, wxArrayString filenames)
                m_childhash[winNumber] = subframe;\r
 \r
                // create own marker tree\r
-               m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, paths[n], wxT("Parsing..."), TreeTest_Ctrl,\r
+               m_treehash[winNumber] = new OPJMarkerTree(m_bookCtrl, subframe, paths[n], wxT("Parsing..."), TreeTest_Ctrl,\r
                                                                                                  wxDefaultPosition, wxDefaultSize,\r
                                                                                                  wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER\r
                                                                                                  );\r
 \r
                m_bookCtrl->AddPage(m_treehash[winNumber], wxString::Format(wxT("%u"), winNumber), false);\r
 \r
-               for (int p = 0; p < m_bookCtrl->GetPageCount(); p++) {\r
+               for (unsigned int p = 0; p < m_bookCtrl->GetPageCount(); p++) {\r
                        if (m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), winNumber)) {\r
                                m_bookCtrl->ChangeSelection(p);\r
                                break;\r
@@ -719,11 +768,22 @@ OPJDecoThread *OPJCanvas::CreateDecoThread(void)
     return dthread;\r
 }\r
 \r
+#define activeoverlay 0\r
 // Define the repainting behaviour\r
 void OPJCanvas::OnDraw(wxDC& dc)\r
 {\r
        if (m_image.Ok()) {\r
                dc.DrawBitmap(m_image, OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER);\r
+\r
+               if (activeoverlay) {\r
+                       dc.SetPen(*wxRED_PEN);\r
+                       dc.SetBrush(*wxTRANSPARENT_BRUSH);\r
+                       //int tw, th;\r
+                       dc.DrawRectangle(OPJ_CANVAS_BORDER, OPJ_CANVAS_BORDER,\r
+                               (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_twidth / 100.0),\r
+                               (unsigned long int) (0.5 + (double) m_zooml * (double) m_childframe->m_theight / 100.0));\r
+               }\r
+\r
        } else {\r
                dc.SetFont(*wxSWISS_FONT);\r
                dc.SetPen(*wxBLACK_PEN);\r
@@ -769,34 +829,33 @@ OPJChildFrame::OPJChildFrame(OPJFrame *parent, wxFileName fname, int winnumber,
 const long style):\r
   wxMDIChildFrame(parent, wxID_ANY, title, pos, size, style)\r
 {\r
-  m_frame = (OPJFrame  *) parent;\r
-  m_canvas = NULL;\r
-  //my_children.Append(this);\r
-  m_fname = fname;\r
-  m_winnumber = winnumber;\r
+       m_frame = (OPJFrame  *) parent;\r
+       m_canvas = NULL;\r
+       //my_children.Append(this);\r
+       m_fname = fname;\r
+       m_winnumber = winnumber;\r
        SetTitle(wxString::Format(_T("%d: "), m_winnumber) + m_fname.GetFullName());\r
 \r
-\r
          // Give it an icon (this is ignored in MDI mode: uses resources)\r
 #ifdef __WXMSW__\r
-         SetIcon(wxIcon(wxT("OPJChild16")));\r
+       SetIcon(wxIcon(wxT("OPJChild16")));\r
 #endif\r
 \r
-         // Give it a status line\r
-         /*CreateStatusBar();*/\r
+       // Give it a status line\r
+       /*CreateStatusBar();*/\r
 \r
-         int width, height;\r
-         GetClientSize(&width, &height);\r
+       int width, height;\r
+       GetClientSize(&width, &height);\r
 \r
-         OPJCanvas *canvas = new OPJCanvas(fname, this, wxPoint(0, 0), wxSize(width, height));\r
-         canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));\r
-         m_canvas = canvas;\r
+       OPJCanvas *canvas = new OPJCanvas(fname, this, wxPoint(0, 0), wxSize(width, height));\r
+       canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));\r
+       m_canvas = canvas;\r
 \r
-               // Give it scrollbars\r
-         canvas->SetScrollbars(20, 20, 5, 5);\r
+       // Give it scrollbars\r
+       canvas->SetScrollbars(20, 20, 5, 5);\r
 \r
-         Show(true);\r
-         Maximize(true);\r
+       Show(true);\r
+       Maximize(true);\r
 \r
        /*wxLogError(wxString::Format(wxT("Created tree %d (0x%x)"), m_winnumber, m_frame->m_treehash[m_winnumber]));*/\r
 \r
@@ -810,18 +869,15 @@ OPJChildFrame::~OPJChildFrame(void)
 \r
 void OPJChildFrame::OnClose(wxCloseEvent& event)\r
 {\r
-       for (int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {\r
-\r
+       for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {\r
                if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) {\r
                        m_frame->m_bookCtrl->DeletePage(p);\r
                        break;\r
                }\r
-\r
        }\r
        Destroy();\r
 \r
        wxLogMessage(wxT("Closed: %d"), m_winnumber);\r
-\r
 }\r
 \r
 void OPJChildFrame::OnActivate(wxActivateEvent& event)\r
@@ -836,7 +892,7 @@ void OPJChildFrame::OnGotFocus(wxFocusEvent& event)
        if (!m_frame->m_bookCtrl)\r
                return;\r
 \r
-       for (int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {\r
+       for (unsigned int p = 0; p < m_frame->m_bookCtrl->GetPageCount(); p++) {\r
 \r
                if (m_frame->m_bookCtrl->GetPageText(p) == wxString::Format(wxT("%u"), m_winnumber)) {\r
                        m_frame->m_bookCtrl->ChangeSelection(p);\r
@@ -898,7 +954,7 @@ IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxGenericTreeCtrl)
 IMPLEMENT_DYNAMIC_CLASS(OPJMarkerTree, wxTreeCtrl)\r
 #endif\r
 \r
-OPJMarkerTree::OPJMarkerTree(wxWindow *parent, wxFileName fname, wxString name, const wxWindowID id,\r
+OPJMarkerTree::OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id,\r
            const wxPoint& pos, const wxSize& size, long style)\r
           : wxTreeCtrl(parent, id, pos, size, style)\r
 {\r
@@ -915,11 +971,13 @@ OPJMarkerTree::OPJMarkerTree(wxWindow *parent, wxFileName fname, wxString name,
                                   image, image,\r
                                   new OPJMarkerData(name));\r
 \r
-    OPJParseThread *pthread = CreateParseThread();\r
+    OPJParseThread *pthread = CreateParseThread(0x00, subframe);\r
     if (pthread->Run() != wxTHREAD_NO_ERROR)\r
         wxLogMessage(wxT("Can't start parse thread!"));\r
     else\r
                wxLogMessage(wxT("New parse thread started."));\r
+\r
+       m_childframe = subframe;\r
 }\r
 \r
 void OPJMarkerTree::CreateImageList(int size)\r
@@ -1048,15 +1106,16 @@ void OPJParseThread::LoadFile(wxFileName fname)
 \r
        }\r
 \r
-       // close the file\r
-       m_file.Close();\r
-\r
        // this is the root node\r
        if (this->m_parentid)\r
                m_tree->SetItemText(rootid, wxT("Codestream"));\r
        else\r
+               //m_tree->SetItemText(rootid, wxString::Format(wxT("%s (%d B)"), fname.GetFullName(), m_file.Length()));\r
                m_tree->SetItemText(rootid, fname.GetFullName());\r
        \r
+       // close the file\r
+       m_file.Close();\r
+\r
        WriteText(wxT("Parsing finished!"));\r
 }\r
 \r
@@ -1199,7 +1258,7 @@ void OPJMarkerTree::LogEvent(const wxChar *name, const wxTreeEvent& event)
     wxLogMessage(wxT("%s(%s)"), name, text.c_str());\r
 }\r
 \r
-OPJParseThread *OPJMarkerTree::CreateParseThread(wxTreeItemId parentid)\r
+OPJParseThread *OPJMarkerTree::CreateParseThread(wxTreeItemId parentid, OPJChildFrame *subframe)\r
 {\r
     OPJParseThread *pthread = new OPJParseThread(this, parentid);\r
 \r
@@ -1804,6 +1863,7 @@ void *OPJDecoThread::Entry()
        mj222handler->m_reducefactor = wxGetApp().m_reducefactor;\r
        mj222handler->m_qualitylayers = wxGetApp().m_qualitylayers;\r
        mj222handler->m_components = wxGetApp().m_components;\r
+       mj222handler->m_framenum = wxGetApp().m_framenum;\r
 #ifdef USE_JPWL\r
        mj222handler->m_enablejpwl = wxGetApp().m_enablejpwl;\r
        mj222handler->m_expcomps = wxGetApp().m_expcomps;\r
@@ -1943,40 +2003,36 @@ END_EVENT_TABLE()
 \r
 OPJDecoderDialog::OPJDecoderDialog(wxWindow* win, int dialogType)\r
 {\r
-    SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
-\r
-    int tabImage1 = -1;\r
-    int tabImage2 = -1;\r
-\r
-    int resizeBorder = wxRESIZE_BORDER;\r
+       SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);\r
 \r
-        m_imageList = NULL;\r
+       Create(win, wxID_ANY, wxT("Decoder settings"),\r
+               wxDefaultPosition, wxDefaultSize,\r
+               wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, wxRESIZE_BORDER)\r
+               );\r
 \r
-    Create(win, wxID_ANY, wxT("Decoder settings"), wxDefaultPosition, wxDefaultSize,\r
-        wxDEFAULT_DIALOG_STYLE| (int) wxPlatform::IfNot(wxOS_WINDOWS_CE, resizeBorder)\r
-    );\r
+       CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
 \r
-        CreateButtons(wxOK | wxCANCEL | (int)wxPlatform::IfNot(wxOS_WINDOWS_CE, wxHELP));\r
+       wxBookCtrlBase* notebook = GetBookCtrl();\r
 \r
-    wxBookCtrlBase* notebook = GetBookCtrl();\r
-    notebook->SetImageList(m_imageList);\r
-\r
-    wxPanel* mainSettings = CreateMainSettingsPage(notebook);\r
+       wxPanel* mainSettings = CreateMainSettingsPage(notebook);\r
+       wxPanel* jpeg2000Settings = CreatePart1SettingsPage(notebook);\r
+       wxPanel* mjpeg2000Settings = CreatePart3SettingsPage(notebook);\r
 #ifdef USE_JPWL\r
-    wxPanel* jpwlSettings = CreateJPWLSettingsPage(notebook);\r
+       wxPanel* jpwlSettings = CreatePart11SettingsPage(notebook);\r
 #endif // USE_JPWL\r
 \r
-    notebook->AddPage(mainSettings, wxT("Main"), false);\r
+       notebook->AddPage(mainSettings, wxT("Display"), false);\r
+       notebook->AddPage(jpeg2000Settings, wxT("JPEG 2000"), false);\r
+       notebook->AddPage(mjpeg2000Settings, wxT("MJPEG 2000"), false);\r
 #ifdef USE_JPWL\r
-    notebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
+       notebook->AddPage(jpwlSettings, wxT("JPWL"), false);\r
 #endif // USE_JPWL\r
 \r
-    LayoutDialog();\r
+       LayoutDialog();\r
 }\r
 \r
 OPJDecoderDialog::~OPJDecoderDialog()\r
 {\r
-    delete m_imageList;\r
 }\r
 \r
 /*wxPanel* OPJDecoderDialog::CreateGeneralSettingsPage(wxWindow* parent)\r
@@ -2084,6 +2140,87 @@ OPJDecoderDialog::~OPJDecoderDialog()
 }*/\r
 \r
 wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)\r
+{\r
+    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+       // top sizer\r
+    wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+               // sub top sizer\r
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+                       // resize settings, column\r
+                       wxString choices[] = {wxT("Low quality"), wxT("High quality")};\r
+                       m_resizeBox = new wxRadioBox(panel, OPJDECO_RESMETHOD,\r
+                               wxT("Resize method"),\r
+                               wxDefaultPosition, wxDefaultSize,\r
+                               WXSIZEOF(choices),\r
+                               choices,\r
+                               1,\r
+                               wxRA_SPECIFY_ROWS);\r
+                       m_resizeBox->SetSelection(wxGetApp().m_resizemethod);\r
+\r
+               subtopSizer->Add(m_resizeBox, 0, wxGROW | wxALL, 5);\r
+\r
+       topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+       // assign top and fit it\r
+    panel->SetSizer(topSizer);\r
+    topSizer->Fit(panel);\r
+\r
+    return panel;\r
+}\r
+\r
+wxPanel* OPJDecoderDialog::CreatePart3SettingsPage(wxWindow* parent)\r
+{\r
+    wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
+\r
+       // top sizer\r
+    wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+       // add some space\r
+       //topSizer->AddSpacer(5);\r
+\r
+               // sub top sizer\r
+               wxBoxSizer *subtopSizer = new wxBoxSizer(wxVERTICAL);\r
+\r
+                       // frame settings, column\r
+                       wxStaticBox* frameBox = new wxStaticBox(panel, wxID_ANY, wxT("Frame"));\r
+                       wxBoxSizer* frameSizer = new wxStaticBoxSizer(frameBox, wxVERTICAL);\r
+\r
+                               // selected frame number, row\r
+                               wxBoxSizer* framenumSizer = new wxBoxSizer(wxHORIZONTAL);\r
+\r
+                               // add some text\r
+                               framenumSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("&Displayed frame:")),\r
+                                                               0, wxALL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                               // add some horizontal space\r
+                               framenumSizer->Add(5, 5, 1, wxALL, 0);\r
+\r
+                               // add the value control\r
+                               framenumSizer->Add(\r
+                                       m_framenumCtrl = new wxSpinCtrl(panel, OPJDECO_FRAMENUM,\r
+                                                               wxString::Format(wxT("%d"), wxGetApp().m_framenum),\r
+                                                               wxDefaultPosition, wxSize(80, wxDefaultCoord),\r
+                                                               wxSP_ARROW_KEYS,\r
+                                                               1, 100000, wxGetApp().m_framenum),\r
+                                       0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+\r
+                       frameSizer->Add(framenumSizer, 0, wxGROW | wxALL, 5);\r
+\r
+               subtopSizer->Add(frameSizer, 0, wxGROW | wxALL, 5);\r
+\r
+       topSizer->Add(subtopSizer, 1, wxGROW | wxALIGN_CENTRE | wxALL, 5);\r
+\r
+       // assign top and fit it\r
+    panel->SetSizer(topSizer);\r
+    topSizer->Fit(panel);\r
+\r
+    return panel;\r
+}\r
+\r
+wxPanel* OPJDecoderDialog::CreatePart1SettingsPage(wxWindow* parent)\r
 {\r
     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
 \r
@@ -2172,6 +2309,7 @@ wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)
                                                                wxSP_ARROW_KEYS,\r
                                                                0, 100000, wxGetApp().m_components),\r
                                        0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5);\r
+                               m_numcompsCtrl->Enable(false);\r
 \r
                        compoSizer->Add(numcompsSizer, 0, wxGROW | wxALL, 5);\r
 \r
@@ -2187,7 +2325,7 @@ wxPanel* OPJDecoderDialog::CreateMainSettingsPage(wxWindow* parent)
 }\r
 \r
 #ifdef USE_JPWL\r
-wxPanel* OPJDecoderDialog::CreateJPWLSettingsPage(wxWindow* parent)\r
+wxPanel* OPJDecoderDialog::CreatePart11SettingsPage(wxWindow* parent)\r
 {\r
     wxPanel* panel = new wxPanel(parent, wxID_ANY);\r
 \r
@@ -2285,6 +2423,8 @@ void OPJDecoderDialog::OnEnableJPWL(wxCommandEvent& event)
 \r
 }\r
 \r
+#endif // USE_JPWL\r
+\r
 bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)\r
 {\r
     /*size_t nFiles = filenames.GetCount();\r
@@ -2299,5 +2439,3 @@ bool OPJDnDFile::OnDropFiles(wxCoord, wxCoord, const wxArrayString& filenames)
     return true;\r
 }\r
 \r
-#endif // USE_JPWL\r
-\r
index 7a7ea3288aead4706fc83481b9138a516e6a075e..ac64e3932eb9a6d832deed215b47da7606e92cea 100644 (file)
@@ -94,6 +94,8 @@
 #include <wx/dnd.h>\r
 #include "wx/wxhtml.h"\r
 #include "wx/statline.h"\r
+#include <wx/fs_mem.h>\r
+\r
 \r
 #include "libopenjpeg\openjpeg.h"\r
 \r
@@ -119,11 +121,20 @@ typedef unsigned long long int8byte;
 #endif\r
 #endif\r
 \r
+#define OPJ_APPLICATION             wxT("OPJViewer")\r
 #define OPJ_APPLICATION_NAME           wxT("OpenJPEG Viewer")\r
 #define OPJ_APPLICATION_VERSION                wxT("0.2 alpha")\r
 #define OPJ_APPLICATION_TITLEBAR       OPJ_APPLICATION_NAME wxT(" ") OPJ_APPLICATION_VERSION\r
 #define OPJ_APPLICATION_COPYRIGHT      wxT("(C) 2007, Giuseppe Baruffa")\r
 \r
+#ifdef __WXMSW__\r
+#define OPJ_APPLICATION_PLATFORM    wxT("Windows")\r
+#endif\r
+\r
+#ifdef __WXGTK__\r
+#define OPJ_APPLICATION_PLATFORM    wxT("Linux")\r
+#endif\r
+\r
 #define OPJ_CANVAS_BORDER 10\r
 #define OPJ_CANVAS_COLOUR *wxWHITE\r
 \r
@@ -166,8 +177,11 @@ class OPJViewerApp: public wxApp
                // the list of all filenames written in the command line\r
                wxArrayString m_filelist;\r
 \r
+               // displaying engine parameters\r
+               int m_resizemethod;\r
+\r
                // decoding engine parameters\r
-               int m_reducefactor, m_qualitylayers, m_components;\r
+               int m_reducefactor, m_qualitylayers, m_components, m_framenum;\r
 #ifdef USE_JPWL\r
                bool m_enablejpwl;\r
                int m_expcomps, m_maxtiles;\r
@@ -241,15 +255,16 @@ public:
     };\r
 \r
     OPJMarkerTree() { };\r
-    OPJMarkerTree(wxWindow *parent, wxFileName fname, wxString name, const wxWindowID id,\r
+    OPJMarkerTree(wxWindow *parent, OPJChildFrame *subframe, wxFileName fname, wxString name, const wxWindowID id,\r
                const wxPoint& pos, const wxSize& size,\r
                long style);\r
     virtual ~OPJMarkerTree(){};\r
-       OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00);\r
+       OPJParseThread *CreateParseThread(wxTreeItemId parentid = 0x00, OPJChildFrame *subframe = NULL);\r
     void WriteText(const wxString& text) { wxMutexGuiEnter(); wxLogMessage(text); wxMutexGuiLeave(); }\r
 \r
        wxFileName m_fname;\r
        wxTextCtrl *m_peektextCtrl;\r
+       OPJChildFrame *m_childframe;\r
 \r
     /*void OnBeginDrag(wxTreeEvent& event);\r
     void OnBeginRDrag(wxTreeEvent& event);\r
@@ -335,14 +350,16 @@ class OPJFrame: public wxMDIParentFrame
     OPJFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style);\r
 \r
     ~OPJFrame(void);\r
-    void OnSize(wxSizeEvent& event);\r
+       void OnSize(wxSizeEvent& WXUNUSED(event));\r
     void OnAbout(wxCommandEvent& WXUNUSED(event));\r
     void OnFileOpen(wxCommandEvent& WXUNUSED(event));\r
     void OnQuit(wxCommandEvent& WXUNUSED(event));\r
     void OnClose(wxCommandEvent& WXUNUSED(event));\r
     void OnZoom(wxCommandEvent& WXUNUSED(event));\r
        void OnFit(wxCommandEvent& WXUNUSED(event));\r
-       void OnToggleWindow(wxCommandEvent& WXUNUSED(event));\r
+       void OnToggleBrowser(wxCommandEvent& WXUNUSED(event));\r
+       void OnTogglePeeker(wxCommandEvent& WXUNUSED(event));\r
+       void OnReload(wxCommandEvent& event);\r
        void OnSetsDeco(wxCommandEvent& event);\r
        void OnSashDrag(wxSashEvent& event);\r
        void OpenFiles(wxArrayString paths, wxArrayString filenames);\r
@@ -390,6 +407,8 @@ class OPJChildFrame: public wxMDIChildFrame
        wxFileName m_fname;\r
        int m_winnumber;\r
 \r
+       unsigned long  m_twidth, m_theight, m_tx, m_ty;\r
+\r
        DECLARE_EVENT_TABLE()\r
 };\r
 \r
@@ -398,9 +417,11 @@ enum {
        OPJFRAME_FILEEXIT = wxID_EXIT,\r
        OPJFRAME_HELPABOUT = wxID_ABOUT,\r
        OPJFRAME_FILEOPEN,\r
-       OPJFRAME_FILETOGGLE,\r
+       OPJFRAME_FILETOGGLEB,\r
+       OPJFRAME_FILETOGGLEP,\r
        OPJFRAME_VIEWZOOM,\r
        OPJFRAME_VIEWFIT,\r
+       OPJFRAME_VIEWRELOAD,\r
        OPJFRAME_FILECLOSE,\r
        OPJFRAME_SETSDECO,\r
 \r
@@ -533,12 +554,15 @@ public:
     ~OPJDecoderDialog();\r
 \r
        wxSpinCtrl *m_reduceCtrl, *m_layerCtrl, *m_numcompsCtrl;\r
+       wxRadioBox* m_resizeBox;\r
 \r
     wxPanel* CreateMainSettingsPage(wxWindow* parent);\r
+    wxPanel* CreatePart1SettingsPage(wxWindow* parent);\r
+    wxPanel* CreatePart3SettingsPage(wxWindow* parent);\r
 #ifdef USE_JPWL\r
        void OnEnableJPWL(wxCommandEvent& event);\r
-    wxPanel* CreateJPWLSettingsPage(wxWindow* parent);\r
-       wxSpinCtrl *m_expcompsCtrl, *m_maxtilesCtrl;\r
+    wxPanel* CreatePart11SettingsPage(wxWindow* parent);\r
+       wxSpinCtrl *m_expcompsCtrl, *m_framenumCtrl, *m_maxtilesCtrl;\r
        wxCheckBox *m_enablejpwlCheck;\r
 #endif // USE_JPWL\r
 \r
@@ -546,16 +570,16 @@ public:
 protected:\r
 \r
     enum {\r
-               OPJDECO_REDUCEFACTOR = 100,\r
+               OPJDECO_RESMETHOD = 100,\r
+               OPJDECO_REDUCEFACTOR,\r
                OPJDECO_QUALITYLAYERS,\r
                OPJDECO_NUMCOMPS,\r
                OPJDECO_ENABLEJPWL,\r
                OPJDECO_EXPCOMPS,\r
-               OPJDECO_MAXTILES\r
+               OPJDECO_MAXTILES,\r
+               OPJDECO_FRAMENUM\r
     };\r
 \r
-    wxImageList*    m_imageList;\r
-\r
 DECLARE_EVENT_TABLE()\r
 };\r
 \r
diff --git a/OPJViewer/source/about_htm.h b/OPJViewer/source/about_htm.h
new file mode 100644 (file)
index 0000000..bb295f7
--- /dev/null
@@ -0,0 +1,48 @@
+wxString htmlaboutpage = wxT(\r
+"<html>"\r
+"<body bgcolor=#FFFFFF>"\r
+"<table cellspacing=7 cellpadding=1 border=0 width=100%>"\r
+"<tr>"\r
+"<td rowspan=3 valign=top align=center width=70>"\r
+"<img src=\"memory:opj_logo.xpm\"><br><br>"\r
+"</td>"\r
+"<td align=center>"\r
+"<font size=+0 color=#000000><b>"\r
+OPJ_APPLICATION " " OPJ_APPLICATION_VERSION\r
+"</b></font><br>"\r
+"<font size=-1 color=#000000><b>A JPEG 2000 image viewer</b></font><br>"\r
+"<font size=-2 color=#000000><b>" OPJ_APPLICATION_PLATFORM " version</b></font>"\r
+"</td>"\r
+"</tr>"\r
+"<tr height=3 valign=center>"\r
+"<td valign=center  bgcolor=#cc3300></td>"\r
+"</tr>"\r
+"<tr>"\r
+"<td align=justify>"\r
+"<center><font size=+0 color=#000000><a href=\"http://www.openjpeg.org/\">OpenJPEG</a></font></center>"\r
+"<font size=-1 color=#000000>The OpenJPEG library is an open-source JPEG 2000 codec written in C language. "\r
+"In addition to the basic codec, various other features are under development.</font><br>"\r
+"<font size=-2 color=red>* Build: " wxVERSION_STRING ", " __DATE__ ", " __TIME__ "</font><br>"\r
+)\r
+#ifdef USE_JPWL\r
+wxT("<font size=-2 color=green>- Compiled with JPWL support</font><br>")\r
+#endif // USE_JPWL\r
+#ifdef USE_JPSEC\r
+wxT("<font size=-2 color=green>- Compiled with JPSEC support</font>")\r
+#endif // USE_JPSEC\r
+wxT(\r
+"</td>"\r
+"</tr>"\r
+"<tr>"\r
+"<td colspan=2 bgcolor=#CC3300 height=3 valign=center></td>"\r
+"</tr>"\r
+"<tr>"\r
+"<td colspan=2>"\r
+"<font size=-2 color=#444444>OpenJPEG is &copy; 2002-2007 <a href=\"http://www.tele.ucl.ac.be/\">TELE</a> - <a href=\"http://www.uclouvain.be/\">Université Catholique de Louvain</a></font><br>"\r
+"<font size=-2 color=#444444>OPJViewer is also &copy; 2007 <a href=\"http://dsplab.diei.unipg.it/\">DSPLab</a> - <a href=\"http://www.unipg.it/\">Università degli studi di Perugia</a></font>"\r
+"</td>"\r
+"</tr>"\r
+"</table>"\r
+"</body>"\r
+"</html>"\r
+);
\ No newline at end of file
index 2442aa4ee26b9cc6d15cc30d55d263679754de1b..9f972095f51a87de149835f7b4d6c10303273b45 100644 (file)
@@ -233,14 +233,26 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
 \r
                                }\r
                        }\r
-               } else {\r
+\r
+               } else if (shiftbpp < 0) {\r
                        for (row = 0; row < opjimage->comps[0].h; row++) {\r
                                for (col = 0; col < opjimage->comps[0].w; col++) {\r
                                        \r
+                                       *(ptr++) = (*(r++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(g++)) << -shiftbpp;\r
+                                       *(ptr++) = (*(b++)) << -shiftbpp;\r
+\r
+                               }\r
+                       }\r
+                       \r
+               } else {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+\r
                                        *(ptr++) = *(r++);\r
                                        *(ptr++) = *(g++);\r
                                        *(ptr++) = *(b++);\r
-\r
+                               \r
                                }\r
                        }\r
                }\r
@@ -258,6 +270,16 @@ bool wxJ2KHandler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
                                        *(ptr++) = (*(y)) >> shiftbpp;\r
                                        *(ptr++) = (*(y++)) >> shiftbpp;\r
 \r
+                               }\r
+                       }\r
+               } else if (shiftbpp < 0) {\r
+                       for (row = 0; row < opjimage->comps[0].h; row++) {\r
+                               for (col = 0; col < opjimage->comps[0].w; col++) {\r
+                                       \r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y)) << -shiftbpp;\r
+                                       *(ptr++) = (*(y++)) << -shiftbpp;\r
+\r
                                }\r
                        }\r
                } else {\r
index 2a4d2e58333dfa1964ee59f4ba074e6db0d9e399..1a8e1ffb7d6adf5c24556050a3e2ba5dac37d30e 100644 (file)
@@ -402,15 +402,15 @@ my_jpeg2000parse(wxInputStream& stream, unsigned long int filepoint, unsigned lo
                          char *scansign, unsigned long int *scanpoint)\r
 {\r
        unsigned long int       LBox = 0x00000000;\r
-       int                     LBox_read;\r
+       //int                     LBox_read;\r
        char                    TBox[5] = "\0\0\0\0";\r
-       int                     TBox_read;\r
+       //int                     TBox_read;\r
        __int64                 XLBox = 0x0000000000000000;\r
-       int                     XLBox_read;\r
+       //int                     XLBox_read;\r
        unsigned long int       box_length = 0;\r
        int                     last_box = 0, box_num = 0;\r
        int                     box_type = ANY_BOX;\r
-       unsigned char           onebyte[1], twobytes[2], fourbytes[4];\r
+       unsigned char           /*onebyte[1], twobytes[2],*/ fourbytes[4];\r
        int                     box_number = 0;\r
 \r
        /* cycle all over the file */\r
@@ -499,7 +499,7 @@ my_jpeg2000parse(wxInputStream& stream, unsigned long int filepoint, unsigned lo
 \r
 // search first contiguos codestream box in an mj2 file\r
 unsigned long int\r
-searchfirstjp2c(wxInputStream& stream, unsigned long int fsize)\r
+searchjp2c(wxInputStream& stream, unsigned long int fsize, int number)\r
 {\r
        char scansign[] = "jp2c";\r
        unsigned long int scanpoint = 0L;\r
@@ -507,7 +507,7 @@ searchfirstjp2c(wxInputStream& stream, unsigned long int fsize)
        wxLogMessage(wxT("MJ2: searching jp2c box... "));\r
 \r
        /* do the parsing */\r
-       if (my_jpeg2000parse(stream, 0, fsize, 0, scansign, &scanpoint) < 0)            \r
+       if (my_jpeg2000parse(stream, 0, fsize, number, scansign, &scanpoint) < 0)               \r
                wxLogMessage(wxT("MJ2: Unrecoverable error during file parsing: stopping"));\r
 \r
        if (strcmp(scansign, "    "))\r
@@ -638,7 +638,7 @@ bool wxMJ2Handler::LoadFile(wxImage *image, wxInputStream& stream, bool verbose,
        file_length = (int) stream.TellI();\r
 \r
        /* search for the first codestream box and the movie header box  */\r
-       jp2c_point = searchfirstjp2c(stream, file_length);\r
+       jp2c_point = searchjp2c(stream, file_length, m_framenum);\r
        jp2h_point = searchjpegheaderbox(stream, file_length);\r
 \r
        // read the jp2h box and store it\r
index e1737275ba27c9789cf45ad971e93972b229fa7a..17cbd56b1831aba0cad59721e876c0eedc3a95ce 100644 (file)
@@ -69,7 +69,7 @@ public:
     }\r
 \r
                // decoding engine parameters\r
-               int m_reducefactor, m_qualitylayers, m_components;\r
+               int m_reducefactor, m_qualitylayers, m_components, m_framenum;\r
 #ifdef USE_JPWL\r
                bool m_enablejpwl;\r
                int m_expcomps, m_maxtiles;\r
diff --git a/OPJViewer/source/opj_logo.xpm b/OPJViewer/source/opj_logo.xpm
new file mode 100644 (file)
index 0000000..c64d0a7
--- /dev/null
@@ -0,0 +1,285 @@
+/* XPM */
+static char *opj_logo[] = {
+/* columns rows colors chars-per-pixel */
+"90 61 218 2",
+"   c #BE3D12",
+".  c #BF461D",
+"X  c #AD5435",
+"o  c #B64925",
+"O  c #B54E2B",
+"+  c #BC4620",
+"@  c #BB4B25",
+"#  c #BC4E29",
+"$  c #B5502F",
+"%  c #BD512C",
+"&  c #B45334",
+"*  c #B35638",
+"=  c #B45B3D",
+"-  c #BB5533",
+";  c #BE5937",
+":  c #BC5C3D",
+">  c #9C766A",
+",  c #AD5D42",
+"<  c #B55F41",
+"1  c #BA5E40",
+"2  c #A7634D",
+"3  c #A76C57",
+"4  c #AA6750",
+"5  c #AC6B56",
+"6  c #AA6E5A",
+"7  c #A4705E",
+"8  c #B46045",
+"9  c #B1644B",
+"0  c #BD6244",
+"q  c #B96448",
+"w  c #BC694D",
+"e  c #B36B53",
+"r  c #B26E58",
+"t  c #BB6C52",
+"y  c #B2725D",
+"u  c #BD7056",
+"i  c #BB745C",
+"p  c #A67566",
+"a  c #A57B6D",
+"s  c #AE7562",
+"d  c #AB7867",
+"f  c #AA7C6C",
+"g  c #A07E73",
+"h  c #AA7F71",
+"j  c #B37661",
+"k  c #B47863",
+"l  c #B27D6B",
+"z  c #BB7863",
+"x  c #BA7E69",
+"c  c #C73605",
+"v  c #C63A0B",
+"b  c #CB3300",
+"n  c #CA3807",
+"m  c #C93A0A",
+"M  c #C43E11",
+"N  c #C93E10",
+"B  c #C44115",
+"V  c #C3441A",
+"C  c #C4481E",
+"Z  c #CA4113",
+"A  c #C94519",
+"S  c #CB481C",
+"D  c #C24A23",
+"F  c #C24F28",
+"G  c #CD4D23",
+"H  c #C4522D",
+"J  c #CB532B",
+"K  c #C25632",
+"L  c #C35936",
+"P  c #C25C3B",
+"I  c #C85630",
+"U  c #CB5933",
+"Y  c #CB5E3A",
+"T  c #D05026",
+"R  c #CC613D",
+"E  c #C26343",
+"W  c #C46748",
+"Q  c #C1694C",
+"!  c #CD6744",
+"~  c #CA6C4D",
+"^  c #C37155",
+"/  c #C4755B",
+"(  c #CB7356",
+")  c #C8765B",
+"_  c #D06D4C",
+"`  c #D07253",
+"'  c #D47B5E",
+"]  c #C37B63",
+"[  c #C27E68",
+"{  c #C97F68",
+"}  c #A68175",
+"|  c #A48479",
+" . c #AD8172",
+".. c #AD8578",
+"X. c #AB897D",
+"o. c #B1806F",
+"O. c #BA816F",
+"+. c #B38373",
+"@. c #B58778",
+"#. c #B3897B",
+"$. c #BA8472",
+"%. c #BB8C7C",
+"&. c #C2816B",
+"*. c #CD846C",
+"=. c #C38470",
+"-. c #C38976",
+";. c #C38D7B",
+":. c #CC8973",
+">. c #CF8F7A",
+",. c #CB907D",
+"<. c #D1937F",
+"1. c #948E8C",
+"2. c #9D8C86",
+"3. c #9D8F89",
+"4. c #96908E",
+"5. c #9C918D",
+"6. c #949392",
+"7. c #9B9492",
+"8. c #9D9997",
+"9. c #9D9C9C",
+"0. c #A38B83",
+"q. c #AA8D83",
+"w. c #A4918B",
+"e. c #AC9087",
+"r. c #AB938C",
+"t. c #A49590",
+"y. c #A29996",
+"u. c #A19D9C",
+"i. c #AA9790",
+"p. c #AC9994",
+"a. c #AC9E99",
+"s. c #B18D81",
+"d. c #B59084",
+"f. c #B49389",
+"g. c #BA9184",
+"h. c #B89589",
+"j. c #BA988D",
+"k. c #B29B93",
+"l. c #BC9C92",
+"z. c #ACA19D",
+"x. c #B1A19D",
+"c. c #BCA39B",
+"v. c #A3A3A3",
+"b. c #ABA5A3",
+"n. c #AEA9A7",
+"m. c #ABABAA",
+"M. c #B3A5A1",
+"N. c #B3A9A6",
+"B. c #B3ADAA",
+"V. c #B9A6A0",
+"C. c #B9AAA5",
+"Z. c #BAADA9",
+"A. c #B4B0AF",
+"S. c #BAB0AD",
+"D. c #B4B3B3",
+"F. c #BAB5B3",
+"G. c #BDB8B6",
+"H. c #BBBBBB",
+"J. c #C39384",
+"K. c #C0978A",
+"L. c #C2998B",
+"P. c #CA9483",
+"I. c #CD9A8A",
+"U. c #C19D92",
+"Y. c #D69B89",
+"T. c #DB9680",
+"R. c #C2A095",
+"E. c #C4A69C",
+"W. c #CCA193",
+"Q. c #C8A599",
+"!. c #CBA99D",
+"~. c #C6AEA6",
+"^. c #CCACA2",
+"/. c #CBB2AB",
+"(. c #C3B8B5",
+"). c #C2BDBC",
+"_. c #C9B9B3",
+"`. c #D3ADA0",
+"'. c #D3B4A9",
+"]. c #DCB2A4",
+"[. c #DEB6A8",
+"{. c #D1BFB9",
+"}. c #D9BEB5",
+"|. c #C5C0BE",
+" X c #CDC0BC",
+".X c #D2C1BB",
+"XX c #DDC3BB",
+"oX c #E0C5BC",
+"OX c #E0C8BF",
+"+X c #C2C2C2",
+"@X c #CBC4C2",
+"#X c #CDC8C6",
+"$X c #CCCBCB",
+"%X c #D2C6C2",
+"&X c #D1CECD",
+"*X c #DDC8C1",
+"=X c #DECFCA",
+"-X c #D9D1CE",
+";X c #D3D3D3",
+":X c #D9D5D4",
+">X c #DED9D7",
+",X c #DBDBDB",
+"<X c #E1CAC3",
+"1X c #E2CFC8",
+"2X c #E1D3CE",
+"3X c #E2D5D0",
+"4X c #E5D8D3",
+"5X c #E4DDDB",
+"6X c #E8DBD6",
+"7X c #EADEDA",
+"8X c #E6E0DE",
+"9X c #EBE0DC",
+"0X c #E4E4E4",
+"qX c #E8E2E0",
+"wX c #EBEBEB",
+"eX c #F0EAE8",
+"rX c #F3F3F3",
+"tX c #FEFEFE",
+/* pixels */
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXrXrXtXrXrXrXrXrXrXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXrXtXrXrXrXwXwXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXrXrXrXwXwX0X0XqX0X0X0X0XwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXrXtXrXwXwX2X[.[.].].].].].1XwXrXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXrXrXrXwX0X0XL.J b b b b b b b J '.0X0XwXwXrXrXrXrXrXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXrXrXwX0XXXt m b m B V N b b v >.;X0XwXwXwXwXrXwXwXrXrXrXrXtXrXtXrXrXrXwXrXrXrXrXrXrXrXrXrXrXrXwXrXrXwXrXrXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXrXrXrX0X,X'.S b b P l.z.M.k.w n b b g.;X,X,X,X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0XwX0X0XwXwXwXwX0X0X0X0X0X0XwXwXwXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXrXrXwX0X:XT.m b A ] G.D.D.m.$.m b b $.$X&X.X}.XX>XOX}.oXXX<X0X0XwXwXwX0X2XXXoXXXoXOX5X0XwX0X1XoXXX5X*X}.}.oX<XqXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXrXwX0X,XL.b b D M.H.D.D.D.D.m.L b b W H.Z.# b Y / m b b b Z P.:X:X:X$X:.Z b b b b n :.;X;X;XR b A &.Z b b b b *.wXwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXrXwX0X:X$.b b E B.H.H.D.D.D.D.P b b E H.V.. b U L v v n b b ( #X;X$X~.Y b m N m b b ! {.&X#XI b C R v v n b b ! 0XwXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXwX0X:X!.A b Z F.H.H.H.H.H.D.m.L b b e b.+.b b V k i.r.t n b b s.H.x v b L q.b.p.D b b t F.$.n b M l a.M.y b b A :X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXwX0X:XL.m b D H.).H.+XH.H.H.D.H b b 6 v.j b b - a.A.m.@.m b b h D.< b b w z.b.b.P b b q B.z b b @ B.D.m...v b G :X,XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwX0X,X&X/ b b , D.H.+X+X+X+XH.f.B b b 5.8.M b M w.v.v.v.r.D b b h l v b b M     V v b b q u.X b n @.v.m.v.j b b Q &X,X0XwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwX0X,X$X^ b b , H.H.+X+XH.H.H.s.N b n 7.7.v b B 8.v.v.v.w.M b b g r b b b n n n b b b b e y.O b n X.m.v.n.e b b u &X,X0XrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrX0X,X$X/ b b + F.H.H.H.+XH.d.b b M | 8.> c b @ 9.v.9.u., b b - 3.& b b 7 1.1.4.4.4.6.7.9.w.m b + t.v.m.p.D b b K.;X,X0XwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwX0X,X$X-.b b b i D.H.G.H.J.N b b = 9.9.5 c b B 7.9.v.y.b b m f 4.O b b 3 6.6.6.g 9 4 h u.h b b - b.m.m.s.b b N ~.;X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwX0X,X;XE.G b b I z ] ] ] W n b H l 9.8.9 b b m e 6 r e b b # 0.y.< b b O 6 p 6 < # ; q.v.t b b 0 n.A.A.+.b b H _.;X,XwXwXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwXwX,X;X#Xf.b b b b b b b b b - a.v.v.w.@ b b v b b b b b @ b.m.v.w.M b b b b b b v ..m.n.A b n g.H.H.H.4 b b [ &X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXwXwX0X:X$XZ.Q H v n b m B H E x n.m.m.q.B b v < . v N + E z m.m.m.b.e - M m v M - t k.D.m.; # - V.H.+XH.s # # K.:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXwXwX,X,X$X+XG.Z.Z.B.C.S.F.H.H.H.D.D.j b b q v.b.a.n.B.H.H.+X+X+XH.H.D.Z.C.Z.Z.F.H.H.+X+XH.).H.$X&X&X;X$X#X#X:X,X0XwXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXrXwX0X,X;X#X+X+X+XH.H.+X+X+XH.H.H.D.e b n i n.m.D.H.H.+X#X$X$X+X+X+X+XH.H.H.H.+X+X+X$X&X&X&X$X;X;X;X:X;X:X,X,X0XwXwXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXrXrXwXwX,X,X;X;X$X$X$X;X;X&X;X$X#X+XF b v s.H.H.+X$X&X;X;X,X,X,X;X:X;X;X;X;X;X;X:X,X,X,X0X,X0X,X0X0X0X0X0X0X0XwXwXrXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXrXtXrXwXwX0X,X:X;X;X;X;X;X:X;X;X;X$X+XC b B k.+X+X$X$X;X,X,X0X0X0X0X0X;X,X,X,X,X,X,X,X,X0X0X0X0X0X0XwX0X0X0XwXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXrXrXrXrXwXwXwX0X0X0X0X0X0X0X,X,X:X^.^.!.$X$X;X,X,X0XwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXwXrXrXwXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXrXrXrXrXwXwXwXwX0XwXwXwX0X0X,X:X;X$X&X&X;X,X,X0XwXwXwXrXrXrXrXrXwXwXwXwXwXwXwXrXrXrXwXrXrXrXrXrXrXrXrXrXrXtXrXtXtXrXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXwXwXwXwX0X,X0X0X0XwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXwXrXrXrXrXrXtXrXrXrXtXrXrXrXrXrXrXrXrXrXtXtXtXrXrXtXtXtXtXrXrXtXrXrXtXrXtXrXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXrXtXtXrXtXrXrXrXrXrXrXwXwXwX0XwX0XwXwXwXrXrXrXtXtXrXrXrXrXrXrXrXrXwXrXwXrXwXwXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXrXtXrXrXtXtXrXrXrXrXrXrXrXrXrXrXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwXrXrXrXrXrXrXtXrXtXrXrXrXrXrXwXwXwXwXwX0X0XwX0XwXwXwXwXwXwXwXrXwXwXwX0X0X0X0XwX0XwXwXrXrXrXwXrXwXwXwX0XwX0XwXwXwXrXrXrXrXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXtXtXrXrXtXrXrXeX7X7X9XwXwXwX5X3X3X3X2X2X2X5X0XwXwXwXwXwX8X3X3X2X2X2X2X2X3X6X6X7XwXwXwXwXwXwX7X1XXXOXOX1X8XwXwXrXrXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXrXrXwXT.T T :.,X,X-X` G G G G G G U _ J.-X,X,X,X[ G G G G G G G G G G _ >XwX0X,X&XI.R N b b b m ! `.5XwXrXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXtXtXrXtXrXrXrXwX0X' b b ] >X,X%XJ b b b b b b b b Q {.:X;X:Xq b b b b b b b b b b Y >X0X,X-X'.^ n b b b b b m *.1XwXwXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrX0X0X%XL b b L.@X+X-.b b M L L L D b b b M V.+X(.N b b D H H H H H U U W.;X&X^.H b b n W -.-.W n b b J &XwXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0X XF b b U.+X+X[ b b D z z j P v b b N U.H.S.m b m E Q t ^ ) / ) ) /.$X$X;.m b n A %.H.H.J.N b b N .XwXwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X!.m b L N.D.m.* b b y v.v.v.v.p.n b M f.m.w b b D u.v.m.m.D.G.H.H.+X).g.b b B j.F.D.D.D.D.l.; F I /.0XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X:XU.n b E B.A.n.$ b b s v.9.v.v.r.n n M r.b.1 b b D u.v.m.m.D.D.H.H.).H.k b b # M.G.D.D.D.D.Z.t w u _.0XwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX,X;X$XJ b m h b.v.i.m b M a 5.5.2.p M b c < 8.2.+ b b M o o o o # % j G.H.g.m b A M.D.D.D.B.M.M.M.M.Z.(.:X0XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXwX,X,X&X(.n b M 0.v.v.s b b b b b n b b c b M u.v.g M b b b b b b b b b i G.D.0 b b 8 D.D.H.G.P n b b n b U :X,XwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwX0X,X;X$XV.n b M w.v.9.< b b b b b b b b c H r 9.v.a n b   * < < w w Q Q g.D.B.: b b r D.D.D.m.C b b b b b ) ;X0XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrX6XP.=.K.;X#X+Xx n b D v.u.7.. b b M D . D & 2 q.b.b.v.v.< b b X 6.9.9.b.m.D.D.D.D.n.# b b f D.D.D.b.= 1 * N b n !.;X,XwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXwX<X~ P x $X+XH.z b b - v.v.3.M b b < r r r k 0.a.m.m.m.v.# b b , 6.9.v.m.D.D.D.H.D.z.O b b s D.D.D.N.f l 9 v b M ~.;X,XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwX0XY.n b e H.H.V.F b b p b.v.h v b v v.m.A.D.H.+X+X+XH.D.p.b b m p 9.v.m.D.D.H.H.H.D.N.- b b - m.A.D.A.m.a.B b b - (.:X0XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX0XY.n b ; Z.C.$.A b v 0.m.m.l n b M m.D.D.H.+X#X+X+XH.H.r.b b m < d l l l $.;.J.V.H.B.w b b C @.s.a.k.#.j n b b : ).:X,XwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X'.N b b A B n b n z m.D.B.0 b b 9 H.H.+X$X;X:X;X$X$X+Xl b b b b b b b b b b b s.H.H.B.H b b b n Z Z b b V n b ] $X:X0XwXrXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwX0X,X.XR b b b b b A P d.D.D.C.H b b j H.$X$X;X:X,X,X;X;X+X/ b b b b b b b b b b b a.H.H.D.u G b b b b b B H : v m ;.$X,XwXwXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXwXwX,X:X Xg.j 5 y s.C.H.H.+X+X|.E.Q.Q. X;X;X,X0XwXwX0X0X,X;X/.U.j.h.g.f.h.j.U.U.U.!.$X$X+X+XH.Z.g.y 4 6 l x.D.A.l.~.#X,X0XwXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXwX0X:X$XG.k.e.f.B.H.H.+X$X$X$X#X$X$X;X;X,X0XwXwXwXwX0X0X;X$X+XH.D.D.D.F.H.+X+X#X&X$X;X$X$X+X+XA.r.X.e.a.H.H.H.+X+X;X,X0XwXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwX,X,X$X&X$X$X$X$X;X;X,X,X,X,X,X,X0XwXwXwXrXtXrXrXwXwX0X,X;X$X$X+X$X$X$X;X;X:X,X,X,X,X,X;X$X&X#X#X$X$X$X$X$X;X,X,X0XwXrXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXwXwX0X,X:X;X;X$X;X;X:X,X,X0X0X,X0X0X0XwXwXwXrXrXtXrXrXwXwX0X;X;X$X&X$X$X&X:X,X,X,X,X0X,X,X:X;X;X$X$X$X$X$X;X:X,X,X0XwXwXrXrXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXwXwXwX0X0X0X0X0X0XwXwXwXwXwXwXwXwXrXwXrXtXtXrXtXtXrXrXrXwX0X0X0X0X,X,X0X0X0X0XwXwXwXwXwXwX0X0X0X,X,X,X,X0X0XwXwXwXrXtXrXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXwXwX0X0X0X0X0XwXwXwXrXwXrXrXrXrXrXtXrXtXtXtXtXrXrXrXwXwXwX0X0X0X0X0X0X0XwXwXwXwXwXwXwXwXwX0X0X0X0XwXwXwXwXwXrXrXrXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXrXrXrXrXtXtXrXtXtXrXtXtXtXtXtXtXtXrXtXrXtXrXrXrXrXwXwXrXrXrXrXrXrXrXtXrXrXrXrXrXrXrXwXrXrXrXrXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXrXtXrXrXrXrXrXrXtXtXrXtXrXtXrXrXtXtXtXtXtXtXtXtXtXtXtXrXrXrXrXrXrXrXrXrXrXrXtXtXrXtXrXrXtXrXrXrXrXrXrXrXrXtXrXrXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX",
+"tXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtXtX"
+};
index 3028956755c6853fafb03621feafb990e62ede2c..98f9fe7cd2470c12fb46de0bac41c1d2856b4c7b 100644 (file)
@@ -40,6 +40,7 @@
 \r
 \r
 /* Markers values */\r
+#define J2KMARK_NUM 24\r
 enum {\r
        SOC_VAL = 0xFF4F,\r
        SOT_VAL = 0xFF90,\r
@@ -59,18 +60,20 @@ enum {
        PPT_VAL = 0xFF61,\r
        SOP_VAL = 0xFF91,\r
        EPH_VAL = 0xFF92,\r
-       CME_VAL = 0xFF64,\r
-#ifndef USEOLDJPWL \r
-       EPB_VAL = 0xFF66,\r
+       COM_VAL = 0xFF64\r
+#ifdef USE_JPWL\r
+       , EPB_VAL       = 0xFF66,\r
        ESD_VAL = 0xFF67,\r
        EPC_VAL = 0xFF68,\r
        RED_VAL = 0xFF69\r
-#else\r
-       EPB_VAL = 0xFF96,\r
+       /*, EPB_VAL = 0xFF96,\r
        ESD_VAL = 0xFF98,\r
        EPC_VAL = 0xFF97,\r
-       RED_VAL = 0xFF99\r
-#endif\r
+       RED_VAL = 0xFF99*/\r
+#endif // USE_JPWL\r
+#ifdef USE_JPSEC\r
+       , SEC_VAL = 0xFF65\r
+#endif // USE_JPSEC\r
 };\r
 \r
 // All the markers in one vector\r
@@ -80,8 +83,13 @@ unsigned short int marker_val[] = {
        COD_VAL, COC_VAL, RGN_VAL, QCD_VAL, QCC_VAL, POD_VAL,\r
        TLM_VAL, PLM_VAL, PLT_VAL, PPM_VAL, PPT_VAL,\r
        SOP_VAL, EPH_VAL,\r
-       CME_VAL,\r
-       EPB_VAL, ESD_VAL, EPC_VAL, RED_VAL\r
+       COM_VAL\r
+#ifdef USE_JPWL\r
+       , EPB_VAL, ESD_VAL, EPC_VAL, RED_VAL\r
+#endif // USE_JPWL\r
+#ifdef USE_JPSEC\r
+       , SEC_VAL\r
+#endif // USE_JPSEC\r
 };\r
 \r
 // Marker names\r
@@ -91,8 +99,13 @@ char *marker_name[] = {
        "COD", "COC", "RGN", "QCD", "QCC", "POD",\r
        "TLM", "PLM", "PLT", "PPM", "PPT",\r
        "SOP", "EPH",\r
-       "CME",\r
-       "EPB", "ESD", "EPC", "RED"\r
+       "COM"\r
+#ifdef USE_JPWL\r
+       , "EPB", "ESD", "EPC", "RED"\r
+#endif // USE_JPWL\r
+#ifdef USE_JPSEC\r
+       , "SEC"\r
+#endif // USE_JPSEC\r
 };\r
 \r
 // Marker descriptions\r
@@ -104,13 +117,20 @@ char *marker_descr[] = {
        "Tile-part lengths, main header", "Packet length, main header", "Packets length, tile-part header",\r
        "Packed packet headers, main header", "Packed packet headers, tile-part header",\r
        "Start of packet", "End of packet header",\r
-       "Comment and extension",\r
-       "Error Protection Block", "Error Sensitivity Descriptor", "Error Protection Capability",\r
+       "Comment and extension"\r
+#ifdef USE_JPWL\r
+       , "Error Protection Block", "Error Sensitivity Descriptor", "Error Protection Capability",\r
        "Residual Errors Descriptor"\r
+#endif // USE_JPWL\r
+#ifdef USE_JPSEC\r
+       , "Main security marker"\r
+#endif // USE_JPSEC\r
 };\r
 \r
 void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOffset length, wxTreeItemId parentid)\r
 {\r
+       unsigned short int csiz = 0;\r
+\r
        // check if the file is opened\r
        if (m_file->IsOpened())\r
                WriteText(wxT("File OK"));\r
@@ -120,218 +140,1308 @@ void OPJParseThread::ParseJ2KFile(wxFile *m_file, wxFileOffset offset, wxFileOff
        // position at the beginning\r
        m_file->Seek(offset, wxFromStart);\r
 \r
-       //WriteText(wxString::Format(wxT("from  to %d"), length));\r
-\r
        // navigate the file\r
-       int m, inside_sod = 0, nmarks = 0, maxmarks = 10000, done = 0;\r
+       int m, inside_sod = 0, inside_sop = 0;\r
+       int nmarks = 0, maxmarks = 10000;\r
        unsigned char onebyte[1];\r
-       unsigned char twobytes[2];\r
+       unsigned char twobytes[2], firstbyte, secondbyte;\r
        unsigned char fourbytes[4];\r
        unsigned short int currmark;\r
        unsigned short int currlen;\r
        int lastPsot = 0, lastsotpos = 0;\r
 \r
        WriteText(wxT("Start search..."));\r
-       while ((offset < length) && (!m_file->Eof())) {\r
 \r
-               done = 0;\r
+// advancing macro\r
+#define OPJ_ADVANCE(A) {offset += A; if (offset < length) m_file->Seek(offset, wxFromStart); else return;}\r
 \r
-               // read da marka\r
-               if (m_file->Read(twobytes, 2) != 2)\r
+       // begin search\r
+       while ((offset < length) && (!m_file->Eof())) {\r
+\r
+               // read one byte\r
+               if (m_file->Read(&firstbyte, 1) != 1)\r
                        break;\r
-               currmark = (((unsigned short int) twobytes[0]) << 8) + (unsigned short int) twobytes[1];\r
 \r
-               // Markers cycle\r
-               for (m = 0; m < 23; m++) {\r
+               // look for 0xFF\r
+               if (firstbyte == 0xFF) {\r
 \r
-                       // check the marker\r
-                       if (currmark == marker_val[m]) {\r
+                       // it is a possible marker\r
+                       if (m_file->Read(&secondbyte, 1) != 1)\r
+                               break;\r
+                       else\r
+                               currmark = (((unsigned short int) firstbyte) << 8) + (unsigned short int) secondbyte;\r
 \r
-                               if (currmark == SOD_VAL) {\r
+               } else {\r
 \r
-                                       // we enter SOD\r
-                                       currlen = 0;\r
-                                       inside_sod = 1;\r
+                       // nope, advance by one and search again\r
+                       OPJ_ADVANCE(1);\r
+                       continue;\r
+               }\r
+               \r
+               // search the marker\r
+               for (m = 0; m < J2KMARK_NUM; m++) {\r
+                       if (currmark == marker_val[m])\r
+                               break;\r
+               }\r
 \r
-                               } else if ((currmark == SOC_VAL) || (currmark == EOC_VAL) || (currmark == EPH_VAL))\r
-                                       \r
-                                       currlen = 0;\r
+               // marker not found\r
+               if (m == J2KMARK_NUM) {\r
+                       // nope, advance by one and search again\r
+                       OPJ_ADVANCE(1);\r
+                       continue;\r
+               }\r
 \r
-                               else {\r
+               // if we are inside SOD, only some markers are allowed\r
+               if (inside_sod) {\r
 \r
-                                       // read length\r
-                                       if (m_file->Read(twobytes, 2) != 2)\r
-                                               break;\r
-                                       currlen = (((unsigned short int) twobytes[0]) << 8) + (unsigned short int) twobytes[1];\r
+                       // we are inside SOP\r
+                       if (inside_sop) {\r
+\r
+                       }\r
 \r
+                       // randomly marker coincident data\r
+                       if ((currmark != SOT_VAL) &&\r
+                               (currmark != EOC_VAL) /*&&\r
+                               (currmark != SOP_VAL) &&\r
+                               (currmark != EPH_VAL)*/) {\r
+                               OPJ_ADVANCE(1);\r
+                               continue;\r
+                       }\r
+\r
+                       // possible SOT?\r
+                       if ((currmark == SOT_VAL)) {\r
+                               // too early SOT\r
+                               if (offset < (lastsotpos + lastPsot)) {\r
+                                       OPJ_ADVANCE(1);\r
+                                       continue;\r
                                }\r
+                               // we were not in the last tile\r
+                               /*if (lastPsot != 0) {\r
+                                       OPJ_ADVANCE(1);\r
+                                       break;\r
+                               }*/\r
+                       }\r
+               }\r
 \r
-                               // inside SOD, only some markers are allowed\r
-                               if (inside_sod && (currmark != SOD_VAL) && (currmark != SOT_VAL)\r
-                                       && (currmark != EOC_VAL) && (currmark != SOP_VAL) && (currmark != EPH_VAL))\r
-                                       break; /*randomly marker coincident data */\r
+               // beyond this point, the marker MUST BE real\r
 \r
-                               if (inside_sod && (currmark == SOT_VAL) && (lastPsot == 0))\r
-                                       inside_sod = 0; /* random data coincident with SOT, but last SOT was the last one */\r
+               // length of current marker segment\r
+               if ((currmark == SOD_VAL) ||\r
+                       (currmark == SOC_VAL) ||\r
+                       (currmark == EOC_VAL) ||\r
+                       (currmark == EPH_VAL))\r
 \r
-                               if (inside_sod && (currmark == SOT_VAL))\r
-                                       inside_sod = 0; /* new tile part */\r
+                       // zero length markers\r
+                       currlen = 0;\r
 \r
-                               // here we pass to AppendItem() normal and selected item images (we\r
-                               // suppose that selected image follows the normal one in the enum)\r
-                               int image, imageSel;\r
-                               image = m_tree->TreeCtrlIcon_Folder;\r
-                               imageSel = image + 1;\r
+               else {\r
+\r
+                       // read length field\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+\r
+                       currlen = (((unsigned short int) twobytes[0]) << 8) + (unsigned short int) twobytes[1];\r
+               }\r
+\r
+               // here we pass to AppendItem() normal and selected item images (we\r
+               // suppose that selected image follows the normal one in the enum)\r
+               int image, imageSel;\r
+               image = m_tree->TreeCtrlIcon_Folder;\r
+               imageSel = image + 1;\r
+\r
+               // append the marker\r
+               wxTreeItemId currid = m_tree->AppendItem(parentid,\r
+                       wxString::Format(wxT("%03d: %s (0x%04X)"), nmarks, marker_name[m], marker_val[m]),\r
+                       image, imageSel,\r
+                       new OPJMarkerData(wxT("MARK"), m_tree->m_fname.GetFullPath(), offset, offset + currlen + 1)\r
+                       );\r
+\r
+               // append some info\r
+               image = m_tree->TreeCtrlIcon_File;\r
+               imageSel = image + 1;\r
+\r
+               // marker name\r
+               wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,\r
+                       wxT("*** ") + wxString::Format(wxT("%s"), marker_descr[m]) + wxT(" ***"),\r
+                       image, imageSel,\r
+                       new OPJMarkerData(wxT("INFO"))\r
+                       );\r
+               m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT);\r
+\r
+               // position and length\r
+               wxTreeItemId subcurrid2 = m_tree->AppendItem(currid,\r
+                       wxLongLong(offset).ToString() + wxT(" > ") + wxLongLong(offset + currlen + 1).ToString() + \r
+                       wxT(", ") + wxString::Format(wxT("%d + 2 (%d)"), currlen, currlen + 2),\r
+                       image, imageSel,\r
+                       new OPJMarkerData(wxT("INFO"))\r
+                       );\r
+\r
+               // give additional info on markers\r
+               switch (currmark) {\r
+\r
+               /////////\r
+               // SOP //\r
+               /////////\r
+               case SOP_VAL:\r
+                       {\r
+                       // read packet number\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       int packnum = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Pack. no. %d"), packnum),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+                       inside_sop = 1;\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // RED //\r
+               /////////\r
+               case RED_VAL:\r
+                       {\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char pred = onebyte[0];\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxString address[] = {\r
+                               wxT("Packet addressing"),\r
+                               wxT("Byte-range addressing"),\r
+                               wxT("Packet-range addressing"),\r
+                               wxT("Reserved")\r
+                       };\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               address[(pred & 0xC0) >> 6],\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d bytes range"), (((pred & 0x02) >> 1) + 1) * 2),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               pred & 0x01 ? wxT("Errors/erasures in codestream") : wxT("Error free codestream"),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Residual corruption level: %d"), (pred & 0x38) >> 3),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // ESD //\r
+               /////////\r
+               case ESD_VAL:\r
+                       {\r
+                       unsigned short int cesd;\r
+                       if (csiz < 257) {\r
+                               if (m_file->Read(onebyte, 1) != 1)\r
+                                       break;\r
+                               cesd = onebyte[0];\r
+                       } else {\r
+                               if (m_file->Read(twobytes, 2) != 2)\r
+                                       break;\r
+                               cesd = STREAM_TO_UINT16(twobytes, 0);\r
+                       }\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char pesd = onebyte[0];\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               pesd & 0x01 ? wxT("Comp. average") : wxString::Format(wxT("Comp. no. %d"), cesd),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       wxString meth[] = {\r
+                               wxT("Relative error sensitivity"),\r
+                               wxT("MSE"),\r
+                               wxT("MSE reduction"),\r
+                               wxT("PSNR"),\r
+                               wxT("PSNR increase"),\r
+                               wxT("MAXERR (absolute peak error)"),\r
+                               wxT("TSE (total squared error)"),\r
+                               wxT("Reserved")\r
+                       };\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               meth[(pesd & 0x38) >> 3],\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       wxString address[] = {\r
+                               wxT("Packet addressing"),\r
+                               wxT("Byte-range addressing"),\r
+                               wxT("Packet-range addressing"),\r
+                               wxT("Reserved")\r
+                       };\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               address[(pesd & 0xC0) >> 6],\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d bytes/value, %d bytes range"), ((pesd & 0x04) >> 2) + 1, (((pesd & 0x02) >> 1) + 1) * 2),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // EPC //\r
+               /////////\r
+               case EPC_VAL:\r
+                       {\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       unsigned short int pcrc = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int dl = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char pepc = onebyte[0];\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("CRC-16 = 0x%x"), pcrc),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
 \r
-                               // append the marker\r
-                               wxTreeItemId currid = m_tree->AppendItem(parentid,\r
-                                       wxString::Format(wxT("%03d: %s (0x%04X)"), nmarks, marker_name[m], marker_val[m]),\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Tot. length = %d"), dl),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%s%s%s%s"),\r
+                                       pepc & 0x10 ? wxT("ESD, ") : wxT(""),\r
+                                       pepc & 0x20 ? wxT("RED, ") : wxT(""),\r
+                                       pepc & 0x40 ? wxT("EPB, ") : wxT(""),\r
+                                       pepc & 0x80 ? wxT("Info") : wxT("")\r
+                                       ),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // EPB //\r
+               /////////\r
+               case EPB_VAL:\r
+                       {\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char depb = onebyte[0];\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int ldpepb = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int pepb = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("No. %d, %slatest, %spacked"),\r
+                                       depb & 0x3F,\r
+                                       depb & 0x40 ? wxT("") : wxT("not "),\r
+                                       depb & 0x80 ? wxT("") : wxT("un")),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d bytes protected"), ldpepb),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (pepb == 0x00000000)\r
+\r
+                               subcurrid = m_tree->AppendItem(currid,\r
+                                       wxT("Predefined codes"),\r
                                        image, imageSel,\r
-                                       new OPJMarkerData(wxT("MARK"), m_tree->m_fname.GetFullPath(), offset, offset + currlen + 1)\r
+                                       new OPJMarkerData(wxT("INFO"))\r
                                        );\r
 \r
-                               // append some info\r
-                               image = m_tree->TreeCtrlIcon_File;\r
-                               imageSel = image + 1;\r
+                       else if ((pepb >= 0x10000000) && (pepb <= 0x1FFFFFFF)) {\r
 \r
-                               // marker name\r
-                               wxTreeItemId subcurrid1 = m_tree->AppendItem(currid,\r
-                                       wxT("*** ") + wxString::Format(wxT("%s"), marker_descr[m]) + wxT(" ***"),\r
+                               wxString text = wxT("CRC code");\r
+                               if (pepb == 0x10000000)\r
+                                       text << wxT(", CCITT (X25) 16 bits");\r
+                               else if (pepb == 0x10000001)\r
+                                       text << wxT(", Ethernet 32 bits");\r
+                               else\r
+                                       text << wxT(", JPWL RA");\r
+                               subcurrid = m_tree->AppendItem(currid,\r
+                                       text,\r
                                        image, imageSel,\r
                                        new OPJMarkerData(wxT("INFO"))\r
                                        );\r
-                               m_tree->SetItemFont(subcurrid1, *wxITALIC_FONT);\r
 \r
-                               // position and length\r
-                               wxTreeItemId subcurrid2 = m_tree->AppendItem(currid,\r
-                                       wxLongLong(offset).ToString() + wxT(" > ") + wxLongLong(offset + currlen + 1).ToString() + \r
-                                       wxT(", ") + wxString::Format(wxT("%d + 2 (%d)"), currlen, currlen + 2),\r
+                       } else if ((pepb >= 0x20000000) && (pepb <= 0x2FFFFFFF)) {\r
+\r
+                               wxString text;\r
+                               subcurrid = m_tree->AppendItem(currid,\r
+                                       wxString::Format(wxT("RS code, RS(%d, %d)"),\r
+                                               (pepb & 0x0000FF00) >> 8,\r
+                                               (pepb & 0x000000FF)),\r
                                        image, imageSel,\r
                                        new OPJMarkerData(wxT("INFO"))\r
                                        );\r
 \r
-                               // give additional info on markers\r
-                               switch (currmark) {\r
-                                       \r
-                               case SOP_VAL:\r
-                                       {\r
-                                       // read packet number\r
-                                       if (m_file->Read(twobytes, 2) != 2)\r
-                                               break;\r
-                                       int packnum = STREAM_TO_UINT16(twobytes, 0);;\r
-                                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
-                                               wxString::Format(wxT("Pack. no. %d"), packnum),\r
-                                               image, imageSel,\r
-                                               new OPJMarkerData(wxT("INFO"))\r
-                                               );\r
-                                       }\r
+                       } else if ((pepb >= 0x30000000) && (pepb <= 0x3FFFFFFE))\r
+\r
+                               subcurrid = m_tree->AppendItem(currid,\r
+                                       wxT("JPWL RA"),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                       else if (pepb == 0xFFFFFFFF)\r
+\r
+                               subcurrid = m_tree->AppendItem(currid,\r
+                                       wxT("No method"),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // SIZ //\r
+               /////////\r
+               case SIZ_VAL:\r
+                       {\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       unsigned short int rsiz = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int xsiz = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int ysiz = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int xosiz = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int yosiz = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int xtsiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                       this->m_tree->m_childframe->m_twidth = xtsiz;\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int ytsiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                       this->m_tree->m_childframe->m_theight = ytsiz;\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int xtosiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                       this->m_tree->m_childframe->m_tx = xtosiz;\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int ytosiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                       this->m_tree->m_childframe->m_ty = ytosiz;\r
+\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       csiz = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       bool equaldepth = true, equalsize = true;\r
+                       unsigned char *ssiz  = new unsigned char(csiz);\r
+                       unsigned char *xrsiz = new unsigned char(csiz);\r
+                       unsigned char *yrsiz = new unsigned char(csiz);\r
+\r
+                       for (int c = 0; c < csiz; c++) {\r
+\r
+                               if (m_file->Read(&ssiz[c], 1) != 1)\r
                                        break;\r
 \r
-                               case SIZ_VAL:\r
-                                       {\r
-                                       m_file->Seek(2, wxFromCurrent);\r
-                                       if (m_file->Read(fourbytes, 4) != 4)\r
-                                               break;\r
-                                       unsigned long int xsiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                               if (c > 0)\r
+                                       equaldepth = equaldepth && (ssiz[c] == ssiz[c - 1]);\r
 \r
-                                       if (m_file->Read(fourbytes, 4) != 4)\r
-                                               break;\r
-                                       unsigned long int ysiz = STREAM_TO_UINT32(fourbytes, 0);\r
+                               if (m_file->Read(&xrsiz[c], 1) != 1)\r
+                                       break;\r
 \r
-                                       m_file->Seek(24, wxFromCurrent);\r
-                                       if (m_file->Read(twobytes, 2) != 2)\r
-                                               break;\r
-                                       unsigned short int csiz = STREAM_TO_UINT16(twobytes, 0);\r
+                               if (m_file->Read(&yrsiz[c], 1) != 1)\r
+                                       break;\r
+\r
+                               if (c > 0)\r
+                                       equalsize = equalsize && (xrsiz[c] == xrsiz[c - 1]) && (yrsiz[c] == yrsiz[c - 1]) ;\r
+\r
+                       }\r
+\r
+                       if (equaldepth && equalsize)\r
+                               wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                                       wxString::Format(wxT("I: %dx%d (%d, %d), %d c., %d%s bpp"),\r
+                                       xsiz, ysiz,\r
+                                       xosiz, yosiz,\r
+                                       csiz, ((ssiz[0] & 0x7F) + 1),\r
+                                       (ssiz[0] & 0x80) ? wxT("s") : wxT("u")),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+                       else\r
+                               wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                                       wxString::Format(wxT("I: %dx%d (%d, %d), %d c."),\r
+                                       xsiz, ysiz,\r
+                                       xosiz, yosiz,\r
+                                       csiz),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("T: %dx%d (%d, %d)"),\r
+                               xtsiz, ytsiz,\r
+                               xtosiz, ytosiz),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_Folder;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid4 = m_tree->AppendItem(currid,\r
+                               wxT("Components"),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       for (c = 0; c < csiz; c++) {\r
+\r
+                               wxTreeItemId subcurrid5 = m_tree->AppendItem(subcurrid4,\r
+                                       wxString::Format(wxT("#%d: %dx%d, %d%s bpp"),\r
+                                       c,\r
+                                       xsiz/xrsiz[c], ysiz/yrsiz[c],\r
+                                       ((ssiz[c] & 0x7F) + 1),\r
+                                       (ssiz[c] & 0x80) ? wxT("s") : wxT("u")),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                       }\r
+\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // SOT //\r
+               /////////\r
+               case SOT_VAL:\r
+                       {\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       unsigned short int isot = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       if (m_file->Read(fourbytes, 4) != 4)\r
+                               break;\r
+                       unsigned long int psot = STREAM_TO_UINT32(fourbytes, 0);\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char tpsot = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char tnsot = onebyte[0];\r
+\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("tile %d, psot = %d, part %d of %d"), isot, psot, tpsot, tnsot),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       lastPsot = psot;\r
+                       lastsotpos = offset;\r
+                       inside_sod = 0;\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // COC //\r
+               /////////\r
+               case COC_VAL:\r
+                       {\r
+                       unsigned short int ccoc;\r
+                       if (csiz < 257) {\r
+                               if (m_file->Read(onebyte, 1) != 1)\r
+                                       break;\r
+                               ccoc = onebyte[0];\r
+                       } else {\r
+                               if (m_file->Read(twobytes, 2) != 2)\r
+                                       break;\r
+                               ccoc = STREAM_TO_UINT16(twobytes, 0);\r
+                       }\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char scoc = onebyte[0];\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Comp. no. %d"), ccoc),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+                       \r
+                       wxString text;\r
+                       if (scoc & 0x01)\r
+                               text << wxT("Partitioned entropy coder");\r
+                       else\r
+                               text << wxT("Unpartitioned entropy coder");\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char decomplevs = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbswidth = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbsheight = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbstyle = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char transform = onebyte[0];\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (transform & 0x01)\r
+                               text = wxT("5-3 reversible wavelet");\r
+                       else\r
+                               text = wxT("9-7 irreversible wavelet");\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_Folder;\r
+                       imageSel = image + 1;\r
 \r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxT("Coding styles"),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       if (cbstyle & 0x01)\r
+                               text = wxT("Selective arithmetic coding bypass");\r
+                       else\r
+                               text = wxT("No selective arithmetic coding bypass");\r
+                       wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x02)\r
+                               text = wxT("Reset context probabilities on coding pass boundaries");\r
+                       else\r
+                               text = wxT("No reset of context probabilities on coding pass boundaries");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x04)\r
+                               text = wxT("Termination on each coding passs");\r
+                       else\r
+                               text = wxT("No termination on each coding pass");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x08)\r
+                               text = wxT("Vertically stripe causal context");\r
+                       else\r
+                               text = wxT("No vertically stripe causal context");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x10)\r
+                               text = wxT("Predictable termination");\r
+                       else\r
+                               text = wxT("No predictable termination");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x20)\r
+                               text = wxT("Segmentation symbols are used");\r
+                       else\r
+                               text = wxT("No segmentation symbols are used");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // COD //\r
+               /////////\r
+               case COD_VAL:\r
+                       {\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char scod = onebyte[0];\r
+\r
+                       wxString text;\r
+\r
+                       if (scod & 0x01)\r
+                               text << wxT("Partitioned entropy coder");\r
+                       else\r
+                               text << wxT("Unpartitioned entropy coder");\r
+\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       text = wxT("");\r
+                       if (scod & 0x02)\r
+                               text << wxT("Possible SOPs");\r
+                       else\r
+                               text << wxT("No SOPs");\r
+\r
+                       if (scod & 0x04)\r
+                               text << wxT(", possible EPHs");\r
+                       else\r
+                               text << wxT(", no EPHs");\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char progord = onebyte[0];\r
+\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       unsigned short int numlayers = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char mctransform = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char decomplevs = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbswidth = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbsheight = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char cbstyle = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char transform = onebyte[0];\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d levels (%d resolutions)"), decomplevs, decomplevs + 1),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       text = wxT("");\r
+                       switch (progord) {\r
+                       case (0):\r
+                               text << wxT("LRCP");\r
+                               break;\r
+                       case (1):\r
+                               text << wxT("RLCP");\r
+                               break;\r
+                       case (2):\r
+                               text << wxT("LRCP");\r
+                               break;\r
+                       case (3):\r
+                               text << wxT("RPCL");\r
+                               break;\r
+                       case (4):\r
+                               text << wxT("CPRL");\r
+                               break;\r
+                       default:\r
+                               text << wxT("unknown progression");\r
+                               break;\r
+                       }\r
+                       text << wxString::Format(wxT(", %d layers"), numlayers);\r
+                       if (transform & 0x01)\r
+                               text << wxT(", 5-3 rev.");\r
+                       else\r
+                               text << wxT(", 9-7 irr.");\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Code-blocks: %dx%d"), 1 << ((cbswidth & 0x0F) + 2), 1 << ((cbsheight & 0x0F) + 2)),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       switch (mctransform) {\r
+                       case (0):\r
+                               {\r
+                               text = wxT("No MCT");\r
+                               }\r
+                               break;\r
+                       case (1):\r
+                               {\r
+                               text = wxT("Reversible MCT on 0, 1, 2");\r
+                               }\r
+                               break;\r
+                       case (2):\r
+                               {\r
+                               text = wxT("Irreversible MCT on 0, 1, 2");\r
+                               }\r
+                               break;\r
+                       default:\r
+                               {\r
+                               text = wxT("Unknown");\r
+                               }\r
+                               break;\r
+                       };\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+\r
+                       image = m_tree->TreeCtrlIcon_Folder;\r
+                       imageSel = image + 1;\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxT("Coding styles"),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       if (cbstyle & 0x01)\r
+                               text = wxT("Selective arithmetic coding bypass");\r
+                       else\r
+                               text = wxT("No selective arithmetic coding bypass");\r
+                       wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x02)\r
+                               text = wxT("Reset context probabilities on coding pass boundaries");\r
+                       else\r
+                               text = wxT("No reset of context probabilities on coding pass boundaries");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x04)\r
+                               text = wxT("Termination on each coding passs");\r
+                       else\r
+                               text = wxT("No termination on each coding pass");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x08)\r
+                               text = wxT("Vertically stripe causal context");\r
+                       else\r
+                               text = wxT("No vertically stripe causal context");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x10)\r
+                               text = wxT("Predictable termination");\r
+                       else\r
+                               text = wxT("No predictable termination");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (cbstyle & 0x20)\r
+                               text = wxT("Segmentation symbols are used");\r
+                       else\r
+                               text = wxT("No segmentation symbols are used");\r
+                       subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // QCC //\r
+               /////////\r
+               case QCC_VAL:\r
+                       {\r
+                       unsigned short int cqcc;\r
+                       if (csiz < 257) {\r
+                               if (m_file->Read(onebyte, 1) != 1)\r
+                                       break;\r
+                               cqcc = onebyte[0];\r
+                       } else {\r
+                               if (m_file->Read(twobytes, 2) != 2)\r
+                                       break;\r
+                               cqcc = STREAM_TO_UINT16(twobytes, 0);\r
+                       }\r
+\r
+                       wxTreeItemId subcurrid = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("Comp. no. %d"), cqcc),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+                       \r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char sqcc = onebyte[0];\r
+\r
+                       wxString text;\r
+                       switch (sqcc & 0x1F) {\r
+                       case (0):\r
+                               text = wxT("No quantization");\r
+                               break;\r
+                       case (1):\r
+                               text = wxT("Scalar implicit");\r
+                               break;\r
+                       case (2):\r
+                               text = wxT("Scalar explicit");\r
+                               break;\r
+                       default:\r
+                               text = wxT("Unknown");\r
+                               break;\r
+                       }\r
+                       text << wxString::Format(wxT(", %d guard bits"), (sqcc & 0xE0) >> 5);\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // QCD //\r
+               /////////\r
+               case QCD_VAL:\r
+                       {\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char sqcd = onebyte[0];\r
+\r
+                       wxString text;\r
+                       switch (sqcd & 0x1F) {\r
+                       case (0):\r
+                               text = wxT("No quantization");\r
+                               break;\r
+                       case (1):\r
+                               text = wxT("Scalar implicit");\r
+                               break;\r
+                       case (2):\r
+                               text = wxT("Scalar explicit");\r
+                               break;\r
+                       default:\r
+                               text = wxT("Unknown");\r
+                               break;\r
+                       }\r
+                       text << wxString::Format(wxT(", %d guard bits"), (sqcd & 0xE0) >> 5);\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // COM //\r
+               /////////\r
+               case COM_VAL:\r
+                       {\r
+                       #define showlen 25\r
+                       unsigned char comment[showlen];\r
+\r
+                       if (m_file->Read(twobytes, 2) != 2)\r
+                               break;\r
+                       unsigned short int rcom = STREAM_TO_UINT16(twobytes, 0);\r
+\r
+                       wxString text;\r
+                       if (rcom == 0)\r
+                               text = wxT("Binary values");\r
+                       else if (rcom == 1)\r
+                               text = wxT("ISO 8859-1 (latin-1) values");\r
+                       else if (rcom < 65535)\r
+                               text = wxT("Reserved for registration");\r
+                       else\r
+                               text = wxT("Reserved for extension");\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               text,\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       if (m_file->Read(comment, showlen) != showlen)\r
+                               break;\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%.*s%s"), wxMin(showlen, currlen - 4), comment,\r
+                               (((currlen - 4) > showlen) ? "..." : "")),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+                       };\r
+                       break;\r
+\r
+               /////////\r
+               // TLM //\r
+               /////////\r
+               case TLM_VAL:\r
+                       {\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char ztlm = onebyte[0];\r
+\r
+                       if (m_file->Read(onebyte, 1) != 1)\r
+                               break;\r
+                       unsigned char stlm = onebyte[0];\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("TLM #%d"), ztlm),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxString::Format(wxT("%d bits/index, %d bits/length"),\r
+                               8 * ((stlm & 0x30) >> 4), 16 + 16 * ((stlm & 0x40) >> 6)),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       int n, numparts;\r
+\r
+                       numparts = (currlen - 2) / ( ((stlm & 0x30) >> 4) + 2 + 2 * ((stlm & 0x40) >> 6));\r
+\r
+                       image = m_tree->TreeCtrlIcon_Folder;\r
+                       imageSel = image + 1;\r
+\r
+                       subcurrid3 = m_tree->AppendItem(currid,\r
+                               wxT("Tile parts"),\r
+                               image, imageSel,\r
+                               new OPJMarkerData(wxT("INFO"))\r
+                               );\r
+\r
+                       image = m_tree->TreeCtrlIcon_File;\r
+                       imageSel = image + 1;\r
+\r
+                       for (n = 0; n < numparts; n++) {\r
+\r
+                               unsigned short int ttlm;\r
+                               unsigned long int ptlm;\r
+\r
+                               switch (((stlm & 0x30) >> 4)) {\r
+\r
+                               case 0:\r
+                                       ttlm = 0;\r
+                                       break;\r
+\r
+                               case 1:\r
                                        if (m_file->Read(onebyte, 1) != 1)\r
                                                break;\r
-                                       unsigned char ssiz = onebyte[0];\r
-\r
-                                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
-                                               wxString::Format(wxT("%d x %d, %d comps. @ %d bpp"), xsiz, ysiz, csiz, (ssiz + 1) & 0xEF),\r
-                                               image, imageSel,\r
-                                               new OPJMarkerData(wxT("INFO"))\r
-                                               );\r
+                                       ttlm = onebyte[0];\r
+                                       break;\r
 \r
-                                       }\r
+                               case 2:\r
+                                       if (m_file->Read(twobytes, 2) != 2)\r
+                                               break;\r
+                                       ttlm = STREAM_TO_UINT16(twobytes, 0);\r
                                        break;\r
 \r
-                               case SOT_VAL:\r
-                                       {\r
+                               }\r
+\r
+                               switch (((stlm & 0x40) >> 6)) {\r
+\r
+                               case 0:\r
                                        if (m_file->Read(twobytes, 2) != 2)\r
                                                break;\r
-                                       unsigned short int isot = STREAM_TO_UINT16(twobytes, 0);\r
+                                       ptlm = STREAM_TO_UINT16(twobytes, 0);\r
+                                       break;\r
 \r
+                               case 1:\r
                                        if (m_file->Read(fourbytes, 4) != 4)\r
                                                break;\r
-                                       unsigned long int psot = STREAM_TO_UINT32(fourbytes, 0);\r
+                                       ptlm = STREAM_TO_UINT32(fourbytes, 0);\r
+                                       break;\r
 \r
-                                       if (m_file->Read(onebyte, 1) != 1)\r
-                                               break;\r
-                                       unsigned char tpsot = onebyte[0];\r
+                               }\r
+\r
+                               wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                                       wxString::Format(wxT("Tile %d: %d bytes"), ttlm, ptlm),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                       }\r
+\r
+                       }\r
+                       break;\r
+\r
+               /////////\r
+               // POD //\r
+               /////////\r
+               case POD_VAL:\r
+                       {\r
+                       int n, numchanges;\r
+\r
+                       if (csiz < 257)\r
+                               numchanges = (currlen - 2) / 7;\r
+                       else\r
+                               numchanges = (currlen - 2) / 9;\r
+\r
+                       for (n = 0; n < numchanges; n++) {\r
+\r
+                               image = m_tree->TreeCtrlIcon_Folder;\r
+                               imageSel = image + 1;\r
+\r
+                               wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
+                                       wxString::Format(wxT("Change #%d"), n),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
 \r
+                               if (m_file->Read(onebyte, 1) != 1)\r
+                                       break;\r
+                               unsigned char rspod = onebyte[0];\r
+\r
+                               unsigned short int cspod;\r
+                               if (csiz < 257) {\r
                                        if (m_file->Read(onebyte, 1) != 1)\r
                                                break;\r
-                                       unsigned char tnsot = onebyte[0];\r
-\r
-                                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
-                                               wxString::Format(wxT("tile %d, psot = %d, part %d of %d"), isot, psot, tpsot, tnsot),\r
-                                               image, imageSel,\r
-                                               new OPJMarkerData(wxT("INFO"))\r
-                                               );\r
+                                       cspod = onebyte[0];\r
+                               } else {\r
+                                       if (m_file->Read(twobytes, 2) != 2)\r
+                                               break;\r
+                                       cspod = STREAM_TO_UINT16(twobytes, 0);\r
+                               }\r
 \r
-                                       lastPsot = psot;\r
-                                       lastsotpos = offset;\r
-                                       };\r
+                               if (m_file->Read(twobytes, 2) != 2)\r
                                        break;\r
+                               unsigned short int lyepod = STREAM_TO_UINT16(twobytes, 0);\r
 \r
-                               case CME_VAL:\r
-                                       {\r
-                                       #define showlen 25\r
-                                       unsigned char comment[showlen];\r
+                               if (m_file->Read(onebyte, 1) != 1)\r
+                                       break;\r
+                               unsigned char repod = onebyte[0];\r
 \r
-                                       m_file->Seek(2, wxFromCurrent);\r
-                                       if (m_file->Read(comment, showlen) != showlen)\r
+                               unsigned short int cepod;\r
+                               if (csiz < 257) {\r
+                                       if (m_file->Read(onebyte, 1) != 1)\r
+                                               break;\r
+                                       cepod = onebyte[0];\r
+                               } else {\r
+                                       if (m_file->Read(twobytes, 2) != 2)\r
                                                break;\r
+                                       cepod = STREAM_TO_UINT16(twobytes, 0);\r
+                               }\r
 \r
-                                       wxTreeItemId subcurrid3 = m_tree->AppendItem(currid,\r
-                                               wxString::Format(wxT("%.*s%s"), wxMin(showlen, currlen - 4), comment,\r
-                                               (((currlen - 4) > showlen) ? "..." : "")),\r
-                                               image, imageSel,\r
-                                               new OPJMarkerData(wxT("INFO"))\r
-                                               );\r
-                                       }\r
+                               if (m_file->Read(onebyte, 1) != 1)\r
                                        break;\r
+                               unsigned char ppod = onebyte[0];\r
+\r
+                               image = m_tree->TreeCtrlIcon_File;\r
+                               imageSel = image + 1;\r
+\r
+                               wxTreeItemId subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                                       wxString::Format(wxT("%d <= Resolution < %d"), rspod, repod),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                               subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                                       wxString::Format(wxT("%d <= Component < %d"), cspod, cepod),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+\r
+                               subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                                       wxString::Format(wxT("0 <= Layer < %d"), lyepod),\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
 \r
+                               wxString text = wxT("");\r
+                               switch (ppod) {\r
+                               case (0):\r
+                                       text << wxT("LRCP");\r
+                                       break;\r
+                               case (1):\r
+                                       text << wxT("RLCP");\r
+                                       break;\r
+                               case (2):\r
+                                       text << wxT("LRCP");\r
+                                       break;\r
+                               case (3):\r
+                                       text << wxT("RPCL");\r
+                                       break;\r
+                               case (4):\r
+                                       text << wxT("CPRL");\r
+                                       break;\r
                                default:\r
+                                       text << wxT("unknown progression");\r
                                        break;\r
                                }\r
-                               \r
-                               \r
-                               // increment number of markers\r
-                               nmarks++;\r
-                               if (nmarks >= maxmarks)\r
-                                       break;\r
+                               subcurrid4 = m_tree->AppendItem(subcurrid3,\r
+                                       text,\r
+                                       image, imageSel,\r
+                                       new OPJMarkerData(wxT("INFO"))\r
+                                       );\r
+                       }\r
 \r
-                               // increment offset\r
-                               if (currmark == SOD_VAL)\r
-                                       offset += lastPsot - (offset - lastsotpos);\r
-                               else\r
-                                       offset += (2 + currlen);\r
+                       }\r
+                       break;\r
 \r
-                               m_file->Seek(offset, wxFromStart);\r
-                               done = 1;\r
+               /////////\r
+               // SOD //\r
+               /////////\r
+               case SOD_VAL:\r
+                       {\r
+                       inside_sod = 1;\r
+                       };\r
+                       break;\r
 \r
-                               break;\r
-                       }\r
+               default:\r
+                       break;\r
+                       \r
                }\r
-\r
-               if (done)\r
-                       continue;\r
-               else {\r
-                       offset++;\r
-                       m_file->Seek(offset, wxFromStart);\r
+                                                               \r
+               // increment number of markers\r
+               if (nmarks++ >= maxmarks) {\r
+                       WriteText(wxT("Maximum amount of markers exceeded"));\r
+                       break;\r
                }\r
-       }\r
-       \r
+\r
+               // advance position\r
+               OPJ_ADVANCE(currlen + 2);\r
+       }       \r
+\r
+       WriteText(wxT("Search finished"));\r
 }\r
index c929418dea5ecda0b2b80e9d0aafb0d39c4a1aa5..46698bda3f79223a635874d694ffb5b9acdeecf9 100644 (file)
@@ -484,7 +484,7 @@ int OPJParseThread::box_handler_function(int boxtype, wxFile *fileid, wxFileOffs
                                        );\r
 \r
                                wxString text;\r
-                               for (int s = 0; s < sample_count; s++) {\r
+                               for (unsigned int s = 0; s < sample_count; s++) {\r
                                        fileid->Read(&entry_size, sizeof(unsigned long int));\r
                                        entry_size = BYTE_SWAP4(entry_size);\r
                                        \r
@@ -844,15 +844,15 @@ int OPJParseThread::jpeg2000parse(wxFile *fileid, wxFileOffset filepoint, wxFile
                                                                  wxTreeItemId parentid, int level, char *scansign, unsigned long int *scanpoint)\r
 {\r
        unsigned long int       LBox = 0x00000000;\r
-       int                     LBox_read;\r
+       //int                     LBox_read;\r
        char                    TBox[5] = "\0\0\0\0";\r
-       int                     TBox_read;\r
+       //int                     TBox_read;\r
        int8byte                                XLBox = 0x0000000000000000;\r
-       int                     XLBox_read;\r
+       //int                     XLBox_read;\r
        unsigned long int       box_length = 0;\r
        int                     last_box = 0, box_num = 0;\r
        int                     box_type = ANY_BOX;\r
-       unsigned char           onebyte[1], twobytes[2], fourbytes[4];\r
+       unsigned char           /*onebyte[1], twobytes[2],*/ fourbytes[4];\r
 \r
        /* cycle all over the file */\r
        box_num = 0;\r
index ec9870bd707540b4fcd3af87bc1ebb3271feec39..73f4889e0904b296029a3d58a68e5f78d73f56fa 100644 (file)
@@ -41,7 +41,7 @@ RSC=rc.exe
 # PROP Intermediate_Dir "Release"\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /YX /FD /c\r
 # ADD BASE RSC /l 0x80c /d "NDEBUG"\r
 # ADD RSC /l 0x80c /d "NDEBUG"\r
 BSC32=bscmake.exe\r
@@ -64,7 +64,7 @@ LIB32=link.exe -lib
 # PROP Intermediate_Dir "Debug"\r
 # PROP Target_Dir ""\r
 # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "OPJ_STATIC" /D "USE_JPWL" /D "USE_JPSEC" /YX /FD /GZ /c\r
 # ADD BASE RSC /l 0x80c /d "_DEBUG"\r
 # ADD RSC /l 0x80c /d "_DEBUG"\r
 BSC32=bscmake.exe\r
index 2c2149d294edda04209c580c932fd05f05b34053..fb89a7349bf609b1e3282e9d569499630acde783 100644 (file)
--- a/jpwl/rs.h
+++ b/jpwl/rs.h
@@ -104,7 +104,7 @@ Computes the minimum between two integers
 #define min(a,b)    (((a) < (b)) ? (a) : (b))
 #endif /* min */
 
-#endif /* __CRC32_HEADER__ */
+#endif /* __RS_HEADER__ */
 
 
 #endif /* USE_JPWL */