From 238b7679173c36fb3c838c252591278fa0e93c4d Mon Sep 17 00:00:00 2001 From: Antonin Descampe Date: Wed, 2 Nov 2011 00:49:20 +0000 Subject: [PATCH] [1.5] backport r1017, r1030:1032 from trunk + additional fix for cmake and autotools --- applications/jpip/CHANGES | 16 +- applications/jpip/CMakeLists.txt | 4 +- applications/jpip/Makefile.am | 2 +- applications/jpip/Makefile.nix | 16 +- applications/jpip/libopenjpip/CMakeLists.txt | 33 +- applications/jpip/libopenjpip/Makefile.am | 27 +- .../cache_manager.c | 0 .../cache_manager.h | 0 .../channel_manager.c | 0 .../channel_manager.h | 0 applications/jpip/libopenjpip/comMakefile.mk | 19 +- .../dec_clientmsg_handler.c | 120 +----- .../jpip/libopenjpip/dec_clientmsg_handler.h | 105 +++++ .../imgsock_manager.c | 0 .../imgsock_manager.h | 0 .../jp2k_decoder.c | 6 +- .../jp2k_decoder.h | 0 .../{opj_server => libopenjpip}/jpip_parser.c | 103 ----- applications/jpip/libopenjpip/jpip_parser.h | 112 ++++++ .../jpipstream_manager.c | 6 +- .../jpipstream_manager.h | 0 applications/jpip/libopenjpip/openjpip.c | 378 ++++++++++++++++++ applications/jpip/libopenjpip/openjpip.h | 296 ++++++++++++++ .../query_parser.c | 77 ++-- .../query_parser.h | 14 +- .../session_manager.c | 0 .../session_manager.h | 0 applications/jpip/opj_client/CMakeLists.txt | 1 - applications/jpip/opj_client/Makefile.am | 3 - .../opj_client/opj_dec_server/CMakeLists.txt | 29 -- .../opj_client/opj_dec_server/Makefile.am | 32 -- .../opj_client/opj_dec_server/Makefile.nix | 17 - .../opj_client/opj_viewer/dist/opj_viewer.jar | 1 - .../dist/opj_viewer_xerces.jar | 1 - applications/jpip/opj_server/CMakeLists.txt | 30 -- applications/jpip/opj_server/Makefile.am | 28 -- applications/jpip/opj_server/Makefile.nix | 15 - applications/jpip/tools/CMakeLists.txt | 37 -- applications/jpip/tools/Makefile.am | 47 --- applications/jpip/tools/Makefile.nix | 20 - applications/jpip/tools/jpip_to_j2k.c | 114 ------ applications/jpip/tools/jpip_to_jp2.c | 130 ------ applications/jpip/util/CMakeLists.txt | 38 ++ applications/jpip/util/Makefile.am | 59 +++ applications/jpip/util/Makefile.nix | 33 ++ .../jpip/{tools => util}/addXMLinJP2.c | 0 .../jpip_parser.h => util/jpip_to_j2k.c} | 62 +-- .../jpip_to_jp2.c} | 59 ++- .../opj_dec_server => util}/opj_dec_server.c | 34 +- .../jpip/{opj_server => util}/opj_server.c | 60 +-- .../{opj_client => util}/opj_viewer/build.xml | 0 .../opj_viewer/dist/manifest.txt | 0 .../opj_viewer/dist/opj_viewer-20111018.jar | Bin .../opj_viewer/dist/opj_viewer-20111026.jar | Bin 0 -> 15894 bytes .../jpip/util/opj_viewer/dist/opj_viewer.jar | 1 + .../opj_viewer/src/ImageManager.java | 0 .../opj_viewer/src/ImageViewer.java | 0 .../opj_viewer/src/ImageWindow.java | 0 .../opj_viewer/src/ImgdecClient.java | 0 .../opj_viewer/src/JPIPHttpClient.java | 4 +- .../opj_viewer/src/MML.java | 0 .../opj_viewer/src/PnmImage.java | 0 .../opj_viewer/src/RegimViewer.java | 0 .../opj_viewer/src/ResizeListener.java | 0 .../opj_viewer_xerces/build.xml | 0 .../opj_viewer_xerces/dist/manifest.txt | 0 .../dist/opj_viewer_xerces-20111010.jar | Bin .../dist/opj_viewer_xerces-20111026.jar | Bin 0 -> 20411 bytes .../dist/opj_viewer_xerces.jar | 1 + .../opj_viewer_xerces/src/ImageManager.java | 0 .../opj_viewer_xerces/src/ImageViewer.java | 0 .../opj_viewer_xerces/src/ImageWindow.java | 0 .../opj_viewer_xerces/src/ImgdecClient.java | 0 .../opj_viewer_xerces/src/JP2XMLparser.java | 0 .../opj_viewer_xerces/src/JPIPHttpClient.java | 0 .../opj_viewer_xerces/src/MML.java | 0 .../opj_viewer_xerces/src/OptionPanel.java | 0 .../opj_viewer_xerces/src/PnmImage.java | 0 .../opj_viewer_xerces/src/RegimViewer.java | 0 .../opj_viewer_xerces/src/ResizeListener.java | 0 .../jpip/{tools => util}/test_index.c | 78 +--- configure.ac | 5 +- libopenjpeg/phix_manager.c | 47 ++- libopenjpeg/ppix_manager.c | 57 ++- 84 files changed, 1359 insertions(+), 1018 deletions(-) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/cache_manager.c (100%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/cache_manager.h (100%) rename applications/jpip/{opj_server => libopenjpip}/channel_manager.c (100%) rename applications/jpip/{opj_server => libopenjpip}/channel_manager.h (100%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/dec_clientmsg_handler.c (63%) create mode 100644 applications/jpip/libopenjpip/dec_clientmsg_handler.h rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/imgsock_manager.c (100%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/imgsock_manager.h (100%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/jp2k_decoder.c (98%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/jp2k_decoder.h (100%) rename applications/jpip/{opj_server => libopenjpip}/jpip_parser.c (80%) create mode 100644 applications/jpip/libopenjpip/jpip_parser.h rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/jpipstream_manager.c (99%) rename applications/jpip/{opj_client/opj_dec_server => libopenjpip}/jpipstream_manager.h (100%) create mode 100644 applications/jpip/libopenjpip/openjpip.c create mode 100644 applications/jpip/libopenjpip/openjpip.h rename applications/jpip/{opj_server => libopenjpip}/query_parser.c (89%) rename applications/jpip/{opj_server => libopenjpip}/query_parser.h (91%) rename applications/jpip/{opj_server => libopenjpip}/session_manager.c (100%) rename applications/jpip/{opj_server => libopenjpip}/session_manager.h (100%) delete mode 100644 applications/jpip/opj_client/CMakeLists.txt delete mode 100644 applications/jpip/opj_client/Makefile.am delete mode 100644 applications/jpip/opj_client/opj_dec_server/CMakeLists.txt delete mode 100644 applications/jpip/opj_client/opj_dec_server/Makefile.am delete mode 100644 applications/jpip/opj_client/opj_dec_server/Makefile.nix delete mode 120000 applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar delete mode 120000 applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar delete mode 100644 applications/jpip/opj_server/CMakeLists.txt delete mode 100644 applications/jpip/opj_server/Makefile.am delete mode 100644 applications/jpip/opj_server/Makefile.nix delete mode 100644 applications/jpip/tools/CMakeLists.txt delete mode 100644 applications/jpip/tools/Makefile.am delete mode 100644 applications/jpip/tools/Makefile.nix delete mode 100644 applications/jpip/tools/jpip_to_j2k.c delete mode 100644 applications/jpip/tools/jpip_to_jp2.c create mode 100644 applications/jpip/util/CMakeLists.txt create mode 100644 applications/jpip/util/Makefile.am create mode 100644 applications/jpip/util/Makefile.nix rename applications/jpip/{tools => util}/addXMLinJP2.c (100%) rename applications/jpip/{opj_server/jpip_parser.h => util/jpip_to_j2k.c} (62%) rename applications/jpip/{opj_client/opj_dec_server/dec_clientmsg_handler.h => util/jpip_to_jp2.c} (62%) rename applications/jpip/{opj_client/opj_dec_server => util}/opj_dec_server.c (78%) rename applications/jpip/{opj_server => util}/opj_server.c (73%) rename applications/jpip/{opj_client => util}/opj_viewer/build.xml (100%) rename applications/jpip/{opj_client => util}/opj_viewer/dist/manifest.txt (100%) rename applications/jpip/{opj_client => util}/opj_viewer/dist/opj_viewer-20111018.jar (100%) create mode 100644 applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar create mode 120000 applications/jpip/util/opj_viewer/dist/opj_viewer.jar rename applications/jpip/{opj_client => util}/opj_viewer/src/ImageManager.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/ImageViewer.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/ImageWindow.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/ImgdecClient.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/JPIPHttpClient.java (98%) rename applications/jpip/{opj_client => util}/opj_viewer/src/MML.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/PnmImage.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/RegimViewer.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer/src/ResizeListener.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/build.xml (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/dist/manifest.txt (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar (100%) create mode 100644 applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar create mode 120000 applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/ImageManager.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/ImageViewer.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/ImageWindow.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/ImgdecClient.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/JP2XMLparser.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/JPIPHttpClient.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/MML.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/OptionPanel.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/PnmImage.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/RegimViewer.java (100%) rename applications/jpip/{opj_client => util}/opj_viewer_xerces/src/ResizeListener.java (100%) rename applications/jpip/{tools => util}/test_index.c (57%) diff --git a/applications/jpip/CHANGES b/applications/jpip/CHANGES index c5ae11ad..545b4e98 100644 --- a/applications/jpip/CHANGES +++ b/applications/jpip/CHANGES @@ -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 diff --git a/applications/jpip/CMakeLists.txt b/applications/jpip/CMakeLists.txt index b6f6e2a5..aa8cf7cc 100644 --- a/applications/jpip/CMakeLists.txt +++ b/applications/jpip/CMakeLists.txt @@ -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) diff --git a/applications/jpip/Makefile.am b/applications/jpip/Makefile.am index 9be07426..94b868eb 100644 --- a/applications/jpip/Makefile.am +++ b/applications/jpip/Makefile.am @@ -1,3 +1,3 @@ MAINTAINERCLEANFILES = Makefile.in -SUBDIRS = libopenjpip opj_server opj_client tools +SUBDIRS = libopenjpip util diff --git a/applications/jpip/Makefile.nix b/applications/jpip/Makefile.nix index faa991ba..479f02e4 100644 --- a/applications/jpip/Makefile.nix +++ b/applications/jpip/Makefile.nix @@ -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 diff --git a/applications/jpip/libopenjpip/CMakeLists.txt b/applications/jpip/libopenjpip/CMakeLists.txt index 66d69b48..d56fba4a 100644 --- a/applications/jpip/libopenjpip/CMakeLists.txt +++ b/applications/jpip/libopenjpip/CMakeLists.txt @@ -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 + ) diff --git a/applications/jpip/libopenjpip/Makefile.am b/applications/jpip/libopenjpip/Makefile.am index df32184d..68a72576 100644 --- a/applications/jpip/libopenjpip/Makefile.am +++ b/applications/jpip/libopenjpip/Makefile.am @@ -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 diff --git a/applications/jpip/opj_client/opj_dec_server/cache_manager.c b/applications/jpip/libopenjpip/cache_manager.c similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/cache_manager.c rename to applications/jpip/libopenjpip/cache_manager.c diff --git a/applications/jpip/opj_client/opj_dec_server/cache_manager.h b/applications/jpip/libopenjpip/cache_manager.h similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/cache_manager.h rename to applications/jpip/libopenjpip/cache_manager.h diff --git a/applications/jpip/opj_server/channel_manager.c b/applications/jpip/libopenjpip/channel_manager.c similarity index 100% rename from applications/jpip/opj_server/channel_manager.c rename to applications/jpip/libopenjpip/channel_manager.c diff --git a/applications/jpip/opj_server/channel_manager.h b/applications/jpip/libopenjpip/channel_manager.h similarity index 100% rename from applications/jpip/opj_server/channel_manager.h rename to applications/jpip/libopenjpip/channel_manager.h diff --git a/applications/jpip/libopenjpip/comMakefile.mk b/applications/jpip/libopenjpip/comMakefile.mk index 9e2b97ca..1401b70f 100644 --- a/applications/jpip/libopenjpip/comMakefile.mk +++ b/applications/jpip/libopenjpip/comMakefile.mk @@ -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 *~ diff --git a/applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.c b/applications/jpip/libopenjpip/dec_clientmsg_handler.c 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 e7b64ee4..875e297d 100644 --- a/applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.c +++ b/applications/jpip/libopenjpip/dec_clientmsg_handler.c @@ -41,124 +41,6 @@ //! 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 index 00000000..88a6fbed --- /dev/null +++ b/applications/jpip/libopenjpip/dec_clientmsg_handler.h @@ -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_ */ diff --git a/applications/jpip/opj_client/opj_dec_server/imgsock_manager.c b/applications/jpip/libopenjpip/imgsock_manager.c similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/imgsock_manager.c rename to applications/jpip/libopenjpip/imgsock_manager.c diff --git a/applications/jpip/opj_client/opj_dec_server/imgsock_manager.h b/applications/jpip/libopenjpip/imgsock_manager.h similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/imgsock_manager.h rename to applications/jpip/libopenjpip/imgsock_manager.h diff --git a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c b/applications/jpip/libopenjpip/jp2k_decoder.c similarity index 98% rename from applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c rename to applications/jpip/libopenjpip/jp2k_decoder.c index 1da84c60..933331b2 100644 --- a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.c +++ b/applications/jpip/libopenjpip/jp2k_decoder.c @@ -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; } diff --git a/applications/jpip/opj_client/opj_dec_server/jp2k_decoder.h b/applications/jpip/libopenjpip/jp2k_decoder.h similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/jp2k_decoder.h rename to applications/jpip/libopenjpip/jp2k_decoder.h diff --git a/applications/jpip/opj_server/jpip_parser.c b/applications/jpip/libopenjpip/jpip_parser.c similarity index 80% rename from applications/jpip/opj_server/jpip_parser.c rename to applications/jpip/libopenjpip/jpip_parser.c index 9b49a362..eb4e76f0 100644 --- a/applications/jpip/opj_server/jpip_parser.c +++ b/applications/jpip/libopenjpip/jpip_parser.c @@ -45,109 +45,6 @@ #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 index 00000000..9f3cd8a4 --- /dev/null +++ b/applications/jpip/libopenjpip/jpip_parser.h @@ -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_ */ diff --git a/applications/jpip/opj_client/opj_dec_server/jpipstream_manager.c b/applications/jpip/libopenjpip/jpipstream_manager.c similarity index 99% rename from applications/jpip/opj_client/opj_dec_server/jpipstream_manager.c rename to applications/jpip/libopenjpip/jpipstream_manager.c index 627eaa17..97b61526 100644 --- a/applications/jpip/opj_client/opj_dec_server/jpipstream_manager.c +++ b/applications/jpip/libopenjpip/jpipstream_manager.c @@ -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/opj_client/opj_dec_server/jpipstream_manager.h b/applications/jpip/libopenjpip/jpipstream_manager.h similarity index 100% rename from applications/jpip/opj_client/opj_dec_server/jpipstream_manager.h rename to applications/jpip/libopenjpip/jpipstream_manager.h diff --git a/applications/jpip/libopenjpip/openjpip.c b/applications/jpip/libopenjpip/openjpip.c new file mode 100644 index 00000000..a4f3000a --- /dev/null +++ b/applications/jpip/libopenjpip/openjpip.c @@ -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 +#include "openjpip.h" +#include "jpip_parser.h" +#include "channel_manager.h" + +#include +#include "dec_clientmsg_handler.h" +#include "jpipstream_manager.h" + +#include +#include +#include +#include +#include +#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 index 00000000..c4011f85 --- /dev/null +++ b/applications/jpip/libopenjpip/openjpip.h @@ -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_ */ diff --git a/applications/jpip/opj_server/query_parser.c b/applications/jpip/libopenjpip/query_parser.c similarity index 89% rename from applications/jpip/opj_server/query_parser.c rename to applications/jpip/libopenjpip/query_parser.c index a29c8f12..1293c0a8 100644 --- a/applications/jpip/opj_server/query_parser.c +++ b/applications/jpip/libopenjpip/query_parser.c @@ -53,11 +53,11 @@ /** - * 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; iw[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); +} diff --git a/applications/jpip/opj_server/query_parser.h b/applications/jpip/libopenjpip/query_parser.h similarity index 91% rename from applications/jpip/opj_server/query_parser.h rename to applications/jpip/libopenjpip/query_parser.h index 55be9dd1..d42385ae 100644 --- a/applications/jpip/opj_server/query_parser.h +++ b/applications/jpip/libopenjpip/query_parser.h @@ -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_server/session_manager.c b/applications/jpip/libopenjpip/session_manager.c similarity index 100% rename from applications/jpip/opj_server/session_manager.c rename to applications/jpip/libopenjpip/session_manager.c diff --git a/applications/jpip/opj_server/session_manager.h b/applications/jpip/libopenjpip/session_manager.h similarity index 100% rename from applications/jpip/opj_server/session_manager.h rename to applications/jpip/libopenjpip/session_manager.h diff --git a/applications/jpip/opj_client/CMakeLists.txt b/applications/jpip/opj_client/CMakeLists.txt deleted file mode 100644 index 8cf71ace..00000000 --- a/applications/jpip/opj_client/CMakeLists.txt +++ /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 index 455f2d7f..00000000 --- a/applications/jpip/opj_client/Makefile.am +++ /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 index 10e9aa5c..00000000 --- a/applications/jpip/opj_client/opj_dec_server/CMakeLists.txt +++ /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 index b9e32c92..00000000 --- a/applications/jpip/opj_client/opj_dec_server/Makefile.am +++ /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 index b29671f2..00000000 --- a/applications/jpip/opj_client/opj_dec_server/Makefile.nix +++ /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 index b135bb0f..00000000 --- a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer.jar +++ /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 index 8fbb188c..00000000 --- a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces.jar +++ /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 index e0ed5469..00000000 --- a/applications/jpip/opj_server/CMakeLists.txt +++ /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 index cb03c9ce..00000000 --- a/applications/jpip/opj_server/Makefile.am +++ /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 index ac2389b4..00000000 --- a/applications/jpip/opj_server/Makefile.nix +++ /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 index c04928d7..00000000 --- a/applications/jpip/tools/CMakeLists.txt +++ /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 index b9959723..00000000 --- a/applications/jpip/tools/Makefile.am +++ /dev/null @@ -1,47 +0,0 @@ -MAINTAINERCLEANFILES = Makefile.in - -bin_PROGRAMS = jpip_to_jp2 jpip_to_j2k test_index addXMLinJP2 - -jpip_to_jp2_CPPFLAGS = \ --I. \ --I$(top_srcdir)/applications/jpip/libopenjpip \ --I$(top_builddir)/applications/jpip/libopenjpip \ --I$(top_srcdir)/applications/jpip/libopenjpip/tools \ --I$(top_builddir)/applications/jpip/libopenjpip/tools -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 \ --I$(top_srcdir)/applications/jpip/libopenjpip/tools \ --I$(top_builddir)/applications/jpip/libopenjpip/tools -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 \ --I$(top_srcdir)/applications/jpip/libopenjpip/tools \ --I$(top_builddir)/applications/jpip/libopenjpip/tools -test_index_CFLAGS = -test_index_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la -test_index_SOURCES = test_index.c - -addXMLinJP2_CPPFLAGS = \ --I. \ --I$(top_srcdir)/applications/jpip/libopenjpip/tools \ --I$(top_builddir)/applications/jpip/libopenjpip/tools -addXMLinJP2_CFLAGS = -addXMLinJP2_LDADD = $(top_builddir)/applications/jpip/libopenjpip/libopenjpip_local.la -addXMLinJP2_SOURCES = addXMLinJP2.c - -install-data-hook: - @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 - @echo -e " (B)\t$(bindir)/addXMLinJP2$(EXEEXT)" >> $(top_builddir)/report.txt diff --git a/applications/jpip/tools/Makefile.nix b/applications/jpip/tools/Makefile.nix deleted file mode 100644 index 87fcda74..00000000 --- a/applications/jpip/tools/Makefile.nix +++ /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 index 9a469e74..00000000 --- a/applications/jpip/tools/jpip_to_j2k.c +++ /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 -#include -#include -#include -#include -#include -#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 index aee7956f..00000000 --- a/applications/jpip/tools/jpip_to_jp2.c +++ /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 -#include -#include -#include -#include -#include -#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 index 00000000..eba94e37 --- /dev/null +++ b/applications/jpip/util/CMakeLists.txt @@ -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 index 00000000..9e439d9b --- /dev/null +++ b/applications/jpip/util/Makefile.am @@ -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 index 00000000..532b743d --- /dev/null +++ b/applications/jpip/util/Makefile.nix @@ -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 *~ diff --git a/applications/jpip/tools/addXMLinJP2.c b/applications/jpip/util/addXMLinJP2.c similarity index 100% rename from applications/jpip/tools/addXMLinJP2.c rename to applications/jpip/util/addXMLinJP2.c diff --git a/applications/jpip/opj_server/jpip_parser.h b/applications/jpip/util/jpip_to_j2k.c similarity index 62% rename from applications/jpip/opj_server/jpip_parser.h rename to applications/jpip/util/jpip_to_j2k.c index bcb5edbf..15dfc310 100644 --- a/applications/jpip/opj_server/jpip_parser.h +++ b/applications/jpip/util/jpip_to_j2k.c @@ -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 @@ -29,28 +28,45 @@ * 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 +#include "openjpip.h" -#endif /* !JPIP_PARSER_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); + + return 0; +} diff --git a/applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.h b/applications/jpip/util/jpip_to_jp2.c 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 0170c164..d667ed9d 100644 --- a/applications/jpip/opj_client/opj_dec_server/dec_clientmsg_handler.h +++ b/applications/jpip/util/jpip_to_jp2.c @@ -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 @@ -29,25 +28,45 @@ * 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 +#include "openjpip.h" -#endif /* !DEC_CLIENTMSG_HANDLER_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); + + return 0; +} diff --git a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c b/applications/jpip/util/opj_dec_server.c 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 6e8957a2..7eee9a84 100644 --- a/applications/jpip/opj_client/opj_dec_server/opj_dec_server.c +++ b/applications/jpip/util/opj_dec_server.c @@ -45,13 +45,7 @@ */ #include -#include -#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(); + server_record = init_dec_server(); - cachelist_param_t *cachelist = gene_cachelist(); - - 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){ diff --git a/applications/jpip/opj_server/opj_server.c b/applications/jpip/util/opj_server.c similarity index 73% rename from applications/jpip/opj_server/opj_server.c rename to applications/jpip/util/opj_server.c index b39ad56e..a2344c8b 100644 --- a/applications/jpip/opj_server/opj_server.c +++ b/applications/jpip/util/opj_server.c @@ -48,36 +48,18 @@ #include #include #include -#include - -#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); + + 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"); #ifndef SERVER - print_queryparam( query_param); + local_log( true, true, parse_status, false, qr, server_record); #endif - - msgqueue = NULL; - if( !(parse_status = parse_JPIPrequest( query_param, sessionlist, targetlist, &msgqueue))) - fprintf( FCGI_stderr, "Error: JPIP request failed\n"); fprintf( FCGI_stdout, "\r\n"); -#ifndef SERVER - // if( parse_status) - // print_allsession( sessionlist); - print_msgqueue( msgqueue); -#endif + send_responsedata( qr); - emit_stream_from_msgqueue( msgqueue); - - 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/opj_client/opj_viewer/build.xml b/applications/jpip/util/opj_viewer/build.xml similarity index 100% rename from applications/jpip/opj_client/opj_viewer/build.xml rename to applications/jpip/util/opj_viewer/build.xml diff --git a/applications/jpip/opj_client/opj_viewer/dist/manifest.txt b/applications/jpip/util/opj_viewer/dist/manifest.txt similarity index 100% rename from applications/jpip/opj_client/opj_viewer/dist/manifest.txt rename to applications/jpip/util/opj_viewer/dist/manifest.txt diff --git a/applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20111018.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar similarity index 100% rename from applications/jpip/opj_client/opj_viewer/dist/opj_viewer-20111018.jar rename to applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar 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 index 0000000000000000000000000000000000000000..a1b6789a62e3c93a9a4652d2f35dd6dbc5f0e2aa GIT binary patch literal 15894 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 V{6naKfB^oyK>ox`5T3uT{vQ^oGGhP$ literal 0 HcmV?d00001 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 index 00000000..4fceec6d --- /dev/null +++ b/applications/jpip/util/opj_viewer/dist/opj_viewer.jar @@ -0,0 +1 @@ +opj_viewer-20111026.jar \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer/src/ImageManager.java b/applications/jpip/util/opj_viewer/src/ImageManager.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/ImageManager.java rename to applications/jpip/util/opj_viewer/src/ImageManager.java diff --git a/applications/jpip/opj_client/opj_viewer/src/ImageViewer.java b/applications/jpip/util/opj_viewer/src/ImageViewer.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/ImageViewer.java rename to applications/jpip/util/opj_viewer/src/ImageViewer.java diff --git a/applications/jpip/opj_client/opj_viewer/src/ImageWindow.java b/applications/jpip/util/opj_viewer/src/ImageWindow.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/ImageWindow.java rename to applications/jpip/util/opj_viewer/src/ImageWindow.java diff --git a/applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java b/applications/jpip/util/opj_viewer/src/ImgdecClient.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/ImgdecClient.java rename to applications/jpip/util/opj_viewer/src/ImgdecClient.java diff --git a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java b/applications/jpip/util/opj_viewer/src/JPIPHttpClient.java 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 eee20f71..e4c86a97 100644 --- a/applications/jpip/opj_client/opj_viewer/src/JPIPHttpClient.java +++ b/applications/jpip/util/opj_viewer/src/JPIPHttpClient.java @@ -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/opj_client/opj_viewer/src/MML.java b/applications/jpip/util/opj_viewer/src/MML.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/MML.java rename to applications/jpip/util/opj_viewer/src/MML.java diff --git a/applications/jpip/opj_client/opj_viewer/src/PnmImage.java b/applications/jpip/util/opj_viewer/src/PnmImage.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/PnmImage.java rename to applications/jpip/util/opj_viewer/src/PnmImage.java diff --git a/applications/jpip/opj_client/opj_viewer/src/RegimViewer.java b/applications/jpip/util/opj_viewer/src/RegimViewer.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/RegimViewer.java rename to applications/jpip/util/opj_viewer/src/RegimViewer.java diff --git a/applications/jpip/opj_client/opj_viewer/src/ResizeListener.java b/applications/jpip/util/opj_viewer/src/ResizeListener.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer/src/ResizeListener.java rename to applications/jpip/util/opj_viewer/src/ResizeListener.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/build.xml b/applications/jpip/util/opj_viewer_xerces/build.xml similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/build.xml rename to applications/jpip/util/opj_viewer_xerces/build.xml diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt b/applications/jpip/util/opj_viewer_xerces/dist/manifest.txt similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/dist/manifest.txt rename to applications/jpip/util/opj_viewer_xerces/dist/manifest.txt diff --git a/applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar rename to applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar 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 index 0000000000000000000000000000000000000000..f67cfb5b9731d85d357c003921226d0e90a71ddc GIT binary patch literal 20411 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 JoyF$ae*hNpM_~W} literal 0 HcmV?d00001 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 index 00000000..f1df7c26 --- /dev/null +++ b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar @@ -0,0 +1 @@ +opj_viewer_xerces-20111026.jar \ No newline at end of file diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ImageManager.java b/applications/jpip/util/opj_viewer_xerces/src/ImageManager.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/ImageManager.java rename to applications/jpip/util/opj_viewer_xerces/src/ImageManager.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ImageViewer.java b/applications/jpip/util/opj_viewer_xerces/src/ImageViewer.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/ImageViewer.java rename to applications/jpip/util/opj_viewer_xerces/src/ImageViewer.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ImageWindow.java b/applications/jpip/util/opj_viewer_xerces/src/ImageWindow.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/ImageWindow.java rename to applications/jpip/util/opj_viewer_xerces/src/ImageWindow.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java b/applications/jpip/util/opj_viewer_xerces/src/ImgdecClient.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/ImgdecClient.java rename to applications/jpip/util/opj_viewer_xerces/src/ImgdecClient.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java b/applications/jpip/util/opj_viewer_xerces/src/JP2XMLparser.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/JP2XMLparser.java rename to applications/jpip/util/opj_viewer_xerces/src/JP2XMLparser.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java b/applications/jpip/util/opj_viewer_xerces/src/JPIPHttpClient.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/JPIPHttpClient.java rename to applications/jpip/util/opj_viewer_xerces/src/JPIPHttpClient.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/MML.java b/applications/jpip/util/opj_viewer_xerces/src/MML.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/MML.java rename to applications/jpip/util/opj_viewer_xerces/src/MML.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java b/applications/jpip/util/opj_viewer_xerces/src/OptionPanel.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/OptionPanel.java rename to applications/jpip/util/opj_viewer_xerces/src/OptionPanel.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java b/applications/jpip/util/opj_viewer_xerces/src/PnmImage.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/PnmImage.java rename to applications/jpip/util/opj_viewer_xerces/src/PnmImage.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java b/applications/jpip/util/opj_viewer_xerces/src/RegimViewer.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/RegimViewer.java rename to applications/jpip/util/opj_viewer_xerces/src/RegimViewer.java diff --git a/applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java b/applications/jpip/util/opj_viewer_xerces/src/ResizeListener.java similarity index 100% rename from applications/jpip/opj_client/opj_viewer_xerces/src/ResizeListener.java rename to applications/jpip/util/opj_viewer_xerces/src/ResizeListener.java diff --git a/applications/jpip/tools/test_index.c b/applications/jpip/util/test_index.c similarity index 57% rename from applications/jpip/tools/test_index.c rename to applications/jpip/util/test_index.c index 431ec7c3..abad323a 100644 --- a/applications/jpip/tools/test_index.c +++ b/applications/jpip/util/test_index.c @@ -42,87 +42,27 @@ #include #include #include -#include -#include -#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; -} - diff --git a/configure.ac b/configure.ac index 4a592f90..defc6c08 100644 --- a/configure.ac +++ b/configure.ac @@ -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 ]) diff --git a/libopenjpeg/phix_manager.c b/libopenjpeg/phix_manager.c index d659169f..e9a8fdcb 100755 --- a/libopenjpeg/phix_manager.c +++ b/libopenjpeg/phix_manager.c @@ -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; tilenopw[resno]*tile_Idx->ph[resno]; precno++){ - for( layno=0; laynopacket[num_packet * cstr_info.numcomps + compno]; - cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */ + for( resno=0; resnopw[resno]*tile_Idx->ph[resno]; + for( precno=0; precnopacket[ ((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++; diff --git a/libopenjpeg/ppix_manager.c b/libopenjpeg/ppix_manager.c index 4106144d..41f6d0b4 100755 --- a/libopenjpeg/ppix_manager.c +++ b/libopenjpeg/ppix_manager.c @@ -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; tilenopw[resno]*tile_Idx->ph[resno]; precno++){ - for( layno=0; laynopacket[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; resnopw[resno]*tile_Idx->ph[resno]; + for( precno=0; precnopacket[ ((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; - }