スクリーンショット: http://imgur.com/r7EpSpx
SurfaceView とカメラの操作に関して非常に具体的な問題があります。SurfaceView を IntentService のカメラのプレビュー サーフェスとして使用しています (バックグラウンド操作を可能にするため)。
試行錯誤を繰り返した結果、ほとんどコードが思いどおりに動作するようになりました。ただし、MediaRecorder を使用してビデオを録画している場合、アクティビティを再開するたびに (したがって、SurfaceView が再作成されます)、ビデオが極端に歪んだり、真ん中に大きな黒い四角形がある虹色のように見えます。また、ビデオ効果は「タイル」配置になっているようです。よく見ると、カメラはまだ機能しており、ビデオは通常どおり記録されますが、SurfaceView のプレビューは壊れています。
通常は、SurfaceView コールバックの surfaceCreated メソッドで Camera オブジェクトを再インスタンス化しますが、Camera.stopPreview() またはその他のいくつかの Camera 関数を使用するたびに、MediaRecorder.stop() が無期限にハングします (これは別の問題です)。別冊)。このため、サーフェスを再作成するときは、IntentService で同じ Camera オブジェクトを使用する必要があります。
MediaRecorder が生成する結果のビデオでさえ、この奇妙なビデオの歪みを除いて、すべてが正常に機能します。影響を受けるのはプレビューのみです。これがコードの問題なのか、ソフトウェアの問題なのか、TouchWiz の問題なのか、ハードウェアの問題なのかを判断できません。これは、すべての方向構成で発生します。コードを surfaceChanged に移動すると、結果は同じになります。これについての助けや洞察を前もって感謝します!
@Override
public void surfaceCreated(SurfaceHolder holder) {
if (isRecording) //Only run this code if MediaRecorder is recording
try {
recordingCamera.setPreviewDisplay(rHolder); //This works, but causes the aforementioned distortion
//recordingCamera.startPreview(); //Removes distortion, but causes MediaRecorder.stop() to freeze app indefinitely
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//recordingCamera.stopPreview(); //Removes distortion, but causes MediaRecorder.stop() to freeze app indefinitely
}
これを Galaxy Note II で実行する | Android 4.1.2 (タッチウィズ)