view minijss/jmixtmpl_c.h @ 1896:f80b2dc77c30

Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things will not work and some things are hardcoded. The ByteRun1 compression implementation is somewhat inefficient. Interleaved files do not work yet.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 26 Jun 2018 03:13:38 +0300
parents b52905e2788e
children
line wrap: on
line source

/*
 * miniJSS - Mixing routine in C, innerloop template
 * Programmed and designed by Matti 'ccr' Hamalainen
 * (C) Copyright 2006-2015 Tecnic Software productions (TNSP)
 */

int JMIXER_NAME (JSSMixer *mixer, JSSChannel *chn, JMIXER_ADDBUF_TYPE *addBuffer, const int mixLength, const DMFixedPoint endPos)
#ifdef JMIXER_HEADER
;
#else
{
    const DMFixedPoint tmpDelta = chn->chDeltaO, tmpDeltaV = chn->chDeltaV;
    DMFixedPoint tmpPos = chn->chPos,
                 tmpVolume = chn->chVolume;
    JMIXER_ADDBUF_TYPE
        *ap = addBuffer,
        *tr = chn->chPrevR,
        *tl = chn->chPrevL;
    int strideLength = 0;
    (void) tr;
    (void) tl;

    JMIXER_SAMPLE_TYPE *sp = (JMIXER_SAMPLE_TYPE *) chn->chData;

    JMIXER_INIT

    if (chn->chVolumeD > 0)
    {
        const int tmpLength = chn->chVolumeD < mixLength ? chn->chVolumeD : mixLength;
        chn->chVolumeD -= tmpLength;

        while (strideLength < tmpLength && JMIXER_ENDCOND)
        {
            JMIXER_FUNC
            JMIXER_DEBUG
            JMIXER_NEXT_RAMP
            strideLength++;
        }
    }

    while (strideLength < mixLength && JMIXER_ENDCOND)
    {
        JMIXER_FUNC
        JMIXER_DEBUG
        JMIXER_NEXT
        strideLength++;
    }

    chn->chPos = tmpPos;
    chn->chVolume = tmpVolume;
    return strideLength;
}
#endif

#undef JMIXER_NAME
#undef JMIXER_NEXT
#undef JMIXER_NEXT_RAMP
#undef JMIXER_ENDCOND