[1.5][JPIP] fixed Region of Interest option, and memory leak of opj_dec_server
authorKaori Hagihara <khagihara@users.noreply.github.com>
Wed, 16 Nov 2011 15:43:01 +0000 (15:43 +0000)
committerKaori Hagihara <khagihara@users.noreply.github.com>
Wed, 16 Nov 2011 15:43:01 +0000 (15:43 +0000)
24 files changed:
applications/jpip/CHANGES
applications/jpip/libopenjpip/cache_manager.c
applications/jpip/libopenjpip/dec_clientmsg_handler.c
applications/jpip/libopenjpip/dec_clientmsg_handler.h
applications/jpip/libopenjpip/imgsock_manager.c
applications/jpip/libopenjpip/imgsock_manager.h
applications/jpip/libopenjpip/index_manager.c
applications/jpip/libopenjpip/index_manager.h
applications/jpip/libopenjpip/jp2k_decoder.c
applications/jpip/libopenjpip/jp2k_encoder.c
applications/jpip/libopenjpip/jp2k_encoder.h
applications/jpip/libopenjpip/jpipstream_manager.c
applications/jpip/libopenjpip/jpipstream_manager.h
applications/jpip/libopenjpip/openjpip.c
applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar [deleted file]
applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar [deleted file]
applications/jpip/util/opj_viewer/dist/opj_viewer-20111116.jar [new file with mode: 0644]
applications/jpip/util/opj_viewer/dist/opj_viewer.jar
applications/jpip/util/opj_viewer/src/ImageManager.java
applications/jpip/util/opj_viewer/src/ImgdecClient.java
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar [deleted file]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar [deleted file]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111116.jar [new file with mode: 0644]
applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces.jar

index 7d52da3186c4f7041789c03ae6ea8bf84124f7c2..71fe35f7967195c643404a5bd6bb658fb1b71e96 100644 (file)
@@ -5,6 +5,9 @@ What's New for OpenJPIP
 ! : changed
 + : added
 
+November 16, 2011
+* [kaori] fixed Region of Interest option, and memory leak of opj_dec_server
+
 November 8, 2011
 ! [kaori] updated main page of doxygen
 
index adc0ba87f732a706ad3e2c8b6e13b03a97860baa..770004399db5dd802990b651da7030a13e7cb676 100644 (file)
@@ -180,8 +180,8 @@ void add_cachecid( char *cid, cache_param_t *cache)
 {
   if( !cid)
     return;
-
-  if( realloc( cache->cid, (cache->numOfcid+1)*sizeof(char *)) == NULL){
+  
+  if( (cache->cid = realloc( cache->cid, (cache->numOfcid+1)*sizeof(char *))) == NULL){
     fprintf( stderr, "failed to add new cid to cache table in add_cachecid()\n");
     return;
   }
index 294285af23eaa93c0348141903ff4f90e7bc514c..5fd3b038920d42492cbf6f3e4e199d8eaf6757d6 100644 (file)
@@ -90,7 +90,7 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par
   char *CIDorTID, tmp[10];
   cache_param_t *cache;
   int fw, fh;
-
+  
   CIDorTID = receive_string( connected_socket);
   
   if(!(cache = search_cacheBycid( CIDorTID, cachelist)))
@@ -107,11 +107,12 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par
   receive_line( connected_socket, tmp);
   fh = atoi( tmp);
 
-  pnmstream = jpipstream_to_pnm( jpipstream, msgqueue, cache->csn, fw, fh, &cache->ihdrbox);
-  ihdrbox = cache->ihdrbox;
+  ihdrbox = NULL;
+  pnmstream = jpipstream_to_pnm( jpipstream, msgqueue, cache->csn, fw, fh, &ihdrbox);
 
   send_PNMstream( connected_socket, pnmstream, ihdrbox->width, ihdrbox->height, ihdrbox->nc, ihdrbox->bpc > 8 ? 255 : (1 << ihdrbox->bpc) - 1);
 
+  free( ihdrbox);
   free( pnmstream);
 }
 
@@ -185,6 +186,36 @@ void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist)
   free( cid);
 }
 
