openjpip.dox.in 5.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * $Id$
  3. *
  4. * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
  5. * Copyright (c) 2002-2014, Professor Benoit Macq
  6. * Copyright (c) 2010-2011, Kaori Hagihara
  7. * All rights reserved.
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in the
  16. * documentation and/or other materials provided with the distribution.
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
  19. * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  20. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  21. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
  22. * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  23. * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  24. * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  25. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  26. * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  27. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  28. * POSSIBILITY OF SUCH DAMAGE.
  29. */
  30. /*! \page openjpippage OpenJPIP v@OPENJPEG_VERSION@ Documentation
  31. *
  32. * \section Introduction
  33. * This manual documents the low-level OpenJPIP C API.\n
  34. * OpenJPIP software is an implementation of JPEG 2000 Part9: Interactivity tools, APIs and protocols (JPIP).\n
  35. * ( For more info about JPIP, check the website: http://www.jpeg.org/jpeg2000/j2kpart9.html)\n
  36. *
  37. * This whole documents covers the following six programs.\n
  38. * - opj_server.c JPIP server supporting HTTP connection and JPT/JPP-stream
  39. * - opj_dec_server.c Server to decode JPT/JPP-stream and communicate locally with JPIP client, which is coded in java
  40. * - opj_jpip_addxml.c To Embed metadata into JP2 file
  41. * - opj_jpip_transcode.c To Convert JPT/JPP-stream to JP2 or J2K
  42. * - opj_jpip_test.c To test index code format of a JP2 file
  43. *
  44. * \section License
  45. * This software is released under the BSD license, anybody can use or modify the library, even for commercial applications.\n
  46. * The only restriction is to retain the copyright in the sources or the binaries documentation.\n
  47. * Neither the author, nor the university accept any responsibility for any kind of error or data loss which may occur during usage.
  48. *
  49. *
  50. * \section reqlibs Required libraries
  51. * - OpenJPEG library
  52. * - FastCGI development kit (C libraries) at server (http://www.fastcgi.com)
  53. * - libcURL library
  54. *
  55. * We tested this software with a virtual server running on the same Linux machine as the clients.
  56. *
  57. *
  58. * \section compilenotes Compiling Notes
  59. * When you are making opj_server, set anything (e.g. yes) to the parameter jpipserver to define itself in the Makefile, which enables to make it in server mode.\n
  60. * Otherwise do not define (or do not set to) the parameter jpipserver.\n
  61. * Be sure that any object files and library file libopenjpip.a are not reused to compile in the two different mode (server mode and non server mode).\n
  62. * In other words, do make clean before making new targets which are in different modes as previous make.\n
  63. *
  64. *
  65. * \section sysarchtect System Architecture
  66. * JPIP protocol is implemented between the JPIP server program (opj_server) and the JPIP client java program (opj_viewer).\n
  67. * Figure below represents the overview of our system architecture.\n
  68. * The JPIP server parses JPIP query and sends corresponding JPT/JPP-stream.
  69. * The JPIP client viewer is an image viewer with GUI to publish JPIP requests and receive JPT/JPP-stream.\n
  70. * Particularly, our system has the image decoding module implemented on a server (opj_dec_server, Image decoding Server).
  71. * Image decoding Server and JPIP client viewer communicate closely.
  72. * 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.
  73. *
  74. * \image html jpip_architect.png "OpenJPIP system architecture"
  75. *
  76. * JPIP server follows up the client cache during a session. \n
  77. * Concretely, the JPIP server models cache in each session, to which Channel IDs are associated.
  78. * A Channel ID identifies a JPIP client viewer.
  79. * And, new viewers can belong to a session by referring to one of its channel ID.
  80. * The Image decoding Server maintains the association between channel IDs and targets, and provides a reference channel ID to a Viewer on demand.\n
  81. *
  82. * Typical requests and replies among JPIP server, JPIP client, and Image decoding server is presented below.\n
  83. * The JPIP server parses HTTP query and sends corresponding JPT/JPP-stream back to the JPIP client (Viewer).
  84. * JPT/JPP-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.
  85. * The Image decoding Server handles the decoding and caching of JPT/JPP-stream.
  86. * JPIP client can read PGM and PPM images natively.
  87. * Before connecting to the JPIP server, every JPIP client checks local cache data of the requesting image with the image decoding server.
  88. * 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.
  89. *
  90. * \image html jpip_protocol.png "Message Sequence Chart of OpenJPIP implementation"
  91. *
  92. * \author Kaori Hagihara UCL/SST/ICTM/ELEN
  93. */