5

カメラを使ったアプリを開発しています。次のようなプレビュー クラスを作成しました。

public class MyPreview extends SurfaceView implements SurfaceHolder.Callback, Camera.Preview Callback{
    ...

    public void surfaceCreated(SurfaceHolder holder){
    ...
    mCamera.setPreviewCallback(this);
    ...
    }

    public void surfaceDestroyed(SurfaceHolder holder){
    ...
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h){
    ...
    }

    public void onPreviewFrame(byte[] data, Camera camera){
    ...
    }
}

基本的には CameraDemo の例です。Android CameraDemo の例

問題は、surfaceCreated が 1 回だけ呼び出される (本来あるべき方法) のに対して、surfaceChanged が (1 回だけではなく、またはサーフェスが変更されたときに) 常に呼び出されていることです。これが、onPreviewFrame が呼び出されない理由だと思います。カメラ フィードが画面に表示され、正常に動作しているように見えますが、実際にはそうではありません。

面白いことに、Android 2.x では問題なく動作し、問題は Android 4.1 でのみ発生します。(他のデバイスではテストしていません)

私は周りを見回しており、それがこのstackoverflow未解決の質問とこの別のstackoverflow未解決の質問、およびこのcode.googleケースの背後にある本当の理由であると考えています。この最後のケースには「解決策」がありますが、私にはうまくいきませんでした。

では、なぜ surfaceChanged が常に入力されているのか、それを解決する方法についてのアイデアはありますか?

4

1 に答える 1