+void handle_SIZreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist)
+{
+  char *tid, *cid;
+  cache_param_t *cache;
+  Byte4_t width, height;
+  
+  tid = receive_string( connected_socket);
+  cid = receive_string( connected_socket);
+  
+  cache = NULL;
+
+  if( tid[0] != '0')
+    cache = search_cacheBytid( tid, cachelist);
+  
+  if( !cache && cid[0] != '0')
+    cache = search_cacheBycid( cid, cachelist);
+
+  free( tid);
+  free( cid);
+  
+  width = height = 0;
+  if( cache){
+    if( !cache->ihdrbox)
+      cache->ihdrbox = get_SIZ_from_jpipstream( jpipstream, msgqueue, cache->csn);
+    width  = cache->ihdrbox->width;
+    height = cache->ihdrbox->height;
+  }
+  send_SIZstream( connected_socket, width, height);
+}
+
 void handle_JP2saveMSG( SOCKET connected_socket, cachelist_param_t *cachelist, msgqueue_param_t *msgqueue, Byte_t *jpipstream)
 {
   char *cid;
index 88a6fbed7dc2ea01a1e4ef54975572eb039e3536..58424bfdf8e1db3d1cc547bc3920a61ed012a162 100644 (file)
@@ -91,6 +91,14 @@ void handle_CIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
  */
 void handle_dstCIDreqMSG( SOCKET connected_socket, cachelist_param_t *cachelist);
 
+/**
+ * handle SIZ request message
+ *
+ * @param[in]     connected_socket socket descriptor
+ * @param[in,out] cachelist        cache list pointer
+ */
+void handle_SIZreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_param_t *msgqueue, cachelist_param_t *cachelist);
+
 /**
  * handle saving JP2 file request message
  *
index 79149f5fe4d5c704c9c236249d8bad12c1c71546..0c1cbe6f00836a6d156034f3ee7c315b74950ff9 100644 (file)
@@ -85,7 +85,7 @@ SOCKET open_listeningsocket()
     close_socket(listening_socket);
     exit(1);
   }
-  printf("port %d is listened\n", port);
+  fprintf( stderr, "port %d is listened\n", port);
 
   return listening_socket;
 }
@@ -102,7 +102,7 @@ msgtype_t identify_clientmsg( SOCKET connected_socket)
 {
   int receive_size;
   char buf[BUF_LEN];
-  char *magicid[] = { "JPIP-stream", "PNM request", "XML request", "TID request", "CID request", "CID destroy", "JP2 save", "QUIT"};
+  char *magicid[] = { "JPIP-stream", "PNM request", "XML request", "TID request", "CID request", "CID destroy", "SIZ request", "JP2 save", "QUIT"};
   int i;
   
   receive_size = receive_line( connected_socket, buf);
@@ -114,7 +114,7 @@ msgtype_t identify_clientmsg( SOCKET connected_socket)
 
   for( i=0; i<NUM_OF_MSGTYPES; i++){
     if( strncasecmp( magicid[i], buf, strlen(magicid[i])) == 0){
-      printf("%s\n", magicid[i]);
+      fprintf( stderr, "%s\n", magicid[i]);
       return i;
     }
   }
@@ -238,6 +238,23 @@ void send_PNMstream( SOCKET connected_socket, Byte_t *pnmstream, unsigned int wi
   send_stream( connected_socket, pnmstream, pnmlen);
 }
 
+void send_SIZstream( SOCKET connected_socket, unsigned int width, unsigned int height)
+{
+  Byte_t responce[9];
+  
+  responce[0] = 'S';
+  responce[1] = 'I';
+  responce[2] = 'Z';
+  responce[3] = (width >> 16) & 0xff;
+  responce[4] = (width >> 8) & 0xff;
+  responce[5] = width & 0xff;
+  responce[6] = (height >> 16) & 0xff;
+  responce[7] = (height >> 8) & 0xff;
+  responce[8] = height & 0xff;
+
+  send_stream( connected_socket, responce, 9);
+}
+
 void send_stream( SOCKET connected_socket, void *stream, int length)
 {
   void *ptr = stream;
index 5961a58109b7940c5670addbab4b03d45625cf43..7da94b90c9921ae55ecd10649957d9e3c4c73e54 100644 (file)
@@ -56,8 +56,8 @@ SOCKET open_listeningsocket();
 SOCKET accept_socket( SOCKET listening_socket);
 
 
-#define NUM_OF_MSGTYPES 8
-typedef enum eMSGTYPE{ JPIPSTREAM, PNMREQ, XMLREQ, TIDREQ, CIDREQ, CIDDST, JP2SAVE, QUIT, MSGERROR} msgtype_t;
+#define NUM_OF_MSGTYPES 9
+typedef enum eMSGTYPE{ JPIPSTREAM, PNMREQ, XMLREQ, TIDREQ, CIDREQ, CIDDST, SIZREQ, JP2SAVE, QUIT, MSGERROR} msgtype_t;
 
 /**
  * indeitify client message type
@@ -84,8 +84,8 @@ Byte_t * receive_JPIPstream( SOCKET connected_socket, char **target, char **tid,
  *
  * @param [in]  connected_socket file descriptor of the connected socket
  * @param [in]  pnmstream        PGM/PPM image codestream
- * @param [in]  width            width  of the image
- * @param [in]  height           height of the image
+ * @param [in]  width            width  of the PGM/PPM image (different from the original image)
+ * @param [in]  height           height of the PGM/PPM image
  * @param [in]  numofcomp        number of components of the image
  * @param [in]  maxval           maximum value of the image (only 255 supported)
  */
