]> granicus.if.org Git - openjpeg/commitdiff
[1.5] backport r1017, r1030:1032 from trunk + additional fix for cmake and autotools
authorAntonin Descampe <antonin@gmail.com>
Wed, 2 Nov 2011 00:49:20 +0000 (00:49 +0000)
committerAntonin Descampe <antonin@gmail.com>
Wed, 2 Nov 2011 00:49:20 +0000 (00:49 +0000)
84 files changed:
applications/jpip/CHANGES
applications/jpip/CMakeLists.txt
applications/jpip/Makefile.am
applications/jpip/Makefile.nix
applications/jpip/libopenjpip/CMakeLists.txt
applications/jpip/libopenjpip/Makefile.am
applications/jpip/libopenjpip/cache_manager.c [moved from applications/jpip/opj_client/opj_dec_server/cache_manager.c with 100% similarity]
applications/jpip/libopenjpip/cache_manager.h [moved from applications/jpip/opj_client/opj_dec_server/cache_manager.h with 100% similarity]
applications/jpip/libopenjpip/channel_manager.c [moved from applications/jpip/opj_server/channel_manager.c with 100% similarity]
applications/jpip/libopenjpip/channel_manager.h [moved from applications/jpip/opj_server/channel_manager.h with 100% similarity]
applications/jpip/libopenjpip/comMakefile.mk
applications/jpip/libopenjpip/dec_clientmsg_handler.c [moved from applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.c with 63% similarity]
applications/jpip/libopenjpip/dec_clientmsg_handler.h [new file with mode: 0644]
applications/jpip/libopenjpip/imgsock_manager.c [moved from applications/jpip/opj_client/opj_dec_server/imgsock_manager.c with 100% similarity]
applications/jpip/libopenjpip/imgsock_manager.h [moved from applications/jpip/opj_client/opj_dec_server/imgsock_manager.h with 100% similarity]
applications/jpip/libopenjpip/jp2k_decoder.c [moved from applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c with 98% similarity]
applications/jpip/libopenjpip/jp2k_decoder.h [moved from applications/jpip/opj_client/opj_dec_server/jp2k_decoder.h with 100% similarity]
applications/jpip/libopenjpip/jpip_parser.c [moved from applications/jpip/opj_server/jpip_parser.c with 80% similarity]
applications/jpip/libopenjpip/jpip_parser.h [new file with mode: 0644]
applications/jpip/libopenjpip/jpipstream_manager.c [moved from applications/jpip/opj_client/opj_dec_server/jpipstream_manager.c with 99% similarity]
applications/jpip/libopenjpip/jpipstream_manager.h [moved from applications/jpip/opj_client/opj_dec_server/jpipstream_manager.h with 100% similarity]
applications/jpip/libopenjpip/openjpip.c [new file with mode: 0644]
applications/jpip/libopenjpip/openjpip.h [new file with mode: 0644]
applications/jpip/libopenjpip/query_parser.c [moved from applications/jpip/opj_server/query_parser.c with 89% similarity]
applications/jpip/libopenjpip/query_parser.h [moved from applications/jpip/opj_server/query_parser.h with 91% similarity]
applications/jpip/libopenjpip/session_manager.c [moved from applications/jpip/opj_server/session_manager.c with 100% similarity]
applications/jpip/libopenjpip/session_manager.h [moved from applications/jpip/opj_server/session_manager.h with 100% similarity]
applications/jpip/opj_client/CMakeLists.txt [deleted file]
applications/jpip/opj_client/Makefile.am [deleted file]
applications/jpip/opj_client/opj_dec_server/CMakeLists.txt [deleted file]
applications/jpip/opj_client/opj_dec_server/Makefile.am [deleted file]
applications/jpip/opj_client/opj_dec_server/Makefile.nix [deleted file]
applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar [deleted symlink]
applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar [deleted symlink]
applications/jpip/opj_server/CMakeLists.txt [deleted file]
applications/jpip/opj_server/Makefile.am [deleted file]
applications/jpip/opj_server/Makefile.nix [deleted file]
applications/jpip/tools/CMakeLists.txt [deleted file]
applications/jpip/tools/Makefile.am [deleted file]
applications/jpip/tools/Makefile.nix [deleted file]
applications/jpip/tools/jpip_to_j2k.c [deleted file]
applications/jpip/tools/jpip_to_jp2.c [deleted file]
applications/jpip/util/CMakeLists.txt [new file with mode: 0644]
applications/jpip/util/Makefile.am [new file with mode: 0644]
applications/jpip/util/Makefile.nix [new file with mode: 0644]
applications/jpip/util/addXMLinJP2.c [moved from applications/jpip/tools/addXMLinJP2.c with 100% similarity]
applications/jpip/util/jpip_to_j2k.c [moved from applications/jpip/opj_server/jpip_parser.h with 62% similarity]
applications/jpip/util/jpip_to_jp2.c [moved from applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.h with 62% similarity]
applications/jpip/util/opj_dec_server.c [moved from applications/jpip/opj_client/opj_dec_server/opj_dec_server.c with 78% similarity]
applications/jpip/util/opj_server.c [moved from applications/jpip/opj_server/opj_server.c with 73% similarity]
applications/jpip/util/opj_viewer/build.xml [moved from applications/jpip/opj_client/opj_viewer/build.xml with 100% similarity]
applications/jpip/util/opj_viewer/dist/manifest.txt [moved from applications/jpip/opj_client/opj_viewer/dist/manifest.txt with 100% similarity]
applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar [moved from applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20111018.jar with 100% similarity]
applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar [new file with mode: 0644]
applications/jpip/util/opj_viewer/dist/opj_viewer.jar [new symlink]
applications/jpip/util/opj_viewer/src/ImageManager.java [moved from applications/jpip/opj_client/opj_viewer/src/ImageManager.java with 100% similarity]
applications/jpip/util/opj_viewer/src/ImageViewer.java [moved from applications/jpip/opj_client/opj_viewer/src/ImageViewer.java with 100% similarity]
applications/jpip/util/opj_viewer/src/ImageWindow.java [moved from applications/jpip/opj_client/opj_viewer/src/ImageWindow.java with 100% similarity]
applications/jpip/util/opj_viewer/src/ImgdecClient.java [moved from applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java with 100% similarity]
applications/jpip/util/opj_viewer/src/JPIPHttpClient.java [moved from applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java with 98% similarity]
applications/jpip/util/opj_viewer/src/MML.java [moved from applications/jpip/opj_client/opj_viewer/src/MML.java with 100% similarity]
applications/jpip/util/opj_viewer/src/PnmImage.java [moved from applications/jpip/opj_client/opj_viewer/src/PnmImage.java with 100% similarity]
applications/jpip/util/opj_viewer/src/RegimViewer.java [moved from applications/jpip/opj_client/opj_viewer/src/RegimViewer.java with 100% similarity]
applications/jpip/util/opj_viewer/src/ResizeListener.java [moved from applications/jpip/opj_client/opj_viewer/src/ResizeListener.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/build.xml [moved from applications/jpip/opj_client/opj_viewer_xerces/build.xml with 100% similarity]
applications/jpip/util/opj_viewer_xerces/dist/manifest.txt [moved from applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt with 100% similarity]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar [moved from applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar with 100% similarity]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar [new file with mode: 0644]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar [new symlink]
applications/jpip/util/opj_viewer_xerces/src/ImageManager.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/ImageManager.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/ImageViewer.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/ImageViewer.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/ImageWindow.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/ImageWindow.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/ImgdecClient.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/JP2XMLparser.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/JPIPHttpClient.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/MML.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/MML.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/OptionPanel.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/PnmImage.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/RegimViewer.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java with 100% similarity]
applications/jpip/util/opj_viewer_xerces/src/ResizeListener.java [moved from applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java with 100% similarity]
applications/jpip/util/test_index.c [moved from applications/jpip/tools/test_index.c with 57% similarity]
configure.ac
libopenjpeg/phix_manager.c
libopenjpeg/ppix_manager.c

index c5ae11ad41a4a94a672d4d5be850c4f954052f44..545b4e9831c2421f9ca6565c758cae1b124a9f7e 100644 (file)
@@ -5,7 +5,21 @@ What's New for OpenJPIP
 ! : changed
 + : added
 
-October 14, 2011
+November 2, 2011
+* [antonin] additional patches for autotools and cmake
+
+October 26, 2011
+* [kaori] additional patches for autotool are applied
+
+October 25, 2011
+* [kaori] patches for cmake and autotool are applied
+* [kaori] fixed client viewer to be compatible with server response header both Content-type and Content-Type
+
+October 20, 2011
++ [added] API style in openJPIP library
+! [kaori] rearranged directories, applications are all under util/ directory, currently only 'make -f Makefile.nix' works
+
+October 18, 2011
 ! [kaori] rearranged opj_server, opj_dec_server directory
 
 October 14, 2011
index b6f6e2a532ea88b6cc9c1ecda21890fdcf00e3fb..aa8cf7ccf9cfc427bdfdf01971c51c3d52914dda 100644 (file)
@@ -1,5 +1,3 @@
 
 ADD_SUBDIRECTORY(libopenjpip)
-ADD_SUBDIRECTORY(opj_server)
-ADD_SUBDIRECTORY(opj_client)
-ADD_SUBDIRECTORY(tools)
\ No newline at end of file
+ADD_SUBDIRECTORY(util)
index 9be0742649616265dda1615d350e5dfda0f1c782..94b868eb51cd5770191722f7f92dc8f0b238af00 100644 (file)
@@ -1,3 +1,3 @@
 MAINTAINERCLEANFILES = Makefile.in
 
-SUBDIRS = libopenjpip opj_server opj_client tools
+SUBDIRS = libopenjpip util
index faa991baede3d536fa5ec659cd926398a0cc1b75..479f02e4865330327873c7e52dba05993cbc2a95 100644 (file)
@@ -1,19 +1,11 @@
-default: t_libopenjpip t_opj_server t_opj_dec_server t_tools
+default: t_libopenjpip t_util
 
 t_libopenjpip:
        make -C libopenjpip -f Makefile.nix
 
-t_opj_server:
-       make -C opj_server -f Makefile.nix
-
-t_opj_dec_server:
-       make -C opj_client/opj_dec_server  -f Makefile.nix
-
-t_tools:
-       make -C tools  -f Makefile.nix
+t_util:
+       make -C util -f Makefile.nix
 
 clean:
        make clean -C libopenjpip -f Makefile.nix
-       make clean -C opj_server  -f Makefile.nix
-       make clean -C opj_client/opj_dec_server -f Makefile.nix
-       make clean -C tools -f Makefile.nix
+       make clean -C util  -f Makefile.nix
index 66d69b48ab6c26991d8cd5c440316ada5c2134e8..d56fba4a4c14ddf88390ed2e69bf1cf76d9b0382 100644 (file)
@@ -1,6 +1,7 @@
 INCLUDE_REGULAR_EXPRESSION("^.*$")
 
 INCLUDE_DIRECTORIES(
+  ${OPENJPEG_SOURCE_DIR}/libopenjpeg
   ${FCGI_INCLUDE_DIRNAME}
 )
 
@@ -24,10 +25,24 @@ ${CMAKE_CURRENT_SOURCE_DIR}/target_manager.c
 ${CMAKE_CURRENT_SOURCE_DIR}/cachemodel_manager.c
 ${CMAKE_CURRENT_SOURCE_DIR}/j2kheader_manager.c
 ${CMAKE_CURRENT_SOURCE_DIR}/jp2k_encoder.c
+${CMAKE_CURRENT_SOURCE_DIR}/openjpip.c
+${CMAKE_CURRENT_SOURCE_DIR}/query_parser.c
+${CMAKE_CURRENT_SOURCE_DIR}/channel_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/session_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/jpip_parser.c
+)
+
+SET(LOCAL_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/jp2k_decoder.c
+${CMAKE_CURRENT_SOURCE_DIR}/imgsock_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/jpipstream_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/cache_manager.c
+${CMAKE_CURRENT_SOURCE_DIR}/dec_clientmsg_handler.c
 )
 
 # Build the library
-ADD_LIBRARY(openjpip_local STATIC ${OPENJPIP_SRCS})
+ADD_LIBRARY(openjpip_local STATIC ${OPENJPIP_SRCS} ${LOCAL_SRCS})
+TARGET_LINK_LIBRARIES(openjpip_local ${OPENJPEG_LIBRARY_NAME})
 
 ADD_LIBRARY(openjpip_server STATIC ${OPENJPIP_SRCS})
 TARGET_LINK_LIBRARIES(openjpip_server ${FCGI_LIBNAME})
