<> <> <> <> DIRECTORY Basics USING [bitsPerWord, LongNumber, RawWords], ImagerTransformation USING [Transformation], PrincOps USING [SrcFunc, DstFunc] ; ImagerSample: CEDAR DEFINITIONS ~ BEGIN Transformation: TYPE ~ ImagerTransformation.Transformation; <> Sample: TYPE ~ WORD; maxBitsPerSample: NAT ~ Basics.bitsPerWord; RawSamples: TYPE ~ Basics.RawWords; UnsafeSamples: TYPE ~ LONG POINTER TO RawSamples; SampleBuffer: TYPE ~ REF SampleBufferRep; SampleBufferRep: TYPE ~ RECORD [ iSize, jSize: NAT, samples: SEQUENCE size: NAT OF Sample ]; NewBuffer: PROC [iSize, jSize: NAT, scratch: SampleBuffer _ NIL] RETURNS [SampleBuffer]; ObtainScratchBuffer: PROC [iSize, jSize: NAT] RETURNS [SampleBuffer]; <<>> ReleaseScratchBuffer: PROC [buffer: SampleBuffer]; DoWithScratchBuffer: PROC [iSize, jSize: NAT, action: PROC [SampleBuffer]]; GetSample: PROC [buffer: SampleBuffer, i, j: NAT] RETURNS [Sample]; PutSample: PROC [buffer: SampleBuffer, i, j: NAT, sample: Sample]; GetPointer: PROC [buffer: SampleBuffer, i, j, count: NAT] RETURNS [UnsafeSamples]; <> UnsafeAdd: UNSAFE PROC [src1, src2, dst: UnsafeSamples, count: NAT]; <> <<>> UnsafeSub: UNSAFE PROC [src1, src2, dst: UnsafeSamples, count: NAT]; <> <<>> UnsafeLookup: UNSAFE PROC [tbl, src, dst: UnsafeSamples, count: NAT]; <> <<>> AddSamples: PROC [samples: SampleBuffer, si, sj: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; <> <> <> <<>> SubSamples: PROC [samples: SampleBuffer, si, sj: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; <> <> <> <<>> LookupSamples: PROC [table: SampleBuffer, samples: SampleBuffer, si, sj: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; <> <> <> <<>> LookupPixels: PROC [tables: SampleBuffer, pixels: SampleBuffer, pj: NAT _ 0, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; <> <> <> <> <> <> <> <<>> <> BitsPerSample: TYPE ~ [0..maxBitsPerSample]; UnsafeGetF: UNSAFE PROC [samples: UnsafeSamples, count: NAT, s, f: NAT _ 0, base: LONG POINTER, wordsPerLine: NAT, bitsPerSample: BitsPerSample]; <> <<>> UnsafePutF: UNSAFE PROC [samples: UnsafeSamples, count: NAT, s, f: NAT _ 0, base: LONG POINTER, wordsPerLine: NAT, bitsPerSample: BitsPerSample, srcFunc: PrincOps.SrcFunc _ null, dstFunc: PrincOps.DstFunc _ null]; <> <<>> UnsafePutFSign: UNSAFE PROC [samples: UnsafeSamples, count: NAT, s, f: NAT _ 0, base: LONG POINTER, wordsPerLine: NAT]; <> <<>> UnsafeGetS: UNSAFE PROC [samples: UnsafeSamples, count: NAT, s, f: NAT _ 0, base: LONG POINTER, wordsPerLine: NAT, bitsPerSample: BitsPerSample]; <> <<>> UnsafePutS: UNSAFE PROC [samples: UnsafeSamples, count: NAT, s, f: NAT _ 0, base: LONG POINTER, wordsPerLine: NAT, bitsPerSample: BitsPerSample, srcFunc: PrincOps.SrcFunc _ null, dstFunc: PrincOps.DstFunc _ null]; <> <<>> <> Sampler: TYPE ~ REF SamplerRep; SamplerRep: TYPE ~ RECORD [ base: LONG POINTER _ NIL, -- source base address wordsPerLine: CARDINAL _ 0, -- source words per scan line bitsPerSample: BitsPerSample _ 0, -- source bits per sample sSize: CARDINAL _ 0, -- source size in slow (scan line) direction fSize: CARDINAL _ 0, -- source size in fast (pixel) direction sMin: CARDINAL _ 0, -- source origin in slow (scan line) direction fMin: CARDINAL _ 0, -- source origin in fast (pixel) direction sfDelta: Basics.LongNumber _ [lc[0]], -- source delta s for destination f increment ffDelta: Basics.LongNumber _ [lc[0]], -- source delta f for destination f increment ssDelta: Basics.LongNumber _ [lc[0]], -- source delta s for destination s increment fsDelta: Basics.LongNumber _ [lc[0]], -- source delta f for destination s increment sSource: Basics.LongNumber _ [lc[0]], -- initial source s (corresponding to sDest, fDest) fSource: Basics.LongNumber _ [lc[0]], -- initial source f (corresponding to sDest, fDest) sDest: CARDINAL _ 0, -- initial destination s fDest: CARDINAL _ 0 -- initial destination f ]; SetSamplerIncrements: PROC [sampler: Sampler, m: Transformation]; <> SetSamplerPosition: PROC [sampler: Sampler, m: Transformation, s, f: CARDINAL]; <> GetPointSamples: PROC [sampler: Sampler, s, f: CARDINAL, buffer: SampleBuffer, bi, bj: NAT _ 0, count: NAT]; <[s, f+k], for k IN[0..count)>> <<>> GetInterpolatedSamples: PROC [sampler: Sampler, s, f: CARDINAL, buffer: SampleBuffer, i, j: NAT _ 0, count: NAT]; <> <<>> END.