我寫的視頻處理應用程序和所遇到以下性能問題: 大部分在我的應用程序的方法有CPU時間和實時之間的巨大差異。上下文切換太貴
使用DDMS TraceView我已經研究並已發現,這些差異的罪魁禍首是上下文中某些基方法的切換,如MediaCodec.start()或MediaCodec.dequeueOutputBuffer()
MediaCodec.start()例如具有0.7ms的Cpu時間和24.2ms的實時時間。該實時的97%被上下文切換用完。
這不是一個真正的問題,但是這種方法經常被調用,並且它不是唯一出現這種症狀的問題。
我還需要提及的是所有的處理髮生在一個單一的AsyncTask,因此對單個非UI線程。
是上下文切換執行不力,或線程中不可避免的現實的結果呢?
我將非常感謝在這個問題上的任何建議。
你好@fadden,謝謝你的回覆。我有一個問題,但: 我如何檢查我是否使用軟件編解碼器或硬件?我正在配置編解碼器,如下所示: String mime = format.getString(MediaFormat.KEY_MIME); try {解碼器= MediaCodec.createDecoderByType(mime); }趕上(IOException的發送){e.printStackTrace (); } decoder.configure(format,outputSurface.getSurface(),null,0); 視頻即時解碼是一個標準的Android攝像頭的MP4視頻 – Rakatan
你通常可以通過查看解碼器的名稱,例如告訴「OMX.google.h264.encoder」是軟件,而「OMX.qcom.video.encoder.avc」是硬件。我不知道是否有更好的方法。 – fadden
編解碼器確實是硬件。 OMX.qcom.video.decoder.avc。所以我想我沒有什麼可以嘗試的。我已經使用ExecutorService將處理移至了默認優先級線程,但它並沒有真正的幫助。 – Rakatan