【Android Audio】AudioRecord数据流处理详细流程

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

猜你喜欢

转载自blog.csdn.net/u013120422/article/details/93059834