2012-02-21 11 views
0

質問があったようなスタックトレースなしでアプリがクラッシュするhere私はまた、サムスンギャラクシーSを使用しています。それは私のHTCの欲望とうまく動作します。溶液はしかし、私のsurfaceview作成は、この方法、私はこの問題を解決することができるか、どのように私はこのSurfaceViewを再インスタンス化するにはどうすればよいサムスンギャラクシーSカメラのクラッシュが予期せずに発生する

camera = (SurfaceView) findViewById(R.id.cameraview); 

行われている「プレビュービューを削除し、再インスタンス化すること」

によってれますか?

02-21 15:57:20.305: ERROR/SecCamera(2357): startPreview: get the first frame of the preview 
02-21 15:57:20.305: ERROR/CameraHardwareSec(2357): startPreview : return startPreview 0 
02-21 15:57:20.305: DEBUG/CameraHardwareSec(2357): MemoryHeapBase(fd(33), size(3686464), width(640), height(480)) 
02-21 15:57:20.305: ERROR/CameraHardwareSec(2357): CameraHardwareSec: mPostViewWidth = 640 mPostViewHeight = 480 mPostViewSize = 614400 
02-21 15:57:20.305: ERROR/CameraHardwareSec(2357): CameraHardwareSec: mRawHeap : MemoryHeapBase(previewHeapSize(614408)) 
02-21 15:57:20.305: WARN/CameraService(2357): width(640), height(480), format:yuv420sp 
02-21 15:57:20.328: ERROR/SecCamera(2357): fimc_v4l2_streamoff() 
02-21 15:57:20.336: ERROR/SecCamera(2357): ERR(fimc_v4l2_streamoff):VIDIOC_STREAMOFF failed 
02-21 15:57:20.336: ERROR/SecCamera(2357): int android::SecCamera::stopRecord()::1494 fail. errno: No such device 
02-21 15:57:20.336: ERROR/CameraHardwareSec(2357): ERR(previewThread):Fail on mSecCamera->stopRecord() 
02-21 15:57:20.363: WARN/CameraService(2357): startRecording (pid 2357) 
02-21 15:57:20.367: WARN/CameraService(2357): startCameraMode(1) (pid 2357) 
02-21 15:57:20.367: WARN/CameraService(2357): startRecordingMode (pid 2357) 
02-21 15:57:20.367: DEBUG/SecCamera(2357): passed fmt = 842094164 found pixel format[8]: YUV 4:2:0 planar, Y/CbCr, Tiled 
02-21 15:57:20.367: ERROR/SecCamera(2357): startRecord: m_recording_width = 320, m_recording_height = 240 

答えて

0

まあ、私はファームウェアを2.3.3にアップグレードしました。今は動作しています。

0

プレビューパラメータの設定には問題があると思います。 以下を試してください。

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



if (isPreviewRunning) { 
    camera.stopPreview(); 
} 
try{ 
Camera.Parameters p = camera.getParameters(); 
if(p!=null){ 
List<Size> sizes = p.getSupportedPreviewSizes(); 
Size optimalSize = getOptimalPreviewSize(sizes, w, h); 
p.setPreviewSize(optimalSize.width, optimalSize.height); 
camera.setParameters(p); 

camera.setPreviewDisplay(holder);; 
camera.startPreview(); 

} 
} catch (IOException e) { 
    // TODO Auto-generated catch block 


    e.printStackTrace(); 
} 

isPreviewRunning = true; 
} 
private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) { 
// TODO Auto-generated method stub 
final double ASPECT_TOLERANCE = 0.05; 
double targetRatio = (double) w/h; 
if (sizes == null) return null; 

Size optimalSize = null; 
double minDiff = Double.MAX_VALUE; 

int targetHeight = h; 

// Try to find an size match aspect ratio and size 
for (Size size : sizes) { 
double ratio = (double) size.width/size.height; 
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 

// Cannot find the one match the aspect ratio, ignore the requirement 
if (optimalSize == null) { 
minDiff = Double.MAX_VALUE; 
for (Size size : sizes) { 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 
} 
return optimalSize; 
} 
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 



if (isPreviewRunning) { 
    camera.stopPreview(); 
} 
try{ 
Camera.Parameters p = camera.getParameters(); 
if(p!=null){ 
List<Size> sizes = p.getSupportedPreviewSizes(); 
Size optimalSize = getOptimalPreviewSize(sizes, w, h); 
p.setPreviewSize(optimalSize.width, optimalSize.height); 
camera.setParameters(p); 

camera.setPreviewDisplay(holder);; 
camera.startPreview(); 

} 
} catch (IOException e) { 
    // TODO Auto-generated catch block 


    e.printStackTrace(); 
} 

isPreviewRunning = true; 
} 

プライベートサイズgetOptimalPreviewSize(リストのサイズ、ワットのint、int型H){

// TODO Auto-generated method stub 
final double ASPECT_TOLERANCE = 0.05; 
double targetRatio = (double) w/h; 
if (sizes == null) return null; 

Size optimalSize = null; 
double minDiff = Double.MAX_VALUE; 

int targetHeight = h; 

// Try to find an size match aspect ratio and size 
for (Size size : sizes) { 
double ratio = (double) size.width/size.height; 
if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE) continue; 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 

// Cannot find the one match the aspect ratio, ignore the requirement 
if (optimalSize == null) { 
minDiff = Double.MAX_VALUE; 
for (Size size : sizes) { 
if (Math.abs(size.height - targetHeight) < minDiff) { 
optimalSize = size; 
minDiff = Math.abs(size.height - targetHeight); 
} 
} 
} 
return optimalSize; 

}

あなたsurfaceChanged(このコードを入れてください)。 getOptimalPreviewSize()は、デバイスの解像度に応じてプレビューパラメータを設定するために使用されます。

関連する問題