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

Commit 34af0264 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Add resampler comments and fix a typo

Change-Id: Ie071673875f663de4212eed4a4dff89d51a5a915
parent 39a60318
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1714,7 +1714,7 @@ audio_io_handle_t AudioFlinger::openInput(audio_module_handle_t module,
        AudioStreamIn *input = new AudioStreamIn(inHwDev, inStream);

        // Start record thread
        // RecorThread require both input and output device indication to forward to audio
        // RecordThread requires both input and output device indication to forward to audio
        // pre processing modules
        thread = new RecordThread(this,
                                  input,
+8 −0
Original line number Diff line number Diff line
@@ -56,6 +56,14 @@ public:
    // set the PTS of the next buffer output by the resampler
    virtual void setPTS(int64_t pts);

    // Resample int16_t samples from provider and accumulate into 'out'.
    // A mono provider delivers a sequence of samples.
    // A stereo provider delivers a sequence of interleaved pairs of samples.
    // Multi-channel providers are not supported.
    // In either case, 'out' holds interleaved pairs of fixed-point signed Q19.12.
    // That is, for a mono provider, there is an implicit up-channeling.
    // Since this method accumulates, the caller is responsible for clearing 'out' initially.
    // FIXME assumes provider is always successful; it should return the actual frame count.
    virtual void resample(int32_t* out, size_t outFrameCount,
            AudioBufferProvider* provider) = 0;

+5 −2
Original line number Diff line number Diff line
@@ -3787,7 +3787,8 @@ bool AudioFlinger::RecordThread::threadLoop()
                } else {
                    // resampling

                    memset(mRsmpOutBuffer, 0, framesOut * 2 * sizeof(int32_t));
                    // resampler accumulates, but we only have one source track
                    memset(mRsmpOutBuffer, 0, framesOut * FCC_2 * sizeof(int32_t));
                    // alter output frame count as if we were expecting stereo samples
                    if (mChannelCount == 1 && mReqChannelCount == 1) {
                        framesOut >>= 1;
@@ -3797,6 +3798,7 @@ bool AudioFlinger::RecordThread::threadLoop()
                    // ditherAndClamp() works as long as all buffers returned by
                    // mActiveTrack->getNextBuffer() are 32 bit aligned which should be always true.
                    if (mChannelCount == 2 && mReqChannelCount == 1) {
                        // temporarily type pun mRsmpOutBuffer from Q19.12 to int16_t
                        ditherAndClamp(mRsmpOutBuffer, mRsmpOutBuffer, framesOut);
                        // the resampler always outputs stereo samples:
                        // do post stereo to mono conversion
@@ -3805,6 +3807,7 @@ bool AudioFlinger::RecordThread::threadLoop()
                    } else {
                        ditherAndClamp((int32_t *)buffer.raw, mRsmpOutBuffer, framesOut);
                    }
                    // now done with mRsmpOutBuffer

                }
                if (mFramestoDrop == 0) {
@@ -4385,7 +4388,7 @@ void AudioFlinger::RecordThread::readInputParameters()
        mResampler = AudioResampler::create(16, channelCount, mReqSampleRate);
        mResampler->setSampleRate(mSampleRate);
        mResampler->setVolume(AudioMixer::UNITY_GAIN, AudioMixer::UNITY_GAIN);
        mRsmpOutBuffer = new int32_t[mFrameCount * 2];
        mRsmpOutBuffer = new int32_t[mFrameCount * FCC_2];

        // optmization: if mono to mono, alter input frame count as if we were inputing
        // stereo samples
+2 −1
Original line number Diff line number Diff line
@@ -794,8 +794,9 @@ private:
            sp<RecordTrack>                     mActiveTrack;
            Condition                           mStartStopCond;
            AudioResampler                      *mResampler;
            // interleaved stereo pairs of fixed-point signed Q19.12
            int32_t                             *mRsmpOutBuffer;
            int16_t                             *mRsmpInBuffer;
            int16_t                             *mRsmpInBuffer; // [mFrameCount * mChannelCount]
            size_t                              mRsmpInIndex;
            size_t                              mInputBytes;
            const uint32_t                      mReqChannelCount;