@@ -118,6 +118,15 @@ void send_TIDstream( SOCKET connected_socket, char *tid, int tidlen);
  */
 void send_CIDstream( SOCKET connected_socket, char *cid, int cidlen);
 
+/**
+ * send SIZ data stream to the client
+ *
+ * @param [in]  connected_socket file descriptor of the connected socket
+ * @param [in]  width            original width  of the image
+ * @param [in]  height           original height of the image
+ */
+void send_SIZstream( SOCKET connected_socket, unsigned int width, unsigned int height);
+
 /**
  * send response signal to the client
  *
@@ -192,13 +201,19 @@ int close_socket( SOCKET sock);
  * client -> server: CID destroy\\n ciddata \n
  * server -> client: 1 or 0 (of 1Byte response signal)
  *
- *\section sec7 JP2 save
+ *\section sec7 SIZ request
+ * Get original size of image
+ *
+ * client -> server: SIZ request\\n  tidstring\\n  cidstring\\n \n
+ * server -> client: SIZ (3Byte) width (3Byte Big endian) height (3Byte Big endian)
+ *
+ *\section sec8 JP2 save
  * Save in JP2 file format
  *
  * client -> server: JP2 save\\n ciddata \n
  * server -> client: 1 or 0 (of 1Byte response signal)
  *
- *\section sec8 QUIT
+ *\section sec9 QUIT
  * Quit the opj_dec_server program
  *
  * client -> server: quit or QUIT
index 83e2d3b589cc6691b0a921f064c4e3eca24a1634..6eafa40b78304c2da26259fe9f3a5601f5612d8d 100644 (file)
@@ -188,8 +188,7 @@ void delete_index( index_param_t **index)
 
   delete_metadatalist( &((*index)->metadatalist));
 
-  free( (*index)->COD.XPsiz);
-  free( (*index)->COD.YPsiz);
+  delete_COD( (*index)->COD);
   
   delete_faixbox( &((*index)->tilepart));
 
@@ -204,6 +203,12 @@ void delete_index( index_param_t **index)
   free(*index);
 }
 
+void delete_COD( CODmarker_param_t COD)
+{
+  if( COD.XPsiz)    free( COD.XPsiz);
+  if( COD.YPsiz)    free( COD.YPsiz);
+}
+
 bool check_JP2boxidx( boxlist_param_t *toplev_boxlist)
 {
   box_param_t *iptr, *fidx, *prxy;
index 74e25c7244e14230dfea9f013d753f2c3d1a97aa..5aeee0db5a8fd3a119ebf9dd457c5339a7ad9554 100644 (file)
@@ -129,6 +129,14 @@ void print_COD( CODmarker_param_t COD);
  */
 void delete_index( index_param_t **index);
 
