2011-12-16 5 views
0

私は、カメラからフレームを取り出し、いくつかの画像処理技術を使ってそれらをフィルタリングし、カメラプレビューの代わりにそれらをユーザに表示する拡張現実感アプリケーションを構築しています。SURFACE_TYPE_NORMALは有効なAndroidカメラタイプですか?

私が最初に私は単に呼んでいた開始しました:

holder = getHolder(); 
holder.addCallback(this); 
... 
camera.addCallbackBuffer(buffer); 
camera.setPreviewDisplay(holder); 
camera.setPreviewCallbackWithBuffer(callback); 
camera.startPreview(); 

をコールバックの中に、私は次のようにします。

SurfaceHolder holder; 
Canvas c = holder.lockCanvas(); 
if (c != null) { 
    try { 
     // Draw to canvas 
    } finally { 
     holder.unlockCanvasAndPost(c); 
    } 
} 

これはかなりよく働いた、とモトローラフォトンにまともなパフォーマンスを与えていました。

私もMotorola DroidとLG Optimusを所有しています。これらの2つのデバイスでonPreviewFrameが呼び出されることはなく、その結果、ホルダーは決してコールバックで描画されません。そして、ユーザーは黒い画面で立ち往生します。

周りに検索した後、私は私が最終的にコールバックを取得する次の行は、この行では

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

を追加するために必要なことがわかりました。しかし、問題は、私がで許可されていないので、私はエラーが出るので、holder.lockCanvas()に電話しようとした場合です。

ここではSurfaceViewの上にImageViewを置き、その代わりにフレームをImageViewに描画することで対処できました。しかし、これのパフォーマンスはSURFACE_TYPE_NORMALを使用する場合と比較してひどいです。

私の質問は以下のとおりです。

  • は有効使用タイプSURFACE_TYPE_NORMALですか、私はSURFACE_TYPE_PUSH_BUFFERSを信頼できますか?
  • もしそうなら、デバイスがSURFACE_TYPE_NORMALをサポートしているかどうかを判断することができるのですか?そのようなデバイスからパフォーマンスの余分なビットを奪うことができますか?特定のAndroidバージョン、またはそれをサポートするメーカーはありますか?

ハニーコム(3.0)では、これらの値はサポートされなくなりました。しかし、彼らは2.3以下の義務があります。また、ICS(4.0)では、新しいSurfaceTextureパイプラインが急速に高速化しています。しかし、私はまだ少なくとも2.2と2.3をサポートしたいと思います。

答えて

0

私は正式な回答を得ていませんが、新しいAndroidバージョンではこれが推奨されなくなりましたので、SURFACE_TYPE_NORMALは多くの端末でカメラプレビューで使用することができません。

この回答は、さまざまなデバイスでテストされたものです。一部のデバイスでは、ビデオは受信されません。使用されるさまざまなパラメータとは関係ありません。

関連する問題