电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

Android音频数据传输

Android音频数据传输_第1页
Android音频数据传输_第2页
Android音频数据传输_第3页
MediaPlayer 那边就不看了,从AudioTrack 开始研究。 1、AudioTrack::write 函数 调用函数 obtainBuffer获取到一块 buffer,然后把传入的数据 copy 到获取的 buffer 中。 2、AudioTrack::obtainBuffer 函数 该函数的主要功能就是对传入的 audioBuffer 进行赋值。 看看audioBuffer 的类型: class Buffer { public: enum { MUTE = 0x00000001 }; uint32_t flags; int channelCount; int format; size_t frameCount; size_t size; union { void* raw; short* i16; int8_t* i8; }; }; 其中存放数据的是下面这个东东: union { void* raw; short* i16; int8_t* i8; }; 对这块东东赋值的代码如下: audioBuffer->raw = (int8_t *)cblk->buffer(u); 先看其中 cblk 的来历: audio_track_cblk_t* cblk = mCblk; mCblk 的赋值在函数 AudioTrack::createTrack 中: mCblk = static_cast(cblk->pointer()); cblk 的由来: sp cblk = track->getCblk(); track 的由来: sp track = audioFlinger->createTrack(getpid(), streamType, sampleRate, format, channelCount, frameCount, ((uint16_t)flags) << 16, sharedBuffer, output, &mSessionId, &status); 函数AudioFlinger::createTrack 返回的是一个TrackHandle 对象: trackHandle = new TrackHandle(track); return trackHandle; track 的由来: track = thread->createTrack_l(client, streamType, sampleRate, format, channelCount, frameCount, sharedBuffer, lSessionId, &lStatus); 函数AudioFlinger::PlaybackThread::createTrack_l 返回的是一个Track 对象: track = new Track(this, client, streamType, sampleRate, format, channelCount, frameCount, sharedBuffer, sessionId); return track; 看看函数TrackHandle::getCblk() : return mTrack->getCblk(); mTrack 就是作为构造函数传入的track 对象。 函数AudioFlinger::ThreadBase::TrackBase::getCblk() 的实现: return mCblkMemory; mCblkMemory 的赋值在构造函数AudioFlinger::ThreadBase::TrackBase::TrackBase 中: mCblkMemory = client->heap()->allocate(size); mCblk = static_cast(m...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

小辰7+ 关注
实名认证
内容提供者

出售各种资料和文档

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部