0

特定のデバイスでのみ再現可能なさまざまな問題のデバッグに多くの時間を費やしました。

たとえば、インテントを使用してカメラから写真を撮る試みを残しました。限られたデバイスのセットだけが期待どおりに動作するためです。

もう1つの例は、onPictureTakenCallbackのバイト配列を使用する場合です。

public void onPictureTaken(byte[] data, Camera camera) {
    byte[] tempData = new byte[data.length];
    System.arraycopy(data, 0, dataTemp, 0, data.length);
    ///...
}

したがって、コピーを作成せずに、しばらくしてから元の「データ」配列を使用すると、一部のデバイスがしばらくしてこの配列をクリーンアップするため、問題が発生します。しかし、他のデバイスはそのようなクリーニングを行わないため、コピーを行わなくても完全に機能します。

もう1つの例:一部のデバイスは、次の場合にnullを返します。

Camera.Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
// sizes is null

しかし、ほとんどのデバイス(私は思う)はサポートされているサイズのリストを返します。

それで、そのような問題を集めた知識ベース/ FAQはあるのだろうか?そうでない場合は、私たちが直面した問題をここに投稿しましょう。

4

1 に答える 1

1

私はそれを知りません。ただし、受信しているバイト配列は mmap され、別の (ネイティブ) アプリケーションの制御下にあります (したがって、このバッファを再利用する場合、カメラ アプリケーションの裁量でデータが移動する可能性があります)。

最善の方法は、できるだけ早く安全な場所にコピーすることです

プレビュー サイズについては、めちゃくちゃです。このリストを取得しても、実際にはすべての解像度がサポートされているわけではありません (より大きな解像度で segfaults が発生しました - どういうわけかプレビュー バッファーが収まりませんでした)。唯一の方法は、このプレビュー サイズが実際にサポートされているかどうかを調べることです。それらを順番にアクティブにして例外を待つことによってです。

于 2011-11-22T09:42:31.093 に答える