Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c35761e1 authored by Glenn Kasten's avatar Glenn Kasten Committed by Android (Google) Code Review
Browse files

Merge "Remove bit fields to improve performance"

parents ba217ef2 4f22c05e
Loading
Loading
Loading
Loading
+9 −13
Original line number Original line Diff line number Diff line
@@ -2295,7 +2295,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac


                uint16_t sendLevel = cblk->getSendLevel_U4_12();
                uint16_t sendLevel = cblk->getSendLevel_U4_12();
                // send level comes from shared memory and so may be corrupt
                // send level comes from shared memory and so may be corrupt
                if (sendLevel >= MAX_GAIN_INT) {
                if (sendLevel > MAX_GAIN_INT) {
                    ALOGV("Track send level out of range: %04X", sendLevel);
                    ALOGV("Track send level out of range: %04X", sendLevel);
                    sendLevel = MAX_GAIN_INT;
                    sendLevel = MAX_GAIN_INT;
                }
                }
@@ -2316,25 +2316,21 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
            }
            }


            // Convert volumes from 8.24 to 4.12 format
            // Convert volumes from 8.24 to 4.12 format
            int16_t left, right, aux;
            // This additional clamping is needed in case chain->setVolume_l() overshot
            // This additional clamping is needed in case chain->setVolume_l() overshot
            uint32_t v_clamped = (vl + (1 << 11)) >> 12;
            vl = (vl + (1 << 11)) >> 12;
            if (v_clamped > MAX_GAIN_INT) v_clamped = MAX_GAIN_INT;
            if (vl > MAX_GAIN_INT) vl = MAX_GAIN_INT;
            left = int16_t(v_clamped);
            vr = (vr + (1 << 11)) >> 12;
            v_clamped = (vr + (1 << 11)) >> 12;
            if (vr > MAX_GAIN_INT) vr = MAX_GAIN_INT;
            if (v_clamped > MAX_GAIN_INT) v_clamped = MAX_GAIN_INT;
            right = int16_t(v_clamped);


            if (va > MAX_GAIN_INT) va = MAX_GAIN_INT;
            if (va > MAX_GAIN_INT) va = MAX_GAIN_INT;   // va is uint32_t, so no need to check for -
            aux = int16_t(va);


            // XXX: these things DON'T need to be done each time
            // XXX: these things DON'T need to be done each time
            mAudioMixer->setBufferProvider(name, track);
            mAudioMixer->setBufferProvider(name, track);
            mAudioMixer->enable(name);
            mAudioMixer->enable(name);


            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME0, (void *)left);
            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME0, (void *)vl);
            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME1, (void *)right);
            mAudioMixer->setParameter(name, param, AudioMixer::VOLUME1, (void *)vr);
            mAudioMixer->setParameter(name, param, AudioMixer::AUXLEVEL, (void *)aux);
            mAudioMixer->setParameter(name, param, AudioMixer::AUXLEVEL, (void *)va);
            mAudioMixer->setParameter(
            mAudioMixer->setParameter(
                name,
                name,
                AudioMixer::TRACK,
                AudioMixer::TRACK,
+2 −1
Original line number Original line Diff line number Diff line
@@ -257,6 +257,7 @@ void AudioMixer::setParameter(int name, int target, int param, void *value)
            }
            }
            break;
            break;
        case AUXLEVEL:
        case AUXLEVEL:
            //assert(0 <= valueInt && valueInt <= MAX_GAIN_INT);
            if (track.auxLevel != valueInt) {
            if (track.auxLevel != valueInt) {
                ALOGV("setParameter(VOLUME, AUXLEVEL: %04x)", valueInt);
                ALOGV("setParameter(VOLUME, AUXLEVEL: %04x)", valueInt);
                track.prevAuxLevel = track.auxLevel << 16;
                track.prevAuxLevel = track.auxLevel << 16;
@@ -565,7 +566,7 @@ void AudioMixer::volumeStereo(track_t* t, int32_t* out, size_t frameCount, int32
    const int16_t vr = t->volume[1];
    const int16_t vr = t->volume[1];


    if (CC_UNLIKELY(aux != NULL)) {
    if (CC_UNLIKELY(aux != NULL)) {
        const int16_t va = (int16_t)t->auxLevel;
        const int16_t va = t->auxLevel;
        do {
        do {
            int16_t l = (int16_t)(*temp++ >> 12);
            int16_t l = (int16_t)(*temp++ >> 12);
            int16_t r = (int16_t)(*temp++ >> 12);
            int16_t r = (int16_t)(*temp++ >> 12);
+21 −7
Original line number Original line Diff line number Diff line
@@ -127,32 +127,46 @@ private:


        int32_t     prevVolume[MAX_NUM_CHANNELS];
        int32_t     prevVolume[MAX_NUM_CHANNELS];


        // 16-byte boundary

        int32_t     volumeInc[MAX_NUM_CHANNELS];
        int32_t     volumeInc[MAX_NUM_CHANNELS];
        int32_t     auxLevel;
        int32_t     auxInc;
        int32_t     auxInc;
        int32_t     prevAuxLevel;
        int32_t     prevAuxLevel;


        // 16-byte boundary

        int16_t     auxLevel;       // 0 <= auxLevel <= MAX_GAIN_INT, but signed for mul performance
        uint16_t    frameCount;
        uint16_t    frameCount;


        uint8_t     channelCount : 4;
        uint8_t     channelCount;   // 1 or 2, redundant with (needs & NEEDS_CHANNEL_COUNT__MASK)
        uint8_t     enabled      : 1;
        uint8_t     format;         // always 16
        uint8_t     reserved0    : 3;
        uint16_t    enabled;        // actually bool
        uint8_t     format;
        uint32_t    channelMask;    // currently under-used
        uint32_t    channelMask;


        AudioBufferProvider*                bufferProvider;
        AudioBufferProvider*                bufferProvider;
        mutable AudioBufferProvider::Buffer buffer;

        // 16-byte boundary

        mutable AudioBufferProvider::Buffer buffer; // 8 bytes


        hook_t      hook;
        hook_t      hook;
        const void* in;             // current location in buffer
        const void* in;             // current location in buffer


        // 16-byte boundary

        AudioResampler*     resampler;
        AudioResampler*     resampler;
        uint32_t            sampleRate;
        uint32_t            sampleRate;
        int32_t*           mainBuffer;
        int32_t*           mainBuffer;
        int32_t*           auxBuffer;
        int32_t*           auxBuffer;


        // 16-byte boundary

        uint64_t    localTimeFreq;
        uint64_t    localTimeFreq;


        int64_t     padding;

        // 16-byte boundary

        bool        setResampler(uint32_t sampleRate, uint32_t devSampleRate);
        bool        setResampler(uint32_t sampleRate, uint32_t devSampleRate);
        bool        doesResample() const { return resampler != NULL; }
        bool        doesResample() const { return resampler != NULL; }
        void        resetResampler() { if (resampler != NULL) resampler->reset(); }
        void        resetResampler() { if (resampler != NULL) resampler->reset(); }