Stagefright 之 AudioPlayback的流程

Stagefright之六

                                                             ——AudioPlayback的流程

       Stagefright中关于audio的部分是交由 AudioPlayer来处理,它是在AwesomePlayer::play_l中被创建的。

 

(1) 当上层应用程序要求播放视频时,AudioPlayer同时被创建,并被启动

*******************************************************************************

status_t AwesomePlayer::play_l()

{

  ...

  mAudioPlayer = new AudioPlayer(mAudioSink, ...);

  mAudioPlayer->setSource(mAudioSource);

  mAudioPlayer->start(...);

  ...

}

*******************************************************************************

 

(2) AudioPlayer在启动的过程中会先去读取第一笔解码后的数据,并且开启audio output

 

status_t AudioPlayer::start(...)

{

  mSource->read(&mFirstBuffer);

 

  if (mAudioSink.get() != NULL)

  {

    mAudioSink->open(..., &AudioPlayer::AudioSinkCallback, ...);

    mAudioSink->start();

  }

  else

  {

    mAudioTrack = new AudioTrack(..., &AudioPlayer::AudioCallback, ...);

    mAudioTrack->start();

  }

}

 

AudioPlayer::start的程序代码来看,AudioPlayer似乎并没有将mFirstBuffer传给audio output

 

 

(3) 开启audio output的同时,AudioPlayer会将callback函数设给它,之后每当callback函数被呼叫,AudioPlayer便去 audio decoder读取解码后的数据

 

size_t AudioPlayer::AudioSinkCallback(audioSink, buffer, size, ...)

{

  return fillBuffer(buffer, size);

}

 

void AudioPlayer::AudioCallback(..., info)

{

  buffer = info;

  fillBuffer(buffer->raw, buffer->size);

}

 

size_t AudioPlayer::fillBuffer(data, size)

{

  mSource->read(&mInputBuffer, ...);

  memcpy(data, mInputBuffer->data(), ...);

}

 

解码后audio数据的读取就是由callback函数所驱动,但是callback函数又是怎么由audio output去驱动的,目前从程序代码上还看不出来。另外一方面,从上面的程序片段可以看出,fillBuffer将数据(mInputBuffer)复制到data之后,audio output应该会去取用data

 

 

(5) audio decoderbuffer传输流程与video decoder类似,可参阅video decoder

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值