1.1 AudioRecord重採樣處理流程
mPipeSource 爲null, 將hal數據in_read到mRsmpInBuffer中, mInput->stream->read();
獲取track的share buffer,activeTrack->getNextBuffer(&activeTrack->mSink);
activeTrack->isDirect()爲false
重採樣開始activeTrack->mRecordBufferConverter->convert()【RecordBufferConverter::convert】
分配臨時內存mBuf:posix_memalign(&mBuf, 32, mBufFrames * mBufFrameSize);
使用高質量重採樣算法mResampler->resample((int32_t*)mBuf, frames, provider)【AudioResamplerCubic::resample】,雙通道重採樣AudioResamplerCubic::resampleStereo16
獲取ResamplerBufferProvider中mRsmpInBuffer內存空間的地址:provider->getNextBuffer(&mBuffer);
重採樣的原始數據從mRsmpInBuffer取,處理完畢後的數據放入到mBuf
將mBuf採樣完的數據拷貝到AudioTrack的share buffer,完成重採樣memcpy_by_audio_format(dst, mDstFormat, convert, AUDIO_FORMAT_PCM_16_BIT, frames * mDstChannelCount);
1.2 獲取AudioTrack share內存空間
activeTrack->getNextBuffer(&activeTrack->mSink);
AudioFlinger::RecordThread::PatchRecord::getNextBuffer
獲取frameCount,mPeerProxy->obtainBuffer(&buf, &mPeerTimeout)【 AudioFlinger::PlaybackThread::PatchTrack::obtainBuffer】
AudioTrack的Share buffer,AudioAudioFlinger::RecordThread::RecordTrack::getNextBuffer