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

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

Merge "AudioRecord and HAL input stream must be 16-bit PCM only"

parents f20e1d8d 291bb6d8
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -190,6 +190,11 @@ status_t AudioRecord::set(
        ALOGE("Invalid format %d", format);
        ALOGE("Invalid format %d", format);
        return BAD_VALUE;
        return BAD_VALUE;
    }
    }
    // Temporary restriction: AudioFlinger currently supports 16-bit PCM only
    if (format != AUDIO_FORMAT_PCM_16_BIT) {
        ALOGE("Format %d is not supported", format);
        return BAD_VALUE;
    }
    mFormat = format;
    mFormat = format;


    if (!audio_is_input_channel(channelMask)) {
    if (!audio_is_input_channel(channelMask)) {
+6 −0
Original line number Original line Diff line number Diff line
@@ -1227,6 +1227,12 @@ sp<IAudioRecord> AudioFlinger::openRecord(
        goto Exit;
        goto Exit;
    }
    }


    if (format != AUDIO_FORMAT_PCM_16_BIT) {
        ALOGE("openRecord() invalid format %d", format);
        lStatus = BAD_VALUE;
        goto Exit;
    }

    // add client to list
    // add client to list
    { // scope for mLock
    { // scope for mLock
        Mutex::Autolock _l(mLock);
        Mutex::Autolock _l(mLock);
+11 −7
Original line number Original line Diff line number Diff line
@@ -4290,8 +4290,7 @@ bool AudioFlinger::RecordThread::threadLoop()
                                framesIn = framesOut;
                                framesIn = framesOut;
                            mRsmpInIndex += framesIn;
                            mRsmpInIndex += framesIn;
                            framesOut -= framesIn;
                            framesOut -= framesIn;
                            if (mChannelCount == mReqChannelCount ||
                            if (mChannelCount == mReqChannelCount) {
                                mFormat != AUDIO_FORMAT_PCM_16_BIT) {
                                memcpy(dst, src, framesIn * mFrameSize);
                                memcpy(dst, src, framesIn * mFrameSize);
                            } else {
                            } else {
                                if (mChannelCount == 1) {
                                if (mChannelCount == 1) {
@@ -4305,9 +4304,7 @@ bool AudioFlinger::RecordThread::threadLoop()
                        }
                        }
                        if (framesOut && mFrameCount == mRsmpInIndex) {
                        if (framesOut && mFrameCount == mRsmpInIndex) {
                            void *readInto;
                            void *readInto;
                            if (framesOut == mFrameCount &&
                            if (framesOut == mFrameCount && mChannelCount == mReqChannelCount) {
                                (mChannelCount == mReqChannelCount ||
                                        mFormat != AUDIO_FORMAT_PCM_16_BIT)) {
                                readInto = buffer.raw;
                                readInto = buffer.raw;
                                framesOut = 0;
                                framesOut = 0;
                            } else {
                            } else {
@@ -4779,9 +4776,13 @@ bool AudioFlinger::RecordThread::checkForNewParameters_l()
            reconfig = true;
            reconfig = true;
        }
        }
        if (param.getInt(String8(AudioParameter::keyFormat), value) == NO_ERROR) {
        if (param.getInt(String8(AudioParameter::keyFormat), value) == NO_ERROR) {
            if ((audio_format_t) value != AUDIO_FORMAT_PCM_16_BIT) {
                status = BAD_VALUE;
            } else {
                reqFormat = (audio_format_t) value;
                reqFormat = (audio_format_t) value;
                reconfig = true;
                reconfig = true;
            }
            }
        }
        if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) {
        if (param.getInt(String8(AudioParameter::keyChannels), value) == NO_ERROR) {
            reqChannelCount = popcount(value);
            reqChannelCount = popcount(value);
            reconfig = true;
            reconfig = true;
@@ -4918,6 +4919,9 @@ void AudioFlinger::RecordThread::readInputParameters()
    mChannelMask = mInput->stream->common.get_channels(&mInput->stream->common);
    mChannelMask = mInput->stream->common.get_channels(&mInput->stream->common);
    mChannelCount = popcount(mChannelMask);
    mChannelCount = popcount(mChannelMask);
    mFormat = mInput->stream->common.get_format(&mInput->stream->common);
    mFormat = mInput->stream->common.get_format(&mInput->stream->common);
    if (mFormat != AUDIO_FORMAT_PCM_16_BIT) {
        ALOGE("HAL format %d not supported; must be AUDIO_FORMAT_PCM_16_BIT", mFormat);
    }
    mFrameSize = audio_stream_frame_size(&mInput->stream->common);
    mFrameSize = audio_stream_frame_size(&mInput->stream->common);
    mBufferSize = mInput->stream->common.get_buffer_size(&mInput->stream->common);
    mBufferSize = mInput->stream->common.get_buffer_size(&mInput->stream->common);
    mFrameCount = mBufferSize / mFrameSize;
    mFrameCount = mBufferSize / mFrameSize;