Android Audio之AudioTrack和AudioFlinger怎么联系起来的?

来源:互联网 发布:细集料坚固性试验数据 编辑:程序博客网 时间:2024/04/27 23:51

参考:http://blog.csdn.net/special_lin/article/details/12849637

           http://blog.csdn.net/yangwen123/article/details/39989751

           http://lastwarmth.win/2016/10/22/live-audio/

           https://github.com/oswystan/android/tree/master/audio_rec

1、1.frameworks/base/media/java/android/media/AudioTrack.java

  private native final int native_setup(Object audiotrack_this);
  public AudioTrack(…)//AudioTrack构造函数
  {
   int initResult = native_setup(new WeakReference<AudioTrack>(this));
  }
2.frameworks/base/core/jni/android_media_AudioTrack.cpp
  static jint android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject weak_this)
  {
   sp<AudioTrack> lpTrack = new AudioTrack();
   status = lpTrack->set(AUDIO_STREAM_DEFAULT);
  } 
3.frameworks/av/media/libmedia/AudioTrack.cpp
  frameworks/av/include/media/AudioTrack.h
  sp<IAudioTrack> mAudioTrack;

  <1>status_t AudioTrack::set()
  {
   status_t status = createTrack_l();
  }
  <2>status_t AudioTrack::createTrack_l()
  {
    const sp<IAudioFlinger>& audioFlinger = AudioSystem::get_audio_flinger(); 
    sp<IAudioTrack> track = audioFlinger->createTrack();
  }
4.frameworks/av/services/audioflinger/AudioFlinger.cpp 
  sp<IAudioTrack> AudioFlinger::createTrack()
  {
    sp<PlaybackThread::Track> track; 
    PlaybackThread *thread = checkPlaybackThread_l(output);
    track = thread->createTrack_l();
  }
5.frameworks/av/services/audioflinger/Threads.cpp
  sp<AudioFlinger::PlaybackThread::Track> AudioFlinger::PlaybackThread::createTrack_l()
  {
   uint32_t latencyMs = mOutput->stream->get_latency(mOutput->stream);
  }
6.frameworks/av/services/audioflinger/Threads.h
   AudioStreamOut *mOutput
  <1>frameworks/av/services/audioflinger/AudioFlinger.h
  struct AudioStreamOut 
  {                                                                                                                                                                                    
    AudioHwDevice* const audioHwDev;   
    audio_stream_out_t* const stream

  }; 

  <2>hardware/libhardware/include/hardware/audio.h

      struct audio_stream_out {
        uint32_t (*get_latency)(const struct audio_stream_out *stream);
     };

7.hardware/rockchip/audio/tinyalsa_hal/audio_hw.c
  <1>static int adev_open_output_stream()
    {
      out->stream.get_latency = out_get_latency;
    }
  <2>static uint32_t out_get_latency(const struct audio_stream_out *stream)
    {
    }

阅读全文
0 0
原创粉丝点击