@@ -36,12 +51,12 @@ SET_TARGET_PROPERTIES(openjpip_server
 
 
 # Install library
-INSTALL(TARGETS openjpip_local
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-)
+ INSTALL(TARGETS openjpip_local
+   EXPORT OpenJPEGTargets
+   DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+ )
 
-INSTALL(TARGETS openjpip_server
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
-)
+ INSTALL(TARGETS openjpip_server
+   EXPORT OpenJPEGTargets
+   DESTINATION ${OPENJPEG_INSTALL_LIB_DIR} COMPONENT Libraries
+ )
index df32184d9916713e754e258464ebacd579ecfa0a..68a72576b0e7a8d2aad313b16b90f580c100f426 100644 (file)
@@ -6,6 +6,11 @@ includes_HEADERS =
 lib_LTLIBRARIES = libopenjpip_server.la libopenjpip_local.la
 
 JPIP_SRC = \
+openjpip.c \
+query_parser.c \
+channel_manager.c \
+session_manager.c \
+jpip_parser.c \
 boxheader_manager.c \
 codestream_manager.c \
 imgreg_manager.c \
@@ -42,7 +47,21 @@ placeholder_manager.h \
 target_manager.h \
 cachemodel_manager.h \
 j2kheader_manager.h \
-jp2k_encoder.h
+jp2k_encoder.h \
+query_parser.h \
+channel_manager.h \
+session_manager.h \
+jpip_parser.h
+
+LOCAL_SRC = jp2k_decoder.c \
+imgsock_manager.c \
+jpipstream_manager.c \
+cache_manager.c \
+dec_clientmsg_handler.c \
+imgsock_manager.h \
+jpipstream_manager.h \
+cache_manager.h \
+dec_clientmsg_handler.h
 
 libopenjpip_server_la_CPPFLAGS = \
 -I. \
@@ -57,12 +76,14 @@ libopenjpip_server_la_SOURCES = $(JPIP_SRC)
 
 libopenjpip_local_la_CPPFLAGS = \
 -I. \
+-I$(top_srcdir)/libopenjpeg \
+-I$(top_builddir)/libopenjpeg \
 -I$(top_srcdir)/applications/jpip/libopenjpip \
 -I$(top_builddir)/applications/jpip/libopenjpip
 libopenjpip_local_la_CFLAGS =
-libopenjpip_local_la_LIBADD = -lm
+libopenjpip_local_la_LIBADD = $(top_builddir)/libopenjpeg/libopenjpeg.la -lm
 libopenjpip_local_la_LDFLAGS = -no-undefined -version-info @lt_version@
-libopenjpip_local_la_SOURCES = $(JPIP_SRC)
+libopenjpip_local_la_SOURCES = $(JPIP_SRC) $(LOCAL_SRC)
 
 install-data-hook:
        @echo -e " (LA)\t$(libdir)/libopenjpip_server.la" >> $(top_builddir)/report.txt
index 9e2b97caef0f8a404541c4d31246f25b9ddf11c2..1401b70f08b9557d350bb58233d35ec9da026c65 100644 (file)
@@ -2,17 +2,28 @@ ifdef jpipserver
 CFLAGS  = -O3 -Wall -m32 -DSERVER
 LIBNAME = libopenjpip_server.a
 else
-CFLAGS  = -O3 -Wall
+J2KINCDIR = ../../../libopenjpeg
+CFLAGS  = -O3 -Wall  -I$(J2KINCDIR)
 LIBNAME = libopenjpip_local.a
 endif
 
 all: $(LIBNAME)
 
-$(LIBNAME): target_manager.o byte_manager.o box_manager.o boxheader_manager.o manfbox_manager.o \
+ifdef jpipserver
+$(LIBNAME): openjpip.o target_manager.o byte_manager.o box_manager.o boxheader_manager.o manfbox_manager.o \
        mhixbox_manager.o marker_manager.o codestream_manager.o faixbox_manager.o index_manager.o \
        msgqueue_manager.o metadata_manager.o placeholder_manager.o ihdrbox_manager.o imgreg_manager.o \
-       cachemodel_manager.o j2kheader_manager.o jp2k_encoder.o
+       cachemodel_manager.o j2kheader_manager.o jp2k_encoder.o query_parser.o channel_manager.o \
+       session_manager.o jpip_parser.o
        ar r $@ $^
-
+else
+$(LIBNAME): openjpip.o target_manager.o byte_manager.o box_manager.o boxheader_manager.o manfbox_manager.o \
+       mhixbox_manager.o marker_manager.o codestream_manager.o faixbox_manager.o index_manager.o \
+       msgqueue_manager.o metadata_manager.o placeholder_manager.o ihdrbox_manager.o imgreg_manager.o \
+       cachemodel_manager.o j2kheader_manager.o jp2k_encoder.o  query_parser.o channel_manager.o \
+       session_manager.o jpip_parser.o jp2k_decoder.o imgsock_manager.o jpipstream_manager.o cache_manager.o \
+       dec_clientmsg_handler.o
+       ar r $@ $^
+endif
 clean:
        rm -f $(LIBNAME) *.o *~
similarity index 63%
rename from applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.c
rename to applications/jpip/libopenjpip/dec_clientmsg_handler.c
index e7b64ee48e72454a4154601d816ae26561112643..875e297df6c471ade6c0587a31b8c68a194dccb0 100644 (file)
 //! maximum length of channel identifier
 #define MAX_LENOFCID 30
 
-/**
- * handle JPT- JPP- stream message
- *
- * @param[in]     connected_socket socket descriptor
- * @param[in]     cachelist        cache list pointer
- * @param[in,out] jpipstream       address of JPT- JPP- stream pointer
- * @param[in,out] streamlen        address of stream length
- * @param[in,out] msgqueue         message queue pointer
- */
-void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist, Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue);
-
-/**
- * handle PNM request message
- *
- * @param[in] connected_socket socket descriptor
- * @param[in] jpipstream       jpipstream pointer
- * @param[in] msgqueue         message queue pointer
- * @param[in] cachelist        cache list pointer
- */
-void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist);
-
-/**
- * handle XML request message
- *
- * @param[in] connected_socket socket descriptor
- * @param[in] jpipstream       address of caching jpipstream pointer
- * @param[in] cachelist        cache list pointer
- */
-void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_param_t *cachelist);
-
-/**
- * handle TargetID request message
- *
- * @param[in] connected_socket socket descriptor
- * @param[in] cachelist        cache list pointer
- */
-void handle_TIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
-
-/**
- * handle ChannelID request message
- *
- * @param[in] connected_socket socket descriptor
- * @param[in] cachelist        cache list pointer
- */
-void handle_CIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
-
-/**
- * handle distroy ChannelID message
- *
- * @param[in]     connected_socket socket descriptor
- * @param[in,out] cachelist        cache list pointer
- */
-void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
-
-/**
- * handle saving JP2 file request message
- *
- * @param[in] connected_socket socket descriptor
- * @param[in] cachelist        cache list pointer
- * @param[in] msgqueue         message queue pointer
- * @param[in] jpipstream       address of caching jpipstream pointer
- */
-void handle_JP2saveMSG( SOCKET connected_socket, cachelist_param_t *cachelist, msgqueue_param_t *msgqueue, Byte_t *jpipstream);
-
-bool handle_clientmsg( SOCKET connected_socket, cachelist_param_t *cachelist, Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue)
-{
-  bool quit = false;
-  msgtype_t msgtype = identify_clientmsg( connected_socket);
-  
-  switch( msgtype){
-  case JPIPSTREAM:
-    handle_JPIPstreamMSG( connected_socket, cachelist, jpipstream, streamlen, msgqueue);
-    break;
-      
-  case PNMREQ:
-    handle_PNMreqMSG( connected_socket, *jpipstream, msgqueue, cachelist);
-    break;
-    
-  case XMLREQ:
-    handle_XMLreqMSG( connected_socket, *jpipstream, cachelist);
-    break;
-
-  case TIDREQ:
-    handle_TIDreqMSG( connected_socket, cachelist);
-    break;
-                                               
-  case CIDREQ:
-    handle_CIDreqMSG( connected_socket, cachelist);
-    break;
-
-  case CIDDST:
-    handle_dstCIDreqMSG( connected_socket, cachelist);
-    break;
-
-  case JP2SAVE:
-    handle_JP2saveMSG( connected_socket, cachelist, msgqueue, *jpipstream);
-    break;
-
-  case QUIT:
-    quit = true;
-    save_codestream( *jpipstream, *streamlen, "jpt");
-    break;
-  case MSGERROR:
-    break;
-  }
-        
-  printf("\t end of the connection\n\n");
-  if( close_socket(connected_socket) != 0){
-    perror("close");
-    return false;
-  }
-  if( quit)
-    return false;
-
-  return true;
-}
-
-
 void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist,
                           Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue)
 {
@@ -216,7 +98,7 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par
 
   receive_line( connected_socket, tmp);
   fw = atoi( tmp);
-  
+
   receive_line( connected_socket, tmp);
   fh = atoi( tmp);
 
diff --git a/applications/jpip/libopenjpip/dec_clientmsg_handler.h b/applications/jpip/libopenjpip/dec_clientmsg_handler.h
new file mode 100644 (file)
index 0000000..88a6fbe
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2011,      Lucian Corlaciu, GSoC
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef        DEC_CLIENTMSG_HANDLER_H_
+# define       DEC_CLIENTMSG_HANDLER_H_
+
+#include "imgsock_manager.h"
+#include "cache_manager.h"
+#include "byte_manager.h"
+#include "msgqueue_manager.h"
+
+/**
+ * handle JPT- JPP- stream message
+ *
+ * @param[in]     connected_socket socket descriptor
+ * @param[in]     cachelist        cache list pointer
+ * @param[in,out] jpipstream       address of JPT- JPP- stream pointer
+ * @param[in,out] streamlen        address of stream length
+ * @param[in,out] msgqueue         message queue pointer
+ */
+void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist, Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue);
+
+/**
+ * handle PNM request message
+ *
+ * @param[in] connected_socket socket descriptor
+ * @param[in] jpipstream       jpipstream pointer
+ * @param[in] msgqueue         message queue pointer
+ * @param[in] cachelist        cache list pointer
+ */
+void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist);
+
+/**
+ * handle XML request message
+ *
+ * @param[in] connected_socket socket descriptor
+ * @param[in] jpipstream       address of caching jpipstream pointer
+ * @param[in] cachelist        cache list pointer
+ */
+void handle_XMLreqMSG( SOCKET connected_socket, Byte_t *jpipstream, cachelist_param_t *cachelist);
+
+/**
+ * handle TargetID request message
+ *
+ * @param[in] connected_socket socket descriptor
+ * @param[in] cachelist        cache list pointer
+ */
+void handle_TIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
+
+/**
+ * handle ChannelID request message
+ *
+ * @param[in] connected_socket socket descriptor
+ * @param[in] cachelist        cache list pointer
+ */
+void handle_CIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
+
+/**
+ * handle distroy ChannelID message
+ *
+ * @param[in]     connected_socket socket descriptor
+ * @param[in,out] cachelist        cache list pointer
+ */
+void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
+
+/**
+ * handle saving JP2 file request message
+ *
+ * @param[in] connected_socket socket descriptor
+ * @param[in] cachelist        cache list pointer
+ * @param[in] msgqueue         message queue pointer
+ * @param[in] jpipstream       address of caching jpipstream pointer
+ */
+void handle_JP2saveMSG( SOCKET connected_socket, cachelist_param_t *cachelist, msgqueue_param_t *msgqueue, Byte_t *jpipstream);
+
+
+#endif             /* !DEC_CLIENTMSG_HANDLER_H_ */
similarity index 98%
rename from applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c
rename to applications/jpip/libopenjpip/jp2k_decoder.c
index 1da84c60cf7dba1cf1cb4a2a818706fa7e5f29c0..933331b287e1f5740c7ef66d56b1a10e3793c843 100644 (file)
@@ -74,8 +74,11 @@ Byte_t * j2k_to_pnm( Byte_t *j2kstream, Byte8_t j2klen, ihdrbox_param_t **ihdrbo
   /* open a byte stream */
   cio = opj_cio_open((opj_common_ptr)dinfo, j2kstream, j2klen);
 
+  fprintf( stderr, "opj_decode dinfo:%p cio:%p\n", dinfo, cio);
   /* decode the stream and fill the image structure */
   image = opj_decode(dinfo, cio);
+
+  fprintf( stderr, "done\n");
   if(!image) {
     fprintf(stderr, "ERROR -> jp2_to_image: failed to decode image!\n");
     opj_destroy_decompress(dinfo);
@@ -95,9 +98,10 @@ Byte_t * j2k_to_pnm( Byte_t *j2kstream, Byte8_t j2klen, ihdrbox_param_t **ihdrbo
   if(dinfo) {
     opj_destroy_decompress(dinfo);
   }
+
   /* free image data structure */
   opj_image_destroy(image);
-
+  
   return pnmstream;
 }
 
similarity index 80%
rename from applications/jpip/opj_server/jpip_parser.c
rename to applications/jpip/libopenjpip/jpip_parser.c
index 9b49a36254a80abb86a0ebbc33a1da7bc76833b3..eb4e76f0b14c67e1c04b74da821635609d16aa73 100644 (file)
 #define logstream stderr
 #endif //SERVER
 
-/**
- * REQUEST: target identification by target or tid request
- *
- * @param[in]     query_param   structured query
- * @param[in]     targetlist    target list pointer
- * @param[out]    target        address of target pointer
- * @return                      if succeeded (true) or failed (false)
- */
-bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target);
-
-/**
- * REQUEST: channel association
- *          this must be processed before any process
- *
- * @param[in]     query_param   structured query
- * @param[in]     sessionlist   session list pointer
- * @param[out]    cursession    address of the associated session pointer
- * @param[out]    curchannel    address of the associated channel pointer
- * @return                      if succeeded (true) or failed (false)
- */
-bool associate_channel( query_param_t    query_param, 
-                       sessionlist_param_t *sessionlist,
-                       session_param_t **cursession, 
-                       channel_param_t **curchannel);
-/**
- * REQUEST: new channel (cnew) assignment
- *
- * @param[in]     query_param   structured query
- * @param[in]     sessionlist   session list pointer
- * @param[in]     target        requested target pointer
- * @param[in,out] cursession    address of the associated/opened session pointer
- * @param[in,out] curchannel    address of the associated/opened channel pointer
- * @return                      if succeeded (true) or failed (false)
- */
-bool open_channel( query_param_t query_param, 
-                  sessionlist_param_t *sessionlist,
-                  target_param_t *target,
-                  session_param_t **cursession, 
-                  channel_param_t **curchannel);
-
-/**
- * REQUEST: channel close (cclose)
- *
- * @param[in]     query_param   structured query
- * @param[in]     sessionlist   session list pointer
- * @param[in,out] cursession    address of the session pointer of deleting channel
- * @param[in,out] curchannel    address of the deleting channel pointer
- * @return                      if succeeded (true) or failed (false)
- */
-bool close_channel( query_param_t query_param, 
-                   sessionlist_param_t *sessionlist,
-                   session_param_t **cursession, 
-                   channel_param_t **curchannel);
-
-/**
- * REQUEST: view-window (fsiz)
- *
- * @param[in]     query_param structured query
- * @param[in]     target      requested target pointer
- * @param[in,out] cursession  associated session pointer
- * @param[in,out] curchannel  associated channel pointer
- * @param[out]    msgqueue    address of the message queue pointer
- * @return                    if succeeded (true) or failed (false)
- */
-bool gene_JPIPstream( query_param_t query_param,
-                    target_param_t *target,
-                    session_param_t *cursession, 
-                    channel_param_t *curchannel,
-                    msgqueue_param_t **msgqueue);
-
-bool parse_JPIPrequest( query_param_t query_param,
-                       sessionlist_param_t *sessionlist,
-                       targetlist_param_t *targetlist,
-                       msgqueue_param_t **msgqueue)
-{ 
-  target_param_t *target = NULL;
-  session_param_t *cursession = NULL;
-  channel_param_t *curchannel = NULL;
-
-  if( query_param.target[0] != '\0' || query_param.tid[0] != '\0'){
-    if( !identify_target( query_param, targetlist, &target))
-      return false;
-  }
-
-  if( query_param.cid[0] != '\0'){
-    if( !associate_channel( query_param, sessionlist, &cursession, &curchannel))
-      return false;
-  }
-
-  if( query_param.cnew){
-    if( !open_channel( query_param, sessionlist, target, &cursession, &curchannel))
-      return false;
-  }
-  if( query_param.cclose[0][0] != '\0')
-    if( !close_channel( query_param, sessionlist, &cursession, &curchannel))
-      return false;
-  
-  if( (query_param.fx > 0 && query_param.fy > 0) || query_param.box_type[0][0] != 0)
-    if( !gene_JPIPstream( query_param, target, cursession, curchannel, msgqueue))
-      return false;
-  
-  return true;
-}
 
 bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target)
 {
diff --git a/applications/jpip/libopenjpip/jpip_parser.h b/applications/jpip/libopenjpip/jpip_parser.h
new file mode 100644 (file)
index 0000000..9f3cd8a
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2010-2011, Kaori Hagihara 
+ * Copyright (c) 2011,      Lucian Corlaciu, GSoC
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef        JPIP_PARSER_H_
+# define       JPIP_PARSER_H_
+
+#include "bool.h"
+#include "query_parser.h"
+#include "session_manager.h"
+#include "target_manager.h"
+#include "msgqueue_manager.h"
+#include "channel_manager.h"
+
+/**
+ * REQUEST: target identification by target or tid request
+ *
+ * @param[in]     query_param   structured query
+ * @param[in]     targetlist    target list pointer
+ * @param[out]    target        address of target pointer
+ * @return                      if succeeded (true) or failed (false)
+ */
+bool identify_target( query_param_t query_param, targetlist_param_t *targetlist, target_param_t **target);
+
+/**
+ * REQUEST: channel association
+ *          this must be processed before any process
+ *
+ * @param[in]     query_param   structured query
+ * @param[in]     sessionlist   session list pointer
+ * @param[out]    cursession    address of the associated session pointer
+ * @param[out]    curchannel    address of the associated channel pointer
+ * @return                      if succeeded (true) or failed (false)
+ */
+bool associate_channel( query_param_t    query_param, 
+                       sessionlist_param_t *sessionlist,
+                       session_param_t **cursession, 
+                       channel_param_t **curchannel);
+/**
+ * REQUEST: new channel (cnew) assignment
+ *
+ * @param[in]     query_param   structured query
+ * @param[in]     sessionlist   session list pointer
+ * @param[in]     target        requested target pointer
+ * @param[in,out] cursession    address of the associated/opened session pointer
+ * @param[in,out] curchannel    address of the associated/opened channel pointer
+ * @return                      if succeeded (true) or failed (false)
+ */
+bool open_channel( query_param_t query_param, 
+                  sessionlist_param_t *sessionlist,
+                  target_param_t *target,
+                  session_param_t **cursession, 
+                  channel_param_t **curchannel);
+
+/**
+ * REQUEST: channel close (cclose)
+ *
+ * @param[in]     query_param   structured query
+ * @param[in]     sessionlist   session list pointer
+ * @param[in,out] cursession    address of the session pointer of deleting channel
+ * @param[in,out] curchannel    address of the deleting channel pointer
+ * @return                      if succeeded (true) or failed (false)
+ */
+bool close_channel( query_param_t query_param, 
+                   sessionlist_param_t *sessionlist,
+                   session_param_t **cursession, 
+                   channel_param_t **curchannel);
+
+/**
+ * REQUEST: view-window (fsiz)
+ *
+ * @param[in]     query_param structured query
+ * @param[in]     target      requested target pointer
+ * @param[in,out] cursession  associated session pointer
+ * @param[in,out] curchannel  associated channel pointer
+ * @param[out]    msgqueue    address of the message queue pointer
+ * @return                    if succeeded (true) or failed (false)
+ */
+bool gene_JPIPstream( query_param_t query_param,
+                     target_param_t *target,
+                     session_param_t *cursession, 
+                     channel_param_t *curchannel,
+                     msgqueue_param_t **msgqueue);
+
+#endif             /* !JPIP_PARSER_H_ */
similarity index 99%
rename from applications/jpip/opj_client/opj_dec_server/jpipstream_manager.c
rename to applications/jpip/libopenjpip/jpipstream_manager.c
index 627eaa170716038575bd2b2156773a597c89cf7f..97b61526cea1cd8e1a9cf40a0bd61622ef5e215e 100644 (file)
@@ -73,10 +73,10 @@ Byte_t * jpipstream_to_pnm( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte
   Byte_t *pnmstream;
   Byte_t *j2kstream; // j2k or jp2 codestream
   Byte8_t j2klen;
-  
-  j2kstream = recons_j2k( msgqueue, jpipstream, csn, fw, fh, &j2klen);
-  
+
+  j2kstream = recons_j2k( msgqueue, jpipstream, csn, fw, fh, &j2klen); 
   pnmstream = j2k_to_pnm( j2kstream, j2klen, ihdrbox);
+
   free( j2kstream);
 
   return pnmstream;
diff --git a/applications/jpip/libopenjpip/openjpip.c b/applications/jpip/libopenjpip/openjpip.c
new file mode 100644 (file)
index 0000000..a4f3000
--- /dev/null
@@ -0,0 +1,378 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2010-2011, Kaori Hagihara
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+#include "openjpip.h"
+#include "jpip_parser.h"
+#include "channel_manager.h"
+
+#include <stdio.h>
+#include "dec_clientmsg_handler.h"
+#include "jpipstream_manager.h"
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "jp2k_encoder.h"
+
+server_record_t * init_JPIPserver()
+{
+  server_record_t *record = (server_record_t *)malloc( sizeof(server_record_t));
+  
+  record->sessionlist = gene_sessionlist();
+  record->targetlist  = gene_targetlist();
+  
+  return record;
+}
+
+void terminate_JPIPserver( server_record_t **rec)
+{
+  delete_sessionlist( &(*rec)->sessionlist);
+  delete_targetlist( &(*rec)->targetlist);
+
+  free( *rec);
+}
+
+QR_t * parse_querystring( char *query_string)
+{
+  QR_t *qr;
+
+  qr = (QR_t *)malloc( sizeof(QR_t));
+    
+  qr->query = parse_query( query_string);
+  
+  qr->msgqueue = NULL;
+
+  return qr;
+}
+
+bool process_JPIPrequest( server_record_t *rec, QR_t *qr)
+{
+  target_param_t *target = NULL;
+  session_param_t *cursession = NULL;
+  channel_param_t *curchannel = NULL;
+
+  if( qr->query->target[0] != '\0' || qr->query->tid[0] != '\0'){
+    if( !identify_target( *(qr->query), rec->targetlist, &target))
+      return false;
+  }
+
+  if( qr->query->cid[0] != '\0'){
+    if( !associate_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
+      return false;
+  }
+
+  if( qr->query->cnew){
+    if( !open_channel( *(qr->query), rec->sessionlist, target, &cursession, &curchannel))
+      return false;
+  }
+  if( qr->query->cclose[0][0] != '\0')
+    if( !close_channel( *(qr->query), rec->sessionlist, &cursession, &curchannel))
+      return false;
+  
+  if( (qr->query->fx > 0 && qr->query->fy > 0) || qr->query->box_type[0][0] != 0)
+    if( !gene_JPIPstream( *(qr->query), target, cursession, curchannel, &qr->msgqueue))
+      return false;
+  
+  return true;
+}
+
+void send_responsedata( QR_t *qr)
+{
+  // Currently HTTP support only, find a way for TCP, UDP case
+  emit_stream_from_msgqueue( qr->msgqueue);
+}
+
+void end_QRprocess( server_record_t *rec, QR_t **qr)
+{
+  // TODO: record client preferences if necessary
+  
+  delete_query( &((*qr)->query));
+  delete_msgqueue( &((*qr)->msgqueue));
+  free( *qr);
+}
+
+void local_log( bool query, bool messages, bool sessions, bool targets, QR_t *qr, server_record_t *rec)
+{
+  if( query)
+    print_queryparam( *qr->query);
+
+  if( messages)
+    print_msgqueue( qr->msgqueue);
+
+  if( sessions)
+    print_allsession( rec->sessionlist);
+  
+  if( targets)
+    print_alltarget( rec->targetlist);
+}
+
+#ifndef SERVER
+
+dec_server_record_t * init_dec_server()
+{
+  dec_server_record_t *record = (dec_server_record_t *)malloc( sizeof(dec_server_record_t));
+
+  record->cachelist = gene_cachelist();
+  record->jpipstream = NULL;
+  record->jpipstreamlen = 0;
+  record->msgqueue = gene_msgqueue( true, NULL);
+  record->listening_socket = open_listeningsocket();
+
+  return record;
+}
+
+void terminate_dec_server( dec_server_record_t **rec)
+{
+  delete_cachelist( &(*rec)->cachelist);  
+  free( (*rec)->jpipstream);
+  
+  if( (*rec)->msgqueue)
+    delete_msgqueue( &((*rec)->msgqueue));
+
+  if( close_socket( (*rec)->listening_socket) != 0)
+    perror("close");
+  
+  free( *rec);
+}
+
+client_t accept_connection( dec_server_record_t *rec)
+{
+  client_t client;
+  
+  client = accept_socket( rec->listening_socket);
+  if( client == -1)
+    fprintf( stderr, "error: failed to connect to client\n");
+  
+  return client;
+}
+
+bool handle_clientreq( client_t client, dec_server_record_t *rec)
+{
+  bool quit = false;
+  msgtype_t msgtype = identify_clientmsg( client);
+  
+  switch( msgtype){
+  case JPIPSTREAM:
+    handle_JPIPstreamMSG( client, rec->cachelist, &rec->jpipstream, &rec->jpipstreamlen, rec->msgqueue);
+    break;
+      
+  case PNMREQ:
+    handle_PNMreqMSG( client, rec->jpipstream, rec->msgqueue, rec->cachelist);
+    break;
+    
+  case XMLREQ:
+    handle_XMLreqMSG( client, rec->jpipstream, rec->cachelist);
+    break;
+
+  case TIDREQ:
+    handle_TIDreqMSG( client, rec->cachelist);
+    break;
+                                               
+  case CIDREQ:
+    handle_CIDreqMSG( client, rec->cachelist);
+    break;
+
+  case CIDDST:
+    handle_dstCIDreqMSG( client, rec->cachelist);
+    break;
+
+  case JP2SAVE:
+    handle_JP2saveMSG( client, rec->cachelist, rec->msgqueue, rec->jpipstream);
+    break;
+
+  case QUIT:
+    quit = true;
+    save_codestream( rec->jpipstream, rec->jpipstreamlen, "jpt");
+    break;
+  case MSGERROR:
+    break;
+  }
+        
+  printf("\t end of the connection\n\n");
+  if( close_socket(client) != 0){
+    perror("close");
+    return false;
+  }
+  if( quit)
+    return false;
+
+  return true;
+}
+
+
+jpip_dec_param_t * init_jpipdecoder( bool jp2)
+{
+  jpip_dec_param_t *dec;
+  
+  dec = (jpip_dec_param_t *)calloc( 1, sizeof(jpip_dec_param_t));
+
+  dec->msgqueue = gene_msgqueue( true, NULL);
+  
+  if( jp2)
+    dec->metadatalist = gene_metadatalist();
+
+  return dec;
+}
+
+
+bool fread_jpip( char fname[], jpip_dec_param_t *dec)
+{
+  int infd;
+  struct stat sb;
+
+  if(( infd = open( fname, O_RDONLY)) == -1){
+    fprintf( stderr, "file %s not exist\n", fname);
+    return false;
+  }
+  
+  if( fstat( infd, &sb) == -1){
+    fprintf( stderr, "input file stream is broken\n");
+    return false;
+  }
+  dec->jpiplen = (Byte8_t)sb.st_size;
+
+  dec->jpipstream = (Byte_t *)malloc( dec->jpiplen);
+
+  if( read( infd, dec->jpipstream, dec->jpiplen) != dec->jpiplen){
+    fprintf( stderr, "file reading error\n");
+    free( dec->jpipstream);
+    return false;
+  }
+
+  close(infd);
+
+  return true;
+}
+
+void decode_jpip( jpip_dec_param_t *dec)
+{
+  parse_JPIPstream( dec->jpipstream, dec->jpiplen, 0, dec->msgqueue);
+
+  if( dec->metadatalist){ // JP2 encoding
+    parse_metamsg( dec->msgqueue, dec->jpipstream, dec->jpiplen, dec->metadatalist);
+    dec->ihdrbox = gene_ihdrbox( dec->metadatalist, dec->jpipstream);
+    
+    dec->jp2kstream = recons_jp2( dec->msgqueue, dec->jpipstream, dec->msgqueue->first->csn, &dec->jp2klen);
+  }
+  else // J2k encoding  
+    // Notice: arguments fw, fh need to be set for LRCP, PCRL, CPRL
+    dec->jp2kstream = recons_j2k( dec->msgqueue, dec->jpipstream, dec->msgqueue->first->csn, 0, 0, &dec->jp2klen);  
+}
+
+bool fwrite_jp2k( char fname[], jpip_dec_param_t *dec)
+{
+  int outfd;
+  
+#ifdef _WIN32
+  if(( outfd = open( fname, O_WRONLY|O_CREAT, _S_IREAD | _S_IWRITE)) == -1){
+#else
+ if(( outfd = open( fname, O_WRONLY|O_CREAT, S_IRWXU|S_IRWXG)) == -1){
+#endif
+   fprintf( stderr, "file %s open error\n", fname);
+   return false;
+ }
+  
+ if( write( outfd, dec->jp2kstream, dec->jp2klen) != dec->jp2klen)
+   fprintf( stderr, "j2k file write error\n");
+
+ close(outfd);
+
+ return true;
+}
+
+void output_log( bool messages, bool metadata, bool ihdrbox, jpip_dec_param_t *dec)
+{
+  if( messages)
+    print_msgqueue( dec->msgqueue);
+
+  if( metadata)
+    print_allmetadata( dec->metadatalist);
+
+  if( ihdrbox){
+    printf("W*H: %d*%d\n", dec->ihdrbox->height, dec->ihdrbox->width);
+    printf("NC: %d, bpc: %d\n", dec->ihdrbox->nc, dec->ihdrbox->bpc);
+  }
+}
+
+void destroy_jpipdecoder( jpip_dec_param_t **dec)
+{
+  free( (*dec)->jpipstream);
+  delete_msgqueue( &(*dec)->msgqueue);
+  if( (*dec)->metadatalist){
+    delete_metadatalist( &(*dec)->metadatalist);
+    free( (*dec)->ihdrbox);
+  }
+
+  free( (*dec)->jp2kstream);
+  free( *dec);
+}
+
+index_t * get_index_from_JP2file( int fd)
+{
+  char *data;
+  // Check resource is a JP family file.
+  if( lseek( fd, 0, SEEK_SET)==-1){
+    fprintf( stderr, "Error: File broken (lseek error)\n");
+    return NULL;
+  }
+  
+  data = (char *)malloc( 12); // size of header
+  if( read( fd, data, 12) != 12){
+    free( data);
+    fprintf( stderr, "Error: File broken (read error)\n");
+    return NULL;
+  }
+    
+  if( *data || *(data + 1) || *(data + 2) ||
+      *(data + 3) != 12 || strncmp (data + 4, "jP  \r\n\x87\n", 8)){
+    free( data);
+    fprintf( stderr, "Error: No JPEG 2000 Signature box in this file\n");
+    return NULL;
+  }
+  free( data);
+  
+  return parse_jp2file( fd);
+}
+
+void destroy_index( index_t **idx)
+{
+  delete_index( idx);
+}
+
+void output_index( index_t *index)
+{
+  print_index( *index);
+}
+
+#endif //SERVER
diff --git a/applications/jpip/libopenjpip/openjpip.h b/applications/jpip/libopenjpip/openjpip.h
new file mode 100644 (file)
index 0000000..c4011f8
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2011, Professor Benoit Macq
+ * Copyright (c) 2010-2011, Kaori Hagihara
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef         OPENJPIP_H_
+# define        OPENJPIP_H_
+
+#include "session_manager.h"
+#include "target_manager.h"
+#include "query_parser.h"
+#include "msgqueue_manager.h"
+#include "bool.h"
+
+#include "cache_manager.h"
+#include "byte_manager.h"
+#include "imgsock_manager.h"
+
+#include "metadata_manager.h"
+#include "ihdrbox_manager.h"
+#include "index_manager.h"
+
+#ifdef SERVER
+#include "fcgi_stdio.h"
+#define logstream FCGI_stdout
+#else
+#define FCGI_stdout stdout
+#define FCGI_stderr stderr
+#define logstream stderr
+#endif //SERVER
+
+/* 
+ *==========================================================
+ * JPIP server API
+ *==========================================================
+ */
+
+//! Server static records
+typedef struct server_record{
+  sessionlist_param_t *sessionlist; //!< list of session records
+  targetlist_param_t *targetlist;   //!< list of target records
+} server_record_t;
+
+//! Query/response data for each client
+typedef struct QR{
+  query_param_t *query;
+  msgqueue_param_t *msgqueue;
+} QR_t;
+
+/**
+ * Initialize the JPIP server
+ *
+ * @return intialized server record pointer
+ */
+server_record_t * init_JPIPserver();
+
+/**
+ * Terminate the JPIP server
+ *
+ * @param[in] rec address of deleting server static record pointer
+ */
+void terminate_JPIPserver( server_record_t **rec);
+
+/**
+ * 1st process per client request; parse query string
+ *
+ * @param[in]  query_string request query string
+ * @return     initialized query/response data pointer
+ */
+QR_t * parse_querystring( char *query_string);
+
+/**
+ * 2nd process; process JPIP request and construct message queue
+ *
+ * @param[in]  rec server static record pointer
+ * @param[in]  qr  query/response data pointer
+ * @return     true if succeed, otherwise false 
+ */
+bool process_JPIPrequest( server_record_t *rec, QR_t *qr);
+
+/**
+ * 3rd process; send response data JPT/JPP-stream
+ *
+ * @param[in]  qr  query/response data pointer
+ */
+void send_responsedata( QR_t *qr);
+
+/**
+ * 4th (last) process; 
+ *
+ * @param[in]  rec server static record pinter
+ * @param[in]  qr  address of query/response data pointer
+ */
+void end_QRprocess( server_record_t *rec, QR_t **qr);
+
+#ifndef SERVER
+
+/**
+ * Option for local tests; print out parameter values to logstream (stderr)
+ *
+ * @param[in]  query    true if query parameters are to be printed out
+ * @param[in]  messages true if queue of messages is to be printed out
+ * @param[in]  sessions true if session list      is to be printed out
+ * @param[in]  targets  true if target list       is  to be printed out
+ * @param[in]  qr       query/response data pointer
+ * @param[in]  rec      server static record pinter
+ */
+void local_log( bool query, bool messages, bool sessions, bool targets, QR_t *qr, server_record_t *rec);
+
+#endif //SERVER
+
+/* 
+ *==========================================================
+ *      JPIP decoding server API
+ *==========================================================
+ */
+
+#ifndef SERVER
+
+//! Decoding server static records
+typedef struct dec_server_record{
+  cachelist_param_t *cachelist; //!< cache list
+  Byte_t *jpipstream;           //!< JPT/JPP stream
+  int jpipstreamlen;            //!< length of jpipstream
+  msgqueue_param_t *msgqueue;   //!< parsed message queue of jpipstream
+  SOCKET listening_socket;      //!< listenning socket
+} dec_server_record_t;
+
+
+//! Client socket identifier
+typedef SOCKET client_t;
+
+/**
+ * Initialize the image decoding server
+ *
+ * @return intialized decoding server record pointer
+ */
+dec_server_record_t * init_dec_server();
+
+/**
+ * Terminate the  image decoding server
+ *
+ * @param[in] rec address of deleting decoding server static record pointer
+ */
+void terminate_dec_server( dec_server_record_t **rec);
+
+/**
+ * Accept client connection
+ *
+ * @param[in] rec decoding server static record pointer
+ * @return        client socket ID, -1 if failed
+ */
+client_t accept_connection( dec_server_record_t *rec);
+
+ /**
+  * Handle client request
+  *
+  * @param[in] client client socket ID
+  * @param[in] rec    decoding server static record pointer
+  * @return           true if succeed
+  */
+bool handle_clientreq( client_t client, dec_server_record_t *rec);
+
+ #endif //SERVER
+
+/* 
+ *==========================================================
+ *     JPIP tool API
+ *==========================================================
+ */
+
+#ifndef SERVER
+
+/*
+ * jpip to JP2 or J2K
+ */
+
+//! JPIP decoding parameters
+typedef struct jpip_dec_param{
+  Byte_t *jpipstream;                 //!< JPT/JPP-stream
+  Byte8_t jpiplen;                    //!< length of jpipstream
+  msgqueue_param_t *msgqueue;         //!< message queue
+  metadatalist_param_t *metadatalist; //!< metadata list going into JP2 file
+  ihdrbox_param_t *ihdrbox;           //!< ihdr box going into JP2 file
+  Byte_t *jp2kstream;                 //!< J2K codestream or JP2 file codestream
+  Byte8_t jp2klen;                    //!< length of j2kstream or JP2 file
+} jpip_dec_param_t;
+
+/**
+ * Initialize jpip decoder
+ *
+ * @param[in] jp2 true in case of jp2 file encoding, else j2k file encoding
+ * @return        JPIP decoding parameters pointer
+ */
+jpip_dec_param_t * init_jpipdecoder( bool jp2);
+
+/**
+ * Destroy jpip decoding parameters
+ *
+ * @param[in]  dec  address of JPIP decoding parameters pointer
+ */
+void destroy_jpipdecoder( jpip_dec_param_t **dec);
+
+/**
+ * Read jpip codestream from a file
+ *
+ * @param[in]  fname file name
+ * @param[in]  dec   JPIP decoding parameters pointer
+ * @return           true if succeed
+ */
+bool fread_jpip( char fname[], jpip_dec_param_t *dec);
+
+/**
+ * Decode jpip codestream
+ *
+ * @param[in]  dec   JPIP decoding parameters pointer
+ */
+void decode_jpip( jpip_dec_param_t *dec);
+
+/**
+ * Write J2K/JP2 codestream to a file
+ *
+ * @param[in]  fname file name
+ * @param[in]  dec   JPIP decoding parameters pointer
+ * @return           true if succeed
+ */
+bool fwrite_jp2k( char fname[], jpip_dec_param_t *dec);
+
+/**
+ * Option; print out parameter values to stderr
+ *
+ * @param[in]  messages true if queue of messages is to be printed out
+ * @param[in]  metadata true if metadata          is to be printed out
+ * @param[in]  ihdrbox  true if image header data is to be printed out
+ * @param[in]  dec   JPIP decoding parameters pointer
+ */
+void output_log( bool messages, bool metadata, bool ihdrbox, jpip_dec_param_t *dec);
+
+/*
+ *  test the format of index (cidx) box in JP2 file
+ */
+
+//! Redefinition of index parameters
+typedef index_param_t index_t;
+
+/**
+ * Parse JP2 file and get index information from cidx box inside
+ * 
+ * @param[in] fd file descriptor of the JP2 file
+ * @return       pointer to the generated structure of index parameters
+ */
+index_t * get_index_from_JP2file( int fd);
+
+/**
+ * Destroy index parameters
+ *
+ * @param[in,out] idx addressof the index pointer
+ */
+void destroy_index( index_t **idx);
+
+
+/**
+ * print index parameters
+ *
+ * @param[in] index index parameters
+ */
+void output_index( index_t *index);
+
+#endif //SERVER
+
+#endif /* !OPENJPIP_H_ */
similarity index 89%
rename from applications/jpip/opj_server/query_parser.c
rename to applications/jpip/libopenjpip/query_parser.c
index a29c8f12978d98457e2421481672314895a5e7e1..1293c0a814a37680e2125331f5abe46608297f9d 100644 (file)
 
 
 /**
- * initialize query parameters
+ * Get initialized query parameters
  *
- * @param[in,out] query_param  query parameters
+ * @return initial query parameters
  */
-void init_queryparam( query_param_t *query_param);
+query_param_t * get_initquery();
 
 /*
  * get a pair of field name and value from the string starting fieldname=fieldval&... format
@@ -89,11 +89,12 @@ void parse_comps( char *field, query_param_t *query_param);
 //! maximum length of field value
 #define MAX_LENOFFIELDVAL 128
 
-void parse_query( char *query_string, query_param_t *query_param)
+query_param_t * parse_query( char *query_string)
 {
+  query_param_t *query_param;
   char *pquery, fieldname[MAX_LENOFFIELDNAME], fieldval[MAX_LENOFFIELDVAL];
 
-  init_queryparam( query_param);
+  query_param = get_initquery();
   
   pquery = query_string;
 
@@ -146,40 +147,46 @@ void parse_query( char *query_string, query_param_t *query_param)
        sscanf( fieldval, "%d", &query_param->len);
     }
   }
+  return query_param;
 }
 
-void init_queryparam( query_param_t *query_param)
+query_param_t * get_initquery()
 {
+  query_param_t *query;
   int i;
 
-  query_param->target[0] = '\0';
-  query_param->tid[0] = '\0';
-  query_param->fx = -1;
-  query_param->fy = -1;
-  query_param->rx = -1;
-  query_param->ry = -1;
-  query_param->rw = -1;
-  query_param->rh = -1;
-  query_param->layers = -1;
-  query_param->lastcomp = -1;
-  query_param->comps = NULL;  
-  query_param->cid[0] = '\0';
-  query_param->cnew = false;
-  memset( query_param->cclose, 0, MAX_NUMOFCCLOSE*MAX_LENOFCID);
-  memset( query_param->box_type, 0, MAX_NUMOFBOX*4);
-  memset( query_param->limit, 0, MAX_NUMOFBOX*sizeof(int));
+  query = (query_param_t *)malloc( sizeof(query_param_t));
+
+  query->target[0] = '\0';
+  query->tid[0] = '\0';
+  query->fx = -1;
+  query->fy = -1;
+  query->rx = -1;
+  query->ry = -1;
+  query->rw = -1;
+  query->rh = -1;
+  query->layers = -1;
+  query->lastcomp = -1;
+  query->comps = NULL;  
+  query->cid[0] = '\0';
+  query->cnew = false;
+  memset( query->cclose, 0, MAX_NUMOFCCLOSE*MAX_LENOFCID);
+  memset( query->box_type, 0, MAX_NUMOFBOX*4);
+  memset( query->limit, 0, MAX_NUMOFBOX*sizeof(int));
   for( i=0; i<MAX_NUMOFBOX; i++){
-    query_param->w[i] = false;
-    query_param->s[i] = false;
-    query_param->g[i] = false;
-    query_param->a[i] = false;
-    query_param->priority[i] = false;
+    query->w[i] = false;
+    query->s[i] = false;
+    query->g[i] = false;
+    query->a[i] = false;
+    query->priority[i] = false;
   }
-  query_param->root_bin = 0;
-  query_param->max_depth = -1;
-  query_param->metadata_only = false;
-  query_param->return_type = UNKNOWN;
-  query_param->len = -1;
+  query->root_bin = 0;
+  query->max_depth = -1;
+  query->metadata_only = false;
+  query->return_type = UNKNOWN;
+  query->len = -1;
+
+  return query;
 }
 
 
@@ -376,3 +383,9 @@ void parse_comps( char *field, query_param_t *query_param)
   if(aux!=-1)
     query_param->comps[aux] = true;
 }
+
+void delete_query( query_param_t **query)
+{
+  free((*query)->comps);
+  free( *query);
+}
similarity index 91%
rename from applications/jpip/opj_server/query_parser.h
rename to applications/jpip/libopenjpip/query_parser.h
index 55be9dd188f2782de8c57c0262903bc2f431c268..d42385ae67c2522909feae4652651ffc2a3f138f 100644 (file)
@@ -60,7 +60,7 @@ typedef struct query_param{
   int rx, ry, rw, rh;                         //!< roi region
   int layers;                                 //!< quality layers
   int lastcomp;                               //!< last component number
-  bool *comps;                                //!< components for jpp-stream, null means all components
+  bool *comps;                                //!< components (dynamic array) for jpp-stream, null means all components
   char cid[MAX_LENOFCID];                     //!< channel identifier
   bool cnew;                                  //!< if there is new channel request(true) or not (false)
   char cclose[MAX_NUMOFCCLOSE][MAX_LENOFCID]; //!< closing channel identifiers
@@ -83,9 +83,9 @@ typedef struct query_param{
  * parse query
  *
  * @param[in]  query_string request query string
- * @param[out] query_param  query parameters
+ * @return     pointer to query parameters
  */
-void parse_query( char *query_string, query_param_t *query_param);
+query_param_t * parse_query( char *query_string);
 
 /**
  * print query parameters
@@ -94,4 +94,12 @@ void parse_query( char *query_string, query_param_t *query_param);
  */
 void print_queryparam( query_param_t query_param);
 
+
+/**
+ * delete query
+ *
+ * @param[in] query address of the deleting query pointer
+ */
+void delete_query( query_param_t **query);
+
 #endif             /* !QUERY_PARSER_H_ */
diff --git a/applications/jpip/opj_client/CMakeLists.txt b/applications/jpip/opj_client/CMakeLists.txt
deleted file mode 100644 (file)
index 8cf71ac..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ADD_SUBDIRECTORY(opj_dec_server)
\ No newline at end of file
diff --git a/applications/jpip/opj_client/Makefile.am b/applications/jpip/opj_client/Makefile.am
deleted file mode 100644 (file)
index 455f2d7..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in
-
-SUBDIRS = opj_dec_server
diff --git a/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt b/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt
deleted file mode 100644 (file)
index 10e9aa5..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-
-SET(OPJ_DEC_SERVER_SRCS
-${CMAKE_CURRENT_SOURCE_DIR}/cache_manager.c
-${CMAKE_CURRENT_SOURCE_DIR}/opj_dec_server.c
-${CMAKE_CURRENT_SOURCE_DIR}/jp2k_decoder.c
-${CMAKE_CURRENT_SOURCE_DIR}/imgsock_manager.c
-${CMAKE_CURRENT_SOURCE_DIR}/jpipstream_manager.c
-${CMAKE_CURRENT_SOURCE_DIR}/dec_clientmsg_handler.c
-)
-
-INCLUDE_DIRECTORIES(
-  ${OPENJPEG_SOURCE_DIR}/libopenjpeg
-  ${OPENJPEG_SOURCE_DIR}/applications/jpip/libopenjpip
-)
-
-# Build executable
-
-ADD_EXECUTABLE(opj_dec_server ${OPJ_DEC_SERVER_SRCS})
-TARGET_LINK_LIBRARIES(opj_dec_server openjpip_local ${OPENJPEG_LIBRARY_NAME})
-
-# On unix you need to link to the math library:
-IF(UNIX)
-  TARGET_LINK_LIBRARIES(opj_dec_server m)
-ENDIF(UNIX)
-# Install exe
-INSTALL(TARGETS opj_dec_server
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-)
diff --git a/applications/jpip/opj_client/opj_dec_server/Makefile.am b/applications/jpip/opj_client/opj_dec_server/Makefile.am
deleted file mode 100644 (file)
index b9e32c9..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in
-
-bin_PROGRAMS = opj_dec_server
-
-opj_dec_server_CPPFLAGS = \
--I. \
--I$(top_srcdir)/applications/jpip/opj_server \
--I$(top_builddir)/applications/jpip/opj_server \
--I$(top_srcdir)/applications/jpip/libopenjpip \
--I$(top_builddir)/applications/jpip/libopenjpip \
--I$(top_srcdir)/libopenjpeg \
--I$(top_builddir)/libopenjpeg \
-@FCGI_CFLAGS@ \
--DSERVER
-opj_dec_server_CFLAGS = 
-opj_dec_server_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_server.la $(top_builddir)/libopenjpeg/libopenjpeg.la @FCGI_LIBS@ -lm
-opj_dec_server_SOURCES = \
-cache_manager.c \
-cache_manager.h \
-imgsock_manager.c \
-imgsock_manager.h \
-jp2k_decoder.c \
-dec_clientmsg_handler.c \
-dec_clientmsg_handler.h \
-jp2k_decoder.h \
-jpipstream_manager.c \
-jpipstream_manager.h \
-opj_dec_server.c 
-
-
-install-data-hook:
-       @echo -e " (B)\t$(bindir)/opj_dec_server$(EXEEXT)" >> $(top_builddir)/report.txt
diff --git a/applications/jpip/opj_client/opj_dec_server/Makefile.nix b/applications/jpip/opj_client/opj_dec_server/Makefile.nix
deleted file mode 100644 (file)
index b29671f..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-J2KINCDIR = ../../../../libopenjpeg
-J2KLIBDIR = $(J2KINCDIR)/.libs
-JPIPLIBDIR = ../../libopenjpip
-LIBFNAME = $(JPIPLIBDIR)/libopenjpip_local.a $(J2KLIBDIR)/libopenjpeg.a
-CFLAGS  = -O3 -Wall -I$(JPIPLIBDIR) -I$(J2KINCDIR)
-LDFLAGS = -L$(JPIPLIBDIR) -L$(J2KLIBDIR) -lm -lopenjpip_local
-#-lws2_32
-
-ALL = opj_dec_server
-
-all: $(ALL)
-
-opj_dec_server: opj_dec_server.o jp2k_decoder.o imgsock_manager.o jpipstream_manager.o cache_manager.o dec_clientmsg_handler.o $(LIBFNAME)
-       $(CC) $(CFLAGS) $< jp2k_decoder.o imgsock_manager.o jpipstream_manager.o cache_manager.o dec_clientmsg_handler.o $(LDFLAGS) $(LIBFNAME) -o $@
-
-clean:
-       rm -f $(ALL) *.o *~
diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar b/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar
deleted file mode 120000 (symlink)
index b135bb0..0000000
+++ /dev/null
@@ -1 +0,0 @@
-opj_viewer-20111018.jar
\ No newline at end of file
diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar b/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar
deleted file mode 120000 (symlink)
index 8fbb188..0000000
+++ /dev/null
@@ -1 +0,0 @@
-opj_viewer_xerces-20111010.jar
\ No newline at end of file
diff --git a/applications/jpip/opj_server/CMakeLists.txt b/applications/jpip/opj_server/CMakeLists.txt
deleted file mode 100644 (file)
index e0ed546..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-# Headers file are located here:
-INCLUDE_DIRECTORIES(
-  ${OPENJPEG_SOURCE_DIR}/applications/jpip/libopenjpip
-  ${FCGI_INCLUDE_DIRNAME}
-)
-
-SET(OPJ_SERVER_SRCS
-${CMAKE_CURRENT_SOURCE_DIR}/opj_server.c
-${CMAKE_CURRENT_SOURCE_DIR}/query_parser.c
-${CMAKE_CURRENT_SOURCE_DIR}/channel_manager.c
-${CMAKE_CURRENT_SOURCE_DIR}/session_manager.c
-${CMAKE_CURRENT_SOURCE_DIR}/jpip_parser.c
-)
-
-# Build executable
-ADD_DEFINITIONS(-DSERVER)
-ADD_EXECUTABLE(opj_server ${OPJ_SERVER_SRCS})
-TARGET_LINK_LIBRARIES(opj_server openjpip_server ${FCGI_LIBNAME})
-
-# On unix you need to link to the math library:
-IF(UNIX)
-  TARGET_LINK_LIBRARIES(opj_server m)
-ENDIF(UNIX)
-
-# Install exe
-INSTALL(TARGETS opj_server
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-)
diff --git a/applications/jpip/opj_server/Makefile.am b/applications/jpip/opj_server/Makefile.am
deleted file mode 100644 (file)
index cb03c9c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in
-
-bin_PROGRAMS = opj_server
-
-opj_server_CPPFLAGS = \
--I. \
--I$(top_srcdir)/applications/jpip/opj_server \
--I$(top_builddir)/applications/jpip/opj_server \
--I$(top_srcdir)/applications/jpip/libopenjpip \
--I$(top_builddir)/applications/jpip/libopenjpip \
-@FCGI_CFLAGS@ \
--DSERVER \
--DQUIT_SIGNAL=\"quitJPIP\"
-opj_server_CFLAGS = 
-opj_server_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_server.la @FCGI_LIBS@ -lm
-opj_server_SOURCES = \
-channel_manager.c \
-opj_server.c \
-query_parser.c \
-session_manager.c \
-jpip_parser.c \
-channel_manager.h \
-query_parser.h \
-session_manager.h \
-jpip_parser.h
-
-install-data-hook:
-       @echo -e " (B)\t$(bindir)/opj_server$(EXEEXT)" >> $(top_builddir)/report.txt
diff --git a/applications/jpip/opj_server/Makefile.nix b/applications/jpip/opj_server/Makefile.nix
deleted file mode 100644 (file)
index ac2389b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-LIBDIR = ../libopenjpip
-
-LIBFNAME = $(LIBDIR)/libopenjpip_server.a
-CFLAGS  = -O3 -Wall -m32 -DSERVER -DQUIT_SIGNAL=\"quitJPIP\" -I$(LIBDIR)
-LDFLAGS = -L$(LIBDIR) -lm -lfcgi -lopenjpip_server
-
-ALL = opj_server
-
-all: $(ALL)
-
-opj_server: opj_server.o query_parser.o channel_manager.o session_manager.o jpip_parser.o $(LIBFNAME)
-         $(CC) $(CFLAGS) $< query_parser.o channel_manager.o session_manager.o jpip_parser.o $(LDFLAGS) -o $@
-
-clean:
-       rm -f $(ALL) *.o *~
diff --git a/applications/jpip/tools/CMakeLists.txt b/applications/jpip/tools/CMakeLists.txt
deleted file mode 100644 (file)
index c04928d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-INCLUDE_DIRECTORIES(
-  ../libopenjpip
-)
-
-ADD_EXECUTABLE(jpip_to_j2k jpip_to_j2k.c)
-TARGET_LINK_LIBRARIES(jpip_to_j2k openjpip_local)
-IF(UNIX)
-  TARGET_LINK_LIBRARIES(jpip_to_j2k m)
-ENDIF(UNIX)
-# Install exe
-INSTALL(TARGETS jpip_to_j2k
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-)
-
-ADD_EXECUTABLE(jpip_to_jp2 jpip_to_jp2.c)
-TARGET_LINK_LIBRARIES(jpip_to_jp2 openjpip_local)
-IF(UNIX)
-  TARGET_LINK_LIBRARIES(jpip_to_jp2 m)
-ENDIF(UNIX)
-# Install exe
-INSTALL(TARGETS jpip_to_jp2
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-)
-
-ADD_EXECUTABLE(test_index test_index.c)
-TARGET_LINK_LIBRARIES(test_index openjpip_local)
-IF(UNIX)
-  TARGET_LINK_LIBRARIES(test_index m)
-ENDIF(UNIX)
-# Install exe
-INSTALL(TARGETS test_index
-  EXPORT OpenJPEGTargets
-  DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
-)
diff --git a/applications/jpip/tools/Makefile.am b/applications/jpip/tools/Makefile.am
deleted file mode 100644 (file)
index b995972..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-MAINTAINERCLEANFILES = Makefile.in\r
-\r
-bin_PROGRAMS = jpip_to_jp2 jpip_to_j2k test_index addXMLinJP2\r
-\r
-jpip_to_jp2_CPPFLAGS = \\r
--I. \\r
--I$(top_srcdir)/applications/jpip/libopenjpip \\r
--I$(top_builddir)/applications/jpip/libopenjpip \\r
--I$(top_srcdir)/applications/jpip/libopenjpip/tools \\r
--I$(top_builddir)/applications/jpip/libopenjpip/tools\r
-jpip_to_jp2_CFLAGS = \r
-jpip_to_jp2_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la\r
-jpip_to_jp2_SOURCES = jpip_to_jp2.c\r
-\r
-jpip_to_j2k_CPPFLAGS = \\r
--I. \\r
--I$(top_srcdir)/applications/jpip/libopenjpip \\r
--I$(top_builddir)/applications/jpip/libopenjpip \\r
--I$(top_srcdir)/applications/jpip/libopenjpip/tools \\r
--I$(top_builddir)/applications/jpip/libopenjpip/tools\r
-jpip_to_j2k_CFLAGS = \r
-jpip_to_j2k_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la\r
-jpip_to_j2k_SOURCES = jpip_to_j2k.c\r
-\r
-test_index_CPPFLAGS = \\r
--I. \\r
--I$(top_srcdir)/applications/jpip/libopenjpip \\r
--I$(top_builddir)/applications/jpip/libopenjpip \\r
--I$(top_srcdir)/applications/jpip/libopenjpip/tools \\r
--I$(top_builddir)/applications/jpip/libopenjpip/tools\r
-test_index_CFLAGS = \r
-test_index_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la\r
-test_index_SOURCES = test_index.c\r
-\r
-addXMLinJP2_CPPFLAGS = \\r
--I. \\r
--I$(top_srcdir)/applications/jpip/libopenjpip/tools \\r
--I$(top_builddir)/applications/jpip/libopenjpip/tools\r
-addXMLinJP2_CFLAGS = \r
-addXMLinJP2_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la\r
-addXMLinJP2_SOURCES = addXMLinJP2.c\r
-\r
-install-data-hook:\r
-       @echo -e " (B)\t$(bindir)/jpip_to_jp2$(EXEEXT)" >> $(top_builddir)/report.txt\r
-       @echo -e " (B)\t$(bindir)/jpip_to_j2k$(EXEEXT)" >> $(top_builddir)/report.txt\r
-       @echo -e " (B)\t$(bindir)/test_index$(EXEEXT)" >> $(top_builddir)/report.txt\r
-       @echo -e " (B)\t$(bindir)/addXMLinJP2$(EXEEXT)" >> $(top_builddir)/report.txt\r
diff --git a/applications/jpip/tools/Makefile.nix b/applications/jpip/tools/Makefile.nix
deleted file mode 100644 (file)
index 87fcda7..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-LIBDIR = ../libopenjpip
-LIBFNAME = $(LIBDIR)/libopenjpip_local.a
-CFLAGS  = -O3 -Wall -I$(LIBDIR)
-LDFLAGS = -L$(LIBDIR) -lm -lopenjpip_local
-
-ALL = jpip_to_jp2 jpip_to_j2k test_index addXMLinJP2
-
-all: $(ALL)
-
-jpip_to_jp2: jpip_to_jp2.o $(LIBFNAME)
-           $(CC) $(CFLAGS) $< $(LDFLAGS) -o $@
-
-jpip_to_j2k: jpip_to_j2k.o $(LIBFNAME)
-           $(CC) $(CFLAGS) $< $(LDFLAGS) -o $@
-
-test_index: test_index.o $(LIBFNAME)
-           $(CC) $(CFLAGS) $< $(LDFLAGS) -o $@
-
-clean:
-       rm -f $(ALL) *.o *~
diff --git a/applications/jpip/tools/jpip_to_j2k.c b/applications/jpip/tools/jpip_to_j2k.c
deleted file mode 100644 (file)
index 9a469e7..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2011, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- *  \brief jpip_to_j2k is a program to convert JPT- JPP- stream to J2K file
- *
- *  \section impinst Implementing instructions
- *  This program takes two arguments. \n
- *   -# Input  JPT or JPP file
- *   -# Output J2K file\n
- *   % ./jpip_to_j2k input.jpt output.j2k
- *   or
- *   % ./jpip_to_j2k input.jpp output.j2k
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "msgqueue_manager.h"
-#include "jp2k_encoder.h"
-
-int main(int argc,char *argv[])
-{
-  msgqueue_param_t *msgqueue;
-  int infd, outfd;
-  Byte8_t jpiplen, j2klen;
-  struct stat sb;
-  Byte_t *jpipstream, *j2kstream;
-  
-  if( argc < 3){
-    fprintf( stderr, "Too few arguments:\n");
-    fprintf( stderr, " - input  jpt or jpp file\n");
-    fprintf( stderr, " - output j2k file\n");
-    return -1;
-  }
-
-  if(( infd = open( argv[1], O_RDONLY)) == -1){
-    fprintf( stderr, "file %s not exist\n", argv[1]);
-    return -1;
-  }
-  
-  if( fstat( infd, &sb) == -1){
-    fprintf( stderr, "input file stream is broken\n");
-    return -1;
-  }
-  jpiplen = (Byte8_t)sb.st_size;
-
-  jpipstream = (Byte_t *)malloc( jpiplen);
-
-  if( read( infd, jpipstream, jpiplen) != jpiplen){
-    fprintf( stderr, "file reading error\n");
-    free( jpipstream);
-    return -1;
-  }
-  close(infd);
-
-  msgqueue = gene_msgqueue( true, NULL);
-  parse_JPIPstream( jpipstream, jpiplen, 0, msgqueue);
-  
-  //print_msgqueue( msgqueue);
-  
-  // arguments fw, fh need to be set for LRCP, PCRL, CPRL
-  j2kstream = recons_j2k( msgqueue, jpipstream, msgqueue->first->csn, 0, 0, &j2klen);
-    
-  delete_msgqueue( &msgqueue);
-  free( jpipstream);
-
-#ifdef _WIN32
-  if(( outfd = open( argv[2], O_WRONLY|O_CREAT, _S_IREAD | _S_IWRITE)) == -1){
-#else
-  if(( outfd = open( argv[2], O_WRONLY|O_CREAT, S_IRWXU|S_IRWXG)) == -1){
-#endif
-    fprintf( stderr, "file %s open error\n", argv[2]);
-    return -1;
-  }
-  
-  if( write( outfd, j2kstream, j2klen) != j2klen)
-    fprintf( stderr, "j2k file write error\n");
-
-  free( j2kstream);
-  close(outfd);
-
-  return 0;
-}
diff --git a/applications/jpip/tools/jpip_to_jp2.c b/applications/jpip/tools/jpip_to_jp2.c
deleted file mode 100644 (file)
index aee7956..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * $Id$
- *
- * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
- * Copyright (c) 2002-2011, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*! \file
- *  \brief jpip_to_jp2 is a program to convert JPT- JPP- stream to JP2 file
- *
- *  \section impinst Implementing instructions
- *  This program takes two arguments. \n
- *   -# Input JPT or JPP file
- *   -# Output JP2 file\n
- *   % ./jpip_to_jp2 input.jpt output.jp2
- *   or
- *   % ./jpip_to_jp2 input.jpp output.jp2
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "msgqueue_manager.h"
-#include "byte_manager.h"
-#include "ihdrbox_manager.h"
-#include "metadata_manager.h"
-#include "jp2k_encoder.h"
-
-int main(int argc,char *argv[])
-{
-  msgqueue_param_t *msgqueue;
-  int infd, outfd;
-  Byte8_t jpiplen, jp2len;
-  struct stat sb;
-  Byte_t *jpipstream, *jp2stream;
-  metadatalist_param_t *metadatalist;
-  ihdrbox_param_t *ihdrbox;
-    
-  if( argc < 3){
-    fprintf( stderr, "Too few arguments:\n");
-    fprintf( stderr, " - input  jpt or jpp file\n");
-    fprintf( stderr, " - output jp2 file\n");
-    return -1;
-  }
-
-  if(( infd = open( argv[1], O_RDONLY)) == -1){
-    fprintf( stderr, "file %s not exist\n", argv[1]);
-    return -1;
-  }
-  
-  if( fstat( infd, &sb) == -1){
-    fprintf( stderr, "input file stream is broken\n");
-    return -1;
-  }
-  jpiplen = (Byte8_t)sb.st_size;
-
-  jpipstream = (Byte_t *)malloc( jpiplen);
-
-  if( read( infd, jpipstream, jpiplen) != jpiplen){
-    fprintf( stderr, "file reading error\n");
-    free( jpipstream);
-    return -1;
-  }
-  close(infd);
-
-  metadatalist = gene_metadatalist();
-  msgqueue = gene_msgqueue( true, NULL);
-  parse_JPIPstream( jpipstream, jpiplen, 0, msgqueue);
-  parse_metamsg( msgqueue, jpipstream, jpiplen, metadatalist);
-  print_msgqueue( msgqueue);
-  //print_allmetadata( metadatalist);
-
-  ihdrbox = gene_ihdrbox( metadatalist, jpipstream);
-
-  printf("W*H: %d*%d\n", ihdrbox->height, ihdrbox->width);
-  printf("NC: %d, bpc: %d\n", ihdrbox->nc, ihdrbox->bpc);
-  
-  jp2stream = recons_jp2( msgqueue, jpipstream, msgqueue->first->csn, &jp2len);
-
-#ifdef _WIN32
-  if(( outfd = open( argv[2], O_WRONLY|O_CREAT, _S_IREAD | _S_IWRITE)) == -1){
-#else    
-  if(( outfd = open( argv[2], O_WRONLY|O_CREAT, S_IRWXU|S_IRWXG)) == -1){
-#endif
-    fprintf( stderr, "file %s open error\n", argv[2]);
-    return -1;
-  }
-  
-  if( write( outfd, jp2stream, jp2len) != jp2len)
-    fprintf( stderr, "jp2 file write error\n");
-
-  //print_msgqueue( msgqueue);
-
-  free( ihdrbox);
-  free( jp2stream);
-  close(outfd);
-  
-  delete_msgqueue( &msgqueue);
-  delete_metadatalist( &metadatalist);
-
-  free( jpipstream);
-
-  return 0;
-}
diff --git a/applications/jpip/util/CMakeLists.txt b/applications/jpip/util/CMakeLists.txt
new file mode 100644 (file)
index 0000000..eba94e3
--- /dev/null
@@ -0,0 +1,38 @@
+# Headers file are located here:
+INCLUDE_DIRECTORIES(
+  ${OPENJPEG_SOURCE_DIR}/applications/jpip/libopenjpip
+  ${FCGI_INCLUDE_DIRNAME}
+)
+
+SET(OPJ_SERVER_SRCS
+${CMAKE_CURRENT_SOURCE_DIR}/opj_server.c
+)
+
+# Build executable
+ADD_DEFINITIONS(-DSERVER -DQUIT_SIGNAL="quitJPIP")
+#
+ADD_EXECUTABLE(opj_server ${OPJ_SERVER_SRCS})
+TARGET_LINK_LIBRARIES(opj_server openjpip_server ${FCGI_LIBNAME})
+
+# On unix you need to link to the math library:
+IF(UNIX)
+  TARGET_LINK_LIBRARIES(opj_server m)
+ENDIF(UNIX)
+
+# Install exe
+ INSTALL(TARGETS opj_server
+   EXPORT OpenJPEGTargets
+   DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+ )
+#
+REMOVE_DEFINITIONS(-DSERVER -DQUIT_SIGNAL="quitJPIP")
+#
+FOREACH(exe opj_dec_server jpip_to_jp2 jpip_to_j2k test_index)
+#
+ ADD_EXECUTABLE(${exe} ${exe}.c)
+ TARGET_LINK_LIBRARIES(${exe} openjpip_local)
+  INSTALL(TARGETS ${exe}
+   EXPORT OpenJPEGTargets
+   DESTINATION ${OPENJPEG_INSTALL_BIN_DIR} COMPONENT Applications
+  )
+ENDFOREACH(exe)
diff --git a/applications/jpip/util/Makefile.am b/applications/jpip/util/Makefile.am
new file mode 100644 (file)
index 0000000..9e439d9
--- /dev/null
@@ -0,0 +1,59 @@
+MAINTAINERCLEANFILES = Makefile.in
+
+bin_PROGRAMS = opj_server opj_dec_server jpip_to_jp2 jpip_to_j2k test_index
+
+opj_server_CPPFLAGS = \
+@FCGI_CFLAGS@ \
+-I. \
+-I$(top_srcdir)/applications/jpip/libopenjpip \
+-I$(top_builddir)/applications/jpip/libopenjpip
+#
+opj_server_CFLAGS = -DServer -DQUIT_SIGNAL=\"quitJPIP\"
+#
+opj_server_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_server.la @FCGI_LIBS@ -lm
+#
+opj_server_SOURCES = \
+opj_server.c
+#-------------
+opj_dec_server_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/applications/jpip/libopenjpip \
+-I$(top_builddir)/applications/jpip/libopenjpip
+#
+opj_dec_server_CFLAGS =
+opj_dec_server_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la
+opj_dec_server_SOURCES = opj_dec_server.c
+#-------------
+jpip_to_jp2_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/applications/jpip/libopenjpip \
+-I$(top_builddir)/applications/jpip/libopenjpip
+#
+jpip_to_jp2_CFLAGS =
+jpip_to_jp2_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la
+jpip_to_jp2_SOURCES = jpip_to_jp2.c
+#-------------
+jpip_to_j2k_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/applications/jpip/libopenjpip \
+-I$(top_builddir)/applications/jpip/libopenjpip
+#
+jpip_to_j2k_CFLAGS =
+jpip_to_j2k_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la
+jpip_to_j2k_SOURCES = jpip_to_j2k.c
+#-------------
+test_index_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/applications/jpip/libopenjpip \
+-I$(top_builddir)/applications/jpip/libopenjpip
+#
+test_index_CFLAGS =
+test_index_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la
+test_index_SOURCES = test_index.c
+#-------------
+install-data-hook:
+       @echo -e " (B)\t$(bindir)/opj_server$(EXEEXT)" >> $(top_builddir)/report.txt
+       @echo -e " (B)\t$(bindir)/opj_dec_server$(EXEEXT)" >> $(top_builddir)/report.txt
+       @echo -e " (B)\t$(bindir)/jpip_to_jp2$(EXEEXT)" >> $(top_builddir)/report.txt
+       @echo -e " (B)\t$(bindir)/jpip_to_j2k$(EXEEXT)" >> $(top_builddir)/report.txt
+       @echo -e " (B)\t$(bindir)/test_index$(EXEEXT)" >> $(top_builddir)/report.txt
diff --git a/applications/jpip/util/Makefile.nix b/applications/jpip/util/Makefile.nix
new file mode 100644 (file)
index 0000000..532b743
--- /dev/null
@@ -0,0 +1,33 @@
+JPIPLIBDIR = ../libopenjpip
+
+SLIBFNAME = $(JPIPLIBDIR)/libopenjpip_server.a
+SCFLAGS  = -O3 -Wall -m32 -I$(JPIPLIBDIR) -DSERVER -DQUIT_SIGNAL=\"quitJPIP\"
+SLDFLAGS = -L$(JPIPLIBDIR) -lm -lfcgi -lopenjpip_server
+
+J2KINCDIR = ../../../libopenjpeg
+J2KLIBDIR = $(J2KINCDIR)/.libs
+LIBFNAME = $(JPIPLIBDIR)/libopenjpip_local.a $(J2KLIBDIR)/libopenjpeg.a
+CFLAGS  = -O3 -Wall -I$(JPIPLIBDIR)
+LDFLAGS = -L$(JPIPLIBDIR) -L$(J2KLIBDIR) -lm -lopenjpip_local
+
+ALL = opj_server opj_dec_server jpip_to_jp2 jpip_to_j2k test_index addXMLinJP2
+
+all: $(ALL)
+
+opj_server: opj_server.c $(SLIBFNAME)
+         $(CC) $(SCFLAGS) $< $(SLDFLAGS) $(SLIBFNAME) -o $@
+
+opj_dec_server: opj_dec_server.c $(LIBFNAME)
+       $(CC) $(CFLAGS) $< $(LDFLAGS) $(LIBFNAME) -o $@
+
+jpip_to_jp2: jpip_to_jp2.c $(LIBFNAME)
+           $(CC) $(CFLAGS) $< $(LDFLAGS) $(LIBFNAME) -o $@
+
+jpip_to_j2k: jpip_to_j2k.c $(LIBFNAME)
+           $(CC) $(CFLAGS) $< $(LDFLAGS) $(LIBFNAME) -o $@
+
+test_index: test_index.c $(LIBFNAME)
+           $(CC) $(CFLAGS) $< $(LDFLAGS) $(LIBFNAME) -o $@
+
+clean:
+       rm -f $(ALL) *.o *~
similarity index 62%
rename from applications/jpip/opj_server/jpip_parser.h
rename to applications/jpip/util/jpip_to_j2k.c
index bcb5edbffa6d98ca3a8e8dd145da45cdb4de81ba..15dfc31012a1cba434fe638a21c3ea56ad7b3ce3 100644 (file)
@@ -3,8 +3,7 @@
  *
  * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2011, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
- * Copyright (c) 2011,      Lucian Corlaciu, GSoC
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef        JPIP_PARSER_H_
-# define       JPIP_PARSER_H_
-
-#include "bool.h"
-#include "query_parser.h"
-#include "session_manager.h"
-#include "target_manager.h"
-#include "msgqueue_manager.h"
-
-/**
- * parse JPIP request
+/*! \file
+ *  \brief jpip_to_j2k is a program to convert JPT- JPP- stream to J2K file
  *
- * @param[in]     query_param   structured query
- * @param[in]     sessionlist   session list pointer
- * @param[in]     targetlist    target list pointer
- * @param[in,out] msgqueue      address of the message queue pointer
- * @return                      if succeeded (true) or failed (false)
+ *  \section impinst Implementing instructions
+ *  This program takes two arguments. \n
+ *   -# Input  JPT or JPP file
+ *   -# Output J2K file\n
+ *   % ./jpip_to_j2k input.jpt output.j2k
+ *   or
+ *   % ./jpip_to_j2k input.jpp output.j2k
  */
-bool parse_JPIPrequest( query_param_t query_param,
-                       sessionlist_param_t *sessionlist,
-                       targetlist_param_t *targetlist,
-                       msgqueue_param_t **msgqueue);
 
+#include <stdio.h>
+#include "openjpip.h"
+
+int main(int argc,char *argv[])
+{
+  jpip_dec_param_t *dec;
+  
+  if( argc < 3){
+    fprintf( stderr, "Too few arguments:\n");
+    fprintf( stderr, " - input  jpt or jpp file\n");
+    fprintf( stderr, " - output j2k file\n");
+    return -1;
+  }
+  
+  dec = init_jpipdecoder( false);
+  
+  if(!( fread_jpip( argv[1], dec)))
+    return -1;
+  
+  decode_jpip( dec);
+  
+  if(!( fwrite_jp2k( argv[2], dec)))
+    return -1;
+  
+  output_log( true, false, false, dec);
+  
+  destroy_jpipdecoder( &dec);
 
-#endif             /* !JPIP_PARSER_H_ */
+  return 0;
+}
similarity index 62%
rename from applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.h
rename to applications/jpip/util/jpip_to_jp2.c
index 0170c164e19ea0bfbe350b5dca244f710ddb037c..d667ed9d943914752f4f57cbd514af92541247a8 100644 (file)
@@ -3,8 +3,7 @@
  *
  * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
  * Copyright (c) 2002-2011, Professor Benoit Macq
- * Copyright (c) 2010-2011, Kaori Hagihara 
- * Copyright (c) 2011,      Lucian Corlaciu, GSoC
+ * Copyright (c) 2010-2011, Kaori Hagihara
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef        DEC_CLIENTMSG_HANDLER_H_
-# define       DEC_CLIENTMSG_HANDLER_H_
-
-#include "bool.h"
-#include "imgsock_manager.h"
-#include "cache_manager.h"
-#include "byte_manager.h"
-#include "msgqueue_manager.h"
-
-/**
- * handle client message
+/*! \file
+ *  \brief jpip_to_jp2 is a program to convert JPT- JPP- stream to JP2 file
  *
- * @param[in]     connected_socket socket descriptor
- * @param[in]     cachelist        cache list pointer
- * @param[in,out] jpipstream       address of JPT- JPP- stream pointer
- * @param[in,out] streamlen        address of stream length
- * @param[in,out] msgqueue         message queue pointer
+ *  \section impinst Implementing instructions
+ *  This program takes two arguments. \n
+ *   -# Input JPT or JPP file
+ *   -# Output JP2 file\n
+ *   % ./jpip_to_jp2 input.jpt output.jp2
+ *   or
+ *   % ./jpip_to_jp2 input.jpp output.jp2
  */
-bool handle_clientmsg( SOCKET connected_socket, cachelist_param_t *cachelist, Byte_t **jpipstream, int *streamlen, msgqueue_param_t *msgqueue);
 
+#include <stdio.h>
+#include "openjpip.h"
+
+int main(int argc,char *argv[])
+{
+  jpip_dec_param_t *dec;
+    
+  if( argc < 3){
+    fprintf( stderr, "Too few arguments:\n");
+    fprintf( stderr, " - input  jpt or jpp file\n");
+    fprintf( stderr, " - output jp2 file\n");
+    return -1;
+  }
+  
+  dec = init_jpipdecoder( true);
+  
+  if(!( fread_jpip( argv[1], dec)))
+    return -1;
+  
+  decode_jpip( dec);
+  
+  if(!(fwrite_jp2k( argv[2], dec)))
+    return -1;
+
+  output_log( true, false, true, dec);
+
+  destroy_jpipdecoder( &dec);
 
-#endif             /* !DEC_CLIENTMSG_HANDLER_H_ */
+  return 0;
+}
similarity index 78%
rename from applications/jpip/opj_client/opj_dec_server/opj_dec_server.c
rename to applications/jpip/util/opj_dec_server.c
index 6e8957a285000245d7bcc0ffabe4a9f5da351190..7eee9a84354bc26f66a8fda09d8499989a17d93d 100644 (file)
  */
 
 #include <stdio.h>
-#include <stdlib.h>
-#include "dec_clientmsg_handler.h"
-#include "imgsock_manager.h"
-#include "byte_manager.h"
-#include "msgqueue_manager.h"
-#include "cache_manager.h"
-
+#include "openjpip.h"
 
 #ifdef _WIN32
 WSADATA initialisation_win32;
@@ -59,10 +53,8 @@ WSADATA initialisation_win32;
 
 int main(int argc, char *argv[]){
   
-  SOCKET connected_socket;
-  Byte_t *jpipstream = NULL;
-  int jpipstreamlen = 0;
-  msgqueue_param_t *msgqueue = gene_msgqueue( true, NULL);
+  dec_server_record_t *server_record;
+  client_t client;
 
 #ifdef _WIN32
   int erreur = WSAStartup(MAKEWORD(2,2),&initialisation_win32);
@@ -72,25 +64,13 @@ int main(int argc, char *argv[]){
     printf( "Initialisation Winsock\n");
 #endif //_WIN32
   
-  SOCKET listening_socket = open_listeningsocket();
-  
-  cachelist_param_t *cachelist = gene_cachelist();
+  server_record = init_dec_server(); 
   
-  while(( connected_socket = accept_socket( listening_socket)) != -1 )
-    if(!(handle_clientmsg( connected_socket, cachelist, &jpipstream, &jpipstreamlen, msgqueue)))
+  while(( client = accept_connection( server_record)) != -1 )
+    if(!handle_clientreq( client, server_record))
       break;
   
-  if( close_socket(listening_socket) != 0){
-    perror("close");
-    return -1;
-  }
-
-  delete_cachelist( &cachelist);
-
-  if( msgqueue)
-    delete_msgqueue( &msgqueue);
-  
-  free( jpipstream);
+  terminate_dec_server( &server_record);
 
 #ifdef _WIN32
   if( WSACleanup() != 0){
similarity index 73%
rename from applications/jpip/opj_server/opj_server.c
rename to applications/jpip/util/opj_server.c
index b39ad56eb8e234186daf04b65ed07d366230d37e..a2344c8b1cb4244a7a99394a438cbec8c542f12f 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
-#include <math.h>
-
-#include "query_parser.h"
-#include "jpip_parser.h"
-#include "session_manager.h"
-#include "target_manager.h"
-#include "msgqueue_manager.h"
+#include "openjpip.h"
 
 #ifndef QUIT_SIGNAL
 #define QUIT_SIGNAL "quitJPIP"
 #endif
 
-#ifdef SERVER
-#include "fcgi_stdio.h"
-#define logstream FCGI_stdout
-#else
-#define FCGI_stdout stdout
-#define FCGI_stderr stderr
-#define logstream stderr
-#endif //SERVER
-
 int main(void)
 { 
-  sessionlist_param_t *sessionlist;
-  targetlist_param_t *targetlist;
-  bool parse_status;
-  
-  sessionlist = gene_sessionlist();
-  targetlist  = gene_targetlist();
-  
+  server_record_t *server_record;
+
+  server_record = init_JPIPserver();
+
 #ifdef SERVER
 
   char *query_string;
@@ -95,37 +77,29 @@ int main(void)
 
       if( strcmp( query_string, QUIT_SIGNAL) == 0)
        break;
-           
-      query_param_t query_param;
-      msgqueue_param_t *msgqueue;
-
-      parse_query( query_string, &query_param); 
-
-#ifndef SERVER
-      print_queryparam( query_param);
-#endif
       
-      msgqueue = NULL;
-      if( !(parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue)))
+      QR_t *qr;
+      bool parse_status;
+      
+      qr = parse_querystring( query_string);
+      
+      if( !(parse_status = process_JPIPrequest( server_record, qr)))
        fprintf( FCGI_stderr, "Error: JPIP request failed\n");
-            
-      fprintf( FCGI_stdout, "\r\n");
 
 #ifndef SERVER
-      //      if( parse_status)
-      //       print_allsession( sessionlist);
-      print_msgqueue( msgqueue);
+      local_log( true, true, parse_status, false, qr, server_record);
 #endif
+            
+      fprintf( FCGI_stdout, "\r\n");
 
-      emit_stream_from_msgqueue( msgqueue);
+      send_responsedata( qr);
 
-      delete_msgqueue( &msgqueue);
+      end_QRprocess( server_record, &qr);
     }
   
   fprintf( FCGI_stderr, "JPIP server terminated by a client request\n");
 
-  delete_sessionlist( &sessionlist);
-  delete_targetlist( &targetlist);
+  terminate_JPIPserver( &server_record);
 
   return 0;
 }
diff --git a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar
new file mode 100644 (file)
index 0000000..a1b6789
Binary files /dev/null and b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar differ
diff --git a/applications/jpip/util/opj_viewer/dist/opj_viewer.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer.jar
new file mode 120000 (symlink)
index 0000000..4fceec6
--- /dev/null
@@ -0,0 +1 @@
+opj_viewer-20111026.jar
\ No newline at end of file
similarity index 98%
rename from applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java
rename to applications/jpip/util/opj_viewer/src/JPIPHttpClient.java
index eee20f7141032e077bd420f79005c3a41fe3e25f..e4c86a97c3d29e382f4afaaa3ef41d8a5fcb1989 100644 (file)
@@ -178,7 +178,9 @@ public class JPIPHttpClient
            if( !status.contains("OK"))
                System.err.println( headers.get("Reason"));
            
-           hvalueline = headers.get("Content-type").get(0);
+           if(( hvaluelist = headers.get("Content-type")) == null)
+               hvaluelist = headers.get("Content-Type");
+           hvalueline = hvaluelist.get(0);
            System.err.println( hvalueline);
 
            if( hvalueline.endsWith("jpt-stream"))
diff --git a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar
new file mode 100644 (file)
index 0000000..f67cfb5
Binary files /dev/null and b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar differ
diff --git a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar
new file mode 120000 (symlink)
index 0000000..f1df7c2
--- /dev/null
@@ -0,0 +1 @@
+opj_viewer_xerces-20111026.jar
\ No newline at end of file
similarity index 57%
rename from applications/jpip/tools/test_index.c
rename to applications/jpip/util/test_index.c
index 431ec7c3cb9e09f4c6afca4c3e6f4dea9c21f710..abad323ac49cb6e08d68d7472f5c8a5d95914586 100644 (file)
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#include "index_manager.h"
-
-
-#ifdef SERVER
-#include "fcgi_stdio.h"
-#define logstream FCGI_stdout
-#else
-#define FCGI_stdout stdout
-#define FCGI_stderr stderr
-#define logstream stderr
-#endif //SERVER
-
-
-/**
- * Open JP2 file with the check of JP2 header
- *
- * @param[in] filename file name string
- * @return             file descriptor
- */
-int myopen_jp2file( char filename[]);
-
+#include "openjpip.h"
 
 int
 main(int argc, char *argv[])
 {
   int fd;
-  index_param_t *jp2idx;
+  index_t *jp2idx;
   
-  if((fd = myopen_jp2file( argv[1])) == -1){
-    fprintf( stderr, "jp2 file open error\n"); 
+  if( (fd = open( argv[1], O_RDONLY)) == -1){
+    fprintf( stderr, "Error: Target %s not found\n", argv[1]);
     return -1;
   }
 
-  if( !(jp2idx = parse_jp2file( fd))){
-    fprintf( FCGI_stdout, "Status: 501\r\n");
+  if( !(jp2idx = get_index_from_JP2file( fd))){
+    fprintf( stderr, "JP2 file broken\n");
     return -1;
   }
   
-  print_index( *jp2idx);
-
-  delete_index( &jp2idx);
+  output_index( jp2idx);
+  destroy_index( &jp2idx);
+  close(fd);
 
   return 0;
 } /* main */
-
-
-
-int myopen_jp2file( char filename[])
-{
-  int fd;
-  char *data;
-
-  if( (fd = open( filename, O_RDONLY)) == -1){
-    fprintf( FCGI_stdout, "Reason: Target %s not found\r\n", filename);
-    return -1;
-  }
-  // Check resource is a JP family file.
-  if( lseek( fd, 0, SEEK_SET)==-1){
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: Target %s broken (lseek error)\r\n", filename);
-    return -1;
-  }
-  
-  data = (char *)malloc( 12); // size of header
-  if( read( fd, data, 12) != 12){
-    free( data);
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: Target %s broken (read error)\r\n", filename);
-    return -1;
-  }
-    
-  if( *data || *(data + 1) || *(data + 2) ||
-      *(data + 3) != 12 || strncmp (data + 4, "jP  \r\n\x87\n", 8)){
-    free( data);
-    close(fd);
-    fprintf( FCGI_stdout, "Reason: No JPEG 2000 Signature box in target %s\r\n", filename);
-    return -1;
-  } 
-  free( data);
-  return fd;
-}
-
index 4a592f9088abe796bd60dd039f7ef4754d858750..defc6c083f6218e90de94bbb0452938752555aa7 100644 (file)
@@ -411,10 +411,7 @@ applications/codec/Makefile
 applications/mj2/Makefile
 applications/jpip/Makefile
 applications/jpip/libopenjpip/Makefile
-applications/jpip/opj_server/Makefile
-applications/jpip/opj_client/Makefile
-applications/jpip/opj_client/opj_dec_server/Makefile
-applications/jpip/tools/Makefile
+applications/jpip/util/Makefile
 doc/Makefile
 ])
 
index d659169fb20e002d9cb52e8c1ae2f4f391ae4c32..e9a8fdcb135c2596c07fa2637f78048b2ca4d77f 100755 (executable)
@@ -84,13 +84,11 @@ int write_phix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int
 
 int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
 {
-  int len, lenp;
-  int size_of_coding; // 4 or 8
-  int version;
-  int tileno, resno, precno, layno, num_packet=0;
-  int i,nmax=0;
+  int len, lenp, tileno, version, i, nmax, size_of_coding; // 4 or 8
   opj_tile_info_t *tile_Idx;
   opj_packet_info_t packet;
+  int resno, precno, layno, num_packet;
+  int numOfres, numOfprec, numOflayers;
 
   if( j2klen > pow( 2, 32)){
     size_of_coding =  8;
@@ -105,7 +103,8 @@ int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b
   cio_skip( cio, 4);              /* L [at the end]      */
   cio_write( cio, JPIP_FAIX, 4);  /* FAIX                */ 
   cio_write( cio, version,1);     /* Version 0 = 4 bytes */
-  
+
+  nmax = 0;
   for( i=0; i<=cstr_info.numdecompos[compno]; i++)
     nmax += cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers;
   
@@ -113,16 +112,38 @@ int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b
   cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding);      /* M    */
   
   for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){
-    
     tile_Idx = &cstr_info.tile[ tileno];
-    //    int correction = EPHused ? 3 : 1;
+    
     num_packet = 0;
+    numOfres = cstr_info.numdecompos[compno] + 1;
 
-    for( resno=0; resno<=cstr_info.numdecompos[compno]; resno++){
-      for( precno=0; precno<tile_Idx->pw[resno]*tile_Idx->ph[resno]; precno++){
-       for( layno=0; layno<cstr_info.numlayers; layno++){
-         packet = tile_Idx->packet[num_packet * cstr_info.numcomps + compno];
-         cio_write( cio, packet.start_pos-coff, size_of_coding);                                   /* start position */
+    for( resno=0; resno<numOfres ; resno++){
+      numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
+      for( precno=0; precno<numOfprec; precno++){
+       numOflayers = cstr_info.numlayers;
+       for( layno=0; layno<numOflayers; layno++){
+         
+         switch ( cstr_info.prog){
+         case LRCP:
+           packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
+           break;
+         case RLCP:
+           packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
+           break;
+         case RPCL:
+           packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
+           break;
+         case PCRL:
+           packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
+           break;
+         case CPRL:
+           packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
+           break;
+         default:
+           fprintf( stderr, "failed to ppix indexing\n");
+         }
+
+         cio_write( cio, packet.start_pos-coff, size_of_coding);                /* start position */
          cio_write( cio, packet.end_ph_pos-packet.start_pos+1, size_of_coding); /* length         */
          
          num_packet++;
index 4106144dbf4d1e044b7f35c2edadf0cc1945ea29..41f6d0b439540c6f64960ab896b0b7dd85da4d65 100755 (executable)
@@ -87,14 +87,12 @@ int write_ppix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int
 
 int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio)
 {
-  int len, lenp;
-  int tileno, resno, precno, layno, num_packet=0;
-  int size_of_coding; // 4 or 8
-  int version;
-  int i,nmax=0;
+  int len, lenp, tileno, version, i, nmax, size_of_coding; // 4 or 8
   opj_tile_info_t *tile_Idx;
   opj_packet_info_t packet;
-  
+  int resno, precno, layno, num_packet;
+  int numOfres, numOfprec, numOflayers;
+
   if( j2klen > pow( 2, 32)){
     size_of_coding =  8;
     version = 1;
@@ -109,6 +107,7 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b
   cio_write( cio, JPIP_FAIX, 4);  /* FAIX                */ 
   cio_write( cio, version, 1);     /* Version 0 = 4 bytes */
 
+  nmax = 0;
   for( i=0; i<=cstr_info.numdecompos[compno]; i++)
     nmax += cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers;
   
@@ -116,29 +115,50 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b
   cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding);      /* M    */
 
   for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){
-
     tile_Idx = &cstr_info.tile[ tileno];
-    //    int correction = EPHused ? 3 : 1;
     num_packet=0;
-        
-    for( resno=0; resno<=cstr_info.numdecompos[compno]; resno++){
-      for( precno=0; precno<tile_Idx->pw[resno]*tile_Idx->ph[resno]; precno++){
-       for( layno=0; layno<cstr_info.numlayers; layno++){
-         packet = tile_Idx->packet[num_packet * cstr_info.numcomps + compno];
-         cio_write( cio, packet.start_pos-coff, size_of_coding);                                   /* start position */
+    numOfres = cstr_info.numdecompos[compno] + 1;
+  
+    for( resno=0; resno<numOfres ; resno++){
+      numOfprec = tile_Idx->pw[resno]*tile_Idx->ph[resno];
+      for( precno=0; precno<numOfprec; precno++){
+       numOflayers = cstr_info.numlayers;
+       for( layno=0; layno<numOflayers; layno++){
+
+         switch ( cstr_info.prog){
+         case LRCP:
+           packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno];
+           break;
+         case RLCP:
+           packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno];
+           break;
+         case RPCL:
+           packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno];
+           break;
+         case PCRL:
+           packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno];
+           break;
+         case CPRL:
+           packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno];
+           break;
+         default:
+           fprintf( stderr, "failed to ppix indexing\n");
+         }
+
+         cio_write( cio, packet.start_pos-coff, size_of_coding);             /* start position */
          cio_write( cio, packet.end_pos-packet.start_pos+1, size_of_coding); /* length         */
          
          num_packet++;
        }
       }
     }
-    
-    /* PADDING */
-    while( num_packet < nmax){
+  
+    while( num_packet < nmax){     /* PADDING */
       cio_write( cio, 0, size_of_coding); /* start position            */
       cio_write( cio, 0, size_of_coding); /* length                    */
       num_packet++;
-    }
+    }   
   }
 
   len = cio_tell( cio)-lenp;
@@ -147,5 +167,4 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b
   cio_seek( cio, lenp+len);
 
   return len;
-
 }