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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章