| 41 | === Sequence of Events === |
| 42 | |
| 43 | [[Image(sequence.png)]] |
| 44 | |
| 45 | 1. GDALOpen calls Open(Xxx) on all registered drivers with a jpip:// parameter and the first driver that returns a response is the format driver for that user. |
| 46 | 1. Streaming image servers are usually session based so that the server knows which data has already been sent to the client. |
| 47 | 1. ProgressiveRasterIO requests a region of the image from the driver. ''In the specific case of JPIP, the dimensions of the input buffer, bufXSize, bufYSize and the region Xoff, yOff, xSize, ySize are used to calculate the best resolution level and the corresponding fsiz and rsiz parameters to the server. i.e. bufXSize and bufYSize are the desirable screen size, and the region size is at the base resolution of the image.'' |
| 48 | 1. Check whether we need to stop making requests to the server. |
| 49 | 1. In response to the ProgressiveRasterIO call the format driver makes an asynchronous request to the server for data matching the requested resolution and window. |
| 50 | 1. The driver parses the response from the server and sets the buffer on GDALAsynchRasterIOMessage. |
| 51 | 1. GDALAsynchRasterIOMessage object is added to the format driver internal data queue. If the queue size limit is exceeded the last message drops off. Note the data for this message is still retained in the wavelet cache for the driver - just the rendering is discarded. |
| 52 | 1. Check there is a data message to render. |
| 53 | 1. Retrieve the next data message and render / process. |
| 54 | 1. Finished with the data message, release the resource associated with it. |