日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stagefright omx小结

發布時間:2024/9/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stagefright omx小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于stagefright和openmax運行在兩個不同的進程上,所以他們之間的通訊要經過Binder進行處理,本小結不考慮音頻這一塊,假設視頻為MP4封裝的AVC編碼文件.

?先簡單的看一下stagefright是怎么工作的, stagefright使用event來進行驅動,event調度器和event運行在同一個線程中,播放器向隊列插入event來驅動整個解碼流程,event調度器的工作抽象流程如下:
1. 檢測隊列是否為空,為空則等待event的插入
2. 獲取隊列中的第一個event
3. 計算event所要求的delay time后進行延時操作
4. 將event從隊列中剔除后執行該event
event調度器通過不斷循環這樣的過程來進行調度,在具體代碼中還會根據特殊情況進而改變調度過程,目前event事件有如下幾種:
1. onVideoEvent
2. onStreamDone
3. onBufferingUpdate
4. onCheckAudioStatus
5. onPrepareAsyncEvent

stagefright的播放器類為AwesomePlayer,這個類主要有以下幾個成員(排除Audio部分):
1. mVideoSource(解碼視頻)
2. mVideoTrack(從多媒體文件中讀取視頻數據)
3. mVideoRenderer(對解碼好的視頻進行格式轉換,android使用的格式為RGB565)
4. mISurface(重繪圖層)
5. mQueue(event事件隊列)

stagefright運行時的抽象流程如下:

?

下面以一個mp4文件(avc編碼)來分析AwesomePlayer的抽象工作流程(排除Audio部分)
1) 設置mUri為xxxx.MP4的絕對路徑
2) 啟動mQueue,這會創建一個線程來運行threadEntry,并命名為TimedEventQueue,這個線程就是event調度器
3) 打開mUri所指定的文件,xxxx.MP4文件的頭部為(....ftypisom....),則會選擇MPEG4Extractor來作為分離器
4) 使用MPEG4Extractor對MP4進行音視頻軌道的分離,并返回MPEG4Source類型的視頻軌道給mVideoTrack
5) 根據mVideoTrack中的編碼類型來選擇解碼器,avc的編碼類型會選擇AVCDecoder (假設不使用OMX),并返回給mVideoSource,并設置mVideoSource中的mSource為mVideoTrack
6) 插入onVideoEvent到Queue中,開始解碼播放
7) 通過mVideoSource對象來讀取解析好的視頻buffer
8) 如果解析好的buffer還沒到AV時間戳同步的時刻,則推遲到下一輪操作
9) mVideoRenderer為空,則進行初始化,如果不使用OMX會將mVideoRenderer設置為AwesomeLocalRenderer
10) 通過mVideoRenderer對象將解析好的視頻buffer轉換成RGB565格式并發給display模塊進行圖像繪制
11) 將onVideoEvent重新插入event調度器來循環

OMX IL作為底層解碼部件的集合層,為上層多媒體框架提供了統一的接口,在Android2.2的stagefright中, stagefright使用的是opencore中的OMX IL實現,使用該OMX IL框架需要將mVideoSource設置為OMXCodec類,OMX IL層的對外接口主要有以下幾種:
1) stagefright使用OMX_MasterInit初始化OMX框架,加載component
2) stagefright使用OMX_MasterGetHandle匹配OMX中的component,匹配成功則返回OMX_HANDLETYPE用于OMXCodec與component之間進行通信
3) OMXCodec使用OMX_SendCommand來設置component的狀態,操作component的port
4) OMXCodec使用EventHandler通知OMXCodec的Command執行結果
5) OMXCodec使用OMX_GetParameter和OMX_SetParameter來獲取和設置component的屬性參數
6) OMXCodec使用OMX_UseBuffer設置compoment使用的buffer為OMXCodec分配的buffer
7) OMXCodec使用OMX_EmptyThisBuffer傳遞未解碼的buffer給component,用于解碼
8) OMXCodec使用OMX_FillThisBuffer傳遞空的bffer給component用于存儲解碼后的幀
9) compoment使用EmptyBufferDone通知OMXCodec已完成inputport buffer的讀取
10) compoment使用FillBufferDone通知OMXCodec已完成outputport buffer的填充
初始化流程如下:

?

?

OMX component的數據主要通過port來進行交互,port分為input和output , port通過和OMXCodec共享buffer來進行編解碼,如下圖:

?

?

?

