1

スクリーンショット: 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 (タッチウィズ)

4

0 に答える 0