2014-03-06 52 views
1

我試圖使用示例代碼Grafika中的Live Camera Recording(使用Opengl)。在我的Moto G上,每件事情都能正常工作,但是我嘗試在我的其他設備(Galaxy Tab 2和Cyanogendmod 11)中看起來像這樣:signalEndofInputStream()不工作,編碼器永不停止。 有沒有辦法以其他方式將信號發送到MediaCodec?MediaCodec signalEndOfInputStream()error

對不起,對英文不好。

+0

你是怎麼理解它不停止的? – Marlon

+0

當我註釋的行mediacodec.signalEndofInputStream();被稱爲我在我的moto G上有完全相同的問題。但是這條線沒有注意到Moto G上完美的應用程序 – mass441

回答

1

您可以解決它。

如果你看看DecodeEditEncodeTest,你可以看到一個叫做WORK_AROUND_BUGS的神祕布爾值。它這樣使用:

if (WORK_AROUND_BUGS) { 
    // Might drop a frame, but at least we won't crash mediaserver. 
    try { Thread.sleep(500); } catch (InterruptedException ie) {} 
    outputDone = true; 
} else { 
    encoder.signalEndOfInputStream(); 
} 

這是CTS測試的發展,當特定供應商的代碼還沒有與最終的流信號運作良好時使用。它被添加了,所以我們可以在供應商開發補丁時運用其他功能。在4.3中出貨測試之前,該標誌被禁用。您可能會遇到Cyanogen上未打補丁的編解碼器。

解決方法是簡單地不發送流結束信號。相反,你只是停止編解碼器。飛行緩衝區有可能會丟失,並且會丟幀,但對於實時錄製,這可能無關緊要。 (這對於視頻編輯來說更是一個問題。)