b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

stagefright框架_启动stagefright_stagefright怎么解决(6)

电脑杂谈  发布时间:2017-05-31 00:03:12  来源:网络整理

這篇文章將會開始audio處理的流程。Stagefright中關於audio的部分是交由AudioPlayer來處理,它是在AwesomePlayer::play_l中被建立的。(1) 當上層應用程式要求播放影音時,AudioPlayer同時被建立出來,並且被啟動status_t AwesomePlayer::play_l(){...mAudioPlayer = new AudioPlayer(mAudioSink, ...);mAudioPlayer->start(...);...}(2) AudioPlayer在啟動的過程中會先去讀取第一筆解碼後的資料,並且開啟audio outputstatus_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 decoder的工作流程則和video decoder相同,可參閱《Stagefright (4) -Video Buffer傳輸流程》stagefright框架(七)-Audio和Video的同步講完了audio和video的處理流程,接下來要看的是audio和video同步化(synchronization)的問題。OpenCORE的做法是設置一個主clock,而audio和video就分別以此作為輸出的依據。而在Stagefright中,audio的輸出是透過callback函式來驅動,video則根據audio的timestamp來做同步。以下是詳細的說明:(1) 當callback函式驅動AudioPlayer讀取解碼後的資料時,AudioPlayer會取得兩個時間戳 -- mPositionTimeMediaUs和mPositionTimeRealUssize_t AudioPlayer::fillBuffer(data, size){...mSource->read(&mInputBuffer, ...);mInputBuffer->meta_data()->findInt64(kKeyTime, &mPositionTimeMediaUs);mPositionTimeRealUs = ((mNumFramesPlayed + size_done / mFrameSize) * 1000000) / mSampleRate;...}mPositionTimeMediaUs是資料裡面所載明的時間戳(timestamp);mPositionTimeRealUs則是播放此資料的實際時間(依據frame number及sample rate得出)。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-50199-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...