From dd51c25641d44c80f0735f6119d624c7b320813c Mon Sep 17 00:00:00 2001 From: Kaori Hagihara Date: Wed, 25 May 2011 12:07:39 +0000 Subject: [PATCH] added system architecture description on the documentation --- applications/jpip/README | 3 ++- applications/jpip/doc/jpip_architect.png | Bin 0 -> 63041 bytes applications/jpip/mainpage.h | 30 +++++++++++++++++------ 3 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 applications/jpip/doc/jpip_architect.png diff --git a/applications/jpip/README b/applications/jpip/README index 90cc956e..363ce1d0 100644 --- a/applications/jpip/README +++ b/applications/jpip/README @@ -53,7 +53,7 @@ Neither the author, nor the university accept any responsibility for any kind of - Xerces2 java XML parser on the client for accessing embedded image metadata (http://xerces.apache.org/xerces2-j) -We tested this software with a virtual server running on the same Linux machine as the clients. Currently, it works only on linux or macosx platforms, windows version should come later. +We tested this software with a virtual server running on the same Linux machine as the clients. ---------- 4. Building instructions @@ -109,6 +109,7 @@ Client: 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 + % java -jar opj_viewer_xerces.jar http://hostname/myFCGI JP2_filename.jp2 Annotate image with ROI information in XML metadata: Click button "Region Of Interest" Open a new window presenting an aligned image with a locally stored image: Click button "Image Registration" (Under Construction) diff --git a/applications/jpip/doc/jpip_architect.png b/applications/jpip/doc/jpip_architect.png new file mode 100644 index 0000000000000000000000000000000000000000..035a4b65e7a7446b649de57c2aedd8f0d6a772c4 GIT binary patch literal 63041 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 literal 0 HcmV?d00001 diff --git a/applications/jpip/mainpage.h b/applications/jpip/mainpage.h index 19a66522..52edf42e 100644 --- a/applications/jpip/mainpage.h +++ b/applications/jpip/mainpage.h @@ -64,14 +64,28 @@ * * * \section sysarchtect System Architecture - * JPIP protocol is implimented between the server program opj_server and the client java program opj_viewer.\n - * The opj_server parses JPIP requests and sends corresponding JPT-stream. - * The opj_viewer is an image viewer with GUI to publish JPIP requests and receive JPT-stream.\n - * JPT-stream is unreadable for the opj_viewer by itself, and the local server program opj_dec_server handles the decoding and caching of JPT-stream.\n - * Typical requests and replies among JPIP server (opj_server), JPIP client (opj_viewer), and Image decoding Server (opj_dec_server) is presented below.\n - * The JPIP client requests the JPIP server JPT-stream, which is directly sent to the Image decoding Server, and which provides the image in PGM or PPM format to the JPIP client.\n - * JPIP client can read PGM and PPM images natively.\n - * Before connecting to the JPIP server, the JPIP client checks local cache data of the requesting image with the image decoding server. + * JPIP protocol is implimented between the JPIP server program (opj_server) and the JPIP client java program (opj_viewer).\n + * Figure below represents the overview of our system architecture.\n + * The JPIP server parses JPIP query and sends corresponding JPT-stream. + * The JPIP client viewer is an image viewer with GUI to publish JPIP requests and receive JPT-stream.\n + * Particularly, our system has the image decoding module implemented on a server (opj_dec_server, Image decoding Server). + * Image decoding Server and JPIP client viewer communicate closely. + * This specific architecture enables sharing cache of image codestream data among all viewers connected to the same Image decoding Server not only locally but also remotely. + * + * \image html jpip_architect.png "OpenJPIP system architecture" + * + * JPIP server follows up the client cache during a session. \n + * Concretely, the JPIP server models cache in each session, to which Channel IDs are associated. + * A Channel ID identifies a JPIP client viewer. + * And, new viewers can belong to a session by referring to one of its channel ID. + * The Image decoding Server maintains the association between channel IDs and targets, and provides a reference channel ID to a Viewer on demand.\n + * + * Typical requests and replies among JPIP server, JPIP client, and Image decoding server is presented below.\n + * The JPIP server parses HTTP query and sends corresponding JPT-stream back to the JPIP client (Viewer). + * JPT-stream is unreadable by JPIP client, and it is directly passed to Image decoding Server, and which provides the image in raw format (PGM or PPM) to the JPIP client. + * The Image decoding Server handles the decoding and caching of JPT-stream. + * JPIP client can read PGM and PPM images natively. + * Before connecting to the JPIP server, every JPIP client checks local cache data of the requesting image with the image decoding server. * If its cache exists, the image decoding server provides ChannelID (CID), which identifies the image and its cache model on the JPIP server, and the whole system can continue the session using the CID. * * \image html jpip_protocol.png "Message Sequence Chart of OpenJPIP impementation"