Android 2.3 StageFright如何選定OMX組件的?

來源:互聯網
上載者:User

http://www.cnblogs.com/super119/archive/2011/09/01/2161896.html

很簡單,Android 2.3內建了一個可執行程式叫stagefright,在板子上執行

stagefright -l

就可以看到所有的OMX組件。OMX.PV打頭的是Android內建的,軟解碼的(PV - Packet Video),其他的都是廠商的。

那StageFright如何選定使用哪個OMX組件來服務某個特定的decode或者encode?

stagefright有個命令列選項:-s(prefer software codec)

所以看看stagefright的源碼,看看這個-s選項做了什麼就知道了。

原來是直接在OMXCodec::Create的時候,最後最後一個參數傳入的,也就是設定了OMXCodec類的kPreferSoftwareCodecs成員為TRUE。

所以,其實是OMXCodec來決定到底選用哪個OMX組件的,調用者使用OMXCodec::Create方法即可。

OMXCodec::Create的時候,會調用OMXCodec的findMatchingCodecs方法,這個方法會給出所有滿足的OMX組件的名字。此時,如果

kPreferSoftwareCodecs是TRUE的話,findMatchingCodecs就會把軟codec(也就是OMX.PV打頭的OMX組件)放到vector的前面了。

當kPreferSoftwareCodecs不是TRUE的時候,那麼findMatchingCodecs尋找出來的OMX組件的排序就完全是按照kDecoderInfo(以decode為例)這個全域變數中定義的順序了,如下就是這個變數中有關H.264的定義部分:

    { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.qcom.7x30.video.decoder.avc" },
    { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.qcom.video.decoder.avc" },
    { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.TI.Video.Decoder" },
    { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.SEC.AVC.Decoder" },
    { MEDIA_MIMETYPE_VIDEO_AVC, "AVCDecoder" },
  //{ MEDIA_MIMETYPE_VIDEO_AVC, "OMX.PV.avcdec" },

很明顯,這裡首先是考慮廠商的OMX組件(從高通->TI->三星),然後才是內建的軟解碼的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.