Syntax for Integer Lifting Kernels ---------------------------------- Integer lifting kernels must be implemented using integer arithmetic and they must be applied to integers. Moreover, the rounding policy for each step must be identical at both the compressor and the decompressor in order to retain the reversible property of the overall decomposition. The file format is NOT compatible with that used by VM2.1 for a VERY GOOD REASON. In VM2.1, fundamentally different interpretations were applied to floating-point lifting kernels and integer lifting kernels, which was confusing and unnecessary. Specifically, in VM2.1 the integer prediction filter was to be applied to the even sub-sequence and subtracted from the odd sub-sequence, whereas the integer update filter was to be applied to the odd sub-sequence and added to the even sub-sequence. In order to ensure a consistent policy between integer and floating point lifting representations, we modified the definition so that all lifting steps, whether update or prediction, are implemented by filtering one sub-sequence (even for prediction steps and odd for update steps) with the relevant taps and then adding the result to the opposite sub-sequence (odd for prediction steps and even for update steps). This means that the first and third lines of lifting coefficients in the old VM2.1 format must have their signs reversed in order to conform to the new policy in VM3a. The first line of the file contains a sequence of positive integers, identifying the support of each of the forward lifting steps. The number of such integers identifies the number of lifting steps -- there is no need for trailing zeros as in VM2.1, although the use of trailing zeros is acceptable. The first integer identifies the support of the first prediction step; the second identifies the support of the first update step; additional integers identify the supports of subsequent prediction and update steps. Up to eight lifting steps may be supplied, although this limit is a property of the current software implementation only. Each of the subsequent lines corresponds to the relevant lifting step, with all filter taps for the lifting step appearing consecutively on the relevant line in impulse response order (not the inner-product order defined for the interface functions described in "ifc.h"). The lifting step coefficients must all be integers. Moreover, an additional non-negative integer must appear at the end of the line of text which holds the relevant tap values. This extra integer is the amount by which the result obtained by filtering the relevant sub-sequence with the integer tap values must be downshifted (divided by 2 to the power of the downshift value) in order to find the correct integer values to add into the opposite sub-sequence.