web-dev-qa-db-ja.com

android-サーフェスビューまたはテクスチャビューなしでカメラを使用します

私はカメラを使用して、SurfaceviewまたはTextureViewを定義せずにビデオ/写真を撮る方法があるかどうかを把握しようとしています。私はこのリンクを見つけました: se Android Surface view without Camera

ネクサスタブレットのテクスチャビューでこのトリックを使用しましたが、運がありませんでした!また、 http://handycodeworks.com/?p=19 は、このアプローチがすべてのデバイスで機能するわけではないことを示しています。

それを行う方法があるかどうか誰かが何か考えを持っていますか?またはAndroidフレームワークはまったくサポートしておらず、GUIはレイアウトに表面/テクスチャ要素を含める必要がありますか?唯一のオプションは、レイアウトを操作して表示されないようにすることだけですアプリの要件に従って画面に表示されます。

編集1:上記のリンクで説明されているように http://handycodeworks.com/?p=19 、私は以下のコードを試しました:

public class CameraCapture {

  // I pass the getApplicationContext() from the main activity.
  public void startCameraCapture(Context contx) {
    SurfaceView sv = new SurfaceView(contx);
    mCamera = Camera.open();
    mCamera.setPreviewDisplay(sv.getHolder());
    mCamera.setPreviewCallback(new PreviewCallback() {
      @Override
      public void onPreviewFrame(byte[] data, Camera camera) {
        Log.v("TAG", "on preview frame called");
      }
    Thread.sleep(1000);
    mCamera.startPreview();
}

ただし、onPreviewFrame()が呼び出されることはありません。何か不足していますか?

編集2:

ネイティブコードで行うことは可能ですか? OpenCVを使用してビデオをキャプチャ/ GUI要素なしでカメラを使用(サーフェスビュー/テクスチャビュー)?私はこのリンクを見ました: http://docs.opencv.org/trunk/doc/tutorials/introduction/Android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization 。ただし、メインレイアウトxmlファイルで定義されたカメラビュー要素を含むサンプルコードも示しています。

15
pree

以下のようにSurfaceTextureオブジェクトを定義することでそれを行うことができます。

SurfaceTexture surfaceTexture = new SurfaceTexture(10);
<camera object>.setPreviewTexture(surfaceTexture);

この場合、アプリでGUI要素を定義する必要はありません。

10
pree

これが表示されます 定期的に

対象とするAPIレベルによって異なります。 API 11(Honeycomb)は SurfaceTexture クラスを導入しました。これは、着信フレームを可視ウィンドウではなくGLESテクスチャに転送します。 CameraToMpegTest で使用されていることがわかります。これは、.mp4へのビデオの「ヘッドレス」記録を行います(すべてのビデオにAPI 18が必要です)。

2.3.xをターゲットにしている場合は、別のソリューションが必要になります。

5
fadden