簡體   English   中英

何時調用MediaCodec:getOutputFormat()?

[英]When to call MediaCodec:getOutputFormat()?

對於音頻編解碼器,調用MediaCodec::getOutputFormat()會在一個設備上拋出IllegalStateException (而不是在另一個設備上)。

Android文檔說如果編解碼器不處於已配置或執行狀態,則會引發此類異常:

http://developer.android.com/reference/android/media/MediaCodec.html

在兩個設備上,對getOutputFormat的調用是在配置編解碼器之后。 還有干預調用啟動編解碼器,並檢索其輸入和輸出緩沖區。

是否需要在configure()調用之后立即調用getOutputFormat 文檔建議對configure()的調用將編解碼器置於Configured狀態,對start()的調用將其置於Executing狀態。 所以在start()之后調用它應該沒問題。

但實際上,文檔中的樣板代碼發生了變化,表明如果在start()之后調用getOutputFormat() ,則會得到IllegalStateException

https://code.google.com/p/android-source-browsing/source/diff?spec=svn.platform--frameworks--base.e55d5e864b133df8ccf9f92ca4a5d3accb1dab5c&repo=platform--frameworks--base&name=jb-mr1-dev&r= b529e4c9ca8a6790162275ac2e481f768a6d585f&格式=側&路徑= /媒體/ JAVA /機器人/媒體/ MediaCodec.java&old_path = /媒體/ JAVA /機器人/媒體/ MediaCodec.java&舊= 2ac3f2e285159300c62c797bb2123604773ccac7

所以除了編解碼器狀態之外還會發生其他事情,觸發是否拋出此異常。

你只能調用MediaCodec::getOutputFormat你得到后MediaCodec.INFO_OUTPUT_FORMAT_CHANGED從返回MediaCodec:: dequeueOutputBuffer 它處於執行狀態是不夠的,內部編解碼器也需要生成輸出MediaFormat對象。

MediaCodec API公開后,很快就會在https://android-review.googlesource.com/39100上修復該示例,但您仍然需要修復該方法本身的文檔。

編輯:實際上,在https://android.googlesource.com/platform/frameworks/base/+/d4023114e8cf7ec7db4d07958a303699b658f2c0%5E%21/中添加了可以在configure后直接調用它的MediaCodec::getOutputFormat文檔中的子句(它成為5.0版本的一部分)。 因此,你可以成功地從5.0開始,但不是早期版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM