Skip to main content
Skip table of contents

(v13) Input and filter plugin buffer access functions

This page applies to Harlequin v13.1r0 and later; and to Harlequin MultiRIP but not Harlequin Core


Library functions and macros can be used to control access to the input plugin buffers: the dataInBuffer and dataOutBuffer structures in the channelContext .

Note: Do not attempt to modify the fields of the PLUGIN_BUFFER structures directly. Always use the library functions to do so.

Each buffer is circular. The input plugin fills the buffer while the RIP consumes from it, or vice versa. The next area of a buffer may be provided directly for DMA transfers, or may be filled from a smaller area private to the plugin. Because DMA transfers and the like can require fixed size blocks, there is provision to wrap the buffer early that is, to lose some information at the end when the buffer is not a multiple of the required size.

There are, therefore, two strategies which might be adopted in moving data:

  • Reserve an amount of buffer to work with in place using one of the

..._reserve_...
routines. This returns a pointer to the data in the actual buffer (or in the case of writing, where the data will be put) and guarantees that it does not wrap around the ends of the buffer. Once the data has been dealt with, it can be released with one of the
..._release_...
routines.
Note: This method cannot be used if alignment on certain boundaries is important. The data should be copied instead.

  • Pass a separately maintained buffer to the plugin library. Data will be copied into or read from the dataInBuffer or dataOutBuffer . Different
    ..._copy_...
    routines either copy as much as will fit, or only succeed if it will all fit.

The return codes, declarations and macros are found in the header file genplib.h . The following symbol definitions are used:

 #define

IPPL_OK

0

 #define

IPPL_FULL

1

 #define

IPPL_EMPTY

2

 #define

IPPL_TOO_BIG

3

 #define

IPPL_NOT_RESERVED

4

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.