Sample Code Grafika の Live Camera Recording (With Opengl) を使用しようとしています。私のMoto Gではすべてが正常に機能しますが、他のデバイス(Cyanogendmod 11を搭載したGalaxy Tab 2)で試してみると、方法のようです:signalEndofInputStream()が機能せず、エンコーダーが停止しません。別の方法で信号を MediaCodec に送信する方法はありますか?
下手な英語でごめんなさい。
Sample Code Grafika の Live Camera Recording (With Opengl) を使用しようとしています。私のMoto Gではすべてが正常に機能しますが、他のデバイス(Cyanogendmod 11を搭載したGalaxy Tab 2)で試してみると、方法のようです:signalEndofInputStream()が機能せず、エンコーダーが停止しません。別の方法で信号を MediaCodec に送信する方法はありますか?
下手な英語でごめんなさい。
あなたはそれを回避することができます。
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 でパッチが適用されていないコーデックに遭遇している可能性があります。
回避策は、ストリームの終わりのシグナルを決して送信しないことです。代わりに、コーデックを停止するだけです。インフライト バッファが失われ、フレームがドロップされる可能性がありますが、ライブ レコーディングでは問題にならない場合があります。(これは、ビデオ編集の問題です。)