public boolean openCamera() {
Log.i(TAG, "openCamera");
releaseCamera();
mCamera = Camera.open();
if (mCamera == null) {
Log.e(TAG, "Can't open camera!");
return false;
}
mCamera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
synchronized (View.this) {
System.arraycopy(data, 0, mFrame[frameIndex], 0,
data.length);
View.this.notify();
}
camera.addCallbackBuffer(mBuffer);
if (frameIndex == 1) {
bufferIsSet = true;
}
frameIndex ^= 1;
}
});
return true;
}
以上がカメラの開き方です。(その他のコードはhttps://github.com/sungjkang/OpticalFlow/blob/master/src/com/wais/opticalflow/View.javaにあります)
エミュレーターを使用しているラップトップでは問題なく動作しますが、Nexus 4 ではまったく動作しません。掘り下げた後、電話を使用しているときに onPreviewFrame に入っていないことに気付きましたが、その方法は私のエミュレータで呼び出されました。
ここで何が起こっているか知っている人はいますか?