forked from arti/vt1200
The XIE path now runs end to end: XieCreateImage -> XieCreatePhoto ->
XiePutTile -> XieExport(photomap -> depth-1 pixmap) -> XCopyArea(pixmap ->
window), and the client's tile appears on screen at the client's own window
position, pixel-exact.
TWO FAULTS BEHIND THE LONG DEAD END
1. Device model (harness/mame/vt1200.cpp, opt-in VT1200_ACCEL=1). The
accelerator's output port 0x5600200 returns the pixel stream the firmware
pushed into the FIFO -- the firmware then stores it into the drawable itself
(file 0x125528: MOVE *B6,*B1 ; ADDK 0x10,B1). The FIFO read pointer was
never reset between transfers, so consecutive exports read stale words and
the same fill produced 759 then 516 set pixels. Reset m_fifo_in/out on the
data-register write; the export is now deterministic.
2. Measurement, not the device.
- dwt/screenshot.py without --real reads 1024x1024 at a 128-byte row stride,
but the VR319 default programs 1280x1024 at a 2048-bit (256-byte) pitch.
That is the "shifted" picture; --real is the correct read.
- The earlier "0 differing bytes over 128 KiB" VRAM comparison stepped peek
by 1024 *bit* addresses, so it scanned rows 0..63 only -- never the window
at rows 200..263. Over the real raster the white/black diff is 576 bytes
spanning exactly those rows.
- New instrument: decclient does a server-side XGetImage readback of the
pixmap and window and counts set pixels. That separated "the server never
drew it" from "the framebuffer view is wrong".
EVIDENCE (reproduced twice, the second time from a fresh machine)
no export vs 0xFF : 4096 / 4096 pixels differ
no export vs 0x00 : 0 / 4096 (the window background is black)
0xFF vs 0x00 : 4096 / 4096
0xAA vs 0x0F : 2048 / 4096 (the two stripe phases)
Tile byte 0xAA reproduces as 1-pixel vertical stripes, 0x0F as 4-pixel, with
no shear -- so the placement is right and the pixels are the client's.
Contents: xie/ holds DEC XIE 2.3 headers, 84 man pages and complete
client+server source; a libXie.a and decclient built from DEC's own code; the
XIE probes; and evidence/ with every measurement, including explicit
retractions of the earlier wrong readings (VRAM_IDENTICAL_FOR_BOTH_FILLS and
friends). xie/evidence/XIE_IMAGE_DISPLAYED.md is the report; frames are in
xie/evidence/png/.
The accelerator model stays opt-in: it answers the status poll and relays the
pixel stream, but performs no compositing, so it is a stand-in and the verified
default configuration is unchanged (a no-env run still parks in the level-0
diagnostics menu at PC=3FDCE400).
4436 lines
237 KiB
Plaintext
4436 lines
237 KiB
Plaintext
X IMAGE EXTENSION PROTOCOL
|
||
|
||
|
||
Revision/Update Information: V2.1
|
||
|
||
|
||
|
||
|
||
Digital Equipment Corporation
|
||
Contents
|
||
|
||
PREFACE v
|
||
|
||
CHAPTER 1 INTRODUCTION 1–1
|
||
1.1 SCOPE AND PURPOSE 1–1
|
||
1.2 TERMINOLOGY 1–1
|
||
1.3 CONCEPTS RELATIONSHIP 1–1
|
||
|
||
CHAPTER 2 PROTOCOL MESSAGE FORMATS 2–1
|
||
2.1 REQUEST PROTOCOL MESSAGE FORMAT 2–1
|
||
2.2 REPLY PROTOCOL MESSAGE FORMAT 2–2
|
||
2.3 ERROR PROTOCOL MESSAGE FORMAT 2–2
|
||
2.4 EVENT PROTOCOL MESSAGE FORMAT 2–3
|
||
2.5 DATA ENCODING 2–4
|
||
|
||
CHAPTER 3 PROTOCOL SPECIFICATION SYNTAX 3–1
|
||
3.1 GENERAL SYNTAX 3–1
|
||
3.2 REQUEST SYNTAX 3–1
|
||
3.3 ERROR SYNTAX 3–2
|
||
3.4 EVENT SYNTAX 3–3
|
||
|
||
CHAPTER 4 PROTOCOL PARAMETER TYPES 4–1
|
||
4.1 CORE TYPES 4–1
|
||
4.2 EXTENSION TYPES 4–1
|
||
|
||
CHAPTER 5 PROTOCOL ERROR CODES 5–1
|
||
5.1 CORE ERRORS 5–1
|
||
5.2 EXTENSION ERRORS 5–2
|
||
|
||
CHAPTER 6 SERVER DATA MODEL 6–1
|
||
6.1 CONSTRAINED VS UNCONSTRAINED 6–1
|
||
6.2 MONO VS POLY CHROMATIC 6–3
|
||
6.3 DATA FLOW PIPELINING 6–3
|
||
|
||
|
||
|
||
|
||
iii
|
||
Contents
|
||
|
||
|
||
CHAPTER 7 REQUESTS AND REPLIES 7–1
|
||
7.1 SESSION SERVICES 7–2
|
||
7.1.1 Initialize Session 7–2
|
||
7.1.1.1 Per Server information • 7–3
|
||
7.1.1.2 Per Screen Information • 7–3
|
||
7.1.1.3 Relationship to Core Session Information • 7–3
|
||
7.1.2 Set Operational Defaults 7–4
|
||
7.1.3 Query Operational Defaults 7–5
|
||
7.1.4 Terminate Session 7–6
|
||
7.2 RESOURCE SERVICES 7–7
|
||
7.2.1 Resource Creation 7–7
|
||
7.2.1.1 Image Object Resource • 7–8
|
||
7.2.1.2 Domain Control Context Resource • 7–9
|
||
7.2.1.3 Process Control Context Creation • 7–11
|
||
7.2.2 Resource Copy 7–12
|
||
7.2.3 Resource Delete 7–12
|
||
7.2.4 Resource Query 7–13
|
||
7.2.4.1 Image Object Query • 7–13
|
||
7.2.4.2 Domain Control Context Query • 7–14
|
||
7.2.4.3 Process Control Context Query • 7–15
|
||
7.2.5 Import/Export Services 7–15
|
||
7.2.5.1 Import Image • 7–16
|
||
7.2.5.2 Export Image • 7–17
|
||
7.3 TRANSPORT SERVICES 7–18
|
||
7.3.1 Overview of Data Transport 7–18
|
||
7.3.1.1 Transport Process • 7–18
|
||
7.3.1.2 Transport Modes • 7–19
|
||
7.3.1.3 Transport Data Formats • 7–19
|
||
7.3.1.4 Transport Granularity & Atomicity • 7–21
|
||
7.3.1.5 Synchronization • 7–22
|
||
7.3.2 Set Transport Context 7–22
|
||
7.3.3 Tile Data Transport 7–23
|
||
7.3.3.1 Client–>Server • 7–23
|
||
7.3.3.2 Server–>Client • 7–25
|
||
7.3.4 Stream Data Transport 7–26
|
||
7.3.4.1 Client–>Server • 7–27
|
||
7.3.4.2 Server–>Client • 7–28
|
||
7.3.5 Abort Transport 7–30
|
||
7.4 PROCESS SERVICES 7–31
|
||
7.4.1 Point Processing 7–33
|
||
7.4.2 Area Processing 7–35
|
||
7.4.3 Ensemble Processing 7–37
|
||
7.4.3.1 Arithmetic • 7–37
|
||
7.4.3.2 Relational • 7–38
|
||
7.4.3.3 Logical • 7–39
|
||
7.4.3.4 Mathematical • 7–40
|
||
|
||
|
||
|
||
|
||
iv
|
||
Contents
|
||
|
||
|
||
7.4.4 Geometric 7–42
|
||
7.4.4.1 Crop Image • 7–42
|
||
7.4.4.2 Translate Image • 7–43
|
||
7.4.4.3 Scale Image • 7–44
|
||
7.4.4.4 Rotate Image • 7–45
|
||
7.4.4.5 Mirror Image • 7–46
|
||
7.4.5 Radiometric 7–47
|
||
7.4.5.1 Constrain • 7–47
|
||
7.4.5.2 Histogram Matching • 7–48
|
||
7.4.5.3 Separate Spectral Components • 7–49
|
||
7.4.5.4 Combine Spectral Components • 7–49
|
||
7.4.5.5 Dither • 7–50
|
||
7.4.5.6 Luminance • 7–51
|
||
7.5 STATISTICS SERVICES 7–52
|
||
7.5.1 Component Distribution 7–52
|
||
7.5.2 Point Statistics 7–53
|
||
7.5.3 Area Statistics 7–54
|
||
7.6 PROCESS CONTROL SERVICES 7–55
|
||
7.6.1 Adding Segments 7–55
|
||
7.6.2 Executing a Pipe 7–56
|
||
7.6.3 Terminating a Pipe 7–57
|
||
7.7 DISPLAY SERVICES 7–58
|
||
7.8 EVENT SERVICES 7–59
|
||
7.8.1 Select Events 7–59
|
||
7.8.2 Query Events 7–59
|
||
|
||
CHAPTER 8 EVENTS 8–1
|
||
8.1 COMPUTATION COMPLETE 8–1
|
||
8.2 PIPELINE COMPLETE 8–1
|
||
8.3 SEQUENCE COMPLETE 8–2
|
||
|
||
CHAPTER 9 APPENDICES 9–1
|
||
9.1 XIE PROTOCOL SUMMARY 9–1
|
||
9.2 RECOMMENDED SERVER RESOURCE CONTENTS 9–3
|
||
9.2.1 IOB 9–3
|
||
9.2.2 IDC 9–4
|
||
9.2.3 IPC 9–5
|
||
9.3 IMAGE DATA ATTRIBUTES & ORGANIZATION 9–6
|
||
9.3.1 Primitive Attributes 9–7
|
||
9.3.2 Organization & Encoding Attributes 9–7
|
||
9.3.2.1 Encoding Attributes • 9–8
|
||
9.3.2.2 Component Space Attributes • 9–8
|
||
9.3.3 Presentation Attributes 9–10
|
||
9.4 CONCEPT AND VERSION CHANGES 9–11
|
||
9.4.1 Conceptual Changes 9–11
|
||
|
||
|
||
|
||
v
|
||
Contents
|
||
|
||
|
||
9.4.2 V1.0 - V2.0 Protocol Changes 9–12
|
||
9.5 REFERENCES 9–14
|
||
|
||
|
||
|
||
|
||
vi
|
||
Preface
|
||
|
||
|
||
The core X architecture is a major step in the definition of open, interactive applications
|
||
display services. It has, in essence, pried apart the tightly coupled, private interconnect which
|
||
has existed in the past between application and display subsystem by specifying a structured
|
||
set of display services.
|
||
The core X protocol recognizes the need for minimally sufficient capabilities, and, as such,
|
||
leaves the specification of robust application domain specific display services to extension
|
||
packages. These extension packages relate to the core X protocol by way of an extension
|
||
mechanism specified in the core X protocol.
|
||
This document contains the X wire protocol specification for the proposed X Image Extension
|
||
Package. It is assumed that the reader is familiar with the core X architecture, the X11 wire
|
||
protocol, and the proposed X Image Extension Concepts.
|
||
|
||
|
||
|
||
Related Documents
|
||
• The X Window System (Scheifler & Gettys)
|
||
Provides an overview of the X windowing system and architecture.
|
||
• X11 Window System Protocol
|
||
Describes the core X11 protocol and conventions used in specifying extension packages.
|
||
• X Extension Package Guidelines
|
||
Sets forth guidelines for extension packages.
|
||
• X Image Extension Concepts
|
||
Describes the architectural concepts behind this protocol specification. The X Image
|
||
Extension Concepts document is one several companion documents to this protocol specifi-
|
||
cation.
|
||
• X Image Extension Server Guidelines
|
||
Provides an overview of the design of an image extension server. The X Image Extension
|
||
Server Guidelines document is one of several companion documents to this protocol
|
||
specification.
|
||
|
||
|
||
|
||
Participants
|
||
• Author:
|
||
• Joseph Mauro
|
||
• Digital Equipment Corporation
|
||
• MS: MK2-2/K5
|
||
• Continental Blvd.
|
||
• Merrimack, New Hampshire 03057
|
||
|
||
|
||
v
|
||
Preface
|
||
|
||
|
||
• 603-884-0528
|
||
• MAURO@OPTIC.DEC.COM
|
||
|
||
• Contributors:
|
||
• Olliver Jones (Apollo)
|
||
• Barry Medoff (SUN)
|
||
• John Weber (Digital ISG)
|
||
• Rich Piccolo (Digital ISG)
|
||
• Robert Shelley (Digital ISG)
|
||
|
||
• Invited Reviewers:
|
||
• Rebeca Hinkle (Apollo)
|
||
|
||
|
||
|
||
Revision History
|
||
|
||
rev v1.0 August 1, 1988 first protocol draft
|
||
rev v2.0 April 12, 1989 major changes based upon consortia review
|
||
rev v2.1 November 1, 1989 changes based upon FT1 implementation
|
||
|
||
|
||
|
||
Organization
|
||
This document is organized into the following chapters and appendices:
|
||
• Chapter 1, Introduction, explains the purpose of the X Image Extension
|
||
• Chapter 2, Protocol Message Formats, defines structure of protocol messages
|
||
• Chapter 3, Protocol Specification Syntax, defines protocol function syntax
|
||
• Chapter 4, Protocol Parameter Types, defines types for protocol parameters
|
||
• Chapter 5, Protocol Error Codes, defines possible protocol errors
|
||
• Chapter 6, Server Data Model, server data organization and operator issues
|
||
• Chapter 7, Requests and Replies, describes the main protocol functions
|
||
• Chapter 8, Events, describes the various extension related events
|
||
• Appendices:
|
||
• XIE Protocol Summary
|
||
• Recommended Server Resource Contents
|
||
• Image Data Attributes & Organization
|
||
• Concept and Version Changes
|
||
• References
|
||
|
||
|
||
|
||
|
||
vi
|
||
Chapter 1
|
||
|
||
INTRODUCTION
|
||
|
||
|
||
|
||
1.1 Scope and Purpose
|
||
|
||
This document specifies the X wire protocol for the X Image Extension (XIE). This extension
|
||
protocol is deemed to be sufficient to support implementation of the image concepts found in
|
||
the X Image Extension Concepts document. This specification defines the syntax, structure,
|
||
and semantics of X wire image extension protocol elements.
|
||
This specification does not contain any background material useful in understanding the
|
||
imaging services concepts that the extension protocol enables. This background material can
|
||
be found in the extension concepts document.
|
||
This specification does not contain any language function bindings. These will be left to a
|
||
follow on document which will specify the language bindings for the X Image Extension to Xlib
|
||
(XIElib).
|
||
|
||
1.2 Terminology
|
||
|
||
This specification makes use of two classes of terminology: descriptive image terminology,
|
||
and parametric terminology. The descriptive image terminology is defined in a glossary in
|
||
the X Image Extension Concepts document and is used throughout this protocol specification.
|
||
Readers should consider reviewing this material before reading this document.
|
||
The parametric terminology defines the parameter types recognized in the core X11 protocol
|
||
and in the image extension protocol. Image extension protocol types are defined in this
|
||
document.
|
||
|
||
1.3 Concepts Relationship
|
||
|
||
The X Image Extension Concepts document describes the reasoning behind an X image
|
||
extension and lays the foundation for this protocol specification. Conceptual shifts since the
|
||
concepts document was drafted, and major protocol differences between versions 1 and 2 of
|
||
this specification are briefly described in the "concept and version changes" appendix. While
|
||
there have been protocol changes between version 2.0 and 2.1 (deriving from the field test
|
||
implementation), they do not reflect major conceptual shifts.
|
||
|
||
|
||
|
||
|
||
INTRODUCTION 1–1
|
||
Chapter 2
|
||
|
||
PROTOCOL MESSAGE FORMATS
|
||
|
||
|
||
XIEP follows the same operational model as set forth by the X core protocol specification
|
||
regarding the use of requests, replies, errors, and events, and the overall structure of these
|
||
protocol objects. This section defines the overall structure of these protocol objects for the
|
||
image extension protocol.
|
||
|
||
2.1 Request Protocol Message Format
|
||
|
||
All image extension requests comply with the overall extension request format as specified in
|
||
the X11 core protocol specification request format section. This section reiterates that format
|
||
as applied to the image extension.
|
||
An image extension request consists of 4 bytes of header followed by zero or more bytes of
|
||
data. The four byte header complies exactly with the core protocol request format (1 byte
|
||
major opcode - 1 byte minor opcode - 2 bytes total length field). Unused bytes in a request are
|
||
not required to be zero.
|
||
|
||
REQUEST FORMAT
|
||
--------------
|
||
BYTE CONTENTS
|
||
0 major opcode
|
||
1 minor opcode - extension function code
|
||
2 length field (LSB)
|
||
3 length field (MSB)
|
||
4 start of data - (request specific)
|
||
.
|
||
.
|
||
.
|
||
|
||
The major opcode field contains the opcode signaling a request for the image extension package
|
||
(between 128 and 255). The value is determined by the core X server when the extension is
|
||
loaded. All discussion of minor opcodes in this document refer to image extension requests (op
|
||
codes) where the major opcode is that for the image extension.
|
||
The minor opcode field contains the image function code. Individual image extension function
|
||
codes will be found in the image extension server guide.
|
||
|
||
|
||
|
||
|
||
PROTOCOL MESSAGE FORMATS 2–1
|
||
The length field defines the total length of the request including header and data in units of 4
|
||
bytes. The length field must equal the minimum length required to contain the request or an
|
||
error is generated. The particular contents of the data field portion of a request are defined on
|
||
a request by request basis (see requests section).
|
||
Every request is implicitly assigned a sequence number, starting with one, used in replies,
|
||
errors, and events. {This sequence number is the one assigned by the core server - the exten-
|
||
sion does not assign any sequence number, but rather relies upon the core assigned sequence
|
||
number}
|
||
|
||
2.2 Reply Protocol Message Format
|
||
|
||
The reply format follows that specified in the core protocol (below). The particular contents of
|
||
the data portion of a reply are defined on a request by request basis (see requests section).
|
||
Every reply contains a 32-bit length field expressed in units of 4 bytes. Every reply consists
|
||
of 32 bytes, followed by zero or more additional bytes of data, as specified in the length field.
|
||
Unused bytes within a reply are not guaranteed to be zero. Every reply also contains the least
|
||
significant 16 bits of the sequence number of the corresponding request.
|
||
|
||
REPLY FORMAT
|
||
------------
|
||
BYTE CONTENTS
|
||
0 reply type msg (value = 1)
|
||
1 unused
|
||
2 request sequence number
|
||
3 request sequence number
|
||
4 length field
|
||
5 length field
|
||
6 length field
|
||
7 length field
|
||
8 start of data - (request specific)
|
||
.
|
||
.
|
||
.
|
||
|
||
|
||
|
||
2.3 Error Protocol Message Format
|
||
|
||
The error format follows that specified in the core protocol (below).
|
||
Error reports are 32 bytes long. Unused bytes within an error report are not guaranteed to
|
||
be zero. Every error report includes the 8-bit major opcode, the 8 bit minor opcode (extension
|
||
function), and the 8 bit error code.
|
||
|
||
ERROR FORMAT
|
||
------------
|
||
BYTE CONTENTS
|
||
|
||
|
||
|
||
|
||
2–2 PROTOCOL MESSAGE FORMATS
|
||
0 error type msg (value = 0)
|
||
1 error code
|
||
2 request sequence number
|
||
3 request sequence number
|
||
4 unused
|
||
5 unused
|
||
6 unused
|
||
7 unused
|
||
8 minor opcode - extension function code
|
||
9 minor opcode - extension function code
|
||
10 major opcode
|
||
|
||
The major and minor (function code) opcodes, are those of the request which generated the
|
||
error. The request sequence number is the least significant 16 bits of the number implicitly
|
||
assigned to the request which generated the error.
|
||
For the following errors (see Section n), the failing resource id is also returned:
|
||
• Core Protocol Errors
|
||
• Colormap
|
||
• Cursor
|
||
• Drawable
|
||
• Font
|
||
• GContext
|
||
• IDChoice
|
||
• Pixmap
|
||
• Window
|
||
|
||
For Atom errors, the failing atom is returned. For Value errors, the failing value is returned.
|
||
|
||
2.4 Event Protocol Message Format
|
||
|
||
The event format follows that specified in the core protocol (below).
|
||
Events are 32 bytes long. Unused bytes within an event are not guaranteed to be zero. Every
|
||
event contains an 8-bit type code. The most significant bit in this code is set if the event was
|
||
generated from a SendEvent request.
|
||
The image extension related events use event codes assigned by the core server at extension
|
||
load time. Every core event (with the exception of KeymapNotify) also contains the least
|
||
significant 16 bits of the sequence number of the last request issued by the client that was (or
|
||
is currently being) processed by the server. Image extension events also include the request
|
||
sequence number.
|
||
|
||
EVENT FORMAT
|
||
------------
|
||
BYTE CONTENTS
|
||
0 event type code (value = )
|
||
1 request sequence number
|
||
2 request sequence number
|
||
|
||
|
||
|
||
|
||
PROTOCOL MESSAGE FORMATS 2–3
|
||
2.5 Data Encoding
|
||
|
||
Except where explicitly noted in the protocol, all 16 bit and 32 bit quantities exchanged
|
||
between client and server must be transmitted with the byte order established at CORE
|
||
protocol connection time. (see core protocol connection setup - X11 spec.). In particular...
|
||
|
||
"The client must send an initial byte of data to identify the byte order to be
|
||
employed. The value of the byte must be octal 102 or 154. The value 102 (ASCII
|
||
upper case B) means values are transmitted most significant byte first, and
|
||
value 154 (ASCII lower case l) means values are transmitted least significant
|
||
byte first. Except where explicitly noted in the protocol, all 16-bit and
|
||
32-bit quantities sent by the client must be transmitted with this byte order,
|
||
and all 16-bit and 32-bit quantities returned by the server will be transmitted
|
||
with this byte order."
|
||
|
||
|
||
|
||
|
||
2–4 PROTOCOL MESSAGE FORMATS
|
||
Chapter 3
|
||
|
||
PROTOCOL SPECIFICATION SYNTAX
|
||
|
||
|
||
This section presents syntactic conventions adhered to throughout the specification. All
|
||
protocol functions (requests, replies, errors, events) are specified according to this syntax.
|
||
|
||
3.1 General Syntax
|
||
|
||
In general, the extension package follows the X11 protocol syntax conventions.
|
||
|
||
The syntax {...} encloses a set of alternatives.
|
||
|
||
The syntax [...] encloses a set of structure components.
|
||
|
||
TYPE’s are in upper case, and Alternative Values are capitalized.
|
||
|
||
3.2 Request Syntax
|
||
|
||
Requests (and the associated replies) are described in this document in a uniform fashion.
|
||
There are five major sections to a request description:
|
||
1. request "procedure declaration"
|
||
2. errors
|
||
3. events
|
||
4. overall description
|
||
|
||
The first three are specified in a brief BNF like format. The overall description is in English
|
||
prose and follows the first three.
|
||
Each request description begins with a "procedure declaration" like definition consisting of the
|
||
request name, argument names and types, and optional reply information. All image extension
|
||
requests have a common name prefix (XIEP_). The arguments constitute the optional data
|
||
described in the request protocols on a protocol function by protocol function basis. Note that
|
||
the order of arguments complies with their actual order in the wire protocol. Note also that
|
||
the protocol function names and types are abstract (the XieLib language bindings convert
|
||
these abstract names into concrete function names an parameter types).
|
||
|
||
|
||
|
||
|
||
PROTOCOL SPECIFICATION SYNTAX 3–1
|
||
The symbol "=>" demarcates the start of reply information. If the request has no reply, the
|
||
word "none" will follow the symbol "=>".
|
||
Following the "procedure declaration" information is a list of errors which the protocol function
|
||
may signal. If there are no possible error conditions, the list consists of the word "none".
|
||
Following the error information is a list of events which the protocol function may trigger. If
|
||
there are no possible events which maybe triggered, the list consists of the word "none". Note
|
||
that the list contains only those events which may be explicitly triggered, and that there may
|
||
be unforeseen events triggered by a protocol function.
|
||
Finally, each request section contains a descriptive component which includes overall purpose,
|
||
parameters , and operation.
|
||
|
||
RequestName
|
||
arg1: TYPE1
|
||
.
|
||
.
|
||
.
|
||
argn: TYPEN
|
||
=>
|
||
result1: TYPE1
|
||
.
|
||
.
|
||
.
|
||
resultn: TYPEN
|
||
|
||
|
||
Errors: kind1, ..., kindN
|
||
|
||
Events: kind1, ... ,kindN
|
||
|
||
Description:
|
||
- purpose
|
||
- parameters
|
||
- operation
|
||
- errors
|
||
|
||
|
||
|
||
3.3 Error Syntax
|
||
|
||
Errors are described in a uniform fashion. Each error description includes the error name,
|
||
error type code, and optional information returned with the error. Finally, each error section
|
||
contains a descriptive component which addresses causes.
|
||
|
||
ErrorName error_type_code
|
||
value1: TYPE1
|
||
.
|
||
.
|
||
.
|
||
valuen: TYPEN
|
||
Description:
|
||
- causes
|
||
|
||
|
||
|
||
|
||
3–2 PROTOCOL SPECIFICATION SYNTAX
|
||
3.4 Event Syntax
|
||
|
||
Events are described in a uniform fashion. Each event description includes the event name,
|
||
event type code, and optional information returned with the event. Finally, each event section
|
||
contains a descriptive component which includes overall purpose, causes, and operational
|
||
semantics.
|
||
|
||
EventName event_type_code
|
||
value1: TYPE1
|
||
.
|
||
.
|
||
.
|
||
valuen: TYPEN
|
||
Description:
|
||
- overall purpose
|
||
- causes
|
||
- operational semantics
|
||
|
||
|
||
|
||
|
||
PROTOCOL SPECIFICATION SYNTAX 3–3
|
||
Chapter 4
|
||
|
||
PROTOCOL PARAMETER TYPES
|
||
|
||
|
||
Parametric types represent the core and extension protocol recognized types for the various
|
||
request parameters. The image extension protocol makes use of both core protocol parametric
|
||
types and image extension specific protocol parametric types.
|
||
|
||
4.1 Core Types
|
||
|
||
The following types are defined in the X11 core protocol specification. Refer to the X11 core
|
||
protocol specification for their definition.
|
||
|
||
ARC ATOM BOOL BITGRAVITY
|
||
BITMASK BUTMASK BUTTON CARD8
|
||
CARD16 CARD32 CHAR2B COLORMAP
|
||
CURSOR DEVICE DEVICEEVENT DRAWABLE
|
||
EVENT FONT GCONTEXT HOST
|
||
INT8 INT16 INT32 KEYBUTMASK
|
||
KEYCODE KEYMASK LISTofFOO LISTofVALUE
|
||
Or Types PIXMAP POINT POINTEREVENT
|
||
RECTANGLE STRING8 STRING16 TIMESTAMP
|
||
VALUE VISUALID WINDOW WINGRAVITY
|
||
|
||
Note that XIE redefines the use of LISTofFOO such that the list is preceded by the number of
|
||
entries in the list. This applies in all cases (whether FOO is an XIE specific or core type). The
|
||
number of entries field is CARD8 unless noted otherwise in a protocol function specification.
|
||
|
||
4.2 Extension Types
|
||
|
||
The types presented in this section are specific to the X Image Extension Protocol, and are
|
||
considered to be defined types. All X image extension type symbols begin with the prefix XIT_.
|
||
All X image extension protocol parameters are defined as being either one of these extension
|
||
types, or one of the core protocol types. Note that these types are abstract in nature and are
|
||
bound to concrete types and structures by the XieLib language bindings.
|
||
The following sections describe the particulars of each of the image extension types.
|
||
|
||
XIT_ACCELERATOR_VECTOR
|
||
|
||
|
||
|
||
|
||
PROTOCOL PARAMETER TYPES 4–1
|
||
XIT_ACCELERATOR_VECTOR is used to provide the client information about which protocol
|
||
functions can be executed on ancillary processors (one other than the extension server host
|
||
processor). The ancillary processor is typically present for acceleration purposes (thus the
|
||
name).
|
||
Accelerator information is formatted as a bit vector identical in format to that used in server_
|
||
capabilities. In particular, there is a bit for every protocol function whose value indicates the
|
||
state of hardware support for that function on the server. A ’0’ implies no direct hardware
|
||
acceleration (ie. the protocol function is implemented through software on the server host
|
||
processor), while a ’1’ implies specific accelerator support (ie. a processor other than the server
|
||
host processor is used to accelerate the function).
|
||
|
||
XIT_AREA_OP1
|
||
XIT_AREA_OP1 defines the valid operations for the process services area operator number 1.
|
||
They include:
|
||
|
||
XIT_AREA_OP1
|
||
{
|
||
ADDITION,
|
||
MULTIPLICATION
|
||
}
|
||
|
||
|
||
XIT_AREA_OP2
|
||
XIT_AREA_OP2 defines the valid operations for the process services area operator number 2.
|
||
They include:
|
||
|
||
XIT_AREA_OP2
|
||
{
|
||
MINIMUM,
|
||
MAXIMUM,
|
||
SUMMATION
|
||
}
|
||
|
||
|
||
XIT_ARITH_OP
|
||
XIT_ARITH_OP defines the valid operations for the process services arithmetic operator. They
|
||
include:
|
||
|
||
XIT_ARITH_OP
|
||
{
|
||
ADD_II, ADD_IC,
|
||
SUB_II, SUB_IC, SUB_CI,
|
||
MUL_II, MUL_IC,
|
||
DIV_II, DIV_IC, DIV_CI,
|
||
MIN_II, MIN_IC,
|
||
MAX_II, MAX_IC
|
||
}
|
||
|
||
Note that the suffix II means that the operation is to be performed between two images, while
|
||
IC means between an image and a constant. Note also that IC, and CI suffices imply order of
|
||
operands in the operation.
|
||
|
||
XIT_COMPONENT_SPACE_ORGANIZATION
|
||
|
||
|
||
|
||
4–2 PROTOCOL PARAMETER TYPES
|
||
XIT_COMPONENT_SPACE_ORGANIZATION defines the way in which the various spectral
|
||
components of an image are organized during wire transport. See the appendix on image data
|
||
attributes & organization for more details.
|
||
|
||
XIT_COMPONENT_SPACE_ORGANIZATION:
|
||
{
|
||
BAND_INTERLEAVED_BY_PIXEL,
|
||
BAND_INTERLEAVED_BY_PLANE,
|
||
BIT_INTERLEAVED_BY_PLANE
|
||
}
|
||
|
||
|
||
XIT_COMPRESSION_SCHEME
|
||
XIT_COMPRESSION_SCHEME defines the recognized image compression schemes.
|
||
|
||
XIT_COMPRESSION_SCHEME: {PCM, G42D, DCT}
|
||
|
||
The X Image Extension Protocol makes use of standardized image data specific compres-
|
||
sion schemes (general purpose information theoretic schemes such as Liv Zempel are thus
|
||
excluded). While these may not be the most current or efficient, this ensures that incompati-
|
||
bilities due to proprietary or ill defined schemes does not occur.
|
||
The relationship between data organization and data encoding (compression) at wire transport,
|
||
and the applicability of various compression schemes to various classes of digital images
|
||
under various organizations is discussed in more detail in the section on wire data transport
|
||
overview, and in appendix C (Image Data Attributes & Organization).
|
||
PCM or pulse code modulation implies no compression scheme has been applied to the data.
|
||
In this case, the image data at wire transport time is organized according to the selected
|
||
(client-server agreed) format, but no compression scheme has been applied to the data itself.
|
||
It is included as a "compression scheme" so that it may be transported in stream format (see
|
||
XIEP_GET_STREAM and XIEP_PUT_STREAM).
|
||
G42D stands for the CCITT group 4 two dimensional compression scheme. While this scheme
|
||
was first developed for bitonal facsimile images, it is applicable to bitonal and continuous
|
||
tone images when organized properly. The name of this scheme will be used as a marker for
|
||
the actual standardized algorithm and data tables (refer to CCITT references). In this case,
|
||
the image data at wire transport time is organized according to the selected (client-server
|
||
agreed) format, and within this agreed to organization, the data is compressed according to
|
||
this scheme.
|
||
DCT or discrete cosine transform is a technique currently being standardized by ISO and
|
||
will be included for continuous tone monochromatic, and continuous tone polychromatic
|
||
compression.
|
||
|
||
XIT_IDATA
|
||
XIT_IDATA is the generic type for all image data which flows across the wire.
|
||
|
||
XIT_IDC
|
||
|
||
|
||
|
||
|
||
PROTOCOL PARAMETER TYPES 4–3
|
||
XIT_IDC is the type for an image domain context identifier. It is defined as a 32 bit identifier.
|
||
See the notes on resource id formats in the section on connection setup.
|
||
|
||
XIT_IDC_TYPE
|
||
XIT_IDC_TYPE identifies the valid types of image domain contexts (IDC’s). They include:
|
||
|
||
XIT_IDC_TYPE:
|
||
{
|
||
CPP - control process plane,
|
||
ROI - region of interest,
|
||
TMP - area operation template
|
||
}
|
||
|
||
|
||
XIT_IOB
|
||
XIT_IOB is the type for an image object identifier. It is defined as a 32 bit identifier. See the
|
||
notes on resource id formats in the section on connection setup.
|
||
|
||
XIT_IPC
|
||
XIT_IPC is the type for an image process control context identifier. It is defined as a 32 bit
|
||
identifier. See the notes on resource id formats in the section on connection setup.
|
||
|
||
XIT_HSHAPE
|
||
XIT_HSHAPE defines the various algorithm shapes that can be requested in histogram
|
||
matching operations. They include:
|
||
|
||
XIT_HSHAPE
|
||
{
|
||
flat,
|
||
ramp,
|
||
hyperbolic,
|
||
gaussian
|
||
}
|
||
|
||
|
||
XIT_LOGICAL_OPS
|
||
XIT_LOGICAL_OPS defines the valid operators of the logical process services. They include:
|
||
|
||
XIT_LOGICAL_OPS
|
||
{
|
||
AND,
|
||
OR,
|
||
XOR,
|
||
NOT,
|
||
SHIFT_UP,
|
||
SHIFT_DN
|
||
}
|
||
|
||
|
||
XIT_FLOAT
|
||
|
||
|
||
|
||
|
||
4–4 PROTOCOL PARAMETER TYPES
|
||
XIT_FLOAT identifies the data as floating point. It is used in wire transport of some data
|
||
(typically some client specified operands and some server returned data). It is never used in
|
||
wire transport of images. An XIE float consists of three components:
|
||
|
||
XIT_FLOAT:
|
||
[
|
||
e_sign - BOOLEAN,
|
||
m_sign - BOOLEAN,
|
||
exponent - CARD8,
|
||
mantissa - CARD16
|
||
]
|
||
|
||
E_sign is the exponent sign while m_sign is the mantissa sign. If a sign boolean is true, it
|
||
indicates that the value is positive.
|
||
|
||
XIT_LINE_PROGRESSION
|
||
XIT_LINE_PROGRESSION defines the way in which scan lines are to be painted at presenta-
|
||
tion time. See the appendix on image data attributes & organization for more details.
|
||
|
||
XIT_LINE_PROGRESSION: {90, 270}
|
||
|
||
|
||
XIT_MATHF
|
||
XIT_MATHF defines the valid mathematical functions that can be invoked through the
|
||
mathematical process functions. They include:
|
||
|
||
XIT_MATHF
|
||
{
|
||
EXP,
|
||
NATURAL LOG,
|
||
LOG2,
|
||
LOG10,
|
||
SQUARE,
|
||
SQUARE_ROOT,
|
||
}
|
||
|
||
|
||
XIT_PIXEL_PROGRESSION
|
||
XIT_PIXEL_PROGRESSION defines the way in which pixels are to be painted along scan
|
||
lines at presentation time. See the appendix on image data attributes & organization for more
|
||
details.
|
||
|
||
XIT_PIXEL_PROGRESSION: {0, 90, 180, 270}
|
||
|
||
|
||
XIT_POLARITY
|
||
XIT_POLARITY defines the way in which pixel data is to be interpreted at presentation time.
|
||
In particular, it defines how data values are mapped into brightness. See the appendix on
|
||
image data organization for more details.
|
||
|
||
XIT_POLARITY: {ZERO-BRIGHT, ZERO-DARK}
|
||
|
||
|
||
|
||
|
||
PROTOCOL PARAMETER TYPES 4–5
|
||
XIT_PRED_TYPE
|
||
XIT_PRED_TYPE defines the dyadic predicate operators recognized by predicate protocol
|
||
functions including:
|
||
|
||
XIT_PRED_TYPE:
|
||
{
|
||
LESS THAN,
|
||
LESS THAN OR EQUAL TO,
|
||
EQUAL TO,
|
||
NOT EQUAL TO,
|
||
GREATER THAN OR EQUAL TO,
|
||
GREATER THAN
|
||
}
|
||
|
||
|
||
XIT_STAT_TYPE
|
||
XIT_STAT_TYPE defines the types of statistical functions recognized in the protocol including:
|
||
|
||
XIT_STAT_TYPE:
|
||
{
|
||
MINIMUM,
|
||
MAXIMUM,
|
||
MEAN,
|
||
STD_DEV,
|
||
VARIANCE
|
||
}
|
||
|
||
|
||
XIT_RESOURCE_TYPE
|
||
XIT_RESOURCE_TYPE is used to define the type of image extension server resource. It is
|
||
used primarily during resource creation. The specific extension resource types are defined
|
||
below. Details of their contents are found in the appendix on server resources.
|
||
|
||
XIT_RESOURCE_TYPE: {XIR_IOB, XIR_IDC, XIR_IPC}
|
||
symbol meaning
|
||
XIR_IOB image object
|
||
XIR_IDC domain control context
|
||
XIR_IPC process control context
|
||
|
||
|
||
XIT_SPECTRAL_COMPONENT_MAPPING
|
||
XIT_SPECTRAL_COMPONENT_MAPPING defines the recognized 3 color space systems. As
|
||
of this version, the only recognized spectral component mapping is RGB.
|
||
|
||
XIT_SPECTRAL_COMPONENT_MAPPING: {RGB}
|
||
|
||
|
||
XIT_FUNCTION_VECTOR
|
||
|
||
|
||
|
||
|
||
4–6 PROTOCOL PARAMETER TYPES
|
||
XIT_FUNCTION_VECTOR is used to convey information about server support for individual
|
||
XIE protocol functions. Each bit of the XIT_FUNCTION_VECTOR represents a single protocol
|
||
function in the image extension protocol. The index of the bit (zero relative) is the value of
|
||
the protocol function number. A bit value of 1 indicates that the function is supported by the
|
||
server, while 0 implies that it is not.
|
||
|
||
|
||
|
||
|
||
PROTOCOL PARAMETER TYPES 4–7
|
||
Chapter 5
|
||
|
||
PROTOCOL ERROR CODES
|
||
|
||
|
||
The image extension protocol makes use of both core protocol error codes and image specific
|
||
extension protocol error codes.
|
||
|
||
5.1 Core Errors
|
||
|
||
The following errors are defined in the X11 core protocol specification. Refer to the X11 core
|
||
protocol specification for their definition.
|
||
|
||
Access Alloc Atom Colormap Cursor
|
||
Drawable Font GContext IDChoice Implementation
|
||
Length Match Name Pixmap Property
|
||
Request Value Window
|
||
|
||
The image extension makes explicit use of the following core protocol errors:
|
||
• Access
|
||
• Alloc
|
||
• IDChoice
|
||
• Match
|
||
• Value
|
||
|
||
The image extension uses the core protocol Access error during the image data wire transport
|
||
process. The error indicates that the client failed to establish the required transport context
|
||
information and that wire transport of image data can not proceed until this is done.
|
||
The image extension uses the core protocol Alloc error for server resource allocation problems.
|
||
The error indicates that the server was unable to allocate the resource. As with the core
|
||
protocol, it is left to the implementors to decide as to the implications of this error for all the
|
||
possible allocation problems which may arise within the extension server.
|
||
In extension protocol functions which create new server resources and assign to them client
|
||
specified resource id’s, the image extension uses the core protocol IDChoice (BAD_IDChoice)
|
||
error to signal that the client desired new resource id is invalid or already in use.
|
||
|
||
|
||
|
||
|
||
PROTOCOL ERROR CODES 5–1
|
||
In extension protocol functions which make use of existing server resources, the image exten-
|
||
sion uses the core protocol IDChoice (BAD_IDChoice) error to signal that the client specified
|
||
resource id is invalid (wrong type of resource or nonexistent resource). This applies to image
|
||
objects (IOB’s), image domain control contexts (IDC’s), and image processing control contexts
|
||
(IPC’s).
|
||
The image extension uses the core protocol Match error to signal mismatches between IOB
|
||
constraint or chrominance state and the state required by the function at hand.
|
||
The image extension uses the core protocol Value error to signal attempts to assign values
|
||
which are out of range to extension resource fields and when math errors occur.
|
||
All errors return a message with a common prefix as described in the Error Protocol Message
|
||
Format section. Included in this information is the protocol function major opcode, minor
|
||
opcode (extension function code), error code, type code, and the request sequence number. This
|
||
information is followed by error code specific data described below.
|
||
|
||
5.2 Extension Errors
|
||
|
||
There are no image extension specific errors at this time.
|
||
|
||
|
||
|
||
|
||
5–2 PROTOCOL ERROR CODES
|
||
Chapter 6
|
||
|
||
SERVER DATA MODEL
|
||
|
||
|
||
Data formats for wire transport of image data are fully specified in the protocol (next chapter).
|
||
The natural tendency is to leave the particulars of image data representation on the server to
|
||
server implementors. But, to some extent, the operation of certain extension protocol functions
|
||
depend upon server image data representation. This chapter defines the bounds of a server
|
||
image data model which will ensure some degree of operational consistency between various
|
||
server implementations.
|
||
There are several dimensions to the server image data model. The first is the tradeoff between
|
||
dynamic range/precision and processing speed/accuracy. The second is the relationship be-
|
||
tween server image data organization and spectral bands. The third is the ability to pipeline
|
||
image data through multiple XIE server processing primitives.
|
||
|
||
6.1 Constrained vs Unconstrained
|
||
|
||
XIE has established the definition of an image at wire transport to be a two dimensional array
|
||
of positive integral data which may be organized and compressed in various ways. The wire
|
||
transport definition was chosen to force the application or client to reduce the dimensionality
|
||
of its data to a least common denominator based upon the premise that the application
|
||
understands its data model better than any one else.
|
||
The wire transport definition of image data is too restrictive for many computational purposes.
|
||
A simple example is an algorithm which subtracts a constant from an image and then adds
|
||
the constant back in. Under the positive integral constraint, this algorithm may not reproduce
|
||
the original data. Another example of an algorithm that may suffer is one which takes the
|
||
natural log of the data and then either an antilog or scaling of the result to fit within some
|
||
dynamic range. The integral constraint throws away much information generated by the log
|
||
function.
|
||
The server image data model must provide for a balance between representational flexibil-
|
||
ity (regarding the dynamic range and precision of the data) and computational efficiency.
|
||
Typically, this is done by mapping the data directly onto one of the machine architecture’s
|
||
primitive data formats (integer or float). Differences between various server machine architec-
|
||
tures regarding word size for integers and robustness of floating point support require XIE to
|
||
adopt a logical rather than physical approach.
|
||
|
||
|
||
|
||
|
||
SERVER DATA MODEL 6–1
|
||
XIE adopts two logical image data representation models on the server: constrained and
|
||
unconstrained. Constrained data will be positive integral data with limited dynamic range
|
||
and fixed precision [zero based with a fixed precision (number of levels or number of bits
|
||
per spectral component per pixel)]. Unconstrained data may be positive or negative and of
|
||
dynamic range less than or equal to the maximum that the server implementor (typically
|
||
machine architecture) can provide. As such, its dynamic range will be higher than that
|
||
of constrained data. While float may be a natural choice for unconstrained data, server
|
||
implementors are free to choose a long integer to represent unconstrained data. The process of
|
||
converting from unconstrained to constrained data is one of making all the data positive, and
|
||
with fixed number of quantization levels.
|
||
The client has substantial control over when and how constraints are applied. The client
|
||
has the ability to modify the parameters which control how constraining is done (default
|
||
constraint model). The client has the ability to query an IOB and determine its state relative
|
||
to constraints. The client has the ability to explicitly force conversion to constrained state
|
||
directly (through a "constrain" protocol function), or indirectly (after the application of process
|
||
protocol functions).
|
||
The constrained/unconstrained model applies to all server functions which deal with image
|
||
data (thus, constrained/unconstrained is meaningless for functions such as select events and
|
||
query IDC which do not deal with image data).
|
||
Protocol functions which should not accept unconstrained data (wire transport, bitwise logical
|
||
functions,...) will reject it (user is forced to explicitly constrain it). Protocol functions which are
|
||
asked to output constrained data will apply the constraint function after their basic function
|
||
is performed (ie. ensure maximum dynamic range & precision in the calculation and apply
|
||
constraints on the way out).
|
||
For example, let the client specify a constraint model of 256 levels for a gray scale image,
|
||
and let there be a test image which was sent across the wire with equal distribution of
|
||
pixels in all 256 states (it is constrained). If the client asks for a constrained subtraction of
|
||
128 from the image and the current default constraint model is a hard clip within dynamic
|
||
range, the resulting image is constrained and has half its pixels clipped to value 0, and the
|
||
other half equally distributed between 0 and 128. If the client asks for an unconstrained
|
||
subtraction of 128 from the image, the resulting image is unconstrained and has its pixels
|
||
equally distributed between -128 and +128. After generation of this unconstrained image, if
|
||
the client asks to mask out the low four bits, the server will first convert the unconstrained
|
||
image to a constrained image, then perform the mask, and produce a constrained image.
|
||
Particulars of constraint functions are found in the following protocol sections:
|
||
• session services
|
||
• establish operational defaults
|
||
• query operational defaults
|
||
• radiometric services
|
||
• apply constraints
|
||
|
||
The client should establish the default constraint model and parameters immediately after
|
||
session connection.
|
||
|
||
|
||
|
||
|
||
6–2 SERVER DATA MODEL
|
||
6.2 Mono vs Poly Chromatic
|
||
|
||
While it may be possible to have client side libraries manage three IOB’s as the constituent
|
||
components of a color image, it is felt that this is too minimalistic a view of XIE color image
|
||
support and that some color IOB data organizations and extended server function capabilities
|
||
should exist for color image objects.
|
||
Earlier drafts recognized multiple color three spaces, and undoubtedly, in the future these
|
||
three spaces (such as LUV and certain CIE spaces) will become significant to the image
|
||
display situation on workstations. But, for now, XIE will focus on support only for R-G-B
|
||
images. Thus, three space color conversion and color correction problems will remain on the
|
||
client side of the wire (application level or toolkit level issues).
|
||
The impact upon the XIE protocol is the following:
|
||
• IOB’s are typed regarding color space (mono or rgb only), and
|
||
this information is queryable.
|
||
• For rgb images, all planes are constrained or unconstrained.
|
||
• For rgb images, the number of pixels-per-scanline and number-of-scanlines
|
||
must be identical for each of the three bands.
|
||
• For rgb images, the number of bits-per-component may be different for each band.
|
||
• Various server function specify their operational capabilities for mono and rgb images.
|
||
• A function exists for the separation of rgb into three mono components.
|
||
• A function exists for the combination of three mono components into rgb.
|
||
|
||
Regarding spectral bands, it is suggested that server implementors keep spectral band data
|
||
separate within an IOB. As such, an IOB for a monochromatic image (bitonal or continu-
|
||
ous tone grayscale) would have one "band" type object (1 or n bits deep), while an IOB for a
|
||
polychromatic (RGB) image would have three "band" type objects (r, g, and b bits deep respec-
|
||
tively). Note that this is only a suggestion, and not a requirement. Clients should not assume
|
||
or infer that this is the underlying image data organization on the server.
|
||
In the future, we will consider support for alternate color three spaces. This support will
|
||
involve IOB color space state information which is queryable, and server implementation of
|
||
three space color transforms as well as possible extensions to existing protocol functions.
|
||
|
||
6.3 Data Flow Pipelining
|
||
|
||
The X image extension protocol strives to be primitive yet flexible enough to support many
|
||
higher level image rendition, enhancement, and display related operations. The understanding
|
||
of these higher level operations and intelligence in wielding the low level extension protocol
|
||
functions to achieve them has been left to an extension tool kit and the application itself.
|
||
The X image extension does offer a mechanism to aid in organizing and executing a series of
|
||
primitive protocol functions known as an image data processing pipeline.
|
||
|
||
|
||
|
||
|
||
SERVER DATA MODEL 6–3
|
||
Under the X image extensions, a pipeline is defined to be a single threaded, list of X image
|
||
extension protocol functions through which image data flows sequentially. As such, the
|
||
pipeline mechanism is intended to support sequential segmented flow of image data through
|
||
multiple image extension process steps. These pipelines are driven by data availability
|
||
(pipeline elements are automatically stalled when awaiting data - individual pipeline elements
|
||
establish minimal required data availability for processing to occur). At any point in time,
|
||
the pipeline may be partially or completely full of data with the implication that several
|
||
pipeline segments may be "active" (able to process or processing data {in the case of multiple
|
||
processors}) at the same time.
|
||
An example of such a pipeline might be one where as image data arrives from the client
|
||
through transport calls, it moves through various rendition steps (perhaps scaling and tonal
|
||
remapping) to display. Thus, as image data arrives at the server, it is streamed to the display,
|
||
versus waiting for arrival of the complete image - then moving it completely through the
|
||
rendition steps one at a time - then moving it through the display step.
|
||
There are several significant constraints on the pipelining mechanism. The first is that only a
|
||
subset of the extension protocol functions may be used as pipeline elements (see summary of
|
||
protocol appendix). No core protocol functions may be used in a pipeline. No protocol function
|
||
which exchanges information across the wire may be used in a pipeline other than image
|
||
data wire transport functions. Second, there are no pipeline process control functions (no
|
||
test mechanisms, iteration mechanisms, or human interaction mechanisms for use within
|
||
a pipeline). In essence, pipelines are sealed, straight through processing mechanisms. The
|
||
mechanism for describing (assembling) pipelines is simplistic (vs reinventing complex language
|
||
interpreters). As such, application and toolkit developers will need to "layout" or design
|
||
pipelines on paper before hand working out all parameter binding issues and then hand build
|
||
the calls to construct the pipelines. Note also that no pipeline "registry" mechanism exists and
|
||
so pipeline definitions exist only within the bounds of an extension session.
|
||
Regarding the execution of pipeline processing elements, server implementors are free to use
|
||
special accelerators and parallel processing to execute pipeline elements (just as they are to
|
||
accelerate an extension protocol function outside of a pipeline). The pipeline mechanism does
|
||
not provide any control over or understanding of these situations.
|
||
X image extensions will provide for definition, execution, and monitoring of segmented image
|
||
data processing pipelines on the server (see resource and process control services).
|
||
|
||
|
||
|
||
|
||
6–4 SERVER DATA MODEL
|
||
Chapter 7
|
||
|
||
REQUESTS AND REPLIES
|
||
|
||
|
||
This section constitutes the body of the image extension protocol. It consists of protocol
|
||
functions which are described in a uniform fashion (refer to syntax subsection). All X image
|
||
extension protocol function names begin with the prefix XIEP_.
|
||
Note that like the core protocol, all image extension protocol functions are asynchronous in
|
||
nature. Clients requiring synchronous behavior should use the core protocol’s approach to
|
||
achieving synchronous behavior.
|
||
Extension protocol requests follow the byte ordering established at core protocol connection
|
||
time with regard to all 16 and 32 bit quantities. They also comply with maximum-request-
|
||
length as specified in the core protocol connection.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–1
|
||
7.1 Session Services
|
||
|
||
Image extension sessions occur within the bounds of core protocol sessions. The image ex-
|
||
tension protocol provides per client extension server session initialization and termination
|
||
functions. These allow the client to initialize global extension session server information and
|
||
allow the extension server to clean up on session termination. The session services include:
|
||
• XIEP_INIT_SESSION - begins a client-extension server session
|
||
• XIEP_SET_DEFAULTS - establish/modify operational defaults
|
||
• XIEP_QUERY_DEFAULTS - query operational defaults
|
||
• XIEP_TERM_SESSION - ends a client-extension server session
|
||
|
||
7.1.1 Initialize Session
|
||
|
||
XIEP_INIT_SESSION
|
||
protocol_major_version: CARD16
|
||
protocol_minor_version: CARD16
|
||
=>
|
||
success: BOOL
|
||
protocol_major_version: CARD16
|
||
protocol_minor_version: CARD16
|
||
service_class: CARD32
|
||
supported_functions: XIT_FUNCTION_VECTOR
|
||
length: CARD16
|
||
service class value: 0
|
||
errors: none
|
||
events: none
|
||
|
||
XIEP_INIT_SESSION must be invoked by a client as its first image extension protocol request
|
||
as it causes the server to perform initialization on a per client basis. In addition, as with the
|
||
core protocol connect request, the function returns information which is useful to the client.
|
||
Success is simply a statement of relationship between the server’s protocol version, and the
|
||
client request. TRUE implies that the server’s protocol version is greater than or equal to the
|
||
client’s request and that service will be granted. FALSE implies the opposite.
|
||
Protocol version numbers in the image extension connection request refer to the image exten-
|
||
sion protocol. They follow the core protocol rules: major version changes for incompatibility
|
||
reasons; minor version changes for small, upward compatible modifications.
|
||
Service_class is a mechanism for communicating the level of service provided by the particular
|
||
server. See the concepts document for an overview of service class partitioning of XIE server
|
||
capabilities.
|
||
Supported_functions is a mechanism for communicating exactly which protocol functions the
|
||
server recognizes/supports. A value of 1 for a bit in the XIE_FUNCTION_VECTOR implies
|
||
that the protocol function is recognized and supported by the server. Specialized hardware
|
||
support is not implied as this is communicated elsewhere. While the mechanism allows the
|
||
server to describe support at the individual protocol function level of granularity, it is strongly
|
||
recommended that servers implement all functions in a service class (see concepts document).
|
||
|
||
|
||
|
||
|
||
7–2 REQUESTS AND REPLIES
|
||
Length is the amount of additional data which follows in units of 4 bytes. Additional data
|
||
received if connection accepted includes...
|
||
|
||
server_hardware: HARDWARE
|
||
where:
|
||
|
||
HARDWARE: {
|
||
accelerators: XIT_ACCELERATOR_VECTOR
|
||
screens: LIST_of_SCREEN
|
||
}
|
||
|
||
SCREEN: {
|
||
screen_number: CARD8
|
||
accelerators: XIT_ACCELERATOR_VECTOR
|
||
}
|
||
|
||
|
||
7.1.1.1 Per Server information
|
||
Server information includes a description of the particular server hardware image capabilities,
|
||
and a list of descriptions of the various display screens image capabilities. No core server
|
||
session redundant information is included. Therefore, a complete picture of the hardware
|
||
and screen(s) derives from the union of core server and extension server connection request
|
||
responses.
|
||
Accelerators provides the client information about which image extension protocol functions
|
||
have hardware acceleration available across all screens. This information is provided to
|
||
guide imaging applications with regards to what they might reasonably expect from a server.
|
||
Accelerator information is formatted as a support vector. In particular, there is a bit for every
|
||
protocol function whose value indicates the state of hardware support for that function on the
|
||
server. A ’0’ implies no direct hardware acceleration (ie. the protocol function is implemented
|
||
through software on the server host processor), while a ’1’ implies specific accelerator support
|
||
(ie. a processor other than the server host processor is used to accelerate the function).
|
||
|
||
7.1.1.2 Per Screen Information
|
||
The screens section of the reply addresses screen specific imaging hardware , screen specific
|
||
accelerators, and display controls.
|
||
Screen number is the number by which client rendition requests identify the screen they are
|
||
to affect.
|
||
Accelerators provides the client information about which image extension protocol functions
|
||
have hardware acceleration available on this screen. The format is identical to the hardware
|
||
accelerators field.
|
||
|
||
7.1.1.3 Relationship to Core Session Information
|
||
At the time of initial connection to the core X server, the client receives information back from
|
||
the core X server. This includes connection and "per server" information. The availability
|
||
of this information to the client precedes the availability of X Image Extension initialization
|
||
information as the core X connection precedes the X Image Extension initialization.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–3
|
||
The connection information used by a client of the X Image Extension consists of a combination
|
||
of information which comes from the core connection and the image extension initialization.
|
||
Some core connection information is applicable to the image extension session. This informa-
|
||
tion is not replicated at image extension initialization time. Other core connection information
|
||
is not applicable to the image extension model, and is superseded by information provided
|
||
at image extension initialization time. Finally, there is image extension specific information
|
||
which was not found in the core connection information.
|
||
The table below summarizes the core connection information and its usefulness in an image
|
||
extension session.
|
||
|
||
core information name meaningful type
|
||
--------------------- ---------- ----
|
||
. success no
|
||
. protocol-major-version no
|
||
. protocol-minor-version no
|
||
. vendor yes STRING8
|
||
. release-number yes CARD32
|
||
. release-number no
|
||
. resource-id-base yes CARD32
|
||
. resource-id-mask yes CARD32
|
||
. bitmap-format-scanline-unit yes {8,16,32}
|
||
. bitmap-format-scanline-pad yes {8,16,32}
|
||
. bitmap-format-bit-order yes {LSBfirst,MSBfirst}
|
||
. pixmap-formats yes {ListofFormat}
|
||
. roots yes {ListofScreen}
|
||
. keyboard no
|
||
. pointer no
|
||
. motion-buffer-size no
|
||
. maximum-request-length yes
|
||
|
||
Within roots, useful (applicable) information includes: root, width and height, default_color_
|
||
map, white_pixel, black_pixel, min_installed_maps, max_installed_maps. All other information
|
||
is not applicable.
|
||
|
||
7.1.2 Set Operational Defaults
|
||
|
||
XIEP_SET_DEFAULTS
|
||
constraint - see below -
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: VALUE
|
||
events: none
|
||
|
||
where:
|
||
constraint includes:
|
||
[
|
||
constraint_model CARD8
|
||
bits_pel_component LISTofCARD8
|
||
]
|
||
|
||
|
||
|
||
|
||
7–4 REQUESTS AND REPLIES
|
||
XIEP_SET_DEFAULTS is used to modify operational defaults used by the extension server.
|
||
Operational defaults involve information which controls the operation of the extension server,
|
||
is knowable/modifiable by the client, and is not embodied in a server resource. It may be
|
||
invoked at any time to change the operational defaults.
|
||
Constraint defaults involve information used by the server in converting image data between
|
||
unconstrained and constrained states. The information includes the constraint_model which
|
||
defines how image data is constrained and bits_pel_component (bits per pixel per spectral
|
||
component) which determines the number of quantization levels of the resulting constrained
|
||
data.
|
||
The terms floor and ceiling will be used to described each of the constraint models. Floor refers
|
||
to the smallest positive integral value (base) allowed after constraining the data - for XIE, floor
|
||
is fixed at 0 (zero). Ceiling is the largest positive integral value allowed after constraining the
|
||
data - for XIE it is set to ((2**n) - 1) where n is the number of bits per pixel per component
|
||
(ie. ceiling is an integral power of two, and may be different for each spectral component).
|
||
Constraint models include:
|
||
1. HARD CLIP
|
||
The data is first clipped such that all values below the floor (negative)
|
||
are set to the floor value, and all values greater than the ceiling
|
||
are set to the ceiling value. Then, all values are mapped to the
|
||
nearest integer within the floor-ceiling range by rounding.
|
||
2. CLIP SCALE
|
||
The data is first clipped such that all values below the floor (negative)
|
||
are set to the floor value, and all values greater than the ceiling
|
||
are set to the ceiling value. Then, all values are scaled
|
||
to fit within the ceiling-floor range (make maximum use of the
|
||
available dynamic range. Finally, all values are mapped to the
|
||
nearest integer within the floor-ceiling range by rounding.
|
||
3. HARD SCALE
|
||
The data is first shifted upwards so that all values are greater than
|
||
or equal to the floor value (positive). Then, all values are scaled
|
||
to fit within the ceiling-floor range. Finally, all values are mapped
|
||
to the nearest integer within the floor-ceiling range by rounding.
|
||
|
||
Note that XIE supports only linear quantization models (scaling).
|
||
If any of the constraint values are out of range, or incompatible, a VALUE error occurs.
|
||
|
||
7.1.3 Query Operational Defaults
|
||
|
||
XIEP_QUERY_DEFAULTS
|
||
none
|
||
=>
|
||
constraints - see preceding section -
|
||
service class value: 0
|
||
errors: none
|
||
events: none
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–5
|
||
XIEP_QUERY_OP_DEFAULTS is used to query the current state of the extension server’s
|
||
operation defaults. Operational defaults involve information which controls the operation of
|
||
the extension server, is knowable/modifiable by the client, and is not embodied in a server
|
||
resource.
|
||
See preceding section on establishing operational defaults for details of the information
|
||
returned.
|
||
|
||
7.1.4 Terminate Session
|
||
|
||
XIEP_TERM_SESSION
|
||
none
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: none
|
||
events: none
|
||
|
||
XIEP_TERM_SESSION is used by a client to terminate an image extension session. It must
|
||
be invoked by a client as its last image extension protocol request as it allows the server
|
||
to perform clean up on a per client basis. The extension server deletes all client specific
|
||
resources. A client may choose to continue with a core session after terminating an extension
|
||
session.
|
||
|
||
|
||
|
||
|
||
7–6 REQUESTS AND REPLIES
|
||
7.2 Resource Services
|
||
|
||
Image extension resources are extension server objects known to the client which contain
|
||
information used by the extension server in carrying out various protocol functions. Extension
|
||
resource class services provide for the management of these extension server objects by the
|
||
client. Extension resource protocol functions address resource creation, deletion, modification,
|
||
query, and copy. In addition, extension resource services provide for moving image data
|
||
between core and extension resources. Resource protocol functions include:
|
||
|
||
|
||
• XIEP_CREATE_RESOURCE - create a new server resource object
|
||
• XIEP_COPY_RESOURCE - copy contents from source to destination resource
|
||
• XIEP_DELETE_RESOURCE - delete an existing server resource object
|
||
• XIEP_QUERY_RESOURCE - query an existing server resource object
|
||
• XIEP_IMPORT_IMAGE - create a new server IOB resource object
|
||
• XIEP_EXPORT_IMAGE - create a new server PIXMAP resource object
|
||
|
||
7.2.1 Resource Creation
|
||
|
||
XIEP_CREATE_RESOURCE
|
||
resource_id {XIT_IOB,XIT_IDC,XIT_IPC}
|
||
resource_type XIT_RESOURCE_TYPE
|
||
resource_data - see below -
|
||
=>
|
||
none
|
||
|
||
service class value: - see below -
|
||
errors: ALLOC, IDChoice, VALUE
|
||
events: none
|
||
|
||
|
||
where resource_data is one of the following:
|
||
{
|
||
image_object_resource_data,
|
||
process_control_context_resource_data,
|
||
domain_control_context_resource_data
|
||
}
|
||
|
||
Server resource creation causes the server to allocate a new resource and to fill it with infor-
|
||
mation passed through the function’s parameters.
|
||
Resource_id is the client specified id to be assigned to the new resource. Resource_type
|
||
specifies what type of extension server resource is to be created., (image object resource,
|
||
process and domain control object resources). Resource_data is type specific and is described
|
||
in the following subsections.
|
||
All extension server resources have their id’s selected by the client (same model as for all core
|
||
resources). The client must use the core session connection assigned resource-id-base and
|
||
resource-id-mask in generating id’s for image extension resources. As specified in the core
|
||
protocol "The resource_id_mask contains a single set of contiguous bits (at least 18); the client
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–7
|
||
allocates resource ids by choosing a value with (only) some subset of these bits set, and ORing
|
||
it with the resource_id_base. Only values constructed in this way can be used to name newly
|
||
created resources over this connection. Resource ids never have the top 3 bits set. The client
|
||
is not restricted to linear or contiguous allocation of resource ids. Once an id has been freed, it
|
||
can be reused, but this should not be necessary. An id must be unique with respect to the ids
|
||
of all other resources, not just resources of the same type."
|
||
The service class of the resource creation function depends upon what type of resource is being
|
||
created. This is discussed in each of the following subsections.
|
||
Inability of the server to allocate the new resource results in an ALLOC error. Choice of a
|
||
resource id which is already in use or is out of range generates an IDChoice error. Invalid
|
||
value specification of any image attributes results in a VALUE error. If any error occurs, the
|
||
object is not created.
|
||
|
||
7.2.1.1 Image Object Resource
|
||
Image_Object_Resource_Data
|
||
[
|
||
pixels-per-scanline CARD32
|
||
number-of-scanlines CARD32
|
||
aspect_ratio XIT_FLOAT
|
||
number-of-spectral-components CARD8
|
||
bits_per_component LISTofCARD8
|
||
spectral-component-mapping XIT_SPECTRAL_COMPONENT_MAPPING
|
||
pixel_progression XIT_PIXEL_PROGRESSION
|
||
line_progression XIT_LINE_PROGRESSION
|
||
polarity XIT_POLARITY
|
||
]
|
||
|
||
IOB’s represent revisable form images (see server resources and image data attributes and
|
||
organization appendices). They consist of image attributes and image data.
|
||
Image objects can come into existence in several ways: as the result of a client request to
|
||
create a new one; as the result of an import protocol request; and as the result of a processing
|
||
protocol request. XIEP_CREATE_RESOURCE with type image object is used by a client to
|
||
create (allocate) a new server image object resource and as such, represents the first of the
|
||
three ways of creating new image objects.
|
||
Clients typically create new image objects just prior to populating them with image data via
|
||
transport protocol functions. Both primitive and presentation attributes are communicated
|
||
from client to server during image object creation. The primitive attributes are strongly
|
||
bound to the data as they describe the most fundamental organizational information. The
|
||
presentation attributes are less strongly bound as they provide some insight into the original
|
||
presentation of the data.
|
||
|
||
primitive_attributes include:
|
||
pixels-per-scanline
|
||
number-of-scanlines
|
||
number-of-spectral-components
|
||
bits_per_component
|
||
spectral-component-mapping
|
||
presentation_attributes include:
|
||
|
||
|
||
|
||
|
||
7–8 REQUESTS AND REPLIES
|
||
pixel_progression
|
||
line_progression
|
||
aspect_ratio
|
||
polarity
|
||
|
||
Note that while most client accessible server resource object fields can be initialized at creation
|
||
time, there may be fields in image objects which are initialized and maintained by the server
|
||
and are only queryable by the client (eg. constraint information)
|
||
Pixels-per-scanline, number-of-scanlines, number-of-spectral-components, and spectral-
|
||
component-mapping are all primitive image attributes described in the appendix on image
|
||
data attributes and organization. While bits_per_component is an artifact of image data wire
|
||
transport (more so than a primitive attribute), it is communicated with primitive attributes at
|
||
IOB creation time to facilitate IOB resource allocation (memory).
|
||
Pixel_progression, line_progression, aspect_ratio, and polarity are all original image presenta-
|
||
tion attributes described in the appendix on image data attributes and organization.
|
||
IOB’s created by the create resource function begin their life with state constrained. This
|
||
is consistent with their only initial use (receiving image data from across the wire). IOB
|
||
image data is initialized at creation time to the value zero (0). This is done to ensure that
|
||
all image locations begin with meaningful data. This is particularly important in that image
|
||
data transport overlays the default values and while stream image data transport must by
|
||
definition overlay all of the data locations, random access tiled image data transport may or
|
||
may not.
|
||
IOB’s are potentially very expensive server resources due to their size. Care should be exer-
|
||
cised by the client regarding which and how many resources are allocated.
|
||
|
||
7.2.1.2 Domain Control Context Resource
|
||
domain_context_resource_data
|
||
idc_type XIT_IDC_TYPE
|
||
idc_data - see below -
|
||
|
||
|
||
Where idc_data depends on the idc_type:
|
||
. for ROI’s, idc_data is the following sequence:
|
||
[
|
||
ul_x CARD32
|
||
ul_y CARD32
|
||
width CARD32
|
||
height CARD32
|
||
]
|
||
. for CPP’s, idc_data is the following:
|
||
[
|
||
ul_x CARD32
|
||
ul_y CARD32
|
||
cpp_iob XIT_IOB
|
||
]
|
||
. for TMP’s, idc_data is the following:
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–9
|
||
[
|
||
center_x CARD32
|
||
center_y CARD32
|
||
data_count CARD32
|
||
tmp_data LISTofTMP_ENTRY
|
||
]
|
||
where:
|
||
TMP_ENTRY is:
|
||
[
|
||
x_index CARD32
|
||
y_index CARD32
|
||
value XIT_FLOAT
|
||
]
|
||
|
||
Domain context resources are used to focus various classes of server based image processing
|
||
onto a subset of the pixels that are part of an IOB, and to act as operands in certain image
|
||
area operations.
|
||
IDC_type determines if the IDC is to be an ROI, CPP, or TMP. IDC_data specifies the bounds
|
||
of an ROI, identifies a bit plane (an IOB which is one bit per pixel) to be used as a CPP, or the
|
||
locations and values of the template.
|
||
There are three forms of IDC: the region of interest or ROI, the control processing plane
|
||
or CPP, and the template or TMP. An ROI defines a closed, rectangular subregion. When
|
||
using an ROI type IDC, all pixels within (border included) the ROI are subject to processing.
|
||
Individual operators define how boundary conditions are handled. A CPP defines a potentially
|
||
fully disconnected set of locations such that pixels at these locations are subject to processing.
|
||
CPP’s do this by representing all pixel locations with a single bit, and using the state of the bit
|
||
to control whether processing occurs or not. A TMP defines the shape and values of a template
|
||
or mask used in area operations. TMP’s maybe fully or sparsely populated two dimensional
|
||
entities. Individual protocol processing functions define which forms of IDC are acceptable.
|
||
All three forms of IDC (ROI, CPP, TMP) are spatially registered with the image object data
|
||
(IOB) through the image object’s implicit two dimensional coordinate system. ROI and CPP’s
|
||
are spatially registered by the values of their upper left coordinates which specify the location
|
||
in image object coordinates of the upper left corner. In the case of ROI’s and CPP’s, their x
|
||
and y extents must be less than or equal to that of the IOB they will be used with at operation
|
||
time.
|
||
While the X image extension protocol does not provide for object recognition, it does allow
|
||
clients to process and convert an IOB into a CPP via the boolean operators in enhancement
|
||
services section. With these services, a client can generate a CPP for pixels with the same
|
||
intensity or color, or more complex identity relationships. Applications such as chroma keying
|
||
may be possible with these services.
|
||
The spatial registration of a template (TMP) with the area image data surrounding a pixel is
|
||
established by the centerx and centery data. All templates are specified in the positive x and
|
||
positive y quadrant of a cartesian coordinate system. The centerx, centery data positions the
|
||
location of the data pixel (central pixel) relative to the template. For example, the following
|
||
hollow cross filter would be represented in the protocol as shown below:
|
||
|
||
|
||
|
||
|
||
7–10 REQUESTS AND REPLIES
|
||
-7.00
|
||
+3.00 -0.75
|
||
+1.66
|
||
|
||
entries 4
|
||
centerx 1
|
||
centery 1
|
||
x_index 1 2 1 0
|
||
y_index 0 1 2 1
|
||
value +1.66 -0.75 -7.0 +3.0
|
||
|
||
Note that asymmetric templates are possible, and there is no need for all or even the center
|
||
point template value to be defined (sparse definitions). Note also that the size of the list length
|
||
entry (first field in the list) for tmp_data is CARD16 (rather than the default CARD8) to allow
|
||
for large templates.
|
||
Creation of IDC resources is considered to be a service class 1 function as it is central to server
|
||
image processing operations.
|
||
|
||
7.2.1.3 Process Control Context Creation
|
||
Process_Control_Resource_Data
|
||
[
|
||
name LISTofSTRING8
|
||
inputs PIPE_IOT
|
||
outputs PIPE_IOT
|
||
]
|
||
where:
|
||
PIPE_IOT includes:
|
||
[
|
||
number CARD8
|
||
formal_parm_types LISTofXIT_PARMS
|
||
]
|
||
|
||
Process context resources represent server pipeline resources. They act as both a pipeline
|
||
template and when executed, a pipeline instantiation.
|
||
Name is simply a descriptive string assigned by the client. It is used by pipeline segments
|
||
to refer to global inputs and outputs, as well as by the server when a pipeline is nested. The
|
||
IPC (pipeline) inputs and outputs represent formal parameter declarations for a process. In
|
||
essence, they allow the client to type specify all inputs into the front end of a pipeline, and
|
||
all outputs produced and returned from the tail end of a pipeline. Both input and output
|
||
parameters are implicitly numbered by the server beginning with zero (0). This numbering is
|
||
used to refer to the global inputs and outputs.
|
||
Note that the size of the list length entry (first field in the list) for formal_parm_types is
|
||
CARD16 (rather than the default CARD8) to allow for large templates.
|
||
IPC’s may be built, copied, queried, deleted, executed, and terminated. Creation of a resource
|
||
of type IPC is the first step in defining an executable pipeline. After this step, the client must
|
||
build the pipeline by sequentially adding elements to the pipeline (XIEP_ADD_SEGMENT).
|
||
When the pipeline construction is complete, execution may begin (XIEP_EXECUTE_PIPE).
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–11
|
||
As an IPC represents both a pipeline template and instantiation, only one copy of any IPC
|
||
may be executing at a time. Note that pipelines may be nested within other pipelines.
|
||
|
||
7.2.2 Resource Copy
|
||
XIEP_COPY_RESOURCE
|
||
src_resource_id {XIT_IOB,XIT_IDC,XIT_IPC}
|
||
dst_resource_id {XIT_IOB,XIT_IDC,XIT_IPC}
|
||
resource_type XIT_RESOURCE_TYPE
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: none
|
||
|
||
XIEP_COPY_RESOURCE is used to copy the contents of a source resource into a destination
|
||
resource. The client specifies the source resource, and the resource id to be used for the new
|
||
(destination) resource, as well as the resource type. The server checks to see that the source
|
||
resource is of the type specified, allocates a new (destination) resource of the same type as the
|
||
source, and fills it with source resource contents.
|
||
Src_resource_id is the id of the source resource (copy will occur from this resource). Dst_
|
||
resource_id is the client assigned id of the new (destination) resource (copy will occur to this
|
||
resource). Resource_type is the type of the source resource. Upon completion, the destination
|
||
resource is an exact copy of the source resource.
|
||
It is left to the server implementor to determine if XIEP_COPY_RESOURCE will operate on
|
||
the image data in an IOB (ie. if it will transfer both image attributes and data from source to
|
||
destination IOB such that no two IOB’s ever share the same image data, or if IOB’s can share
|
||
image data).
|
||
Attempts to access source resources which don’t exist or to use a resource id for the destina-
|
||
tion resource which is already in use generates an IDChoice error. Inability to allocate the
|
||
destination resource results in a ALLOC error. A mismatch between the source resource type
|
||
and the specified resource type generates a MATCH error.
|
||
|
||
7.2.3 Resource Delete
|
||
XIEP_DELETE_RESOURCE
|
||
resource_id {XIT_IOB, XIT_IDC, XIT_IPC}
|
||
resource_type XIT_RESOURCE_TYPE
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, MATCH
|
||
events: none
|
||
|
||
XIEP_DELETE_RESOURCE is used by a client to delete (deallocate) server resources.
|
||
|
||
|
||
|
||
|
||
7–12 REQUESTS AND REPLIES
|
||
Resource_id identifies the specific resource the client wants deleted. Resource_type is the type
|
||
of the resource to be deleted. Deletion of IOB’s deletes the image data. As under the core
|
||
protocol, the management of shared resources is an application problem.
|
||
Attempts to delete a resource which is nonexistent results in an IDChoice error. A mismatch
|
||
between the source resource type and the specified resource type generates a MATCH error.
|
||
|
||
7.2.4 Resource Query
|
||
|
||
XIEP_QUERY_RESOURCE
|
||
resource_id {XIT_IOB, XIT_IDC, XIT_IPC}
|
||
resource_type XIT_RESOURCE_TYPE
|
||
=>
|
||
resource_data - see below -
|
||
|
||
service class value: - see resource creation -
|
||
errors: IDChoice, MATCH
|
||
events: none
|
||
|
||
where resource_data is one of the following:
|
||
{
|
||
image_object_resource_data,
|
||
process_control_context_resource_data,
|
||
domain_control_context_resource_data
|
||
}
|
||
|
||
XIEP_QUERY_RESOURCE returns the contents of all client readable fields of the server
|
||
resource. All image extension server resources other than the image data itself (within the
|
||
IOB) can be queried. Image data query is accomplished with a different protocol function.
|
||
Resource_id is the id of the resource the client wishes to query. Resource_type is the type of
|
||
the resource to be queried.The data returned depends upon the type of resource being queried
|
||
and is described in the following subsections.
|
||
The service class of the resource query function depends upon what type of resource is being
|
||
queried. This is discussed in each of the following subsections. See the appendices on on
|
||
server resources for more details of the attributes.
|
||
Querying a non existent resource generates an IDChoice error. A mismatch between the
|
||
source resource type and the specified resource type generates a MATCH error.
|
||
|
||
7.2.4.1 Image Object Query
|
||
Image_Object_Resource_Data
|
||
constraint_model CARD8
|
||
pixels-per-scanline CARD32
|
||
number-of-scanlines CARD32
|
||
aspect_ratio XIT_FLOAT
|
||
polarity XIT_POLARITY
|
||
pixel_progression XIT_PIXEL_PROGRESSION
|
||
line_progression XIT_LINE_PROGRESSION
|
||
spectral-component-mapping XIT_SPECTRAL_COMPONENT_MAPPING
|
||
number-of-spectral-components CARD8
|
||
bits_per_component LISTofCARD8
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–13
|
||
The function returns the contents of all of the queryable IOB attribute fields. It does not
|
||
return the image data itself (see transport protocol functions).
|
||
Note that constraint information is never directly settable by the client, but is queryable.
|
||
The constraint_model and constrain_bits_per_component fields reflect the state of the default
|
||
operational constraint model when the IOB was last constrained.
|
||
The image object query can be viewed as returning three classes of information:
|
||
primitive_attributes - see below -
|
||
presentation_attributes - see below -
|
||
constraint_info - see below -
|
||
where:
|
||
primitive_attributes include:
|
||
pixels-per-scanline
|
||
number-of-scanlines
|
||
number-of-spectral-components
|
||
spectral-component-mapping
|
||
presentation_attributes include:
|
||
pixel_progression
|
||
line_progression
|
||
aspect_ratio
|
||
polarity
|
||
constraint_info includes:
|
||
constrained
|
||
constraint_model
|
||
bits_per_component
|
||
|
||
|
||
7.2.4.2 Domain Control Context Query
|
||
domain_control_context_resource_data
|
||
idc_type XIT_IDC_TYPE
|
||
idc_data - see below -
|
||
|
||
Where idc_data depends on the idc_type:
|
||
. for ROI’s, idc_data is the following sequence:
|
||
|
||
ul_x CARD32
|
||
ul_y CARD32
|
||
width CARD32
|
||
height CARD32
|
||
|
||
. for CPP’s, idc_data is the following:
|
||
ul_x CARD32
|
||
ul_y CARD32
|
||
cpp_iob XIT_IOB
|
||
. for TMP’s, idc_data is the following:
|
||
center_x CARD32
|
||
center_y CARD32
|
||
data_count CARD32
|
||
data LISTofTMP_ENTRY
|
||
where:
|
||
TMP_ENTRY is a triplet:
|
||
|
||
|
||
|
||
7–14 REQUESTS AND REPLIES
|
||
x_index CARD32
|
||
y_index CARD32
|
||
tmp_data XIT_FLOAT
|
||
|
||
|
||
|
||
7.2.4.3 Process Control Context Query
|
||
process_control_context_resource_data
|
||
[
|
||
name LISTofSTRING8
|
||
inputs PIPE_IOT
|
||
outputs PIPE_IOT
|
||
running BOOL
|
||
segments LISTofSEGMENT
|
||
]
|
||
where:
|
||
PIPE_IOT includes:
|
||
[
|
||
number CARD8
|
||
formal_parm_types LISTofXIT_PARMS
|
||
]
|
||
SEGMENT includes:
|
||
[
|
||
name LISTofSTRING8
|
||
function XIT_XIEFUNCTION
|
||
parm_bindings LISTofBINDING
|
||
state {processing, stalled}
|
||
]
|
||
where
|
||
BINDING is:
|
||
[
|
||
name STRING8
|
||
number CARD32
|
||
]
|
||
|
||
The function returns the contents of all of the queryable IPC fields.
|
||
Running is a boolean which indicates if the pipeline has been instantiated and is under
|
||
execution, or is in the template state. Refer to the sections on XIEP_CREATE_RESOURCE
|
||
(type IPC) and XIEP_ADD_SEGMENT for more details on other fields. If running is true,
|
||
then the state field in the segments list elements is meaningful and describes the current
|
||
state of each pipeline element (either processing, or stalled awaiting data).
|
||
|
||
7.2.5 Import/Export Services
|
||
Import/Export class services provide for the direct movement of image data and attributes
|
||
between extension package objects (IOB’s) and core server objects (drawable). The term
|
||
"direct" means that other than issuing the protocol request, no further client intervention is
|
||
required (the image data does not have to move back and forth across the wire). These services
|
||
are provided in order to allow some server level mechanism for data exchange between the
|
||
image extension and the core as well as other extension packages.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–15
|
||
7.2.5.1 Import Image
|
||
XIEP_IMPORT_IMAGE
|
||
iob_id XIT_IOB
|
||
drawable DRAWABLE
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: DRAWABLE, MATCH, ALLOC, IDChoice
|
||
events: none
|
||
|
||
XIEP_IMPORT_IMAGE transfers image data and attributes from an existing server drawable
|
||
into a new server IOB.
|
||
IOB_id is the id to be assigned to the new IOB. Drawable is the id of a core server drawable
|
||
resource that the image data and attributes will come from. The drawable may be either a
|
||
pixmap or a window.
|
||
The server creates a new IOB to receive the image data and attributes. The client accessible
|
||
IOB attributes (primitive and presentation) derive from information associated with the
|
||
drawable. Data formatting information (organization and encoding) which is involved in wire
|
||
transport plays no visible role in the process.
|
||
Note that all drawable image data is imported (no subregion specification is allowed and no
|
||
import processing such as masking is allowed). Clients wishing to import only a portion of a
|
||
drawable must extract the portion into a new drawable before using XIEP_IMPORT_IMAGE
|
||
or crop the IOB after import. Clients wishing to process (such as mask) the data should use X
|
||
Image Extension functions to do so once the data has been imported into an IOB.
|
||
For windows, pixels-per-scanline and number-of-scanlines derive from window width and
|
||
height respectively, while number-of-spectral-components and spectral-component-mapping are
|
||
inferred from the visual type of the window.
|
||
For pixmaps, pixels-per-scanline and number-of-scanlines derive from pixmap width and
|
||
height respectively, while number-of-spectral-components and spectral-component-mapping are
|
||
inferred from (TBS).
|
||
In all cases, the resulting IOB is in the constrained state.
|
||
In either case (pixmap or window), the default presentation attributes associated with the
|
||
image data in the IOB (pixel-progression, line-progression, aspect-ratio, polarity, and grid-type)
|
||
derive from server private knowledge of the display device.
|
||
If drawable does not specify a valid drawable, then a Drawable error occurs. If the drawable
|
||
is an input only window, a Match error occurs. If the client specified IOB id is already in use,
|
||
an IDChoice error occurs. If the server can not allocate the IOB, an ALLOC error occurs.
|
||
|
||
|
||
|
||
|
||
7–16 REQUESTS AND REPLIES
|
||
7.2.5.2 Export Image
|
||
XIEP_EXPORT_IMAGE
|
||
iob_id XIT_IOB
|
||
drawable DRAWABLE
|
||
gc GCONTEXT
|
||
src_x INT32
|
||
src_y INT32
|
||
width CARD32
|
||
height CARD32
|
||
dst_x INT32
|
||
dst_y INT32
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, MATCH
|
||
events: none
|
||
|
||
XIEP_EXPORT_IMAGE combines image data from a rectangular region of an existing server
|
||
IOB with data in a rectangular region of an existing server DRAWABLE.
|
||
IOB_id is the id of the source image object. Drawable is the id of the receiving DRAWABLE
|
||
(WINDOW or PIXMAP). GC_id is the graphic context used to provide information used when
|
||
filling the drawable. Src_x and src_y are the location of the upper left hand corner of the
|
||
source IOB data. Width and height define how much data to transfer. Dst_x and dst_y are the
|
||
location of the upper left hand corner of the destination location in the receiving DRAWABLE.
|
||
XIEP_EXPORT_IMAGE is similar in many aspects to the core X copy_area function. The
|
||
similarities include transfer of image data into a server resource with control over subarea and
|
||
combination of source and destination data, as well as the requirement that the data format
|
||
must match that of the receiving resource (no format conversion or mismatches supported or
|
||
allowed).
|
||
XIEP_EXPORT_IMAGE will only transfer data between and IOB and a DRAWABLE. It is
|
||
not capable of reconciling differences between the IOB data and the pixmap formats. In
|
||
other words, the process of reconciling the differences between what have been referred to as
|
||
revisable form images and what the display device can show (this is reflected in DRAWABLE
|
||
formats) must occur prior to export. This reconciliation process is what is referred to as
|
||
rendition and must be performed before export.
|
||
Thus, prior to use of export_image, the IOB must be constrained and the client should apply
|
||
various rendition steps/operations (such as scale, crop, ...) to ensure that the IOB image data
|
||
is compatible with the receiving DRAWABLE.
|
||
If iob_id or drawable specify invalid (nonexistent) resources, an IDChoice error occurs. If an
|
||
attempt is made to export an IOB into a pixmap such that the IOB is unconstrained or its
|
||
data is incompatible with the data formats which a DRAWABLE can contain (see core X11
|
||
protocol connection function), then a MATCH error occurs.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–17
|
||
7.3 Transport Services
|
||
|
||
Transport class services provide the means for exchange of image data between client and
|
||
server. Transport protocol functions include:
|
||
• XIEP_SET_TRANSPORT - establishes the required transport context information
|
||
• XIEP_ABORT_TRANSPORT - aborts transport & clears transport context information
|
||
• XIEP_GET_TILE - transports random tiles of uncompressed image data from server to
|
||
client
|
||
• XIEP_PUT_TILE - transports random tiles of uncompressed image data from client to
|
||
server
|
||
• XIEP_GET_STREAM - transports a stream of compressed or uncompressed image data
|
||
from server to client
|
||
• XIEP_PUT_STREAM - transports a stream of compressed or uncompressed image data
|
||
from client to server
|
||
|
||
7.3.1 Overview of Data Transport
|
||
This section addresses the overall image data transport process, transport modes, transport
|
||
data formats, transport synchronization, and transport granularity & atomicity. Details of
|
||
these subjects are found within the data transport protocol definitions.
|
||
|
||
7.3.1.1 Transport Process
|
||
In client->server transfers, the client usually begins by creating a new image object (IOB)
|
||
using XIEP_CREATE_RESOURCE and establishing primitive and presentation attributes
|
||
as it does. Note that while client->server transport is usually done to a new (empty) IOB,
|
||
an existing IOB (one which already contains image data deriving from a prior transport or
|
||
processing operation) may be used to receive the transport image data.
|
||
The client then proceeds to establish the transport context (XIEP_SET_TRANSPORT) which
|
||
controls the format of image data on the wire for this transport session to the specified IOB.
|
||
Finally, the client transfers the image data from its buffer to the server IOB through one or
|
||
more transport calls (XIEP_PUT_TILE or XIEP_PUT_STREAM). The transport session is
|
||
completed when a final flag is set in one of the transport functions, or when the transport is
|
||
aborted via XIEP_FREE_TRANSPORT.
|
||
In server->client transfers, the IOB already exists and is filled with image data. In this
|
||
case, the client proceeds to establish the transport context (XIEP_SET_TRANSPORT) which
|
||
controls the format of image data on the wire for this transport session from the specified IOB.
|
||
Then the client transfers the image data from the server IOB to its buffer through one or more
|
||
transport calls (XIEP_GET_TILE or XIEP_GET_STREAM).
|
||
Due to size limitations on protocol messages and/or client preferences, transport may involve
|
||
one or many transport protocol function invocations.
|
||
|
||
|
||
|
||
|
||
7–18 REQUESTS AND REPLIES
|
||
7.3.1.2 Transport Modes
|
||
Image data transport is divided into two modes: random access tiled, and sequential access
|
||
stream.
|
||
Random access tiled transport is designed to allow exchange of uncompressed tiles of image
|
||
data between client buffer and IOB. The client specifies both tile size and IOB relative location
|
||
on a transport function call basis. Tiles may be as small as a single pixel, or as large as the
|
||
transport protocol message can handle.
|
||
Sequential access stream transport is designed to allow exchange of either uncompressed
|
||
image data or compressed image code information in a sequential stream format. No random
|
||
access is allowed in this mode.
|
||
The use of image data compression in sequential access stream transport involves a tradeoff
|
||
between processing and communications bandwidth. The availability of processing power (in-
|
||
cluding specialized compression/decompression engines), and the available bandwidth between
|
||
client and server should both factor into the choice between compressed and uncompressed
|
||
image data transport.
|
||
When compression is used with sequential access stream mode, image code information rather
|
||
than image data is transported. The image can be recovered (with varying degrees of fidelity
|
||
based upon the compression scheme) from the code information. The code information and
|
||
transport both depend upon the compression scheme.
|
||
Client to server image data transport may occur to either a preexisting or a newly created
|
||
IOB. As data arrives (uncompressed tiles, uncompressed stream, or compressed data which
|
||
the server immediately decompresses), it overlays the initial data (default value = zero, or
|
||
prior image). No combination of transport data (image data or code information) with pre-
|
||
existing IOB data other than simple overwrite is provided. This does not exclude complex
|
||
assembly of IOB data through transport (such as aggregating and assembling bit planes in
|
||
Bit_Interleaved_by_Plane format).
|
||
Both tile and stream (uncompressed and compressed) transport are applicable to all classes
|
||
of digital images (bitonal, continuous tone monochromatic or gray scale, and continuous tone
|
||
polychromatic or color).
|
||
|
||
7.3.1.3 Transport Data Formats
|
||
Whether random access tile or sequential access stream (uncompressed or compressed) trans-
|
||
port will be used, the client must choose between three underlying PCM data organizations:
|
||
Band_Interleaved_by_Pixel, Band_Interleaved_by_Plane, and Bit_Interleaved_by_Plane (see
|
||
appendix for details). These data organizations define how the bits which represent the
|
||
various spectral bands are organized.
|
||
In tile and stream uncompressed transport, this PCM format describes the actual data trans-
|
||
port wire format. In stream compressed mode, compression is applied to the data after it is
|
||
organized in one of the three ways. When transporting image data in the stream compressed
|
||
mode, the client must choose the compression scheme. The valid combinations of compression
|
||
schemes and underlying image data organizations are discussed below.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–19
|
||
The transport functions which follow refer to a concept known as the "data plane" , or simply
|
||
"plane". In fact, the atomic transport functions do not concern themselves with the meaning
|
||
of the image data (at the level of it being a bitonal image, or a grayscle image, or a color
|
||
image), but rather, they concern themselves with the assembly/disassembly of image data
|
||
into transport buffers, and compression. The mapping between "types of images" (bitonal,
|
||
continuous tone monochromatic, and continuous tone color), component space organization
|
||
(band-interleaved-by-pixel, band-interleaved-by-plane, bit-interleaved-by-plane), and planes is
|
||
as follows: ** tbs - table **
|
||
In any case, only positive integral values (image data or bit string codes) flow across the wire.
|
||
There is no provision for exchange of negative integral image data, real valued (float) image
|
||
data or complex valued image data on the wire even though such data (real valued) may exist
|
||
on the server (see server data model). In terms of either client->server or server->client image
|
||
data transport, the server side IOB must be of state constrained.
|
||
Flexibility in overall transport mode (tile or stream), underlying image type (bitonal monochro-
|
||
matic, continuous tone monochromatic or gray scale, and continuous tone trichromatic
|
||
or color), underlying PCM image data organization (band_interleaved_by_pixel, band_
|
||
interleaved_by_plane, and bit_interleaved_by_plane), stream mode compression scheme (PCM,
|
||
G4, DCT), and all or single plane at a time transport leads to an enormous number of possible
|
||
transport configurations. Fortunately, some image data organizations are identical (degener-
|
||
ate) for some image types, and some compression schemes are inapplicable for some image
|
||
data organizations. The following table is intended to give the reader an overview of the valid
|
||
transport configurations. The all or single plane option is left out of the table and dealt with
|
||
explicitly in the transport functions themselves. Degenerate image data organizations are
|
||
grouped by surrounding brackets {}.
|
||
|
||
MODE IMAGE_TYPE IMAGE_ORGANIZATION COMPRESSION
|
||
Tile
|
||
Bitonal {band_interleaved_by_pixel n/a
|
||
band_interleaved_by_plane
|
||
bit_interleaved_by_plane}
|
||
Grayscale {band_interleaved_by_pixel n/a
|
||
band_interleaved_by_plane}
|
||
{bit_interleaved_by_plane} n/a
|
||
Color {band_interleaved_by_pixel} n/a
|
||
{band_interleaved_by_plane} n/a
|
||
{bit_interleaved_by_plane} n/a
|
||
Stream
|
||
Bitonal {band_interleaved_by_pixel PCM, G4
|
||
band_interleaved_by_plane
|
||
bit_interleaved_by_plane}
|
||
Grayscale {band_interleaved_by_pixel PCM, DCT
|
||
band_interleaved_by_plane}
|
||
{bit_interleaved_by_plane} PCM
|
||
Color {band_interleaved_by_pixel} PCM, DCT
|
||
{band_interleaved_by_plane} PCM, DCT
|
||
{bit_interleaved_by_plane} PCM
|
||
|
||
|
||
|
||
|
||
7–20 REQUESTS AND REPLIES
|
||
Note that while DCT compression of bitonal image data is possible, and both G4 and DCT
|
||
compression of bit_interleaved_by_plane data of grayscale and color images is possible, neither
|
||
are proposed at this time. The need for and value of these schemes will be considered in the
|
||
future.
|
||
|
||
7.3.1.4 Transport Granularity & Atomicity
|
||
Both the tile and stream (uncompressed and compressed) transport protocol functions are
|
||
limited in terms of the amount of data they can move by the length field in the standard
|
||
(core X11) protocol message. As images (in a client’s buffer or in a server IOB) may be much
|
||
larger than the length field limit, it may require multiple transport protocol calls to move the
|
||
complete image across the wire.
|
||
The extension protocol transport functions allow the client to construct or assemble all of the
|
||
data which will make up a single image (IOB) with multiple transport requests. In particular,
|
||
there is a "final" flag in both tile and stream (uncompressed and compressed) transport
|
||
protocol functions which is used to signal completion of transport and assembly of the data
|
||
which makes up an image. In the case of tile image data transport, this flag is used when
|
||
the client has populated through transport all tiles it wishes to in the IOB. In the case of
|
||
stream (uncompressed or compressed) image data or code information transport, this flag is
|
||
used when the client has sent the last sequential stream of image data or code information. In
|
||
the tile case, a single flag applies to all planes, while in the stream case, a separate final flag
|
||
applies to each plane.
|
||
The transport parameters associated with an IOB (XIEP_SET_TRANSPORT) are locked
|
||
during transport of intermediate (non final) segments. In other words, once transport to or
|
||
from an IOB begins, the client can not modify the transport parameters until a final transport
|
||
(final flag = true) occurs.
|
||
The client has control over the size of each transport request, and may change the size on
|
||
a request by request basis. This is intended to support applications which may be acquir-
|
||
ing/disposing of image data (from disks or networks) in small pieces (including due to highly
|
||
limited virtual address space / physical memory space), as well as applications making use of
|
||
X Image Extension Pipelines where transport is part of the pipe (such as rapid interleaved
|
||
transport-rendition-display). This is also due to the fact that maximum size of X11 wire
|
||
packets may often be smaller than the image to be transported.
|
||
In all cases, only individual transport protocol requests are atomic. The transport of of all
|
||
image data/information that makes up an IOB may or may not be atomic depending upon
|
||
whether it requires multiple transport protocol requests. The image data which arrives on the
|
||
server (client->server) and is placed into an IOB is not locked in any way and may be accessed
|
||
by other server functions (interleaved between the transport functions). While this is the
|
||
case, the actual presence of image data in the IOB (versus residing in intermediate transport
|
||
buffers awaiting repacking or decompression) is indeterminate until the final flag is set, and
|
||
applying server operations to the IOB may generate indeterminate results. The only acception
|
||
to this is pipelines which have transport as their first element.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–21
|
||
7.3.1.5 Synchronization
|
||
Like all other image extension protocol functions, transport protocol functions are asyn-
|
||
chronous - the client initiates them and does not wait for their completion.
|
||
|
||
7.3.2 Set Transport Context
|
||
XIEP_SET_TRANSPORT
|
||
iob_id XIT_IOB
|
||
compression-param CARD32
|
||
compression-scheme XIT_COMPRESSION_SCHEME
|
||
tile_format BOOL
|
||
component-space-organization XIT_COMPONENT_SPACE_ORGANIZATION
|
||
plane_mask CARD32
|
||
plane_information LISTofPLANE_DATA
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, MATCH
|
||
events: none
|
||
|
||
where:
|
||
PLANE_DATA is:
|
||
[
|
||
pixel-stride CARD8
|
||
scanline-stride CARD32
|
||
]
|
||
|
||
XIEP_SET_TRANSPORT is used to establish the necessary transport context information
|
||
before image data wire transport can occur between a client buffer and a particular server
|
||
IOB.
|
||
Iob_id is the id of an existing IOB (either newly created by XIEP_CREATE_RESOURCE
|
||
or preexisting) which will serve as the source of or destination for image data transport.
|
||
Compression_param is a compression parameter to be used by the various compression
|
||
schemes. In particular, it is used to control the compression factor / fidelity tradeoff in DCT
|
||
compression when reading compressed data from the server to the client. Compression_scheme
|
||
is one of the valid compression schemes. In tiled transport, compression scheme must be set
|
||
to PCM. In stream transport, it may be any of the compression schemes including PCM (see
|
||
table in previous section and appendix). Tile_format is a boolean which is used to indicate if
|
||
tile or stream transport is to occur. Component_space_organization describes the PCM format
|
||
of the image data (independent of whether tile uncompressed, stream uncompressed, or stream
|
||
compressed image data transport will occur).
|
||
Plane_mask identifies which planes will be transported where the definition of a data plane
|
||
depends upon the component_organization. Plane_information is a list with one entry per
|
||
plane. Each entry in the list contains, pixel-stride and scanline-stride. Scanline_stride is only
|
||
meaningful in uncompressed stream transport and must be set equal to the number of bits
|
||
per scanline plus the number of pad bits between scanlines. Scanline_stride is meaningless
|
||
for tiles as tile size may be changed on a transport call basis. In tile transport, within each
|
||
plane, all scanlines are bitwise abutted (no pad or alignment allowed). Multiple planes in
|
||
tile transport are longword aligned. Note that the bits-per-component information used in
|
||
|
||
|
||
|
||
7–22 REQUESTS AND REPLIES
|
||
wire transport is communicated at IOB creation time (for client-to-server transports), and
|
||
established in/derived from the IOB for server-to-client transports by use of the constraint
|
||
mechanism. For more details on compression-scheme, component-space-organization, bits-per-
|
||
component, pixel-stride, and scanline-stride see the appendix on image data attributes and
|
||
organization.
|
||
The image data wire transport context is bound to a particular IOB for the duration of an
|
||
image data wire transport session. The binding is established by XIEP_SET_TRANSPORT.
|
||
The transport context information for the particular IOB is locked when the first image data
|
||
wire transport function is invoked (XIEP_GET_TILE, XIEP_PUT_TILE, XIEP_GET_STREAM,
|
||
XIEP_PUT_STREAM) and remains locked until the transport session involving this IOB is
|
||
completed. This occurs when an image data wire transport function is invoked with "final" flag
|
||
set to true or when transport is aborted (XIEP_ABORT_TRANSPORT).
|
||
Note that the transport context information pertains to image data organization only during
|
||
wire transport. It has no bearing upon the server IOB image data organization as server’s are
|
||
free to chose their own image data organizations.
|
||
If the iob_id does not exist, an IDChoice error occurs. If the IOB’s number_of_spectral_
|
||
components does not match the length of the component_information list, or the tile_format
|
||
boolean is true and compression_scheme is not PCM, a MATCH error occurs.
|
||
|
||
7.3.3 Tile Data Transport
|
||
Tile data transport allows a client to transport tiles of image data between a client buffer
|
||
and an existing IOB. The client controls tile size, its IOB location, and which data planes to
|
||
transport. Only uncompressed data may be transported.
|
||
|
||
7.3.3.1 Client–>Server
|
||
XIEP_PUT_TILE
|
||
iob_id XIT_IOB
|
||
x CARD32
|
||
y CARD32
|
||
width CARD32
|
||
height CARD32
|
||
plane_mask CARD32
|
||
final BOOL
|
||
image_data XIT_IDATA
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, MATCH, ACCESS
|
||
events: none
|
||
|
||
XIEP_PUT_TILE transfers an uncompressed image data tile from a client buffer across the
|
||
wire into a server IOB. The client specifies both the tile size and its destination location in
|
||
the receiving IOB. The IOB must exist and the transport context be previously established
|
||
(XIEP_SET_TRANSPORT).
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–23
|
||
IOB_id is the id of the receiving IOB. X and y specify the upper left hand corner (in IOB
|
||
coordinates) of the destination location. Height and width specify the tile size. Plane_mask
|
||
identifies which data planes are being sent. Final is a boolean which indicates if all IOB data
|
||
(all tiles) have been sent. Image_data is the data segment to be transported from client to
|
||
server.
|
||
|
||
Bitonal Monochromatic
|
||
Transport of bitonal monochromatic image data always occurs in the same fashion (Band_
|
||
Interleaved_by_Pixel, Band_Interleaved_by_Plane, and Bit_Interleaved_by_Plane are all
|
||
degenerate). In this case, the client buffer is simply an array of bits, one per pixel.
|
||
|
||
Continuous Tone Monochromatic - Pixel Aggregated
|
||
Transport of continuous tone monochromatic image data can occur in two fashions: by Band_
|
||
Interleaved_by_Pixel and Band_Interleaved_by_Plane which are degenerate, or by Bit_
|
||
Interleaved_by_Plane. As there is only one spectral band, the image data organization in
|
||
the client buffer for the first case is simply an array of pixels, n bits per pixel.
|
||
|
||
Continuous Tone Monochromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode transport of continuous tone monochromatic image
|
||
data, the client has the option of sending a tile from one through n data planes. If more than
|
||
one plane is to be transported, the planes must abut each other (long word alignment of the
|
||
planes) in the client’s buffer.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Pixel
|
||
Transport of continuous tone polychromatic image data can occur in any of the three formats:
|
||
Band_Interleaved_by_Pixel, Band_Interleaved_by_Plane, and Bit_Interleaved_by_Plane. In
|
||
the Band_Interleaved_by_Pixel mode the client buffer is once again simply an array of pixels,
|
||
n bits per pixel, where the r-g-b bits make up the total n. No option exists regarding sending
|
||
a single bit plane or spectral band.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Plane
|
||
In the Band_Interleaved_by_Plane mode, the client has the option of sending a tile from one
|
||
through n (max 3) spectral bands. If more than one data plane (band in this case) is to be
|
||
transported, they must abut each other (long word alignment of the planes) in the client’s
|
||
buffer.
|
||
|
||
Continuous Tone Polychromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode, the client has the option of sending one through n data
|
||
planes (each data plane is now a bit plane). If more than one data plane (bit plane in this
|
||
case) is to be transported, they must abut each other (long word alignment of the planes) in
|
||
the client’s buffer.
|
||
Specifying a non existent IOB generates an IDChoice error. Specifying an IOB which is
|
||
unconstrained generates a MATCH error. A mismatch between the receiving IOB’s component-
|
||
space-organization and the current transport context’s component-space-organization (ie.
|
||
trying to send an rgb color image over the wire into a monochrome IOB) generates a MATCH
|
||
|
||
|
||
|
||
7–24 REQUESTS AND REPLIES
|
||
error. Attempts to transport to an IOB which has not had a transport context established
|
||
(XIEP_SET_TRANSPORT) generates an ACCESS error.
|
||
|
||
7.3.3.2 Server–>Client
|
||
XIEP_GET_TILE
|
||
iob_id XIT_IOB
|
||
x CARD32
|
||
y CARD32
|
||
width CARD32
|
||
height CARD32
|
||
plane_mask CARD32
|
||
final BOOL
|
||
=>
|
||
image_data XIT_IDATA
|
||
service class value: 0
|
||
errors: IDChoice, MATCH, ACCESS
|
||
events: none
|
||
|
||
XIEP_GET_TILE transfers an uncompressed image data tile from a server IOB across the
|
||
wire into a client buffer. The client specifies both the tile size and its source location in the
|
||
sending IOB. The IOB must be preexisting, and the transport context previously established
|
||
(XIEP_SET_TRANSPORT).
|
||
IOB_id is the id of the sending IOB. X and y specify the upper left hand corner (in IOB
|
||
coordinates) of the sending location. Height and width specify the tile size. Plane_mask
|
||
identifies which data planes are being requested. Final is a boolean which indicates if all IOB
|
||
data (the final tile) has been asked for. Image_data is the data segment received from the
|
||
server.
|
||
|
||
Bitonal Monochromatic
|
||
Transport of bitonal monochromatic image data always occurs in the same fashion (Band_
|
||
Interleaved_by_Pixel, Band_Interleaved_by_Plane, and Bit_Interleaved_by_Plane are all
|
||
degenerate). In this case, the client buffer will be an array of bits, one per pixel.
|
||
|
||
Continuous Tone Monochromatic - Aggregated
|
||
Transport of continuous tone monochromatic image data can occur in two fashions: by Band_
|
||
Interleaved_by_Pixel and Band_Interleaved_by_Plane which are degenerate, or by Bit_
|
||
Interleaved_by_Plane. As there is only one spectral band, the image data organization in
|
||
the client buffer for the first case is simply an array of pixels, n bits per pixel.
|
||
|
||
Continuous Tone Monochromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode transport of continuous tone monochromatic image
|
||
data, the client has the option of receiving a tile from one through n data planes. If more than
|
||
one plane is to be transported, the planes must abut (long word alignment of planes) in the
|
||
client’s buffer.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Pixel
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–25
|
||
Transport of continuous tone polychromatic image data can occur in any of the three formats:
|
||
Band_Interleaved_by_Pixel, Band_Interleaved_by_Plane, and Bit_Interleaved_by_Plane. In
|
||
the Band_Interleaved_by_Pixel mode the client buffer is once again simply an array of pixels,
|
||
n bits per pixel, where the r-g-b bits make up the total n. No option exists regarding receiving
|
||
a single bit plane or spectral band.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Plane
|
||
In the Band_Interleaved_by_Plane mode, the client has the option of receiving a tile from
|
||
one through n (max 3) spectral bands. If more than one data plane (band in this case) is to
|
||
be transported, they will abut each other (long word alignment of the planes) in the client’s
|
||
buffer.
|
||
|
||
Continuous Tone Polychromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode, the client has the option of receiving one through n
|
||
data planes (each data plane is now a bit plane). If more than one data plane (bit plane in this
|
||
case) is to be transported, they will abut each other (long word alignment of the planes) in the
|
||
client’s buffer.
|
||
Specifying a non existent IOB generates an IDChoice error. Specifying an IOB which is
|
||
unconstrained generates a MATCH error. A mismatch between the sending IOB’s component-
|
||
space-organization and the current transport context’s component-space-organization generates
|
||
a MATCH error. Attempts to transport from an IOB which has not had a transport context
|
||
established (XIEP_SET_TRANSPORT) generates an ACCESS error.
|
||
|
||
7.3.4 Stream Data Transport
|
||
Stream data transport allows a client to stream image data or image code information (com-
|
||
pressed image data) between a client buffer and a new (PUT) or existing (GET) IOB. In the
|
||
case of image code information (compressed image data), the server compress/decompress
|
||
step is hidden (happens without client intervention). The client controls both the compression
|
||
format and the length of stream data. Unlike tile transport, only one data plane may be trans-
|
||
ported with each stream transport protocol request. Note that this does not prevent clients
|
||
from interleaving stream transport of different planes. For stream transport, the data can
|
||
only be sent/received in sequential (raster) order - no random access is possible.
|
||
Note that unlike tile transport, in stream transport image data or image code information
|
||
is being sent sequentially, and not image data tiles randomly. This data or information is in
|
||
essence aggregated sequentially into one or more buffers and then, if necessary, decompressed
|
||
to produce the image data. Particulars of decompression on the server side of the wire depend
|
||
upon both the compression scheme involved and the server implementation (ie. G4 decompres-
|
||
sion may be conducted as code information arrives as may DCT decompression, or the server
|
||
may chose to wait for the complete code information to be available before decompression).
|
||
|
||
|
||
|
||
|
||
7–26 REQUESTS AND REPLIES
|
||
7.3.4.1 Client–>Server
|
||
XIEP_PUT_STREAM
|
||
iob_id XIT_IOB
|
||
byte_count CARD32
|
||
final BOOL
|
||
plane_num CARD8
|
||
image_data XIT_IDATA
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, MATCH, ACCESS
|
||
events: none
|
||
|
||
XIEP_PUT_STREAM transfers image data or image code information (compressed image
|
||
data) from a client buffer across the wire into a server IOB. If image code information is
|
||
transported, it is decompressed into image data before being placed in the IOB. The IOB
|
||
must be newly created (XIEP_CREATE_RESOURCE), and the transport context previously
|
||
established (XIEP_SET_TRANSPORT).
|
||
IOB_id is the id of the receiving IOB. Byte_count specifies the number of bits of valid image
|
||
data or code information in the buffer. Final is a boolean which indicates if all image data or
|
||
code information has been sent. Plane_num identifies which bit plane is being sent. Image_
|
||
data is the image data or image code information (compressed image data) to be transported
|
||
from client to server.
|
||
|
||
Bitonal Monochromatic
|
||
Transport of bitonal monochromatic image data or image code information (compressed image
|
||
data) always occurs in the same fashion (Band_Interleaved_by_Pixel, Band_Interleaved_by_
|
||
Plane, and Bit_Interleaved_by_Plane are all degenerate). In the stream uncompressed (PCM)
|
||
mode, the client buffer is simply an array of butted data bits (1 bit per pixel). In the stream
|
||
compressed mode (G4) the client buffer is an array of butted code bit strings.
|
||
|
||
Continuous Tone Monochromatic - Pixel Aggregated
|
||
Transport of continuous tone monochromatic image data or image code information (com-
|
||
pressed image data) can occur in two fashions: by Band_Interleaved_by_Pixel and Band_
|
||
Interleaved_by_Plane which are degenerate, or by Bit_Interleaved_by_Plane. In the first case,
|
||
for stream uncompressed (PCM) mode, the client buffer is simply an array of butted data bits
|
||
(n bits per pixel). In the stream compressed mode (DCT) the client buffer is an array of butted
|
||
code bit strings.
|
||
|
||
Continuous Tone Monochromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode transport of continuous tone monochromatic image
|
||
data or image code information (compressed image data), the client may only send image data
|
||
or image code information (compressed image data) from one data plane (bit plane) in each
|
||
transport call. In the stream uncompressed (PCM) mode, the bit plane in the client’s buffer is
|
||
simply an array of butted data bits. In the stream compressed mode (G4) the client buffer is
|
||
an array of butted code bit strings.
|
||
|
||
Continuous Tone Polychromatic
|
||
|
||
|
||
REQUESTS AND REPLIES 7–27
|
||
Transport of continuous tone polychromatic image data or image code information (compressed
|
||
image data) can occur in three formats: Band_Interleaved_by_Plane, Bit_Interleaved_by_
|
||
Plane, and Band_Interleaved_by_Pixel.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Pixel
|
||
In the Band_Interleaved_by_Pixel mode, uncompressed image data or image code information
|
||
(compressed image data) for all bands is sent.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Plane
|
||
In the Band_Interleaved_by_Plane mode, the client has the option of sending image data or
|
||
image code information (compressed image data) for any one plane (spectral band) In the
|
||
stream uncompressed (PCM) mode, the band in the client’s buffer is simply an array of butted
|
||
data bits. In the stream compressed mode (DCT) the client buffer is an array of butted code
|
||
bit strings for the particular band.
|
||
|
||
Continuous Tone Polychromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode, the client has the option of sending image data or
|
||
image code information (compressed image data) from any one data plane (bit plane). In the
|
||
stream uncompressed (PCM) mode, the bit plane in the client’s buffer is simply an array of
|
||
butted data bits (1 per pixel). In the stream compressed mode (G4) the client buffer is an
|
||
array of butted code bit strings.
|
||
Specifying a non existent IOB generates an IDChoice error. Specifying an IOB which is
|
||
unconstrained generates a MATCH error. A mismatch between the receiving IOB’s component-
|
||
space-organization and the current transport context’s component-space-organization (ie.
|
||
trying to send an rgb color image over the wire into a monochrome IOB) generates a MATCH
|
||
error. Attempts to transport from an IOB which has never had a transport context established
|
||
(XIEP_SET_TRANSPORT) generates an ACCESS error.
|
||
|
||
7.3.4.2 Server–>Client
|
||
XIEP_GET_STREAM
|
||
iob_id XIT_IOB
|
||
max_bytes CARD32
|
||
plane_num CARD8
|
||
=>
|
||
final BOOL
|
||
byte_count CARD32
|
||
image_data XIT_IDATA
|
||
service class value: 0
|
||
errors: IDChoice, MATCH, ACCESS
|
||
events: none
|
||
|
||
XIEP_GET_STREAM transfers image data or image code information (compressed image data)
|
||
from a server IOB across the wire to a client buffer. In compressed mode, the server extracts
|
||
image data from the IOB and compresses it before putting it on the wire. The IOB must be
|
||
preexisting, and the transport context previously established (XIEP_SET_TRANSPORT).
|
||
IOB_id is the id of the sending IOB. Max_bytes is the maximum number of bytes the client is
|
||
prepared to receive (typically buffer size). Plane_num identifies which bit plane is to be sent.
|
||
|
||
|
||
7–28 REQUESTS AND REPLIES
|
||
Final is a boolean which indicates if all image data or code information has been sent. Byte_
|
||
count specifies the number of bytes of valid image data or code information in the buffer.
|
||
Image_data is the image data or image code information (compressed image data) which has
|
||
bene transported from server to client.
|
||
|
||
Bitonal Monochromatic
|
||
Transport of bitonal monochromatic image data or image code information (compressed image
|
||
data) always occurs in the same fashion (Band_Interleaved_by_Pixel, Band_Interleaved_by_
|
||
Plane, and Bit_Interleaved_by_Plane are all degenerate). In the stream uncompressed (PCM)
|
||
mode, the client buffer will contain an array of butted data bits (1 bit per pixel). In the stream
|
||
compressed mode (G4) the client buffer will contain an array of butted code bit strings.
|
||
|
||
Continuous Tone Monochromatic - Pixel Aggregated
|
||
Transport of continuous tone monochromatic image data or image code information (com-
|
||
pressed image data) can occur in two fashions: by Band_Interleaved_by_Pixel and Band_
|
||
Interleaved_by_Plane which are degenerate), or by Bit_Interleaved_by_Plane. In the first
|
||
case, in the stream uncompressed (PCM) mode, the client buffer will be an array of butted
|
||
data bits (n bits per pixel). In the stream compressed mode (DCT) the client buffer will be an
|
||
array of butted code bit strings.
|
||
|
||
Continuous Tone Monochromatic - Bit Interleaved by Plane
|
||
In the Bit_Interleaved_by_Plane mode transport of continuous tone monochromatic image
|
||
data or image code information (compressed image data), the client has the option of receiving
|
||
the image data or image code information (compressed image data) from one bit plane. In
|
||
the stream uncompressed (PCM) mode, each bit plane in the client’s buffer will be an array
|
||
of butted data bits. In the stream compressed mode (G4) the client buffer will be an array of
|
||
butted code bit strings.
|
||
|
||
Continuous Tone Polychromatic
|
||
Transport of continuous tone polychromatic image data or image code information (compressed
|
||
image data) can occur in three formats: Band_Interleaved_by_Plane, Bit_Interleaved_by_
|
||
Plane, and Band_Interleaved_by_Pixel.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Pixel
|
||
In the Band_Interleaved_by_Pixel mode, uncompressed image data or image code information
|
||
(compressed image data) for all bands is sent.
|
||
|
||
Continuous Tone Polychromatic - Band Interleaved by Plane
|
||
In the Band_Interleaved_by_Plane mode, the client has the option of receiving image data or
|
||
image code information (compressed image data) from one spectral band (all_planes false). In
|
||
the stream uncompressed (PCM) mode, each band in the client’s buffer is simply an array of
|
||
butted data bits. In the stream compressed mode (DCT) the client buffer will be an array of
|
||
butted code bit strings.
|
||
|
||
Continuous Tone Polychromatic - Bit Interleaved by Plane
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–29
|
||
In the Bit_Interleaved_by_Plane mode, the client has the option of receiving image data or
|
||
image code information (compressed image data) from one bit plane. In the stream uncom-
|
||
pressed (PCM) mode, each bit plane in the client’s buffer will be an array of butted data bits
|
||
(1 per pixel). In the stream compressed mode (G4) the client buffer will be an array of butted
|
||
code bit strings.
|
||
Specifying a non existent IOB generates an IDChoice error. Specifying an IOB which is
|
||
unconstrained generates a MATCH error. A mismatch between the receiving IOB’s component-
|
||
space-organization and the current transport context’s component-space-organization (ie.
|
||
trying to send an rgb color image over the wire into a monochrome IOB) generates a MATCH
|
||
error. Attempts to transport from an IOB which has never had a transport context established
|
||
(XIEP_SET_TRANSPORT) generates an ACCESS error.
|
||
|
||
7.3.5 Abort Transport
|
||
XIEP_ABORT_TRANSPORT
|
||
iob_id XIT_IOB
|
||
plane_mask CARD32
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: none
|
||
events: none
|
||
|
||
XIEP_ABORT_TRANSPORT is used to abort wire transport before a final flag is sent.
|
||
IOB_ID is the id of the IOB which is the source of (server->client) or the destination for (client-
|
||
>server) image data and to/from which image data is being transported. Plane_mask is a bit
|
||
mask with one bit per image plane. Image transport may be aborted on a per plane basis.
|
||
When the server receives an abort request, all image data which is in intermediate buffers
|
||
(not yet sent, or not yet overlaid onto the IOB) is deleted, and the final flag is set for that
|
||
plane.
|
||
There is no return value from XIEP_ABORT_TRANSPORT, and no possible errors.
|
||
|
||
|
||
|
||
|
||
7–30 REQUESTS AND REPLIES
|
||
7.4 Process Services
|
||
|
||
Process services provide for the application of low level image operators to image data primar-
|
||
ily in support of preparation for or improvement of its display. These functions take one or
|
||
more input operands including existing image objects, and produce a two dimensional array
|
||
of data which can be treated as either a new (modified or enhanced) image object, or a control
|
||
plane for other operations. As such, process services can be consider as "image in –> image
|
||
out" functions.
|
||
Many process protocol functions take a constant as one of the image operands. This constant
|
||
is a shorthand format for an image object of constant value. The server in essence constructs
|
||
a "logical" image object whose value is equal to the specified constant at all locations, and
|
||
whose extent is sufficient for the operation at hand (typically identical in size to the other
|
||
"physical" image operand). These "constant image objects" are temporary entities which exist
|
||
only during the operation and can not be referenced by the client outside of the operation.
|
||
"Constant" images are cast by the server as type constrained or unconstrained as the situation
|
||
demands.
|
||
All process services take an image domain control context (either a region of interest {ROI} or
|
||
a control processing plane {CPP}) and operate on the pixels identified by the domain control
|
||
context. The resulting image object is identical in size to either the subset of the input image
|
||
defined by an ROI type IDC, or to the original image object if a CPP type IDC is used. In the
|
||
latter case, the output image data is valid only at the points specified by the CPP. Data at all
|
||
other points is unpredictable.
|
||
Constrained and unconstrained model operation is particularly relevant to process services.
|
||
Each subsection of the process services section contains a paragraph which outlines con-
|
||
strained and unconstrained modes of operation. Individual functions note exceptions to the
|
||
overall comments. Where a function can only accept and produce constrained image data, this
|
||
is noted and no "constrained" control boolean is provided. Where the option does exist, the
|
||
protocol function includes a "constrained" control boolean which informs the server to apply
|
||
the default constraint model and produce constrained output.
|
||
Process services can be applied to mono and polychromatic (rgb) images. In general, the func-
|
||
tions will accept lists of parameters (one entry per spectral component), and will operate on
|
||
each of the three spectral components (r, g, b) as if they were three separate IOB’s. Different
|
||
parameter values per spectral component are possible . Clients who wish to operate only on a
|
||
single spectral component may be able to set parameter values in certain cases to make this
|
||
happen. If not, clients have the option of expanding the spectral components into separate
|
||
images, operating individually on the components, and then recombining them. Exceptions
|
||
are noted on a function by function basis.
|
||
While control over protocol implementation (server design) is out of the realm of this specifi-
|
||
cation, its is the author’s intent to limit processing to spatial domain techniques (vs spatial
|
||
frequency) at this time. As such, the protocol does not support the definition or communication
|
||
of spatial frequency domain (such as Fourier) data (including images and filters), or spatial
|
||
frequency domain processes.
|
||
Processing services are segmented into the following categories and include the following
|
||
functions:
|
||
• Point Processing
|
||
|
||
|
||
REQUESTS AND REPLIES 7–31
|
||
• Area Processing
|
||
• Ensemble Processing
|
||
• Geometric Processing
|
||
• Radiometric Processing
|
||
|
||
|
||
|
||
|
||
7–32 REQUESTS AND REPLIES
|
||
7.4.1 Point Processing
|
||
Point processing allows a client to apply a client specified transfer function to remap an
|
||
input pixel value to an output pixel value with no dependency upon surrounding (area) input
|
||
pixels. Point processing can decrease, preserve, or increase the number of bits per pixel per
|
||
component (gray->b&w, b&w->b&w, b&w->gray) and preserve or increase the number of
|
||
spectral components (mono->mono, color->color, mono->color). Typically, it is used for gray
|
||
scale luminance transforms (gray->gray), simple color remapping (color->color), and pseudo
|
||
coloring (b&w->color, gray->color). While a color image can be remapped into another color
|
||
image with equal r-g-b values on a per pixel basis and result in a "gray scale" display, the
|
||
underlying data remains multispectral.
|
||
XIEP_POINT
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
idc XIT_IDC
|
||
new_quantum ListofCARD8
|
||
transfer_function ListofListofCARDnn
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, VALUE,MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_POINT creates a new server IOB from an existing server IOB by remapping each input
|
||
IOB value into a new output IOB value. The output value depends solely upon the input pixel
|
||
value (no source area dependency). The function is designed to allow the client to apply a
|
||
client specified transfer function.
|
||
IOB_id1 is the id of the source image object. IOB_id2 is the client specified id to be assigned
|
||
to the newly created (resulting) image object. Idc controls the subset of the image which will
|
||
be operated upon. Transfer_function is a list of what are in essence look up tables - one per
|
||
output spectral component. Each one must be long enough so that all potential values of
|
||
the input can be used as an index into the table. New_quantum is a list (one per spectral
|
||
component) of the number of bits per pixel (per spectral component) of the resulting value
|
||
which derives from the look up table. This allows the transfer function to both modify image
|
||
data values, and bits per pixel per spectral component. If the input IOB is monochromatic and
|
||
the client specifies one transfer_function, the output will also be monochromatic. If the input
|
||
is monochromatic and the user specifies 3 transfer_functions, the output will be trichromatic.
|
||
The input IOB must be constrained, and the output IOB is constrained. The input image
|
||
object may be either mono or poly chromatic. The output image object will at least be mono
|
||
chromatic, but may be promoted to poly chromatic as discussed above.
|
||
XIEP_POINT operates on the subset of the input image defined by the IDC. If the IDC is of
|
||
type CPP, the output image object is equal in size to that of the input image object, but valid
|
||
only at those points defined by the CPP. If IDC is of type ROI, the output image object is less
|
||
than or equal to the size of the input image object.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–33
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. An out of range new quantum value generates a VALUE error.
|
||
Specification of an rgb input IOB and a single transfer_function results in a MATCH error as
|
||
does specification of an unconstrained input IOB.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
7–34 REQUESTS AND REPLIES
|
||
7.4.2 Area Processing
|
||
Area processing produces a data response at each pixel based upon area operations at and
|
||
around the source pixel. The data response array may be considered to be an image and is
|
||
stored as an IOB.
|
||
Area processing takes a single input image object operand, a single input IDC operand of type
|
||
ROI or CPP, a single input IDC operand of type TMP, and produce a single image object output
|
||
operand. The value of the output image object at each point [selected by the IDC of type ROI
|
||
or CPP], is determined in a similar fashion for each areawise operation:
|
||
1. The pointwise arithmetic combination (sum, product) of the TMP
|
||
coefficient and the source image operand are taken (this produces
|
||
a 2d array of coefficients some of which may intentionally be
|
||
undefined - ie. potential for small size, and / or sparce population).
|
||
|
||
2. An algebraic operator is applied to this data (sum, minimum, maximum)
|
||
which reduces the two dimensional array to a single value (addition
|
||
adds up all of these values, minimum and maximum select the minimum
|
||
and maximum values respectively.
|
||
|
||
Note that the most familiar of these area operations is implemented as a pointwise (across the
|
||
area) product, followed by an area summation. This is the normal convolution process.
|
||
The location (overlay or registration) of the template relative to the image point in question
|
||
is established by the template’s "centering" parameter (see XIEP_CREATE_IDC description of
|
||
templates).
|
||
XIEP_AREA
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
idc_c XIT_IDC {ROI,CPP}
|
||
idc_t XIT_IDC {TMP}
|
||
operation1 XIT_AREA_OP1
|
||
operation2 XIT_AREA_OP2
|
||
constrain BOOL
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_AREA performs generalized area functions including additive and multiplicative,
|
||
minimization, maximization, and summation. In particular, it adds or multiplies the TMP
|
||
contents to the image contents on a pointwise basis and then minimizes, maximizes (selects
|
||
the minimum or maximum), or sums the results.
|
||
IOB_id1 is the source image object. IDC_c (ROI, CPP) controls the subregion to which the
|
||
overall process is applied. IDC_t (TMP) contains the area coefficients and controls the subset
|
||
of the source image surrounding the current pixel to which the process applies. IOB_id2 is
|
||
the client specified id to be assigned to the newly created (resulting) image object. Constrain
|
||
determines if the default constraint model will be applied upon completion.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–35
|
||
In the case where operation1 is multiplication and operation2 is summation, XIEP_AREA per-
|
||
forms generalized convolution. In particular, it convolves a user specified convolution kernel
|
||
(represented by the TMP type IDC) with the subset of the source image object producing a
|
||
new image object. IDC_t (TMP) contains the kernel coefficients and controls the subset of the
|
||
image to which the summation applies.
|
||
Note that by using the template mechanism (IDC of type TMP) both fully and partially
|
||
populated convolution kernels may be represented and applied. The convolution kernel must
|
||
be smaller in extent than the region of the image to which it will be applied. Practically, 3 x
|
||
3 and 5 x 5 convolution kernels should be considered. The process consists of multiplying the
|
||
TMP contents by the image contents on a pointwise basis, and summing the results.
|
||
The source image object must be large enough to encompass all the points identified by the
|
||
IDC.
|
||
The input image object maybe either constrained or unconstrained. If the source image is
|
||
unconstrained or the process produces a value outside of the dynamic range of the quantized
|
||
component, conversion to unconstrained occurs. If the constrain boolean is true, the constraint
|
||
model is applied producing constrained output data.
|
||
The input image object may be either mono or poly chromatic. The output image object
|
||
will be of the same type (mono or poly chromatic). As the TMP type IDC has no provision
|
||
for specification of parameters by spectral component, the same template parameters and
|
||
operation will be applied to all spectral components. Clients desiring different TMP’s per
|
||
spectral component should separate the spectral components, operate upon them separately,
|
||
and then recombine them.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
7–36 REQUESTS AND REPLIES
|
||
7.4.3 Ensemble Processing
|
||
In ensemble processing, operations are performed on pointwise basis between spatially reg-
|
||
istered points in the two image operands. The IDC is used simply to identify connected or
|
||
disconnected subregions to be used as input operand data (IDC is simply a boolean selector).
|
||
Ensemble processing is divided into four classes:
|
||
• Arithmetic
|
||
• Relational
|
||
• Logical
|
||
• Mathematical
|
||
|
||
All classes can accept and potentially produce unconstrained image data except the logical
|
||
class which will only accept and produce constrained image data. For all other classes, where
|
||
multiple images are input to the operation, if all image inputs are not the same (either
|
||
constrained or unconstrained), constrained data is promoted to unconstrained before the
|
||
operation is conducted.
|
||
In general, all ensemble services operate on either mono or poly chromatic images. For poly
|
||
chromatic images, the operations are performed on a band by band basis and the resulting
|
||
image is also poly chromatic.
|
||
|
||
7.4.3.1 Arithmetic
|
||
XIEP_ARITH
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
constant LISTofCARDnn
|
||
iob_id3 XIT_IOB
|
||
idc XIT_IDC
|
||
operator XIT_ARITH_OP
|
||
constrain BOOL
|
||
=>
|
||
none
|
||
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH, VALUE
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_ARITH performs arithmetic functions (add, subtract, multiply, divide, minimum, maxi-
|
||
mum) between two image objects or between an image object and a constant (image) producing
|
||
a new image object.
|
||
IOB_id1 and iob_id2 are the two source image objects, and constant is the constant image.
|
||
When two IOB’s are involved, iob_id2 is non null and constant is ignored. If the operation
|
||
involves a constant, iob_id2 is null and constant is non null. IOB_id3 is the client specified id
|
||
to be assigned to the newly created (resulting) image object. IDC controls the subset of the
|
||
images which will be operated upon. Operator controls which arithmetic operation will be
|
||
performed between the two images or between the image and the constant (image). Constrain
|
||
determines if the default constraint model will be applied upon completion.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–37
|
||
The source image objects need not be the same size, but they must be large enough to en-
|
||
compass all the points identified by the IDC. As the IDC is IOB relative, it is the users
|
||
responsibility to ensure spatial alignment of the two IOB contents.
|
||
The input image objects maybe either constrained or unconstrained. If the operation involves
|
||
a constant image and an unconstrained IOB, the constant will be promoted to unconstrained
|
||
before the operation is performed. If either image is unconstrained or the operation produces
|
||
a value outside of the dynamic range of the quantized component, conversion to unconstrained
|
||
occurs. Thus, the resulting image object may be constrained or unconstrained. If the constrain
|
||
boolean is true, the default constraint model will be applied upon completion.
|
||
The source images must have the same number of spectral components or an error is gener-
|
||
ated. Arithmetic operations occurs on a spectral component by spectral component basis.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. Difference between source IOB’s number of spectral components
|
||
generates a MATCH error. Arithmetic failures (overflow, underflow, divide by zero) generate a
|
||
VALUE error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.3.2 Relational
|
||
XIEP_COMPARE
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
constant LISTofCARDnn
|
||
cpp LISTofXIT_IDC {CPP}
|
||
idc XIT_IDC {CPP or ROI}
|
||
operator XIT_PRED_TYPE
|
||
combine BOOL
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_COMPARE compares two image objects or an image object and a constant on a point-
|
||
wise basis and generates a CPP type IDC (boolean bitmap) which reflects the results of the
|
||
pointwise comparison. It may be used to perform either a spectral component by spectral
|
||
component comparison or a complete image (all components taken together) comparison.
|
||
IOB_id1 and iob_id2 are the two source image objects, and constant is the constant value.
|
||
When two IOB’s are involved, iob_id2 is non null and constant is ignored. If the operation
|
||
involves a constant, iob_id2 is null and constant is non null. LISTofCpp is the client assigned
|
||
id’s for the newly created control processing planes which contain the comparative results. Idc
|
||
controls the subset of the images which will be compared. Operator is the logical predicate
|
||
operator used in the comparison. Combine is a boolean which determines if the comparison
|
||
should be done on a spectral component by spectral component basis, or on an all components
|
||
basis.
|
||
|
||
|
||
|
||
|
||
7–38 REQUESTS AND REPLIES
|
||
The source image objects need not be the same size, but they must be large enough to en-
|
||
compass all the points identified by the IDC. As the IDC is IOB relative, it is the users
|
||
responsibility to ensure spatial alignment of the two IOB contents.
|
||
The input image objects maybe either constrained or unconstrained. If the operation involves
|
||
a constant image and an unconstrained IOB, the constant will be promoted to unconstrained
|
||
before the operation is performed. If the input image objects are not both constrained, both
|
||
are converted to unconstrained before comparison occurs. The source images must have the
|
||
same number of spectral components.
|
||
If the source images are monochromatic, there is only one output CPP. If the source images are
|
||
polychromatic and the combine boolean is true, there is still only one output CPP. If the source
|
||
images are polychromatic and the combine boolean is false, there are three output CPP’s.
|
||
The combine option is only meaningful for the "equal to" and "not equal" to operators. In these
|
||
cases, equality is established on a component by component basis and then ’anded’ to derive
|
||
image equality. Inequality is then simply a not of this result. These combine operations are
|
||
provided as a convenience packaging (they can easily be built using other protocol functions).
|
||
The function does not support rgb distance metrics, and so, combined less than, less than
|
||
or equal to, greater than, greater than or equal to function are not supported. Clients may
|
||
implement these by using the spectral separate, mathematic process, arithmetic process, and
|
||
relational process functions.
|
||
The output CPP has a value of 1 where ever the expression is true, and a value of 0 where it
|
||
is false or the controlling IDC prevents comparison.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.3.3 Logical
|
||
XIEP_LOGICAL
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
constant LISTofCARDnn
|
||
iob_id3 XIT_IOB
|
||
idc XIT_IDC
|
||
operator XIT_LOGICAL_OPS
|
||
=>
|
||
none
|
||
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_LOGICAL performs bitwise (logical plane wise) operations on individual images, and
|
||
between two IOB’s or an IOB and constant (image). All logical operators are pointwise, and all
|
||
produce a new image object as a result.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–39
|
||
IOB_id1 and iob_id2 are the two source image objects, and constant is the constant value.
|
||
When two IOB’s are involved, iob_id2 is non null and constant is ignored. If the operation
|
||
involves a constant (image or otherwise), iob_id2 is null and constant is non null. IOB_id3 is
|
||
the client specified id to be assigned to the newly created (resulting) image object. Idc controls
|
||
the subset of the images which will be logically combined. Operator is the logical combination
|
||
operator to be used.
|
||
In the case of the ’not’ operation, bitwise inversion is performed. In the case of ’shift_up’ and
|
||
’shift_dn’, the constant determines how many bits. Bits shifted in are zero filled.
|
||
The source images must have the same number of spectral components. Combining (and, or,
|
||
xor) occurs a spectral component by spectral component basis. and on a bit wise basis within
|
||
spectral component. If the images differ in depth, the shallower is extended to the same depth
|
||
as the deeper, with all additional planes being zero filled. The resulting image has the same
|
||
number of spectral components as the source images.
|
||
The source image objects need not be the same size, but they must be large enough to en-
|
||
compass all the points identified by the IDC. As the IDC is IOB relative, it is the users
|
||
responsibility to ensure spatial alignment of the two IOB contents.
|
||
The input image objects may only be constrained. The resulting image object is also con-
|
||
strained.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. Specification of an unconstrained IOB or spectral mismatches
|
||
between IOB’s generates a MATCH error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.3.4 Mathematical
|
||
XIEP_MATHF
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
idc XIT_IDC
|
||
function XIT_MATHF
|
||
constrain BOOL
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, VALUE
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_MATHF applies a single operand mathematical function to the input image on a point-
|
||
wise basis (at all points selected by the idc) producing a new image.
|
||
IOB_id1 is the source image object. IDC controls the subset of the image to which the math
|
||
function will be applied. IOB_id2 is the client specified id to be assigned to the newly cre-
|
||
ated (resulting) image object. Function selects which mathematical function will be applied.
|
||
Constrain determines if the default constraint model will be applied upon completion.
|
||
|
||
|
||
|
||
|
||
7–40 REQUESTS AND REPLIES
|
||
The source image object must be large enough to encompass all the points identified by the
|
||
IDC.
|
||
While the input image object maybe either constrained or unconstrained, in most cases, the
|
||
output object will be unconstrained. If the constrain boolean is true, the default constraint
|
||
model will be applied upon completion.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. Mathematical errors such as overflow and invalid input (sqrt(-1))
|
||
generate a VALUE error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–41
|
||
7.4.4 Geometric
|
||
Geometric services provide for the ability to choose a subset of an image for display, and adjust
|
||
the image with regards to the two spatial dimensions. Subsetting is provided for by a crop
|
||
function, adjustment in the two spatial dimensions via translate, scale, rotate, and mirror
|
||
functions.
|
||
All geometric services operate on either mono or poly chromatic images. For poly chromatic
|
||
images, the operations are performed individually on each of the bands and the resulting
|
||
image is also poly chromatic.
|
||
Geometric protocol functions include:
|
||
• XIEP_SCALE - scale image in x and y directions
|
||
• XIEP_ROTATE - rotate image around z axis
|
||
• XIEP_MIRROR - rotate image around x and/or y axes
|
||
• XIEP_CROP - extract a subset of an image
|
||
• XIEP_TRANSLATE - shift and combine two images
|
||
|
||
All geometric services can accept either constrained or unconstrained image data in. No
|
||
geometric services offer a constrain control boolean. The output image will be of the same type
|
||
(constrained or unconstrained) as the input.
|
||
|
||
7.4.4.1 Crop Image
|
||
XIEP_CROP
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
idc XIT_IDC {ROI}
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC, VALUE
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_CROP creates a new server IOB from an existing server IOB by cropping the old IOB
|
||
data in either or both the X and Y dimensions.
|
||
SRC_iob is the id of the source image object. DST_iob is the id of the destination IOB (to be
|
||
created). The idc of type roi defines the geometric extent of the source image to be cropped.
|
||
The server creates a new IOB to receive the cropped image data and attributes, and uses the
|
||
client specified dst_iob as its id.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. An out of range parameter value generates a VALUE error.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting cropped data.
|
||
|
||
|
||
|
||
|
||
7–42 REQUESTS AND REPLIES
|
||
7.4.4.2 Translate Image
|
||
XIEP_TRANSLATE
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
src_idc XIT_IDC
|
||
dst_idc XIT_IDC
|
||
constant LISTofCARDnn
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC, VALUE, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_TRANSLATE allows one image to be translated or shifted relative to another image
|
||
and then combined via simple overlay. In essence, it is the inverse of crop as it provides for a
|
||
simple paste operation.
|
||
SRC_IOB acts as the source of image data for the translate and combine operation. DST_IOB
|
||
acts as the destination or receiving location of the translate and combine operation. SRC_IDC
|
||
determines the subset of SRC_IOB that will be used. DST_IDC determines the location and
|
||
clip boundaries in DST_IOB that will receive the source image data.
|
||
The two IDC’s (SRC_IDC and DST_IDC) are conceptually aligned at their upper left corner.
|
||
If SRC_IDC is smaller than DST_IDC in either direction, the remaining pixels in the area
|
||
prescribed by the DST_IDC are filled with the CONSTANT value in that direction. If SRC_
|
||
IDC is larger than DST_IDC in either direction, the source data is clipped to fit with DST_IDC
|
||
in that direction.
|
||
Note that both SRC_IOB and SRC_IDC are optional (both must be present or absent). If they
|
||
are absent, CONSTANT is used as the source data which is pasted into the destination image
|
||
area prescribed by DST_IDC.
|
||
The server creates a new IOB to receive the combined image data and attributes, and uses the
|
||
client specified dst_iob as its id.
|
||
Note that this function only supports replacement or non transparent overlay (combination)
|
||
and not alpha plane control mixing or translucency.
|
||
Both images must be constrained or unconstrained and mono chromatic or polychromatic.
|
||
If the operation involves a constant image and an unconstrained IOB, the constant will be
|
||
promoted to unconstrained before the operation is performed.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new
|
||
IOB generates an ALLOC error. An out of range parameter value generates a VALUE error.
|
||
Mismatch in constraints or chromaticity between source images generates a MATCH error.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting cropped data.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–43
|
||
7.4.4.3 Scale Image
|
||
XIEP_SCALE
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
pixels_per_scanline CARD32
|
||
number_of_scanlines CARD32
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC, VALUE
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_SCALE creates a new server IOB from an existing server IOB by scaling the old IOB
|
||
data in either or both the x and y dimensions.
|
||
SRC_iob is the id of the source image object. DST_iob is the id of the destination IOB (to
|
||
be created). Pixels_per_scanline is the number of pixels per scan line for the scaled image.
|
||
Number_of_scanlines is the number of scan lines in the scaled image.
|
||
The two IOB’s may differ in either or both the number of pixels per scan line and the number
|
||
of scan lines. The ratio of new to old values of these two sets may be considered to be the x
|
||
and y scale factors. Scaling up or down (new value leq or new value geq old value) is allowed.
|
||
Scaling in one or both dimensions at the same time is allowed. Non integral ratios (scale
|
||
factors) is allowed.
|
||
XIEP_SCALE_IMAGE operates on the complete input image to produce the scaled output
|
||
image. Those attempting to scale a portion of a source image should use crop to extract the
|
||
sub image into a new IOB, and then scale it.
|
||
With knowledge of the display device characteristics and the original source object, a client
|
||
can achieve combinations of the following:
|
||
• scale to fit within a window
|
||
• scale preserving original aspect ratio
|
||
• scale to reproduce at original size
|
||
• ...
|
||
|
||
The server creates a new IOB to receive the scaled image data and attributes, and uses the
|
||
client specified dst_iob as its id.
|
||
Servers are free to choose their own scaling algorithms (including separate integral and non
|
||
integral ones).
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. An out of range parameter value generates a VALUE error.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting scaled data.
|
||
|
||
|
||
|
||
|
||
7–44 REQUESTS AND REPLIES
|
||
7.4.4.4 Rotate Image
|
||
XIEP_ROTATE
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
angle XIT_FLOAT
|
||
width CARD32
|
||
height CARD32
|
||
fill LISTofCARD32
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC, VALUE
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_ROTATE creates a new server IOB from an existing server IOB by rotating the source
|
||
IOB data around the z axis (normal to the 2d image data x-y plane) through the center of the
|
||
source IOB.
|
||
SRC_iob is the id of the source image object. DST_iob is the id of the destination IOB (to be
|
||
created). Angle is the rotation angle in degrees measured clockwise around the z axis. Width
|
||
and height are parameters which determine the resulting size of the rotated image (dst_iob).
|
||
Fill is the value of a pixel to use in areas where the pixel value is undetermined by rotation.
|
||
XIEP_ROTATE operates on the complete input image to produce the rotated output image.
|
||
Those attempting to rotate a portion of a source image should use crop to extract the sub
|
||
image into a new IOB, and then rotate it.
|
||
The width and height parameters operate independently, but in a similar fashion. They are
|
||
used to determine the size of the resulting image (dst_iob). If either or both is zero, the
|
||
algorithm determines the smallest bounding dimension in that direction which will contain all
|
||
of the rotated source data, and sets the resulting image object to that size. In essence, setting
|
||
width and/or height to zero ensures that no rotated data is clipped in the horizontal and/or
|
||
vertical direction, and that a minimal bounding size is chosen.
|
||
If either or both is nonzero, the algorithm will set the resulting image object to the specified
|
||
size. If the rotated data is larger in this direction than the destination image object, the image
|
||
is clipped symmetricaly.
|
||
In either case, the rotated data will be centered in the resulting image object, and pixels in
|
||
the rotated IOB which do not derive from source IOB pixels will have their value set to that
|
||
specified in the Fill parameter. Centering the image (due to rotation around the center of the
|
||
source image) results in symmetric clipping when clipping occurs.
|
||
Servers are free to choose their own rotation algorithms (including separate integral and non
|
||
integral ones).
|
||
Invalid src_iob results in an IOB error. Inability to allocate the rotated IOB results in an
|
||
ALLOC error, while invalid parameter values result in VALUE errors.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting rotated data.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–45
|
||
7.4.4.5 Mirror Image
|
||
XIEP_MIRROR
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
x-mirror BOOL
|
||
y-mirror BOOL
|
||
=>
|
||
none
|
||
|
||
service class value: 0
|
||
errors: IDChoice, ALLOC
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_MIRROR creates a new server IOB from an existing server IOB by rotating the old IOB
|
||
data around the x axis, y axis, or x & y axes of the source IOB. Only rotations of 180 degrees
|
||
are allowed which is why the function is named Mirror. This is in keeping with the package
|
||
supporting only 2d image data (no perspective transforms allowed or meaningful).
|
||
SRC_iob is the id of the source image object. DST_iob is the id of the destination IOB (to be
|
||
created). X-mirror and Y-mirror are booleans which determines if the mirror should occur
|
||
around the source IOB’s x, y, or x & y axes.
|
||
XIEP_MIRROR operates on the complete input image to produce the mirrored output image.
|
||
Those attempting to mirror a portion of a source image should use crop to extract the sub
|
||
image into a new IOB, and then mirror it.
|
||
The server creates a new IOB to receive the mirrored image data and attributes, and uses the
|
||
client specified dst_iob as its id.
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting mirrored data.
|
||
|
||
|
||
|
||
|
||
7–46 REQUESTS AND REPLIES
|
||
7.4.5 Radiometric
|
||
Radiometric services facilitate the adjustment of an image with regards to the luminance
|
||
and/or chrominance dimensions. Radiometric functions are used to directly affect these dis-
|
||
tributions or prepare data for adjustment through the use of other point, area, and ensemble
|
||
processing services.
|
||
Radiometric protocol functions include:
|
||
• XIEP_CONSTRAIN - apply a quantization model
|
||
• XIEP_MATCH_HISTOGRAM - transform the image to have the specified histogram form
|
||
• XIEP_CHROMINANCE_SEPARATE - separate a poly chromatic image into multiple
|
||
monochromatic images
|
||
• XIEP_CHROMINANCE_COMBINE - combine multiple mono chromatic images into a poly
|
||
chromatic image
|
||
• XIEP_DITHER - reduce number of quantization levels through an area technique
|
||
• XIEP_LUMINANCE - extract the luminance component from a poly chromatic image
|
||
|
||
7.4.5.1 Constrain
|
||
XIEP_CONSTRAIN
|
||
iob_id1 XIT_IOB
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_CONSTRAIN is used to convert an unconstrained IOB into a constrained IOB. In
|
||
essence, it applies a client selected quantization model to the image data. Application of the
|
||
quantization model may involve steps such as absolute value, range shifting and scaling, hard
|
||
clipping, and mapping to a fixed number of quantization levels. While it is possible to perform
|
||
some of these functions through other protocol primitives, XIEP_CONSTRAIN packages them
|
||
in an essential way which support the transition from unconstrained data generated by some
|
||
server functions to constrained data that can move towards display. As such, it is considered a
|
||
primitive function.
|
||
IOB_id1 is the image object whose state is to be changed from unconstrained to constrained.
|
||
The constraint model applied is the current default constraint model. If the input image is
|
||
already constrained, and the current default constraint model is the same as the one last
|
||
applied to the image, then the function is a noop. If not, the current default constraint model
|
||
will be applied.
|
||
Constrain will operate on either mono chromatic or poly chromatic images.
|
||
No subseting by IDC mechanism is possible (the entire image is constrained).
|
||
Specification of an invalid source IOB, or an already in use resource id for the destination IOB
|
||
generates an IDChoice error.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–47
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.5.2 Histogram Matching
|
||
|
||
|
||
XIEP_MATCH_HISTOGRAM
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
idc XIT_IDC
|
||
h_shape XIT_HSHAPE
|
||
parm1 XIT_FLOAT
|
||
parm2 XIT_FLOAT
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_MATCH_HISTOGRAM creates a new server IOB from an existing server IOB where the
|
||
output IOB differs from the input in terms of its component distribution or histogram. The
|
||
function is designed to allow the client to specify the desired state of the resulting image’s
|
||
histogram (algorithm description of resulting histogram shape). It implements operations such
|
||
as histogram equalization (flattening) and hyperbolization.
|
||
IOB_id1 is the id of the source image object. IDC_id controls the subset of the image which
|
||
will be operated upon. H_shape is the user specified form of the desired output image his-
|
||
togram. IOB_id2 is the client specified id to be assigned to the newly created (resulting) image
|
||
object. Parm1 and 2 are parameters which are used to adjust the algorithmic shapes. They
|
||
will be specified on an hshape by hshape basis (tbs).
|
||
The input IOB must be constrained and monochromatic. Output IOB’s are always constrained
|
||
and monochromatic.
|
||
XIEP_MATCH_HISTOGRAM operates on the subset of the input image defined by the IDC.
|
||
Only IDC’s of type ROI are supported. Histogram matching is implemented on the server side
|
||
of the wire because it can not be implemented by a simple transfer function. In particular,
|
||
the server based implementation distributes fractional components of initial luminance levels
|
||
to destination gray levels based upon random or average neighborhood gray level techniques
|
||
(pick one).
|
||
Specification of an invalid source IOB, an already in use resource id for the destination IOB,
|
||
or an invalid IDC generates an IDChoice error. Inability of the server to allocate a new IOB
|
||
generates an ALLOC error. Specification of an unconstrained or polychromatic IOB generates
|
||
a MATCH error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
7–48 REQUESTS AND REPLIES
|
||
7.4.5.3 Separate Spectral Components
|
||
XIEP_CHROMINANCE_SEPARATE
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
iob_id3 XIT_IOB
|
||
iob_id4 XIT_IOB
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_CHROMINANCE_SEPARATE separates the three planes which make up a three plane
|
||
multispectral image into three separate monochromatic images. These images represent the
|
||
red, green, and blue components of the original image.
|
||
IOB_id1 is the id of the source image object. IOB_id2, iob_id3, iob_id4 are the client specified
|
||
ids to be assigned to the newly created image objects.
|
||
The input IOB maybe constrained or unconstrained. The output IOB’s will be of the same type
|
||
(constrained or unconstrained) as the input. The input image must be poly chromatic. The
|
||
output images will be mono chromatic.
|
||
Specification of an invalid source IOB, or already in use resource id’s for the destination IOB’s
|
||
generates an IDChoice error. Inability of the server to allocate the new IOB’s generates an
|
||
ALLOC error. Specification of a mono chromatic input image generates a MATCH error.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.5.4 Combine Spectral Components
|
||
XIEP_CHROMINANCE_COMBINE
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
iob_id3 XIT_IOB
|
||
iob_id4 XIT_IOB
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_CHROMINANCE_COMBINE combines the three planes which make up a three plane
|
||
multispectral image into a single multispectral image. The three component images represent
|
||
the red, green, and blue components components of the image.
|
||
IOB_id1, iob_id2, and iob_id3 represent the three color planes which are to be combined to
|
||
form the composite output multispectral image. IOB_id4 is the client specified id of the output
|
||
multispectral image object.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–49
|
||
All input IOB’s must be of the same type (constrained or unconstrained). The output IOB will
|
||
be of the same type. All input images must be mono chromatic. The output image will be poly
|
||
chromatic.
|
||
Specification of an invalid source IOB, or an already in use resource id for the destination
|
||
IOB generates an IDChoice error. Inability of the server to allocate a new IOB generates an
|
||
ALLOC error. If input IOB’s are of different types (constrained and unconstrained), or are not
|
||
all mono chromatic, a MATCH error occurs.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
7.4.5.5 Dither
|
||
XIEP_DITHER
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
levels LISTofCARD32
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, VALUE, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_DITHER is used to reduce the number of quantization levels. Dithering accomplishes
|
||
this by affecting adjacent pixels (area affect) to make up for lack of depth resolution. In
|
||
essence, it spreads out the value of a pixel into the surrounding area so that the visual affect
|
||
of multiple levels is preserved.
|
||
IOB_id1 is the id of the source image object. IOB_id2 is the client specified id to be assigned
|
||
to the newly created (resulting) image object. Levels is the number of levels (on a component
|
||
by component basis) the source image should be dithered down to.
|
||
The input IOB must be constrained. The output IOB will be constrained.
|
||
Note that because dithering "spreads out" the value of a pixel into the surrounding areas in
|
||
order to "fool the eye" into perceiving more shades of gray or colors than are actually being
|
||
used, it generates an image which may be unsuitable for further display processing. While the
|
||
IOB generated can be operated upon by other XIE functions, the results may prove less than
|
||
meaningful. As such, dither is often one of the last steps before display.
|
||
Specification of an invalid source IOB, or an already in use resource id for the destination
|
||
IOB generates an IDChoice error. Inability of the server to allocate a new IOB generates an
|
||
ALLOC error. If levels is greater than or equal to the current quantized state of the IOB,
|
||
a VALUE error is generated. If the source IOB is not of type constrained, a MATCH error
|
||
occurs.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
7–50 REQUESTS AND REPLIES
|
||
7.4.5.6 Luminance
|
||
XIEP_LUMINANCE
|
||
iob_id1 XIT_IOB
|
||
iob_id2 XIT_IOB
|
||
=>
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_LUMINANCE is used to extract or derive the luminance component of a color (polychro-
|
||
matic) image. This function is considerably different than the separate spectral component as
|
||
the luminance of a color image is derived from the color image by either a color space trans-
|
||
form (such as to LUV) or by algorithmic combination of the spectral components (RGB), and
|
||
not simply by taking one of the spectral components (such as R).
|
||
IOB_id1 is the id of the source polychromatic image object. IOB_id2 is the client specified id
|
||
to be assigned to the newly created (resulting) monochromatic luminance image object.
|
||
The input IOB must be both polychromatic and constrained. The output is monochromatic and
|
||
constrained.
|
||
Specification of an invalid source IOB, or an already in use resource id for the destination
|
||
IOB generates an IDChoice error. Inability of the server to allocate a new IOB generates an
|
||
ALLOC error. If the source IOB is not polychromatic and of type constrained, a MATCH error
|
||
occurs.
|
||
Client’s which request notification are notified of the operation’s completion by an XIE_
|
||
COMPUTATION_COMPLETE event.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–51
|
||
7.5 Statistics Services
|
||
|
||
Statistical functions allow the client to ask the server to determine certain statistics for an
|
||
IOB. Statistical functions do not affect the contents of the IOB. rather, they simply report
|
||
statistical information about the IOB contents back to the client. Statistical information
|
||
includes component distributions (histogram), moment data, and local area data.
|
||
All statistics generation can be done under the control of an IDC. The IDC is used to control
|
||
the subset of the complete IOB which will contribute to the statistical calculation.
|
||
Statistical protocol functions which generate either statistical distributions or local area data,
|
||
return this information to the client. Statistical protocol functions which calculate moments
|
||
generate a new (server based) IOB which contains the moment data. This allows the moment
|
||
data to be queried like any other image, or to be used in server based enhancement processing.
|
||
Statistics functions include:
|
||
• XIEP_CALC_HISTOGRAM - get the histogram of an image
|
||
• XIEP_POINT_STATISTICS - get statistics of an image
|
||
• XIEP_AREA_STATISTICS - create a statistical image
|
||
|
||
7.5.1 Component Distribution
|
||
XIEP_CALC_HISTOGRAM
|
||
iob_id XIT_IOB
|
||
idc_id XIT_IDC
|
||
by_component BOOL
|
||
=>
|
||
histogram LISTofLISTof hist_entry
|
||
service class value: 1
|
||
errors: IDChoice, MATCH
|
||
events: none
|
||
|
||
where hist_entry is:
|
||
[
|
||
index LISTofCARD32
|
||
number XIT_FLOAT
|
||
]
|
||
|
||
XIEP_CALC_HISTOGRAM generates a histogram of the component values of the subset of the
|
||
IOB identified by the IDC. The component distribution reflects the population of all possible
|
||
component states for a given IOB based upon actual data content. The component distri-
|
||
bution can be determined for a bitonal monochromatic image (black and white), continuous
|
||
tone monochromatic image (gray scale), or continuous tone polychromatic image (color). For
|
||
polychromatic images, the component distribution can be generated on either a per channel
|
||
(spectral component) basis (ie. 3 separate distributions) or for the distribution in the three
|
||
space (ie. 1 combined distribution) with the by_component switch controlling the option.
|
||
Note that the size of the list length entry (first field in the list) for the second list in histogram
|
||
is CARD32 (rather than the default CARD8) to allow for the potentially large number of
|
||
histogram entries.
|
||
|
||
|
||
|
||
7–52 REQUESTS AND REPLIES
|
||
IOB_id is the id of the source IOB. IDC_id is the id of the IDC of type ROI or CPP to be used
|
||
in determining the subset of the image for which the distribution will be generated.
|
||
The input IOB must be of type constrained. It may be mono or poly chromatic.
|
||
The function returns the histogram to the caller. The histogram is a list of histogram entries
|
||
where each entry consists of the index or value followed by the number of pixels found with
|
||
that index or value. For color images where the by_component request dictates three separate
|
||
distributions, the index is a single value, while for full organization (by_component = false),
|
||
the index is a list of three values (in essence the color three space coordinates).
|
||
Non existent IOB or IDC generates an IDChoice error. Specification of an input IOB of type
|
||
unconstrained generates a MATCH error.
|
||
|
||
7.5.2 Point Statistics
|
||
XIEP_POINT_STATS
|
||
iob_id XIT_IOB
|
||
x CARD32
|
||
y CARD32
|
||
height CARD8
|
||
width CARD8
|
||
->
|
||
Pixel LISTofXIT_FLOAT
|
||
Minimum LISTofXIT_FLOAT
|
||
Maximum LISTofXIT_FLOAT
|
||
Mean LISTofXIT_FLOAT
|
||
Std_dev LISTofXIT_FLOAT
|
||
Variance LISTofXIT_FLOAT
|
||
service class value: 1
|
||
errors: IDChoice, VALUE
|
||
events: none
|
||
|
||
XIEP_POINT_STATS is designed to allow a client to determine local area statistical informa-
|
||
tion from image data at and surrounding a specified pixel within an IOB. This information is
|
||
returned by the function to the client.
|
||
Iob_id is the id of the source IOB, x and y locate the pixel in question within the IOB. Height
|
||
and width determines the size of a rectangular area around the pixel to use in the statistical
|
||
calculations.
|
||
The function returns the following information: Value is the value of the pixel at the specified
|
||
location, minimum is the minimum pixel value in this area, maximum is the maximum pixel
|
||
value in the area, mean is the mean pixel value for this area, std_dev is the standard deviation
|
||
of the pixel distribution for this area, and variance is the variance of the pixel distribution for
|
||
this area.
|
||
The input IOB may be either constrained or unconstrained, and mono or poly chromatic.
|
||
The resulting data is always in float format in order to handle the unconstrained IOB case.
|
||
Each return item has an entry for each spectral component. Wire transport formats (Band_
|
||
Interleaved_by_Pixel, ...) do not apply.
|
||
Specification of a non existent IOB generates an IDChoice error. Specification of out of range x
|
||
and/or y locations generates a VALUE error.
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–53
|
||
In essence, XIEP_POINT_STATS is a degenerate case of XIEP_AREA_STATS. It differs from
|
||
XIEP_AREA_STATS in that the function returns the limited statistical information about the
|
||
area surrounding a single pixel rather than generating a new server IOB containing statistical
|
||
information about the area surrounding all pixels. Users who only want the pixel value should
|
||
use the XIEP_GET_PIXEL function.
|
||
|
||
7.5.3 Area Statistics
|
||
XIEP_AREA_STATS
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
idc_id XIT_IDC {ROI, CPP}
|
||
edge_size CARD8
|
||
stat_type XIT_STAT_TYPE
|
||
->
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, ALLOC, MATCH
|
||
events: XIE_COMPUTATION_COMPLETE
|
||
|
||
XIEP_AREA_STATS is designed to allow a client to determine statistical information about a
|
||
subset of image data within an image, and store this information locally within a new server
|
||
IOB (ie. create a statistical image).
|
||
Src_iob is the id of the source server IOB resource, dst_iob is the id of the destination server
|
||
IOB resource which will contain the statistical information, idc_id is the id of a server IDC
|
||
resource of type ROI or CPP, edge_size is the size of the local area square region surrounding
|
||
each pixel to be used in the statistical operation, stat_type is the type of statistical image to be
|
||
generated {minimum, maximum, mean, std_dev, variance}.
|
||
The function calculates the statistical information on a pixel by pixel basis based upon the
|
||
local area surrounding pixels and stores the resulting information in the new IOB. The edge_
|
||
size parameter determines how large the local area is.
|
||
The input IOB maybe either constrained or unconstrained. The output IOB will be of the same
|
||
type as the input IOB (constrained or unconstrained). The input may only be mono chromatic,
|
||
and the output will be mono chromatic.
|
||
Specification of a non existent source IOB or a resource id for the destination IOB which is
|
||
already in use generates an IDChoice error. Specification of a non existent IDC or an IDC of
|
||
type TMP (template) generates an IDChoice error. Inability of the server to allocate the new
|
||
resource results in an ALLOC error. Specification of a poly chromatic source image results in
|
||
a MATCH error.
|
||
An XIE_COMPUTATION_COMPLETE event occurs when the destination IOB is created and
|
||
filled with the resulting statistical data.
|
||
|
||
|
||
|
||
|
||
7–54 REQUESTS AND REPLIES
|
||
7.6 Process Control Services
|
||
|
||
Process Control class services provide the ability to define and apply pipelines containing
|
||
transport, enhancement, and rendition operations. In addition to the resource functions used
|
||
to create and query pipelines, Process Control protocol functions include:
|
||
• XIEP_ADD_SEGMENT {n} - adds a processing segment to a pipeline
|
||
• XIEP_EXECUTE_PIPE {n} - begins execution of a pipeline
|
||
• XIEP_KILL_PIPE {n} - terminates (prematurely) execution of a pipeline
|
||
|
||
7.6.1 Adding Segments
|
||
XIEP_ADD_SEGMENT
|
||
ipc_id XIT_IPC
|
||
name LISTofSTRING8
|
||
function XIT_XIEFUNCTION
|
||
parm_bindings LISTofBINDING
|
||
->
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, VALUE
|
||
events: none
|
||
where
|
||
BINDING is:
|
||
[
|
||
name STRING8
|
||
number CARD32
|
||
]
|
||
|
||
XIEP_ADD_SEGMENT adds a processing segment to the end of a pipeline.
|
||
IPC_id the id of the server pipeline resource to which the processing segment will be added.
|
||
Name is a client assigned name for this segment which will be used by other segments in
|
||
this pipeline to reference parameters from this segment. Function specifies which of the XIE
|
||
protocol functions (that are allowed in pipelines) will be used as this pipeline segment. Note
|
||
that the function choice implicitly determines this pipeline segment’s i/o parameter types and
|
||
numbering.
|
||
Parm_bindings describe where this segments inputs will come from and outputs will flow to.
|
||
There must be as many entries in the list as their are parameters to the XIE protocol function
|
||
which makes up this segment. Within parm_bindings, name is the name of a prior segment in
|
||
the pipeline, of the pipeline itself, or the atoms "CONSTANT" or "NULL". For segment inputs,
|
||
if the input is to come from the pipeline global inputs, the pipeline name should be used and
|
||
the number is the number of the pipeline global input. If input is to come from an upstream
|
||
segment, the upstream segment name should be used, and the number is the number of
|
||
that segments output parameter. If input is a constant, number should be the value of the
|
||
constant. For segment outputs, if the output is to flow from the pipeline, name should be the
|
||
name of the pipeline and number the number of one of its output parameters. If the output
|
||
will be used downstream, or not at all, the name should be set to "NULL".
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–55
|
||
The following rules apply to pipeline processing segments and their input/output parameters:
|
||
1. Segments can only be pipelinable functions (see protocol summary appendix).
|
||
2. Segments are added sequentially (no substitution/deletion/modification).
|
||
3. Segment input/output parameters can only be bound in the following ways:
|
||
• Input Parameters:
|
||
1. To a constant specified at segment add time.
|
||
2. To a global pipeline input parameter.
|
||
3. To an upstream (previously added) segment output parameter.
|
||
• Output Parameters:
|
||
1. To a global pipeline output parameter.
|
||
2. Left unbound (see below)
|
||
4. Intermediate pipe results (iob’s etc) not bound to a pipe output are temporary
|
||
|
||
If the IPC_id is not a valid IPC, or the function is not a pipelinable XIE protocol function,
|
||
an IDChoice error occurs. If a reference is made to a global pipeline of pipeline segment
|
||
parameter (index) which does not exist, a VALUE error occurs.
|
||
|
||
7.6.2 Executing a Pipe
|
||
XIEP_EXECUTE_PIPE
|
||
ipc_id XIT_IPC
|
||
input_parms LISTofparameters
|
||
output_parms LISTofparameters
|
||
->
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice, MATCH
|
||
events: XIE_PIPELINE_COMPLETE
|
||
|
||
XIEP_EXECUTE_PIPE starts the execution of a pipeline.
|
||
Input and output parameters are in essence the actual parameters which will be bound to the
|
||
formal parameters of the pipeline (established at resource creation time with resource type
|
||
IPC).
|
||
If the first segment of the pipeline is an XIEP_PUT_STREAM, the pipeline execution will be
|
||
stalled until the client executes an XIEP_PUT_STREAM into the designated IOB. As data
|
||
arrives, it will flow into the pipeline.
|
||
If the IPC_id does not identify a valid IPC (one which exists, has at least one processing
|
||
segment, and is not in state running), an IDChoice error occurs. If any parameter (input or
|
||
output) is of the wrong type, a MATCH error occurs.
|
||
|
||
|
||
|
||
|
||
7–56 REQUESTS AND REPLIES
|
||
7.6.3 Terminating a Pipe
|
||
XIEP_KILL_PIPE
|
||
ipc_id XIT_IPC
|
||
->
|
||
none
|
||
service class value: 1
|
||
errors: IDChoice
|
||
events: XIE_PIPELINE_COMPLETE
|
||
|
||
XIEP_KILL_PIPE terminates the execution of a pipeline. IPC_id the id of the server pipeline
|
||
resource whose execution the client wishes to terminate.
|
||
Terminating the execution of a pipeline results in the termination of execution of all pipeline
|
||
processing elements. All intermediate data and state information is lost as is all pipeline
|
||
output.
|
||
Specification of a non existent source IPC or one which is not currently in the process of
|
||
execution results in an IDChoice error.
|
||
An XIE_PIPELINE_COMPLETE event occurs when the pipeline is terminated.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–57
|
||
7.7 Display Services
|
||
|
||
As the core X protocol provides substantial machinery to facilitate pixmaps and the X image
|
||
extension works to produce (through rendition) pixmaps, the only display services in XIE deal
|
||
with time sequences, something not provided for under core X.
|
||
XIEP_DISPLAY_SEQUENCE
|
||
window_id WINDOW
|
||
gc_id GCONTEXT
|
||
frame_count CARD16
|
||
frame_timing CARD16
|
||
frame_list LISTofPIXMAP
|
||
forward BOOL
|
||
=>
|
||
none
|
||
service class value: 3
|
||
errors: IDChoice, VALUE
|
||
events: XIE_SEQUENCE_COMPLETE
|
||
|
||
XIEP_DISPLAY_SEQUENCE is used to display a sequence of prerendered image frames
|
||
which are stored as server pixmaps. The client has control over the order of frames, time
|
||
delay between frame display, and direction of frame sequence play.
|
||
Window_id is the window in which to display the sequence. GC_id is the id of the GC used in
|
||
the display operation. Frame_count is the number of frames in the sequence. Frame_timing
|
||
controls the delay time in milliseconds between sequential frame displays. Frame_list is
|
||
the list of PIXMAP id’s that constitute the sequence of frames. Forward is a boolean which
|
||
controls the direction of play of the sequence. Note that the size of the list length entry (first
|
||
field in the list) for frame_list is CARD16 (rather than the default CARD8) to allow for a long
|
||
sequence of pixmaps.
|
||
Specification of an invalid window_id or an invalid pixmap_id generates an IDChoice error.
|
||
Specification of frame_timing which is less than that which the server can provide generates a
|
||
VALUE error.
|
||
For clients which have requested notification of end of sequence events, an XIE_SEQUENCE_
|
||
COMPLETE event occurs when the last frame of a sequence is displayed.
|
||
|
||
|
||
|
||
|
||
7–58 REQUESTS AND REPLIES
|
||
7.8 Event Services
|
||
|
||
X Image Extension Protocol event services provide for the selection and query of image
|
||
extension specific events.
|
||
|
||
7.8.1 Select Events
|
||
XIEP_SELECT_EVENTS
|
||
event_mask CARD16
|
||
=>
|
||
none
|
||
service class value: 0
|
||
errors: VALUE
|
||
events: none
|
||
|
||
XIEP_SELECT_EVENTS is used by the client to select which events it wishes to be notified
|
||
of. Event_mask is a bit map mask where each bit corresponds to the value of an event code.
|
||
Specification of an invalid event_mask generates a VALUE error.
|
||
|
||
7.8.2 Query Events
|
||
XIEP_QUERY_EVENTS
|
||
event_mask CARD16
|
||
=>
|
||
event_mask CARD16
|
||
service class value: 0
|
||
errors: none
|
||
events: none
|
||
|
||
XIEP_QUERY_EVENTS is used by the client to determine which events it has expressed
|
||
interest in being notified of.
|
||
Event_mask on the input side communicates which events the client is interested in knowing
|
||
its notification status, while on the destination side, it communicates the server’s record of
|
||
which events the client will be notified of. In both cases, it is a bit map mask where each bit
|
||
corresponds to the value of an event code.
|
||
|
||
|
||
|
||
|
||
REQUESTS AND REPLIES 7–59
|
||
Chapter 8
|
||
|
||
EVENTS
|
||
|
||
|
||
All events return a message with a common prefix as described in the Event Protocol Message
|
||
Format section. Included in this information is the event type code, and the request sequence
|
||
number.
|
||
The following sections define the details of each of the image extension events. All X Image
|
||
Extension event names begin with the prefix XIE_. Event codes are defined in the protocol
|
||
code summary appendix.
|
||
|
||
8.1 COMPUTATION COMPLETE
|
||
|
||
XIE_COMPUTATION_COMPLETE
|
||
src_iob XIT_IOB
|
||
dst_iob XIT_IOB
|
||
|
||
An XIE_COMPUTATION_COMPLETE event occurs when client requested process protocol
|
||
functions completes (see protocol specifications). Specifically, it occurs when all the image
|
||
data that makes up the complete contents of the destination IOB which results from the
|
||
computation has been established by the server.
|
||
The event information includes the the id’s of both source and destination IOB’s.
|
||
Only clients which have requested notification of this event are notified.
|
||
|
||
8.2 PIPELINE COMPLETE
|
||
|
||
XIE_PIPELINE_COMPLETE
|
||
ipc_id XIT_IPC
|
||
|
||
An XIE_PIPELINE_COMPLETE event occurs when client requested process pipeline com-
|
||
pletes (see protocol specifications). Specifically, it occurs when all the image data that makes
|
||
up the input image(s) has been processed by the last stage in the pipeline.
|
||
The event information includes the the id of the pipeline (IPC id).
|
||
Only clients which have requested notification of this event are notified.
|
||
|
||
|
||
|
||
|
||
EVENTS 8–1
|
||
8.3 SEQUENCE COMPLETE
|
||
|
||
XIE_SEQUENCE_COMPLETE
|
||
|
||
An XIE_SEQUENCE_COMPLETE event is generated when a server completes displaying a
|
||
time sequence of image frames.
|
||
|
||
|
||
|
||
|
||
8–2 EVENTS
|
||
Chapter 9
|
||
|
||
APPENDICES
|
||
|
||
|
||
|
||
9.1 XIE Protocol Summary
|
||
|
||
The following is a summary of the XIE protocol functions categorized into their various service
|
||
classes. A {p} following the function indicates that it can be used as a pipeline element, while
|
||
a {n} indicates that it can not be used as a pipeline element. Session Services
|
||
• XIEP_INIT_SESSION {n} - begins a client-extension server session
|
||
• XIEP_SET_DEFAULTS {n} - establish/modify operational defaults
|
||
• XIEP_QUERY_DEFAULTS {n} - query operational defaults
|
||
• XIEP_TERM_SESSION {n} - ends a client-extension server session
|
||
|
||
Resource Services
|
||
• XIEP_CREATE_RESOURCE {n} - create a new server resource object
|
||
• XIEP_COPY_RESOURCE {n} - copy contents from source to destination resource
|
||
• XIEP_DELETE_RESOURCE {n} - delete an existing server resource object
|
||
• XIEP_QUERY_RESOURCE {n} - query an existing server resource object
|
||
• XIEP_IMPORT_IMAGE {n} - create a new server IOB resource object
|
||
• XIEP_EXPORT_IMAGE {p} - create a new server PIXMAP resource object
|
||
|
||
Transport Services
|
||
• XIEP_SET_TRANSPORT {n} - establishes the required transport context information
|
||
• XIEP_GET_TILE {p} - transports random tiles of uncompressed image data from server to
|
||
client
|
||
• XIEP_PUT_TILE {p} - transports random tiles of uncompressed image data from client to
|
||
server
|
||
• XIEP_GET_STREAM {p} - transports a stream of compressed or uncompressed image data
|
||
from server to client
|
||
• XIEP_PUT_STREAM {p} - transports a stream of compressed or uncompressed image data
|
||
from client to server
|
||
|
||
Process Services
|
||
|
||
|
||
|
||
APPENDICES 9–1
|
||
• XIEP_POINT {p} - applies a point (lut) transform to an image
|
||
• XIEP_AREA {p} - applies are operators to an image
|
||
• XIEP_ARITH {p} - performs arithmetic between two images
|
||
• XIEP_COMPARE {p} - compare two images
|
||
• XIEP_LOGICAL {p} - operates on the individual bit planes of an image
|
||
• XIEP_MATHF {p} - applies mathematical functions to an image
|
||
|
||
• XIEP_SCALE {p} - scale image in x and y directions
|
||
• XIEP_ROTATE {p} - rotate image around z axis
|
||
• XIEP_MIRROR {p} - rotate image around x and/or y axes
|
||
• XIEP_CROP {p} - extract a subset of an image
|
||
• XIEP_TRANSLATE {p} - shift and combine two images
|
||
|
||
• XIEP_CONSTRAIN {p} - apply a quantization model
|
||
• XIEP_MATCH_HISTOGRAM {p} - transform the image to have the specified histogram
|
||
form
|
||
• XIEP_CHROMINANCE_SEPARATE {p} - separate a poly chromatic image into multiple
|
||
monochromatic images
|
||
• XIEP_CHROMINANCE_COMBINE {p} - combine multiple mono chromatic images into a
|
||
poly chromatic image
|
||
• XIEP_DITHER {p} - reduce number of quantization levels through an area technique
|
||
• XIEP_LUMINANCE {p} - extract the luminance component from a poly chromatic image
|
||
|
||
Statistics Services
|
||
• XIEP_CALC_HISTOGRAM {n} - get the histogram of an image
|
||
• XIEP_POINT_STATISTICS {n} - get statistics of an image
|
||
• XIEP_AREA_STATISTICS {n} - create a statistical image
|
||
|
||
Process Control Services
|
||
• XIEP_ADD_SEGMENT {n} - adds a processing segment to a pipeline
|
||
• XIEP_EXECUTE_PIPE {n} - begins execution of a pipeline
|
||
• XIEP_KILL_PIPE {n} - terminates (prematurely) execution of a pipeline
|
||
|
||
Display Services
|
||
• XIEP_DISPLAY_SEQUENCE {n} - display a time sequence of pixmaps
|
||
|
||
Event Services
|
||
• XIEP_SELECT_EVENTS {n} - select which events the client wishes to be notified of
|
||
• XIEP_QUERY_EVENTS {n} - query which events the client will be notified of
|
||
|
||
|
||
|
||
|
||
9–2 APPENDICES
|
||
9.2 Recommended Server Resource Contents
|
||
|
||
This section describes the client known contents of the various image extension server re-
|
||
sources. These are the resource object fields which the client can reference in various resource
|
||
protocol operations. Some fields can be initialized, queried, and modified by the client through
|
||
object creation, modify, and query functions, while others can only be initialized and queried,
|
||
and still others can only be queried. This last class of fields are initialized and maintained
|
||
solely by the server, and are in essence read-only for the client
|
||
A table within each subsection defines the field identifier, allowable forms of access, and value
|
||
binding. Particulars regarding image data object fields can be found in the appendix on image
|
||
data attributes and organization. Details of other resources and their contents can be found in
|
||
the resource creation protocol functions and other protocol functions which use the resources.
|
||
|
||
9.2.1 IOB
|
||
The atomic unit of revisable form image data residing on the server and addressable by the
|
||
client is the image object or IOB. An IOB represents a single revisable form image (one which
|
||
can be modified and prepared for device specific display). An IOB is intended to contain a
|
||
single two-dimensional still-frame image of bitonal, continuous tone, or multispectral data.
|
||
IOB’s are not intended for composite image collections or temporal image sequences (multiple
|
||
2d frames associated with spatial or temporal layout mechanisms). Multiple IOB’s should be
|
||
used by applications to build composite static image displays and time sequences of images
|
||
under application control. IOB’s are self contained: no nesting or external references are
|
||
allowed.
|
||
Each image object (IOB) contains image attributes and the image data itself. The attributes
|
||
consist of information necessary to interpret the image data and useful in guiding default
|
||
rendition and presentation. The attributes are initialized by the client at image object creation
|
||
time. The image data can only be initialized through image data wire transport functions. All
|
||
attributes can be directly queried by the client, but the image data can not be directly queried.
|
||
It can only be read via image data wire transport functions.
|
||
IOB attributes fall into two classes: those that are server private, and those that are public
|
||
and queryable by the client. The private attributes can not be accessed by the client in anyway
|
||
and are not described in this document. The public attributes are initialized by the client and
|
||
server at image object creation time. Once the IOB has been created, these attributes are
|
||
"read only" for the client. The only modification of these attributes derives from client directed
|
||
server processing of the image.
|
||
Image primitive and presentation attributes are stored within the IOB and are initialized and
|
||
queryable by the client. Format (organization and encoding) information is not stored in the
|
||
IOB (refer to appendix on image data attributes and organization). Format information is
|
||
simply used during wire transport.
|
||
|
||
|
||
|
||
|
||
APPENDICES 9–3
|
||
Field id Field code Field type
|
||
-------- ---------- ----------
|
||
IOB$PIXELS_PER_SCANLINE 0 CARD32
|
||
IOB$NUMBER_OF_SCANLINES 1 CARD32
|
||
IOB$NUMBER_OF_SPECTRAL_COMPONENTS 2 CARD8
|
||
IOB$SPECTRAL_COMPONENT_MAPPING 4 XIT_SPECTRAL_COMPONENT_MAPPING
|
||
IOB$PIXEL_PROGRESSION 5 XIT_PIXEL_PROGRESSION
|
||
IOB$LINE_PROGRESSION 6 XIT_LINE_PROGRESSION
|
||
IOB$ASPECT_RATIO 7 XIT_FLOAT
|
||
IOB$POLARITY 8 XIT_POLARITY
|
||
IOB$CONSTRAINED 9 BOOL (query only)
|
||
IOB$CONSTRAIN_MODEL 10 CARD8 (query only)
|
||
IOB$CONSTRAIN_BITS_PER_COMPONENT 11 LISTOFCARD8 (query only)
|
||
|
||
The image data field of the IOB is only accessible to the client through image data wire
|
||
transport protocol function, and not directly through resource object functions.
|
||
Other than the implications of constrained/unconstrained and mono/polychromatic, the orga-
|
||
nization of the image data in the IOB is server private. The server may choose to represent
|
||
the revisable form image data within the IOB in anyway it desires including the same way in
|
||
which the core server represents PIXMAPS. The only constraint is that upon request from the
|
||
client, the server must be able to reproduce ALL image data which comes across the wire in
|
||
the first place (ie. if the client creates an IOB, fills it with image data, and requests the server
|
||
to send the data back in the same way, the data which comes back must be identical to what
|
||
went across in the first).
|
||
|
||
9.2.2 IDC
|
||
Control over the selection of the subset of a revisable form image object which will be processed
|
||
by the server, as well as the specification of operand data for area operations is accomplished
|
||
through the use of image domain control contexts (IDCs).
|
||
The subsetting process serves to identify either fully connected subregions of an image which
|
||
will be processed, or individual pixels and disconnected subregions.
|
||
Area operations involve specification of both area operands to be used in conjunction with the
|
||
area image data surrounding the current pixel, and the spatial relationship or registration of
|
||
those area operands (both spatial registration and operand shape).
|
||
A region of interest defines a rectangular subregion of an image object (less than or equal to
|
||
the image object in size). The specification is accomplished by locating the upper left and lower
|
||
right hand corners of the rectangle relative to an image object. ROI field values are initialized
|
||
at resource creation time. They can be queried or modified at any time by the client. They are
|
||
never modified by the server.
|
||
|
||
Field id Field Code Field type
|
||
-------- ---------- ----------
|
||
IDC$ROI_UL_X 0 CARD16
|
||
IDC$ROI_UL_Y 1 CARD16
|
||
IDC$ROI_LR_X 2 CARD16
|
||
IDC$ROI_LR_Y 3 CARD16
|
||
|
||
|
||
|
||
|
||
9–4 APPENDICES
|
||
A control processing plane defines the points within a rectangular subregion of an image
|
||
object (less than or equal to the image object in size) that are subject to processing. The
|
||
specification is accomplished via the use of a 1 bit deep PIXMAP which is positioned against
|
||
the image object by locating the upper left hand corner relative to an image object. A PIXMAP
|
||
value of 1 implies that the image data at that point is subject to processing while a value of
|
||
0 implies that it is not. The results of the image operator at these points (selected and not)
|
||
are determined by the operator on a case by case basis. CPP field values are initialized at
|
||
resource creation time. They can be queried or modified at any time by the client. They are
|
||
never modified by the server.
|
||
|
||
Field id Field Code Field type
|
||
-------- ---------- ----------
|
||
IDC$CPP_UL_X 4 CARD16
|
||
IDC$CPP_UL_Y 5 CARD16
|
||
IDC$CPP_DATA 6 PIXMAP
|
||
|
||
A template defines the points within a rectangular subregion which will be selected for use
|
||
in an area operation, and the values of an operand to be used in the operation for each of
|
||
these points. The template does not define its spatial relation to the image object. Rather, it
|
||
specifies the alignment of its selection and operand "mask" to what ever the current pixel is.
|
||
This is done by specifying the location of the current pixel in the two dimensional selection /
|
||
operand grid. This allows for asymmetric and sparsely populated template grids. TMP field
|
||
values are initialized at resource creation time. They can be queried or modified at any time
|
||
by the client. They are never modified by the server.
|
||
|
||
Field id Field Code Field type
|
||
-------- ---------- ----------
|
||
IDC$TMP_ENTRIES 7 CARD8
|
||
IDC$TMP_CENTERX 8 CARD8
|
||
IDC$TMP_CENTERY 9 CARD8
|
||
IDC$TMP_DATA 10 LISTofXIT_FLOAT
|
||
|
||
|
||
9.2.3 IPC
|
||
TBS
|
||
|
||
|
||
|
||
|
||
APPENDICES 9–5
|
||
9.3 Image Data Attributes & Organization
|
||
|
||
In the X Image Extension, the client may keep image data within itself in any fashion it
|
||
chooses. The client may keep any set of attributes, partitioned or not, and any image data
|
||
organization. It may also choose to exchange that data and those attributes with another
|
||
application in any fashion it desires. Those issues are outside of the scope of the X Image
|
||
Extension.
|
||
What the X Image Extension does focus on (specify) is the transport of image data and
|
||
attributes across the X wire. The ground rules are simple: the protocol specifies what attribute
|
||
information must be exchanged and when, and the multiple allowable data transport formats.
|
||
The client gets to choose from these various formats and the server complies at data transport
|
||
time. The client does not get to choose how the server represents or organizes the image
|
||
data (just as the server does not control how the client does it). The server may be lazy and
|
||
simply maintain the organization as it came across the wire, or may restructure the data to
|
||
meet its needs. While the requirement (see protocol section) that the server be able to turn
|
||
around and give image data back precisely as it received it (without loss) may be a powerful
|
||
incentive to maintain the wire transport data organization, it is not a requirement that the
|
||
server maintain the data internally in that format.
|
||
This appendix addresses image data attributes, their logical partitioning, and image data
|
||
transport formats. The various attributes are partitioned and described along with the trans-
|
||
port formats. The parameter types for these attributes are described either in the parameter
|
||
types chapter (for complex types), or in-line along with their usage in the protocol functions
|
||
chapter (transport services section).
|
||
Image attributes are partitioned into three components: primitive attributes, organization
|
||
and encoding attributes, and presentation attributes. Primitive attributes relate to a PCM
|
||
reference model for the image. Organization and encoding attributes are essential for inter-
|
||
preting the image data at transport time and go to the heart of the issue of transport formats.
|
||
Presentation attributes relate to the ’intended’ or original presentation established at capture
|
||
or synthesis time.
|
||
An Image
|
||
+----------------------------------------------------+
|
||
| |
|
||
| +------------+ +-------+ |
|
||
| | image | | image | |
|
||
| | attributes | | data | |
|
||
| +------------+ +-------+ |
|
||
| | |
|
||
| | |
|
||
| +-- primitive attributes |
|
||
| | |
|
||
| | |
|
||
| +-- organization & encoding attributes |
|
||
| | |
|
||
| | |
|
||
| +-- presentation attributes |
|
||
| |
|
||
+----------------------------------------------------+
|
||
|
||
|
||
|
||
|
||
9–6 APPENDICES
|
||
9.3.1 Primitive Attributes
|
||
Primitive image attributes include information about a PCM reference model version or
|
||
state of the image (which may not exist during transport). Primitive image attributes are
|
||
communicated by the client to the server at IOB creation time, are queryable by the client at
|
||
any time, and modifiable only by the server (not the client).
|
||
Primitive attributes include:
|
||
• Pixels-Per-Scanline
|
||
|
||
The total number of pixels per scan line. This value is not
|
||
necessarily the total number of bits per scan line.
|
||
|
||
• Number-of-Scanlines
|
||
|
||
The total number of scan lines in the image.
|
||
|
||
• Number-of-Spectral-Components
|
||
|
||
Specifies the number of spectral bands in an image. Note that this
|
||
is NOT necessarily the number of logical data planes in the data organization.
|
||
For an RGB image, this would be 3. For a mono chromatic image, this would be 1.
|
||
|
||
• Spectral-Component-Mapping
|
||
|
||
Designates the correlation between the physical image data and the
|
||
spectral components of an image. Images may have anywhere between
|
||
one spectral component (monochromatic) and several spectral
|
||
components (polychromatic). Monochromatic bitonal (black & white),
|
||
monochromatic-continuous tone (grayscale), and 3 band polychromatic (color)
|
||
will be the only supported classes.
|
||
Recognized spectral component mappings include:
|
||
• monochrome
|
||
• color 3 spaces
|
||
• RGB
|
||
• *futures*
|
||
|
||
9.3.2 Organization & Encoding Attributes
|
||
Organization and encoding attributes define the detailed structure of the image data represen-
|
||
tation during wire transport. Image data will either begin or end up in a client’s buffer in this
|
||
format depending upon the transport direction. Organization and encoding attributes are only
|
||
relevant in wire transport and are not directly associated with a server based IOB.
|
||
|
||
|
||
|
||
|
||
APPENDICES 9–7
|
||
9.3.2.1 Encoding Attributes
|
||
Encoding attributes describe the image data compression being used during wire transport,
|
||
and its relationship to the data organization scheme in use. Encoding attributes include:
|
||
• Compression-Scheme
|
||
|
||
The compression scheme used to encode the image data during transport.
|
||
Only standardized or well recognized and accepted compression schemes
|
||
are supported. These include:
|
||
|
||
• PCM (raw bitmap - no compression)
|
||
• CCITT Group 4 two dimensional
|
||
• ISO Discrete Cosine Transform
|
||
|
||
There are ground rules for the choice of compression scheme and its application based upon
|
||
data organization.
|
||
The fax compression scheme (G42D) can only be applied to bitonal images (any value of
|
||
Component-Space-Organization as long as the total bits per pixel = 1), or to continuous tone
|
||
images (gray scale and color) on a bit-plane by bit-plane basis (Component-Space-Organization
|
||
must be bit_interleaved_by_plane).
|
||
Discrete Cosine Transform compression can be applied to bitonal, continuous tone gray
|
||
scale, and continuous tone color images with Component-Space-Organization equal to band_
|
||
interleaved_by_plane or bit_interleaved_by_plane. In the former case, the compression scheme
|
||
is applied on a spectral component basis, while in the latter case, it is applied on a bit plane
|
||
by bit plane basis.
|
||
|
||
9.3.2.2 Component Space Attributes
|
||
Image data may represent information deriving from a number of chrominance bands (mono
|
||
through poly chromatic) and luminance quantization levels per band (bitonal through con-
|
||
tinuous tone). Given any one combination (such as 3 color bands as in R-G-B and 8 bits per
|
||
band per pixel), the representation of the information can be organized for transport in several
|
||
ways. This section describes the possible formats and the associated attributes along with low
|
||
level data formatting information. Component space attributes include:
|
||
• Component-Space-Organization
|
||
|
||
Designates how the component space data is physically organized.
|
||
It is defined in terms of pixel component bit storage within and
|
||
across image logical data planes. In other words, it indicates how image data
|
||
is organized pixel-by-pixel and spectral-component by spectral-component
|
||
into logical planes of data. Recognized component-space-organizations
|
||
include:
|
||
|
||
• Band_Interleaved_by_Pixel
|
||
|
||
All pixel data for ALL spectral components is collected into
|
||
a single logical data plane. For example, given an RGB image, the red,
|
||
|
||
|
||
9–8 APPENDICES
|
||
green, and blue bits for one pixel are butted together. The
|
||
red, green, and blue bits for the next pixel follow.
|
||
|
||
• Band_Interleaved_by_Plane
|
||
|
||
All pixel data for EACH spectral component occupies a
|
||
separate logical data plane. Thus, for our RGB image, all red bits
|
||
for all pixels are gathered into a single data plane,
|
||
followed by all green bits for all pixels, followed by
|
||
all blue bits for all pixels.
|
||
|
||
• Bit_Interleaved_by_Plane
|
||
|
||
All the pixel bits for each spectral component occupy
|
||
separate logical data planes. Thus, if our RGB image had 8 bits
|
||
per spectral component, there would be 24 separate data planes.
|
||
|
||
|
||
Bitonal images (monochromatic) can be organized in any of the
|
||
three ways (all are identical). Grayscale images (monochromatic) can
|
||
be organized in two ways: (Band_Interleaved_by_Pixel and Band_Interleaved_by_Plane
|
||
are identical) or (Bit_Interleaved_by_Plane). Color images (polychromatic)
|
||
can be organized into any of the three ways.
|
||
|
||
• Bits-Per-Component
|
||
|
||
The number of bits used for each image component by logical data
|
||
plane independent of component space organization. The sum of
|
||
Bits-Per-Component for all components must by definition equal
|
||
the total bits per pixel.
|
||
|
||
• Pixel-Stride
|
||
|
||
The difference in bit addresses between the starting bits of
|
||
successive pixels by logical data plane. Pixel-stride will typically be equal
|
||
to the number of bits per pixel stored in a particular plane
|
||
unless pixel boundary alignment requires fill (pad). Pixel-Stride
|
||
is meaningful for uncompressed data in any of the 3 organizational
|
||
formats.
|
||
|
||
• Scanline-Stride
|
||
|
||
The difference in bit addresses between the starting bits of
|
||
successive scanlines by logical data plane. Scan-Line stride will typically be equal
|
||
to the number of bits (not pixels) per scanline unless scanline
|
||
boundary alignment requires fill (pad). Scanline-Stride is meaningful for
|
||
uncompressed data in any of the 3 organizational formats.
|
||
|
||
|
||
|
||
APPENDICES 9–9
|
||
9.3.3 Presentation Attributes
|
||
Presentation attributes represent qualitative information that corresponds to visual charac-
|
||
teristics of the image data when presented (viewed). Presentation attributes affect how image
|
||
data is rendered and presented for viewing. They often derive initially from the original object
|
||
or scene, and the capture or synthesis process. As the capture process involves a digitization
|
||
and quantization process, the attributes of the capture device/process are starting points for
|
||
many presentation attributes. Maintaining this information and using it at presentation time
|
||
ensures fidelity between the original object or scene and the rendered image (ie. the image will
|
||
look like the original object or scene). An example of ignoring or modifying this information
|
||
might result in an image displayed upside down. Presentation attributes can be found in the
|
||
IOB.
|
||
A major component of presentation deals with the layout of an image on the screen. For
|
||
this aspect of presentation, an output device (screen) relative coordinate reference system
|
||
is necessary. For this purpose, we use the ISO and CCITT standard image orientation. In
|
||
this system a two dimensional cartesian coordinate system is overlaid on top of the screen
|
||
surface (the z axis would be normal to the plane and out of the screen). The x axis is placed
|
||
horizontally aimed towards the users right (user facing screen) and the y axis is aimed
|
||
vertically. All angles are measured relative to the positive x axis in a counter clockwise
|
||
direction.
|
||
Presentation attributes include:
|
||
• Pixel-Progression
|
||
|
||
The direction of the pixel path relative to ISO and CCITT
|
||
standard image orientation. More aptly, the angle between a scan
|
||
line and the x axis of the standard image orientation coordinate
|
||
system. Standard values of 0, 90, 180, and 270 degrees should be
|
||
used allowing for left-to-right, right-to-left, top-to-bottom,
|
||
and bottom-to-top pixel progressions.
|
||
|
||
• Line-Progression
|
||
|
||
The direction of scan line capture / display across the image plane.
|
||
More aptly, the direction normal to that of a scan line in which
|
||
scan lines were captured or will appear. Standard values of 90 and
|
||
270 degrees should be used.
|
||
|
||
• Aspect-Ratio
|
||
|
||
The ratio of the distance between pixel centers along the pixel-
|
||
progression direction and the line-progression direction.
|
||
|
||
• Polarity
|
||
|
||
The manner in which the pixel values represent minimum and
|
||
maximum intensity.
|
||
|
||
|
||
|
||
|
||
9–10 APPENDICES
|
||
9.4 Concept and Version Changes
|
||
|
||
There have been several significant conceptual changes between the draft of the concepts
|
||
document and this draft (v2.0) of the protocol specification. In addition, there have been
|
||
substantial changes in content between v1.0 and v2.0 of the protocol specification. This
|
||
appendix summarizes the conceptual and protocol changes.
|
||
|
||
9.4.1 Conceptual Changes
|
||
Perhaps the most significant conceptual change has to do with the location of the wire relative
|
||
to the rendition services that the x image extension calls for. In the concept document, high
|
||
level rendition services were called for on the server side of the wire. The current position is
|
||
to provide a minimal set of tools on the server side which can be used in rendition processing
|
||
(and might be facilitated by display accelerators), and leave the direction of rendition models
|
||
to a client side imaging toolkit. To some extent, this is in support of a general effort we’ve
|
||
made to reduce the size of the extension protocol.
|
||
A second shift is based upon the recognition that resource types are themselves scarce things.
|
||
A such, the protocol has moved away from the use of many different types of extension
|
||
resources towards a minimal set with more in line parameters. In particular, ITC’s (image
|
||
transport contexts), IEC’s (image enhancement contexts), and IDC’s (image display contexts)
|
||
are no longer server resources. Instead, the information they contained is exchanged as
|
||
protocol parameters.
|
||
The authors have always felt that logically, image capture devices such as frame grabbers
|
||
(video digitizers) belong on the client side of the wire, but that their close proximity to display
|
||
subsystems made it necessary to provide for them on the server side of the wire (through the
|
||
protocol). While prior drafts have included protocol functions for control of video digitizers,
|
||
they have been dropped from this draft. The reason for this is that the requirements of the
|
||
video community are beyond the scope of this effort and it was felt that they could best be
|
||
served by a separate video extension.
|
||
The authors originally intended to provide access to high level image enhancement functions
|
||
on the server via the protocol. Because of the enormous set of such functions (unbounded),
|
||
and because architecturally it was felt that high level image function packaging belonged
|
||
closer to the application, the protocol has shifted to support lower level image functions. The
|
||
higher level packaging of these functions has been pushed back across the wire to the tool kit
|
||
level. The X Image Extension Tool Kit document provides an exemplary set of application level
|
||
image display and enhancement processing services which can be built upon the core X11 and
|
||
X Image Extension protocols.
|
||
The position on server storage devices has not changed - the extension does not acknowledge
|
||
the existence or usage of such devices (including the issue of storage formats). The use of such
|
||
devices is at the discretion of server implementors. It is possible that storage devices and
|
||
formats may appear at the toolkit level.
|
||
In an effort to reduce the image extension display services, representation and display of tiled
|
||
images were removed from the protocol. It was felt that there is sufficient machinery in the
|
||
core protocol to support this from the client side. Tiled image support is likely to be another
|
||
issue for the tool kit.
|
||
|
||
|
||
|
||
APPENDICES 9–11
|
||
9.4.2 V1.0 - V2.0 Protocol Changes
|
||
Many significant protocol changes were made between v1.0 and v2.0. These were based upon
|
||
the above conceptual changes, comments from reviewers, and a general effort to trim down the
|
||
protocol extension and make it more compliant with the core x philosophy.
|
||
|
||
Minimality and Organization of Protocol
|
||
We received many complaints regarding the size of the protocol (number of functions), the or-
|
||
ganization of the protocol (function classes), and the level of complexity of operations required
|
||
of the server. We undertook to reduce in level and extent the contents of the protocol, as well
|
||
as to meaningfully reorganize it. The salient points and reasoning are discussed below.
|
||
The video functions (those which involved a digitizer) have been completely removed from the
|
||
specification. Our feeling is that the needs of the video community are better served by the
|
||
video extension and that a connection between video and digital image processing can occur
|
||
through pixmaps in the core server.
|
||
We have reduced the display functions in the belief that the core display functions are suffi-
|
||
cient in many ways and in that more complex display mechanisms can be built upon them and
|
||
managed from the client side (toolkit). The major exception to this is time sequences of images
|
||
which we feel require server support to work (time sequences remain).
|
||
High level class conversion (rendition) functions were analyzed and a few primitive functions
|
||
missing from the original draft were identified (most notably dither) and added. The high
|
||
level functions were then deleted (moved to the toolkit) where they can be built upon the
|
||
server primitives.
|
||
Enhancement and rendition functions were reorganized into process class functions due
|
||
to their similarity and their generic applicability. Thanks goes to members of SUN who
|
||
contributed insight into how to meaningfully reorganize these functions.
|
||
Across the entire protocol, multiple similar functions which differed only in terms of an
|
||
operator were collapsed (combined) by making operator selection an operand. No functionality
|
||
was lost, but the protocol is easier to follow and it may help to organize the implementations.
|
||
|
||
Use of Core Resources
|
||
Unessential extension resources (IEC, IRC, IDC) have been deleted completely in favor of in
|
||
line parameters.
|
||
We’ve made use of the core resource GC as is where necessary versus reinventing some of its
|
||
contents in extension specific resources.
|
||
|
||
Error Codes
|
||
We have removed all extension specific error codes and are now making use of core error codes
|
||
only.
|
||
|
||
Connect Information
|
||
All core X redundant connect time information has been removed and all unnecessary protocol
|
||
information (such as session_id) has been removed.
|
||
|
||
|
||
|
||
|
||
9–12 APPENDICES
|
||
We’ve changed XIT_SUPPORT_VECTOR to XIT_FUNCTION_VECTOR to reflect what func-
|
||
tions (as opposed to service classes) are provided by the server. The service class will provide
|
||
guidelines to the the classification of requests.
|
||
|
||
IOB Data Formats
|
||
It became clear that while positive integral data values for image data on the wire was
|
||
acceptable, it would be insufficient for many server protocol functions. As such, the extension
|
||
has defined a "constrained" and "unconstrained" IOB type (which translates roughly to positive
|
||
integral and positive/negative float - see chapter on server data model). It now includes
|
||
facilities for managing these data types.
|
||
|
||
Color Space Support
|
||
The initial spec called for multiple color space support on the server (rgb, yuv, cie luv ...). As
|
||
current display devices are primarily rgb (yuv may begin to appear due to digital tv, but not
|
||
today), the decision was made to push alternate color space support back across the wire into
|
||
the toolkit (along with color correction). For now, wire transport and server processing will
|
||
only support rgb color images.
|
||
|
||
Pipelines
|
||
The pipeline TBS has been replaced with actual protocol functions.
|
||
|
||
|
||
|
||
|
||
APPENDICES 9–13
|
||
9.5 References
|
||
1. X Window System Protocol, Version 11
|
||
Alpha Test, February 1987 - Robert W. Scheifler
|
||
|
||
2. CCITT T.4
|
||
"Standardization of Group 3 Facsimile Apparatus for Document Transmission"
|
||
Defines general device capabilities, and defines tables
|
||
and algorithms for one- and two-dimensional coding schemes,
|
||
as well as scheme for "uncompressed data."
|
||
3. CCITT T.6
|
||
"Facsimile Coding Schemes and Coding Control Functions
|
||
for Group 4 Facsimile Apparatus"
|
||
Defines coding tables and algorithm for two dimension
|
||
encoding used in G4 fax.
|
||
4. CCITT T.73
|
||
"Document Interchange Protocol for the Telematic Services"
|
||
Defines document interchange protocol for use above
|
||
the session services layer used by teletex and G4 fax.
|
||
5. ISO DPX3
|
||
"Photographic Image Coding"
|
||
Defines algorithms for encoding continuous tone photographic
|
||
images for character protocol terminal services (videotex).
|
||
6. Digital Image Processing
|
||
William K. Pratt
|
||
John Wiley & Sons - 1978
|
||
7. Digital Image Processing
|
||
Rafael Gonzales and Paul Wintz
|
||
Addison Wesley - 1987
|
||
8. Digital Picture Processing
|
||
Azriel Rosenfeld and Avinash Kak
|
||
Academic Press - 1982
|
||
9. Image Algebra Project Publications
|
||
Computer Vision Laboratory
|
||
University of Florida, Gainesville
|
||
Department of The Air Force
|
||
Air Force Armament Laboratory
|
||
Eglin Air Force Base, Florida
|
||
|
||
|
||
|
||
|
||
9–14 APPENDICES
|
||
|