(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
ordataOutBuffer
. 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 |
|
|
#define |
|
|
#define |
|
|
#define |
|
|
#define |
|
|