在看AudioTrack的write函数的时候,了解到,音频数据最终都写到了audio_track_cblk_t的结构体中。
这个结构体是在AudioFlinger中创建的。
AudioFlinger是如何来使用这些数据的呢?
今天就来学习学习。


我们写数据的时候,调用了audio_track_cblk_t::framesAvailable_l函数,来判断是否有可用的空间,以供写用。
类audio_track_cblk_t中还有另外一个函数framesReady,看名字,应该是告诉我们已经准备好了多少东东。
看样子,AudioFlinger在使用音频数据的时候,应该是先调用了framesReady函数,来看看我们已经写进去多少音频数据了,然后再使用这些数据。


*****************************************源码*************************************************



**********************************************************************************************
源码路径:
frameworks\base\media\libmedia\AudioTrack.cpp


#######################说明################################


###########################################################


&&&&&&&&&&&&&&&&&&&&&&&总结&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
MixerThread的threadloop函数,会先检查数据是否已经通过AudioTrack对象写到了audio_track_cblk_t中。
如果已经写好了,就将数据copy到AudioTrack对象的main buffer中。
在创建AudioTrack对象的时候,已经将AudioTrack对象的mian buffer和PlaybackThread的mix buffer进行了关联。
MixerThread的threadloop函数之后就会调用HAL层的write函数将数据写到硬件。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. android 实现服务器连接获取数据和传递数据(1)
  4. Bitmap recycle()
  5. Android基础(八):文件存储
  6. android 之 PhoneGap+jQuery Mobile+Rest 访问远程数据
  7. (转 Android(安卓)UI学习 - Menu)
  8. Android(安卓)自定义 ExpandableListView
  9. android graphic(3)—surfaceflinger的启动流程

随机推荐

  1. android dialog 不变暗
  2. Android Desigin Library
  3. android设置属性
  4. 【30篇突击 android】源码统计七
  5. BlueStacks将Android程序运行在Windows上
  6. android 逐帧动画
  7. Android开发学习之Gallery和GridView浅析
  8. 网络请求框架AsyncHttpclient的简单使用
  9. RadioGroup+RadioButton嵌套实现多行单选
  10. android TextToSpeech 源码分析