Android多媒體開發(fā)(2)——Video buffer傳輸流程

AwesomePlayer如何和OMX video decoder傳輸buffer呢鸠真?

AwesomePlayer與decoder buffer傳輸示意圖

1.OMXCodec會(huì)在開始的時(shí)候通過read()函數(shù)將未解碼的data送給decoder,并要求decoder將解碼后的data回傳外傅。

status_t OMXCodec::read(...)
{
    if (mInitialBufferSubmit)  
    {    
        mInitialBufferSubmit = false;    
        drainInputBuffers(); <----- OMX_EmptyThisBuffer    
        fillOutputBuffers(); <----- OMX_FillThisBuffer  
    }  
    ...
}

2.Decoder從input port讀取到數(shù)據(jù)后開始進(jìn)行解碼蹦哼,并且回傳EmptyBufferDone給OMXCodec鳄哭。

void OMXCodec::on_message(const omx_message &msg)
{  
    switch (msg.type)  
    {    
        case omx_message::EMPTY_BUFFER_DONE:    
        {      
            IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;      
            drainInputBuffer(&buffers->editItemAt(i));    
         }  
      }
}

OMXCodec收到EMPTY_BUFFER_DONE之后,繼續(xù)發(fā)送下一個(gè)未解碼的data給decoder纲熏。

3.Decoder將解碼后的數(shù)據(jù)送到output port妆丘,并回傳FillBufferDone通知OMXCodec。

void OMXCodec::on_message(const omx_message &msg)
{  
    switch (msg.type)  
    {    
        case omx_message::FILL_BUFFER_DONE:    
        {      
            IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer;      
            fillOutputBuffer(info);      
            mFilledBuffers.push_back(i);      
            mBufferFilled.signal();    
         }  
    }
}

OMXCodec收到FILL_BUFFER_DONE之后局劲,將解碼后的數(shù)據(jù)放入mFilledBuffers勺拣,發(fā)出mBufferFilled信號(hào),并且要求decoder繼續(xù)送出數(shù)據(jù)鱼填。

4.read()函數(shù)在后面等待mBufferFilled信號(hào)药有。當(dāng)mFilledBuffers被填入數(shù)據(jù)后,read()函數(shù)將其指定給buffer指針苹丸,并回傳給AwesomePlayer塑猖。

status_t OMXCodec::read(MediaBuffer **buffer, ...)
{  
    ...  
    while (mFilledBuffers.empty())  
    {    
        mBufferFilled.wait(mLock);  
    }  
    BufferInfo *info = &mPortBuffers[kPortIndexOutput].editItemAt(index);  
    info->mMediaBuffer->add_ref();  *buffer = info->mMediaBuffer;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谈跛,隨后出現(xiàn)的幾起案子羊苟,更是在濱河造成了極大的恐慌,老刑警劉巖感憾,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜡励,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阻桅,警方通過查閱死者的電腦和手機(jī)凉倚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嫂沉,“玉大人稽寒,你說我怎么就攤上這事√苏拢” “怎么了杏糙?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵慎王,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宏侍,道長(zhǎng)赖淤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任谅河,我火速辦了婚禮咱旱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绷耍。我一直安慰自己吐限,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布褂始。 她就那樣靜靜地躺著毯盈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪病袄。 梳的紋絲不亂的頭發(fā)上搂赋,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音益缠,去河邊找鬼脑奠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛幅慌,可吹牛的內(nèi)容都是我干的宋欺。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼胰伍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼齿诞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骂租,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤祷杈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后渗饮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體但汞,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年互站,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了私蕾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胡桃,死狀恐怖踩叭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤容贝,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布自脯,位于F島的核電站,受9級(jí)特大地震影響嗤疯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜闺兢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一茂缚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧屋谭,春花似錦脚囊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至我擂,卻和暖如春衬以,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背校摩。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工看峻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衙吩。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓互妓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坤塞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冯勉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容