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

Commit 7752dcec authored by Daneswara Tatakuntla's avatar Daneswara Tatakuntla Committed by Arne Coucheron
Browse files

libstagefright: Enhance software AAC encoder to support stereo recording.

Take channel count into consideration while encoding and reading PCM samples from AudioSource.

Change-Id: I3e92ade2958bd55cf5c9540edf2316c5e5f5d5ee
parent 5eede5f9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ protected:

private:
    enum {
        kMaxBufferSize = 2048,
        kMaxBufferSize = 4096,

        // After the initial mute, we raise the volume linearly
        // over kAutoRampDurationUs.
+1 −1
Original line number Diff line number Diff line
@@ -48,7 +48,7 @@ AudioSource::AudioSource(
    mRecord = new AudioRecord(
                inputSource, sampleRate, AudioSystem::PCM_16_BIT,
                channels > 1? AudioSystem::CHANNEL_IN_STEREO: AudioSystem::CHANNEL_IN_MONO,
                4 * kMaxBufferSize / sizeof(int16_t), /* Enable ping-pong buffers */
                4 * kMaxBufferSize / (sizeof(int16_t) * channels), /* Enable ping-pong buffers */
                flags);

    mInitCheck = mRecord->initCheck();
+5 −5
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ status_t AACEncoder::start(MetaData *params) {
    }

    mBufferGroup = new MediaBufferGroup;
    mBufferGroup->add_buffer(new MediaBuffer(2048));
    mBufferGroup->add_buffer(new MediaBuffer(4096));

    CHECK_EQ(OK, initCheck());

@@ -236,7 +236,7 @@ status_t AACEncoder::read(
                break;
            }

            size_t align = mInputBuffer->range_length() % sizeof(int16_t);
            size_t align = mInputBuffer->range_length() % (sizeof(int16_t) * mChannels);
            CHECK_EQ(align, 0);

            int64_t timeUs;
@@ -251,7 +251,7 @@ status_t AACEncoder::read(
            readFromSource = false;
        }
        size_t copy =
            (kNumSamplesPerFrame - mNumInputSamples) * sizeof(int16_t);
            (kNumSamplesPerFrame - mNumInputSamples) * sizeof(int16_t) * mChannels;

        if (copy > mInputBuffer->range_length()) {
            copy = mInputBuffer->range_length();
@@ -270,7 +270,7 @@ status_t AACEncoder::read(
            mInputBuffer->release();
            mInputBuffer = NULL;
        }
        mNumInputSamples += copy / sizeof(int16_t);
        mNumInputSamples += copy / (sizeof(int16_t) * mChannels);
        if (mNumInputSamples >= kNumSamplesPerFrame) {
            mNumInputSamples %= kNumSamplesPerFrame;
            break;
@@ -280,7 +280,7 @@ status_t AACEncoder::read(
    VO_CODECBUFFER inputData;
    memset(&inputData, 0, sizeof(inputData));
    inputData.Buffer = (unsigned char*) mInputFrame;
    inputData.Length = kNumSamplesPerFrame * sizeof(int16_t);
    inputData.Length = kNumSamplesPerFrame * sizeof(int16_t) * mChannels;
    CHECK(VO_ERR_NONE == mApiHandle->SetInputData(mEncoderHandle,&inputData));

    VO_CODECBUFFER outputData;
+1 −1
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ class AACEncoder: public MediaSource {
            kNumSamplesPerFrame = 1024,
        };

        int16_t           mInputFrame[kNumSamplesPerFrame];
        int16_t           mInputFrame[kNumSamplesPerFrame * 2];

        uint8_t           mAudioSpecificConfigData[2]; // auido specific data
        void             *mEncoderHandle;