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