buffer的處理主要由以下4個命令來進行驅動:
? OMXCodec使用OMX_EmptyThisBuffer傳遞未解碼的buffer給component,component收到該命令后會讀取input port buffer中的數據,將其組裝成幀進行解碼,讀取buffer中的數據完成后會調用EmptyBufferDone通知OMXCodec
? compoment使用EmptyBufferDone通知OMXCodec已完成inputport buffer的讀取, OMXCodec收到該命令后會通過mVideoTrack讀取新的視頻buffer到input port的buffer中,并調用OMX_EmptyThisBuffer通知component
? OMXCodec使用OMX_FillThisBuffer傳遞空的bffer給component用于存儲解碼后的幀,component收到該命令后將解碼好的幀數據復制到該buffer上,然后調用FillBufferDone通知OMXCodec
? compoment使用FillBufferDone通知OMXCodec已完成outputport buffer的填充, OMXCodec收到該命令后將解碼好的幀傳遞給mISurface進行圖像繪制,繪制完畢后使用OMX_FillThisBuffer通知component有空的buffer可填充
抽象圖如下:

?

OMX IL中的解碼分成了兩個部分,以AVC的解碼為例:
1) 使用AssemblePartialFrames將input port的buffer組裝成幀
2) 將幀傳遞給AvcDecoder_OMX進行解碼后輸出到output port的buffer中
如下圖:

?

?

假設input port buffer中有2個buffer,分別為buffer_1和buffer_2,并且這兩個buffer所攜帶的數據可構成1幀,則AssemblePartialFrames首先申請一塊內存區域tmp_buffer_1,將buffer_1的有效數據拷貝到tmp_buffer_1上,然后再申請一塊內存區域tmp_buffer_2,申請完后第一步將tmp_buffer_1的數據拷貝到自身的前半部,第二步將buffer_2的有效數據拷貝到后半部來組合成為1幀.
組合完成后將tmp_buffer_2和output port的buffer交給AvcDecoder_OMX進行解碼, AvcDecoder_OMX將解碼后的幀數據拷貝到output port buffer中.

轉載于:https://www.cnblogs.com/shakin/p/4729534.html

總結

以上是生活随笔為你收集整理的stagefright omx小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: youjizzcom日本 | 操操日 | av影视在线观看 | 亚洲欧美日韩国产一区二区 | 亚洲成av人片一区二区 | 性歌舞团一区二区三区视频 | 制服一区二区 | av观看在线免费 | 亚洲精品美女视频 | www.777含羞草 | 欧美日韩国产综合网 | 国产精品亚洲综合 | 久久国产精品国产精品 | 高清性爱视频 | 免费黄网站在线观看 | 精品中文字幕一区二区 | 久久无码精品丰满人妻 | 亚洲一区二区三区午夜 | 国产v在线观看 | 欧美韩一区二区 | 中文字幕日韩欧美在线 | 国产叼嘿视频在线观看 | 中文字幕人妻伦伦 | 超黄网站在线观看 | jiz亚洲| 四虎精品在永久在线观看 | 成人午夜一区二区 | 精品久久精品久久 | 91麻豆产精品久久久久久 | 欧美日韩国产精品成人 | 亚洲性欧美色 | 免费日本特黄 | 在线观看亚洲精品视频 | 麻豆黄色一级片 | 桃色91 | 俺也来俺也去俺也射 | 51成人做爰www免费看网站 | 尤物视频官网 | 日韩视频精品 | 亚洲黄色在线观看 | 春色激情站 | 国产性生活 | 91精品国自产在线偷拍蜜桃 | 日本va欧美va欧美va精品 | 72pao成人国产永久免费视频 | 色爱区综合| 韩国一区二区在线观看 | 九一国产在线观看 | 亚洲精品热 | 美女被啪啪 | 国产精品自产拍高潮在线观看 | 欧美日韩中文字幕在线 | 国产日韩在线一区 | jzzijzzij日本成熟少妇 | 婷婷久草| 日韩国产片 | 天堂网免费视频 | 精品国产一区二区三区日日嗨 | 国产精品suv一区二区88 | 日本黄色大片免费 | 国产成人短视频在线观看 | 女王人厕视频2ⅴk | 精品福利在线 | 国产性猛交╳xxx乱大交一区 | 欧美视频一区二区三区在线观看 | 精品成人中文无码专区 | 正在播放亚洲 | 99久久精品国产一区二区成人 | 无码av天堂一区二区三区 | 天堂男人网 | 91成人一区 | www三级| 国产三级在线 | 女人被狂躁c到高潮喷水电影 | 成人久久网| 久久久久69| 久久精品二区 | 中文字幕在线免费观看视频 | www.-级毛片线天内射视视 | 射综合网| 免费三片在线视频 | 五月天国产精品 | 夜夜嗨av一区二区三区免费区 | 粗大的内捧猛烈进出 | 少妇特黄一区二区 | 亚洲伦理在线视频 | 免费观看黄一级视频 | 美日韩在线视频 | 玩弄丰满少妇xxxxx性多毛 | 免费性情网站 | 亚洲一区精品在线 | 欧美性猛交乱大交 | 日韩精品在线免费看 | 欧美尹人 | 免费黄色欧美 | 欧美色图亚洲天堂 | 美女视频黄频视频大全 | 一级作爱视频 | 91爱爱影院 |