2016-11-26 5 views
0

eglPresentationTimeANDROID()を使用してlipsynkを改善するC++ビデオレンダラをデバッグしています。このegl extensionは、テストしたすべての端末で使用できるわけではありませんが、一部の端末(adrenoなど)では手動で無効にする必要があります。そうでない場合はストリームが停止します。私は、一部のデバイスが実際にPTSを無視していることを理解しています(Android Native Window timestamp参照)。eglPresentationTimeANDROID()の効果を測定する

私は最近、この機能が有効になっているときに失敗するデバイス(非常にエキゾチックなもの)に直面しました。私はそれを完全に無効にすることを検討します。しかし、この決定を下すために、私はこのPTSの効果を測定し、それを取り除くことにしたいと考えています。

答えて

1

通常、効果を持つ拡張子を表示する唯一の方法は、systraceを使用してGrafikaの "scheduled swap"アクティビティ(この目的のために作成された)のようなものの出力を監視することです。少なくともAOSPソースでは、ストリームが滞ってしまう理由はありません。 OEMがどのようなコードを追加したのか分かりません。

ロジックレンダリング時に次のようになります。

  • フレームに対する所望のプレゼンテーション時間が過去にあり、かつ現在の表示スロットの準備ができ、他のフレームがありません場合は、それを表示します。
  • 希望のプレゼンテーション時間が過去で、次の表示スロットの準備ができている別のフレームがある場合は、それをドロップします。
  • 希望するプレゼンテーション時間が近い場合は、今のところそれを保持してください。
  • 希望のプレゼンテーション時間が未来に1秒以上ある場合は、今すぐ表示してください。

不良なPTS値は、1秒以内に表示を一時停止する必要があります。タイムスタンプは単調なクロックを使用するため、クロックの更新は必要ありません。

ビデオフレームの提出を完全にペースできる限り、この機能を使用する必要はありません。この拡張のポイントは、アプリが同期を簡単に管理できるようにすることでした。目標はシステムビデオプレーヤーで同期を改善するために使用することでしたが、実際に起こったかどうかはわかりません。 (私はAOSPのソースで使われているとは思わない)

+0

ありがとう!私たちはあなたの[説明](http://stackoverflow.com/questions/28001915/is-logging-android-systrace-events-directly-from-native-code-possible-without- j)しかし、これは私たちのシナリオでは価値がないようです。ライブビデオストリームを受け取り、上で説明したプレゼンテーションロジックを使用します。ですから、私たちの決定は 'eglPresentationTimeANDROID()'を全く使わないことです。システムビデオプレーヤーで使用されていないというあなたの見解は、そのような動きをサポートする強い議論です。 –

+0

ひどく形成されたPTSがビデオストリームが滞ってしまう理由であってはならないことを知ってうれしいです。残念なことに、正しく形成されたPTSでも、Amazon Fireのタブレットが固まってしまい、Nvidia GPUが正しく動作しない可能性があります。誰が他のデバイスをブラックリストに登録すべきかを知っている。 –

関連する問題