[1.5] backport r909, r922-925 to branch 1.5 (terminating status of opj_server in debug/non-server mode and stateless requests)
This commit is contained in:
parent
d35f647aaa
commit
9e60c2f8e9
|
@ -5,6 +5,12 @@ What's New for OpenJPIP
|
||||||
! : changed
|
! : changed
|
||||||
+ : added
|
+ : added
|
||||||
|
|
||||||
|
September 16, 2011
|
||||||
|
+ [kaori] enabled stateless requests from the opj_viewers
|
||||||
|
|
||||||
|
Septempber 1, 2011
|
||||||
|
* [kaori] changed terminating status of opj_server in debug/non-server mode
|
||||||
|
|
||||||
August 27, 2011
|
August 27, 2011
|
||||||
* [antonin] fixed missing include directory in opj_client/opj_dec_server/CMakeLists.txt
|
* [antonin] fixed missing include directory in opj_client/opj_dec_server/CMakeLists.txt
|
||||||
|
|
||||||
|
|
|
@ -106,10 +106,11 @@ Client:
|
||||||
% ../opj_dec_server
|
% ../opj_dec_server
|
||||||
|
|
||||||
2. Open image viewers (as many as needed)
|
2. Open image viewers (as many as needed)
|
||||||
% java -jar opj_viewer.jar http://hostname/myFCGI JP2_filename.jp2
|
% java -jar opj_viewer.jar http://hostname/myFCGI JP2_filename.jp2 [stateless]
|
||||||
( The arguments
|
( The arguments
|
||||||
- http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
|
- http://hostname/myFCGI is the HTTP server URI (myFCGI refers to opj_server by the server setting)
|
||||||
- JP2_filename.jp2 is the name of a JP2 file available on the server.)
|
- JP2_filename.jp2 is the name of a JP2 file available on the server.
|
||||||
|
- stateless if stateless request is desired, otherwise session request is implemented
|
||||||
Image viewer GUI instructions:
|
Image viewer GUI instructions:
|
||||||
Scale up request: Enlarge the window
|
Scale up request: Enlarge the window
|
||||||
ROI request: Select a region by mouse click and drag, then click inside the red frame of the selected region
|
ROI request: Select a region by mouse click and drag, then click inside the red frame of the selected region
|
||||||
|
|
|
@ -154,6 +154,20 @@ cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cache_param_t * search_cacheBytid( char tid[], cachelist_param_t *cachelist)
|
||||||
|
{
|
||||||
|
cache_param_t *foundcache;
|
||||||
|
|
||||||
|
foundcache = cachelist->first;
|
||||||
|
|
||||||
|
while( foundcache != NULL){
|
||||||
|
if( strcmp( tid, foundcache->tid) == 0)
|
||||||
|
return foundcache;
|
||||||
|
foundcache = foundcache->next;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void add_cachecid( char *cid, cache_param_t *cache)
|
void add_cachecid( char *cid, cache_param_t *cache)
|
||||||
{
|
{
|
||||||
char **tmp;
|
char **tmp;
|
||||||
|
|
|
@ -121,7 +121,7 @@ cache_param_t * search_cacheBycsn( int csn, cachelist_param_t *cachelist);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* search codestream number (csn) by cid
|
* search a cache by cid
|
||||||
*
|
*
|
||||||
* @param[in] cid channel identifer
|
* @param[in] cid channel identifer
|
||||||
* @param[in] cachelist cache list pointer
|
* @param[in] cachelist cache list pointer
|
||||||
|
@ -129,6 +129,16 @@ cache_param_t * search_cacheBycsn( int csn, cachelist_param_t *cachelist);
|
||||||
*/
|
*/
|
||||||
cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist);
|
cache_param_t * search_cacheBycid( char cid[], cachelist_param_t *cachelist);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search a cache by tid
|
||||||
|
*
|
||||||
|
* @param[in] tid target identifer
|
||||||
|
* @param[in] cachelist cache list pointer
|
||||||
|
* @return found cache pointer
|
||||||
|
*/
|
||||||
|
cache_param_t * search_cacheBytid( char tid[], cachelist_param_t *cachelist);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add cid into a cache
|
* add cid into a cache
|
||||||
*
|
*
|
||||||
|
|
|
@ -123,6 +123,7 @@ Byte_t * receive_JPIPstream( SOCKET connected_socket, char *target, char *tid, c
|
||||||
|
|
||||||
target[0] = 0;
|
target[0] = 0;
|
||||||
cid[0] = 0;
|
cid[0] = 0;
|
||||||
|
tid[0] = 0;
|
||||||
|
|
||||||
if((linelen = receive_line( connected_socket, buf)) == 0)
|
if((linelen = receive_line( connected_socket, buf)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -140,11 +141,13 @@ Byte_t * receive_JPIPstream( SOCKET connected_socket, char *target, char *tid, c
|
||||||
|
|
||||||
if((linelen = receive_line( connected_socket, buf)) == 0)
|
if((linelen = receive_line( connected_socket, buf)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
strcpy( tid, buf);
|
if( strcmp( buf, "0") != 0)
|
||||||
|
strcpy( tid, buf);
|
||||||
|
|
||||||
if((linelen = receive_line( connected_socket, buf)) == 0)
|
if((linelen = receive_line( connected_socket, buf)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
strcpy( cid, buf);
|
if( strcmp( buf, "0") != 0)
|
||||||
|
strcpy( cid, buf);
|
||||||
|
|
||||||
if((linelen = receive_line( connected_socket, buf)) == 0)
|
if((linelen = receive_line( connected_socket, buf)) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -141,7 +141,7 @@ int receive_line(SOCKET connected_socket, char *buf);
|
||||||
*\section sec2 PNM request
|
*\section sec2 PNM request
|
||||||
* Get decoded PGM/PPM image
|
* Get decoded PGM/PPM image
|
||||||
*
|
*
|
||||||
* client -> server: PNM request\\n cidstring\\n fw\\n fh\\n \n
|
* client -> server: PNM request\\n [cid/tid]string\\n fw\\n fh\\n \n
|
||||||
* server -> client: P6 or P5 (2Byte) width (2Byte Big endian) height (2Byte Big endian) maxval (1Byte) data
|
* server -> client: P6 or P5 (2Byte) width (2Byte Big endian) height (2Byte Big endian) maxval (1Byte) data
|
||||||
*
|
*
|
||||||
*\section sec3 XML request
|
*\section sec3 XML request
|
||||||
|
|
|
@ -247,10 +247,12 @@ void handle_JPIPstreamMSG( SOCKET connected_socket, cachelist_param_t *cachelist
|
||||||
parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist);
|
parse_metamsg( msgqueue, *jpipstream, *streamlen, metadatalist);
|
||||||
|
|
||||||
// cid registration
|
// cid registration
|
||||||
if( target[0] != 0 && tid[0] != 0 && cid[0] != 0){
|
if( target[0] != 0){
|
||||||
if((cache = search_cache( target, cachelist))){
|
if((cache = search_cache( target, cachelist))){
|
||||||
add_cachecid( cid, cache);
|
if( tid[0] != 0)
|
||||||
update_cachetid( tid, cache);
|
update_cachetid( tid, cache);
|
||||||
|
if( cid[0] != 0)
|
||||||
|
add_cachecid( cid, cache);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
cache = gene_cache( target, msgqueue->last->csn, tid, cid);
|
cache = gene_cache( target, msgqueue->last->csn, tid, cid);
|
||||||
|
@ -277,7 +279,8 @@ void handle_PNMreqMSG( SOCKET connected_socket, Byte_t *jpipstream, msgqueue_par
|
||||||
|
|
||||||
receive_line( connected_socket, cid);
|
receive_line( connected_socket, cid);
|
||||||
if(!(cache = search_cacheBycid( cid, cachelist)))
|
if(!(cache = search_cacheBycid( cid, cachelist)))
|
||||||
return;
|
if(!(cache = search_cacheBytid( cid, cachelist)))
|
||||||
|
return;
|
||||||
|
|
||||||
receive_line( connected_socket, tmp);
|
receive_line( connected_socket, tmp);
|
||||||
fw = atoi( tmp);
|
fw = atoi( tmp);
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1 +1 @@
|
||||||
opj_viewer-20110825.jar
|
opj_viewer-20110916.jar
|
|
@ -43,22 +43,25 @@ public class ImageManager extends JPIPHttpClient
|
||||||
public int getOrigWidth(){ return pnmimage.width;}
|
public int getOrigWidth(){ return pnmimage.width;}
|
||||||
public int getOrigHeight(){ return pnmimage.height;}
|
public int getOrigHeight(){ return pnmimage.height;}
|
||||||
|
|
||||||
public Image getImage( String j2kfilename, int reqfw, int reqfh)
|
public Image getImage( String j2kfilename, int reqfw, int reqfh, boolean reqcnew)
|
||||||
{
|
{
|
||||||
System.err.println();
|
System.err.println();
|
||||||
|
|
||||||
String refcid = ImgdecClient.query_cid( j2kfilename);
|
String refcid = null;
|
||||||
byte[] jpipstream;
|
byte[] jpipstream;
|
||||||
|
|
||||||
|
if( reqcnew)
|
||||||
|
refcid = ImgdecClient.query_cid( j2kfilename);
|
||||||
|
|
||||||
if( refcid == null){
|
if( refcid == null){
|
||||||
String reftid = ImgdecClient.query_tid( j2kfilename);
|
String reftid = ImgdecClient.query_tid( j2kfilename);
|
||||||
if( reftid == null)
|
if( reftid == null)
|
||||||
jpipstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, true);
|
jpipstream = super.requestViewWindow( j2kfilename, reqfw, reqfh, reqcnew);
|
||||||
else
|
else
|
||||||
jpipstream = super.requestViewWindow( j2kfilename, reftid, reqfw, reqfh, true);
|
jpipstream = super.requestViewWindow( j2kfilename, reftid, reqfw, reqfh, reqcnew);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
jpipstream = super.requestViewWindow( reqfw, reqfh, refcid, true);
|
jpipstream = super.requestViewWindow( reqfw, reqfh, refcid, reqcnew);
|
||||||
|
|
||||||
System.err.println( "decoding to PNM image");
|
System.err.println( "decoding to PNM image");
|
||||||
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, j2kfilename, tid, cid, fw, fh);
|
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, j2kfilename, tid, cid, fw, fh);
|
||||||
|
@ -74,7 +77,7 @@ public class ImageManager extends JPIPHttpClient
|
||||||
byte[] jpipstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh);
|
byte[] jpipstream = super.requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh);
|
||||||
|
|
||||||
System.err.println( "decoding to PNM image");
|
System.err.println( "decoding to PNM image");
|
||||||
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, cid, fw, fh);
|
pnmimage = ImgdecClient.decode_jpipstream( jpipstream, tid, cid, fw, fh);
|
||||||
System.err.println( " done");
|
System.err.println( " done");
|
||||||
|
|
||||||
return pnmimage.createROIImage( rx, ry, rw, rh);
|
return pnmimage.createROIImage( rx, ry, rw, rh);
|
||||||
|
@ -96,7 +99,9 @@ public class ImageManager extends JPIPHttpClient
|
||||||
}
|
}
|
||||||
public void closeChannel()
|
public void closeChannel()
|
||||||
{
|
{
|
||||||
ImgdecClient.destroy_cid( cid);
|
if( cid != null){
|
||||||
super.closeChannel();
|
ImgdecClient.destroy_cid( cid);
|
||||||
|
super.closeChannel();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -55,7 +55,7 @@ public class ImageViewer extends JPanel
|
||||||
private Rectangle roirect[] = null;
|
private Rectangle roirect[] = null;
|
||||||
private String roiname[] = null;
|
private String roiname[] = null;
|
||||||
|
|
||||||
public ImageViewer( String j2kfilename, ImageManager manager)
|
public ImageViewer( String j2kfilename, ImageManager manager, boolean session)
|
||||||
{
|
{
|
||||||
String str;
|
String str;
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ public class ImageViewer extends JPanel
|
||||||
myRL = new ResizeListener(this);
|
myRL = new ResizeListener(this);
|
||||||
|
|
||||||
imgmanager = manager;
|
imgmanager = manager;
|
||||||
img = imgmanager.getImage( j2kfilename, vw, vh);
|
img = imgmanager.getImage( j2kfilename, vw, vh, session);
|
||||||
|
|
||||||
addMouseListener(myMML);
|
addMouseListener(myMML);
|
||||||
addMouseMotionListener(myMML);
|
addMouseMotionListener(myMML);
|
||||||
|
|
|
@ -38,13 +38,13 @@ public class ImageWindow extends JFrame
|
||||||
// private OptionPanel optpanel;
|
// private OptionPanel optpanel;
|
||||||
private ImageManager imgmanager;
|
private ImageManager imgmanager;
|
||||||
|
|
||||||
public ImageWindow( String uri, String j2kfilename)
|
public ImageWindow( String uri, String j2kfilename, boolean session)
|
||||||
{
|
{
|
||||||
super( j2kfilename);
|
super( j2kfilename);
|
||||||
|
|
||||||
imgmanager = new ImageManager( uri);
|
imgmanager = new ImageManager( uri);
|
||||||
|
|
||||||
imgviewer = new ImageViewer( j2kfilename, imgmanager);
|
imgviewer = new ImageViewer( j2kfilename, imgmanager, session);
|
||||||
imgviewer.setOpaque(true); //content panes must be opaque
|
imgviewer.setOpaque(true); //content panes must be opaque
|
||||||
|
|
||||||
// optpanel = new OptionPanel( imgmanager, imgviewer);
|
// optpanel = new OptionPanel( imgmanager, imgviewer);
|
||||||
|
@ -71,16 +71,21 @@ public class ImageWindow extends JFrame
|
||||||
public static void main(String s[])
|
public static void main(String s[])
|
||||||
{
|
{
|
||||||
String j2kfilename, uri;
|
String j2kfilename, uri;
|
||||||
|
boolean session;
|
||||||
|
|
||||||
if(s.length > 0){
|
if(s.length > 0){
|
||||||
uri = s[0];
|
uri = s[0];
|
||||||
j2kfilename = s[1];
|
j2kfilename = s[1];
|
||||||
|
if( s.length > 2)
|
||||||
|
session = !s[2].equalsIgnoreCase( "stateless");
|
||||||
|
else
|
||||||
|
session = true;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2");
|
System.out.println("Usage: java -jar opj_viewer.jar HTTP_server_URI imagefile.jp2 [stateless/session]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ImageWindow frame = new ImageWindow( uri, j2kfilename);
|
ImageWindow frame = new ImageWindow( uri, j2kfilename, session);
|
||||||
|
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
|
|
@ -33,17 +33,17 @@ import java.net.*;
|
||||||
|
|
||||||
public class ImgdecClient{
|
public class ImgdecClient{
|
||||||
|
|
||||||
public static PnmImage decode_jpipstream( byte[] jpipstream, String cid, int fw, int fh)
|
public static PnmImage decode_jpipstream( byte[] jpipstream, String tid, String cid, int fw, int fh)
|
||||||
{
|
{
|
||||||
if( jpipstream != null)
|
if( jpipstream != null)
|
||||||
send_JPIPstream( jpipstream);
|
send_JPIPstream( jpipstream);
|
||||||
return get_PNMstream( cid, fw, fh);
|
return get_PNMstream( cid, tid, fw, fh);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PnmImage decode_jpipstream( byte[] jpipstream, String j2kfilename, String tid, String cid, int fw, int fh)
|
public static PnmImage decode_jpipstream( byte[] jpipstream, String j2kfilename, String tid, String cid, int fw, int fh)
|
||||||
{
|
{
|
||||||
send_JPIPstream( jpipstream, j2kfilename, tid, cid);
|
send_JPIPstream( jpipstream, j2kfilename, tid, cid);
|
||||||
return get_PNMstream( cid, fw, fh);
|
return get_PNMstream( cid, tid, fw, fh);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void send_JPIPstream( byte[] jpipstream)
|
public static void send_JPIPstream( byte[] jpipstream)
|
||||||
|
@ -91,7 +91,10 @@ public class ImgdecClient{
|
||||||
os.writeBytes( "0\n");
|
os.writeBytes( "0\n");
|
||||||
else
|
else
|
||||||
os.writeBytes( tid + "\n");
|
os.writeBytes( tid + "\n");
|
||||||
os.writeBytes( cid + "\n");
|
if( cid == null)
|
||||||
|
os.writeBytes( "0\n");
|
||||||
|
else
|
||||||
|
os.writeBytes( cid + "\n");
|
||||||
os.writeBytes( length + "\n");
|
os.writeBytes( length + "\n");
|
||||||
os.write( jpipstream, 0, length);
|
os.write( jpipstream, 0, length);
|
||||||
|
|
||||||
|
@ -106,7 +109,7 @@ public class ImgdecClient{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PnmImage get_PNMstream( String cid, int fw, int fh)
|
public static PnmImage get_PNMstream( String cid, String tid, int fw, int fh)
|
||||||
{
|
{
|
||||||
PnmImage pnmstream = new PnmImage();
|
PnmImage pnmstream = new PnmImage();
|
||||||
try {
|
try {
|
||||||
|
@ -116,7 +119,13 @@ public class ImgdecClient{
|
||||||
byte []header = new byte[7];
|
byte []header = new byte[7];
|
||||||
|
|
||||||
os.writeBytes("PNM request\n");
|
os.writeBytes("PNM request\n");
|
||||||
os.writeBytes( cid + "\n");
|
if( cid != null)
|
||||||
|
os.writeBytes( cid + "\n");
|
||||||
|
else
|
||||||
|
if( tid != null)
|
||||||
|
os.writeBytes( tid + "\n");
|
||||||
|
else
|
||||||
|
os.writeBytes( "0\n");
|
||||||
os.writeBytes( fw + "\n");
|
os.writeBytes( fw + "\n");
|
||||||
os.writeBytes( fh + "\n");
|
os.writeBytes( fh + "\n");
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,11 @@ public class JPIPHttpClient
|
||||||
if( cid != null)
|
if( cid != null)
|
||||||
return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid);
|
return requestViewWindow( reqfw, reqfh, reqrx, reqry, reqrw, reqrh, cid);
|
||||||
else
|
else
|
||||||
return null;
|
// return null;
|
||||||
|
if( tid != null)
|
||||||
|
return requestViewWindow( null, tid, reqfw, reqfh, reqrx, reqry, reqrw, reqrh, null, false);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid)
|
public byte[] requestViewWindow( int reqfw, int reqfh, String reqcid)
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
opj_viewer_xerces-20110825.jar
|
opj_viewer_xerces-20110916.jar
|
|
@ -98,7 +98,7 @@ int main(void)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
char query_string[128];
|
char query_string[128];
|
||||||
while((fgets( query_string, 128, stdin))[0] != '\n' )
|
while( fgets( query_string, 128, stdin) && query_string[0]!='\n')
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue