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

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

Merge "Use switch in AudioMixer::setParameter"

parents 237a624f 788040c5
Loading
Loading
Loading
Loading
+48 −35
Original line number Diff line number Diff line
@@ -48,6 +48,8 @@ static inline int16_t clamp16(int32_t sample)
AudioMixer::AudioMixer(size_t frameCount, uint32_t sampleRate)
    :   mActiveTrack(0), mTrackNames(0), mSampleRate(sampleRate)
{
    // AudioMixer is not yet capable of multi-channel beyond stereo
    assert(2 == MAX_NUM_CHANNELS);
    mState.enabledTracks= 0;
    mState.needsChanged = 0;
    mState.frameCount   = frameCount;
@@ -169,68 +171,73 @@ void AudioMixer::setActiveTrack(int track)
    mActiveTrack = track;
}

status_t AudioMixer::setParameter(int target, int name, void *value)
void AudioMixer::setParameter(int target, int name, void *value)
{
    int valueInt = (int)value;
    int32_t *valueBuf = (int32_t *)value;

    switch (target) {

    case TRACK:
        if (name == CHANNEL_MASK) {
        switch (name) {
        case CHANNEL_MASK: {
            uint32_t mask = (uint32_t)value;
            if (mState.tracks[ mActiveTrack ].channelMask != mask) {
                uint8_t channelCount = popcount(mask);
                if ((channelCount <= MAX_NUM_CHANNELS) && (channelCount)) {
                assert((channelCount <= MAX_NUM_CHANNELS) && (channelCount));
                mState.tracks[ mActiveTrack ].channelMask = mask;
                mState.tracks[ mActiveTrack ].channelCount = channelCount;
                ALOGV("setParameter(TRACK, CHANNEL_MASK, %x)", mask);
                invalidateState(1<<mActiveTrack);
                    return NO_ERROR;
                }
            } else {
                return NO_ERROR;
            }
            }
        if (name == MAIN_BUFFER) {
            } break;
        case MAIN_BUFFER:
            if (mState.tracks[ mActiveTrack ].mainBuffer != valueBuf) {
                mState.tracks[ mActiveTrack ].mainBuffer = valueBuf;
                ALOGV("setParameter(TRACK, MAIN_BUFFER, %p)", valueBuf);
                invalidateState(1<<mActiveTrack);
            }
            return NO_ERROR;
        }
        if (name == AUX_BUFFER) {
            break;
        case AUX_BUFFER:
            if (mState.tracks[ mActiveTrack ].auxBuffer != valueBuf) {
                mState.tracks[ mActiveTrack ].auxBuffer = valueBuf;
                ALOGV("setParameter(TRACK, AUX_BUFFER, %p)", valueBuf);
                invalidateState(1<<mActiveTrack);
            }
            return NO_ERROR;
            break;
        default:
            // bad name
            assert(false);
        }

        break;

    case RESAMPLE:
        if (name == SAMPLE_RATE) {
            if (valueInt > 0) {
        switch (name) {
        case SAMPLE_RATE: {
            assert(valueInt > 0);
            track_t& track = mState.tracks[ mActiveTrack ];
            if (track.setResampler(uint32_t(valueInt), mSampleRate)) {
                ALOGV("setParameter(RESAMPLE, SAMPLE_RATE, %u)",
                        uint32_t(valueInt));
                invalidateState(1<<mActiveTrack);
            }
                return NO_ERROR;
            }
        }
        if (name == RESET) {
            } break;
        case RESET: {
            track_t& track = mState.tracks[ mActiveTrack ];
            track.resetResampler();
            invalidateState(1<<mActiveTrack);
            return NO_ERROR;
            } break;
        default:
            // bad name
            assert(false);
        }
        break;

    case RAMP_VOLUME:
    case VOLUME:
        if ((uint32_t(name-VOLUME0) < MAX_NUM_CHANNELS)) {
        switch (name) {
        case VOLUME0:
        case VOLUME1: {
            track_t& track = mState.tracks[ mActiveTrack ];
            if (track.volume[name-VOLUME0] != valueInt) {
                ALOGV("setParameter(VOLUME, VOLUME0/1: %04x)", valueInt);
@@ -249,8 +256,8 @@ status_t AudioMixer::setParameter(int target, int name, void *value)
                }
                invalidateState(1<<mActiveTrack);
            }
            return NO_ERROR;
        } else if (name == AUXLEVEL) {
            } break;
        case AUXLEVEL: {
            track_t& track = mState.tracks[ mActiveTrack ];
            if (track.auxLevel != valueInt) {
                ALOGV("setParameter(VOLUME, AUXLEVEL: %04x)", valueInt);
@@ -269,11 +276,17 @@ status_t AudioMixer::setParameter(int target, int name, void *value)
                }
                invalidateState(1<<mActiveTrack);
            }
            return NO_ERROR;
            } break;
        default:
            // bad name
            assert(false);
        }
        break;

    default:
        // bad target
        assert(false);
    }
    return BAD_VALUE;
}

bool AudioMixer::track_t::setResampler(uint32_t value, uint32_t devSampleRate)
+1 −1
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ public:
    void        disable();

    void        setActiveTrack(int track);
    status_t    setParameter(int target, int name, void *value);
    void        setParameter(int target, int name, void *value);

    void        setBufferProvider(AudioBufferProvider* bufferProvider);
    void        process();