+/**
+ * delete dynamic arrays in COD marker
+ *
+ * @param[in] COD COD marker information
+ */
+void delete_COD( CODmarker_param_t COD);
+
+
 //! 1-dimensional range parameters
 typedef struct range_param{
   Byte4_t minvalue; //!< minimal value
index 933331b287e1f5740c7ef66d56b1a10e3793c843..28f3322683980c7367b146a3cb538b275e8cb557 100644 (file)
@@ -74,11 +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");
+  fprintf(stderr, "image is decoded!\n");
+
   if(!image) {
     fprintf(stderr, "ERROR -> jp2_to_image: failed to decode image!\n");
     opj_destroy_decompress(dinfo);
index 5025bf8eff039227a49451dd13297ddc367a8033..013e4316189893a3d2a5773f7e66c2d745e85848 100644 (file)
@@ -278,10 +278,14 @@ Byte_t * recons_codestream_from_JPPstream( msgqueue_param_t *msgqueue, Byte_t *j
   }
 
   if( max_reslev < COD.numOfdecomp)
-    if( !modify_mainheader( j2kstream, max_reslev, SIZ, COD, j2klen))
+    if( !modify_mainheader( j2kstream, max_reslev, SIZ, COD, j2klen)){
+      delete_COD( COD);
       return j2kstream;
+    }
 
   j2kstream = add_EOC( j2kstream, j2klen);
+  delete_COD( COD);
+
   return j2kstream;
 }
 
@@ -785,3 +789,9 @@ Byte_t * gene_emptytilestream( const Byte8_t tileID, Byte8_t *length)
 
   return buf;
 }
+
+Byte_t * recons_j2kmainhead( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, Byte8_t *j2klen)
+{
+  *j2klen = 0;
+  return add_mainhead_msgstream( msgqueue, jpipstream, NULL, csn, j2klen);
+}
index 9a86dd3f51bda6fe675ad1937b4940ded8a66030..3945e2a0445f884918744ca6ac747488e080e6ca 100644 (file)
@@ -60,5 +60,15 @@ Byte_t * recons_j2k( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn
  */
 Byte_t * recons_jp2( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, Byte8_t *jp2len);
 
+/**
+ * reconstruct j2k codestream of mainheader from message queue
+ *
+ * @param[in]  msgqueue   message queue pointer
+ * @param[in]  jpipstream original jpt- jpp- stream
+ * @param[in]  csn        codestream number
+ * @param[out] j2klen     pointer to the j2k codestream length
+ * @return     generated  reconstructed j2k codestream
+ */
+Byte_t * recons_j2kmainhead( msgqueue_param_t *msgqueue, Byte_t *jpipstream, Byte8_t csn, Byte8_t *j2klen);
 
 #endif             /* !JP2K_ENCODER_H_ */
index 97b61526cea1cd8e1a9cf40a0bd61622ef5e215e..bb1418f7474705de473bdd19ca13711d34250422 100644 (file)
@@ -35,6 +35,8 @@
 #include "jpipstream_manager.h"
 #include "jp2k_encoder.h"
 #include "jp2k_decoder.h"
+#include "ihdrbox_manager.h"
+#include "j2kheader_manager.h"
 
 Byte_t * update_JPIPstream( Byte_t *newstream, int newstreamlen, Byte_t *cache_stream, int *streamlen)
 {
@@ -81,3 +83,28 @@ Byte_t * jpipstream_to_pnm( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte
 
   return pnmstream;
 }
+
+ihdrbox_param_t * get_SIZ_from_jpipstream( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte8_t csn)
+{
+  ihdrbox_param_t *ihdrbox;
+  Byte_t *j2kstream;
+  Byte8_t j2klen;
+  SIZmarker_param_t SIZ;
+
+  j2kstream = recons_j2kmainhead( msgqueue, jpipstream, csn, &j2klen);
+  if( !get_mainheader_from_j2kstream( j2kstream, &SIZ, NULL)){
+    free( j2kstream);
+    return NULL;
+  }
+
+  ihdrbox = (ihdrbox_param_t *)malloc( sizeof(ihdrbox_param_t));
+
+  ihdrbox->width = SIZ.Xsiz;
+  ihdrbox->height = SIZ.Ysiz;
+  ihdrbox->nc = SIZ.Csiz;
+  ihdrbox->bpc = SIZ.Ssiz[0];
+  
+  free( j2kstream);
+
+  return ihdrbox;
+}
index d9e7702a2ff4b8712d57b41ffefa3d2376432595..795ae4a0d65375ab7654dbeed592545e8f1ffb0f 100644 (file)
@@ -37,3 +37,5 @@ Byte_t * update_JPIPstream( Byte_t *newstream, int newstreamlen, Byte_t *cache_s
 void save_codestream( Byte_t *codestream, Byte8_t streamlen, char *fmt);
 
 Byte_t * jpipstream_to_pnm( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte8_t csn, int fw, int fh, ihdrbox_param_t **ihdrbox);
+
+ihdrbox_param_t * get_SIZ_from_jpipstream( Byte_t *jpipstream, msgqueue_param_t *msgqueue, Byte8_t csn);
index a4f3000a0e2e15c8f30c10a1819583474f6d0160..ee8bcfde2cba51f6eb5367fd46113d2378d3f450 100644 (file)
@@ -205,6 +205,10 @@ bool handle_clientreq( client_t client, dec_server_record_t *rec)
   case CIDDST:
     handle_dstCIDreqMSG( client, rec->cachelist);
     break;
+    
+  case SIZREQ:
+    handle_SIZreqMSG( client, rec->jpipstream, rec->msgqueue, rec->cachelist);
+    break;
 
   case JP2SAVE:
     handle_JP2saveMSG( client, rec->cachelist, rec->msgqueue, rec->jpipstream);
@@ -218,7 +222,7 @@ bool handle_clientreq( client_t client, dec_server_record_t *rec)
     break;
   }
         
-  printf("\t end of the connection\n\n");
+  fprintf( stderr, "\t end of the connection\n\n");
   if( close_socket(client) != 0){
     perror("close");
     return false;
diff --git a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar
deleted file mode 100644 (file)
index a17ca3b..0000000
Binary files a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111018.jar and /dev/null differ
diff --git a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar
deleted file mode 100644 (file)
index a1b6789..0000000
Binary files a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111026.jar and /dev/null differ
diff --git a/applications/jpip/util/opj_viewer/dist/opj_viewer-20111116.jar b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111116.jar
new file mode 100644 (file)
index 0000000..cfdf660
Binary files /dev/null and b/applications/jpip/util/opj_viewer/dist/opj_viewer-20111116.jar differ
index 4fceec6d264776ac35432d3d7e831e852a5d4a65..07d0dbd54133c5a2eba04c7d10e6296bd734ebe9 120000 (symlink)
@@ -1 +1 @@
-opj_viewer-20111026.jar
\ No newline at end of file
+opj_viewer-20111116.jar
\ No newline at end of file
index 5634123fb449f0085e73c6064e283d68efcddba3..bd4cadd192c210c1f2ecad238208952908b2a79f 100644 (file)
@@ -33,15 +33,32 @@ import java.awt.Image;
 public class ImageManager extends JPIPHttpClient
 {
     private PnmImage pnmimage;
+    private int origwidth;
+    private int origheight;
 
     public ImageManager( String uri)
     {
        super( uri);
        pnmimage = null;
+       origwidth = 0;
+       origheight = 0;
     }
     
-    public int getOrigWidth(){ return pnmimage.get_width();}
-    public int getOrigHeight(){ return pnmimage.get_height();}
+    public int getOrigWidth(){
+       if( origwidth == 0){
+           if( cid != null || tid != null){
+               java.awt.Dimension dim = ImgdecClient.query_imagesize( cid, tid);
+               if( dim != null){
+                   origwidth = dim.width;
+                   origheight = dim.height;
+               }
+           }
+           else
+               System.err.println("Neither cid or tid obtained before to get Original Image Dimension");
+       }
+       return origwidth;
+    }
+    public int getOrigHeight(){ return origheight;}
     
     public Image getImage( String j2kfilename, int reqfw, int reqfh, boolean reqcnew, boolean reqJPP, boolean reqJPT)
     {
@@ -106,6 +123,7 @@ public class ImageManager extends JPIPHttpClient
        }
        return xmldata;
     }
+
     public void closeChannel()
     {
        if( cid != null){
index 35c9712884754761b054dc398d5dda524321f5db..f956d05b1f4c4718a8aab7b3c176130b8d7d67db 100644 (file)
@@ -253,6 +253,49 @@ public class ImgdecClient{
 
        return id;      
     }
+
+    public static java.awt.Dimension query_imagesize( String cid, String tid)
+    {
+       java.awt.Dimension dim = null;
+
+       try{
+           Socket imgdecSocket = new Socket( "localhost", 5000);
+           DataOutputStream os = new DataOutputStream( imgdecSocket.getOutputStream());
+           DataInputStream is = new DataInputStream( imgdecSocket.getInputStream());
+           byte []header = new byte[3];
+
+           os.writeBytes( "SIZ request\n");
+           if( tid == null)
+               os.writeBytes( "0\n");
+           else
+               os.writeBytes( tid + "\n");
+           if( cid == null)
+               os.writeBytes( "0\n");
+           else
+               os.writeBytes( cid + "\n");
+
+           read_stream( is, header, 3);
+           
+           if( header[0] == 83 && header[1] == 73 && header[2] == 90){
+               
+               byte []data = new byte[ 3];
+               read_stream( is, data, 3);
+               int w = (data[0]&0xff)<<16 | (data[1]&0xff)<<8 | (data[2]&0xff);
+               read_stream( is, data, 3);
+               int h = (data[0]&0xff)<<16 | (data[1]&0xff)<<8 | (data[2]&0xff);
+               dim = new java.awt.Dimension( w, h);
+           }
+           else
+               System.err.println("Error in query_imagesize("+ cid + ", " + tid + "), wrong to start with " + header);
+       }
+       catch (UnknownHostException e) {
+           System.err.println("Trying to connect to unknown host: " + e);
+       } catch (IOException e) {
+           System.err.println("IOException: " + e);
+       }
+
+       return dim;
+    }
   
     public static void read_stream( DataInputStream is, byte []stream, int length)
     {
diff --git a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar
deleted file mode 100644 (file)
index e2f7888..0000000
Binary files a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111010.jar and /dev/null differ
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
deleted file mode 100644 (file)
index f67cfb5..0000000
Binary files a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111026.jar and /dev/null differ
diff --git a/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111116.jar b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111116.jar
new file mode 100644 (file)
index 0000000..0c3e0db
Binary files /dev/null and b/applications/jpip/util/opj_viewer_xerces/dist/opj_viewer_xerces-20111116.jar differ
index f1df7c261cea1697b504beaea9822662f397d57c..7e6617732ddf3e4ebf052752d806aa0149ed2ca8 120000 (symlink)
@@ -1 +1 @@
-opj_viewer_xerces-20111026.jar
\ No newline at end of file
+opj_viewer_xerces-20111116.jar
\ No newline at end of file