영상 전송 만들고 있습니다.
버튼 클릭시 카메라 전환 되는건데
처음 onCreate로 들어와서 생성, 세팅 해주면 잘 받아 오는데
카메라 전환 버튼 클릭시 세팅은 다 되는데
surfaceCreated도 안들어 오고 죽어버립니다.
visible로 안하고 새로 생성해도
생성자까지만 들어오고 죽어버립니다. ㅠㅠ
왜이럴까요..
특별히 앱에 대한 로그는 뜨지 않습니다.. ㅠㅠㅠ
- logcat
E/CAM_FD(169): cam_conf: CAMERA_EXIT
E/QualcommCamera(169): Qint android::set_preview_window(camera_device*, preview_stream_ops*): E window = 0x0
E/QualcommCameraHardware(169): : set_preview_window
E/QualcommCamera(169): Qint android::set_preview_window(camera_device*, preview_stream_ops*): E window = 0x0
E/QualcommCameraHardware(169): : set_preview_window
E/msm8660.hwcomposer(166): Invalid gralloc handle (at 0x599740): ver(1075008992/12) ints(12/12) fds(5756816/2) magic(----/gmsm)
E/QualcommCamera(169): Qint android::close_camera_device(hw_device_t*): device =0x12c8b98 E
E/mm-camera(169): mm_camera_destroy: controlFd is valid 42 0
E/DisplayPP(169): Final_MV[0][0]=1.119145 Final_MV[0][1]=-0.099826 Final_MV[0][2]=-0.019332
E/DisplayPP(169): Final_MV[1][0]=-0.050818 Final_MV[1][1]=1.070225 Final_MV[1][2]=-0.019421
E/DisplayPP(169): Final_MV[2][0]=-0.050752 Final_MV[2][1]=-0.099822 Final_MV[2][2]=1.150561
E/DisplayPP(169): pre_lv[0]=0
E/DisplayPP(169): post_lv[0]=0
E/DisplayPP(169): pre_lv[1]=255
E/DisplayPP(169): post_lv[1]=255
E/DisplayPP(169): pre_lv[2]=0
E/DisplayPP(169): post_lv[2]=0
E/DisplayPP(169): pre_lv[3]=255
E/DisplayPP(169): post_lv[3]=255
E/DisplayPP(169): pre_lv[4]=0
E/DisplayPP(169): post_lv[4]=0
E/DisplayPP(169): pre_lv[5]=255
E/DisplayPP(169): post_lv[5]=255
E/DisplayPP(169): mv[0][0]=0x23d mv[0][1]=0xffffffcd mv[0][2]=0xfffffff6
E/DisplayPP(169): pre_bv[0]=0
E/DisplayPP(169): post_bv[0]=0
E/DisplayPP(169): mv[1][0]=0xffffffe6 mv[1][1]=0x224 mv[1][2]=0xfffffff6
E/DisplayPP(169): pre_bv[1]=0
E/DisplayPP(169): post_bv[1]=0
E/DisplayPP(169): mv[2][0]=0xffffffe6 mv[2][1]=0xffffffcd mv[2][2]=0x24d
E/DisplayPP(169): pre_bv[2]=0
E/DisplayPP(169): post_bv[2]=0
E/DisplayPP(169): framebuffer 0 not opened!!
E/OverlayLIB(166): overlay closeChannel
E/OverlayLIB(166): decZ: freeing the pipe with zorder = 0 for fbdev = 0
E/OverlayLIB(166): decZ: Pipes in use = 0
- SurfaceView 소스
public class CameraControl extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
private boolean mIsFront;
public CameraControl(Context context, boolean isFront) {
super(context);
// TODO Auto-generated constructor stub
mIsFront = isFront;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void setFront(boolean isFront)
{
mIsFront = isFront;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
openCamera();
mCamera.setDisplayOrientation(90);
mCamera.setPreviewCallback(new MyPreviewCallback());
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
// TODO Auto-generated catch block
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mHolder.removeCallback(this);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// TODO Auto-generated method stub
Parameters param = mCamera.getParameters();
param.setPreviewSize(w, h);
param.setRotation(90);
mCamera.setParameters(param);
mCamera.startPreview();
}
private void openCamera()
{
int count = Camera.getNumberOfCameras();
for(int i = 0; i < count; i++)
{
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(i, info);
if(mIsFront == true && info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT)
{
mCamera = Camera.open(i);
break;
}
else if(mIsFront == false && info.facing == Camera.CameraInfo.CAMERA_FACING_BACK)
{
mCamera = Camera.open(i);
break;
}
}
}
private class MyPreviewCallback implements PreviewCallback
{
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// TODO Auto-generated method stub
//작업
}
}
}
- 액티비티 부분 소스
-OnCreate
mLayCamera = (FrameLayout)findViewById(R.id.talk_layout_camera);
mCameraControl = new CameraControl(this, mViewControl, false);
mLayCamera.addView(mCameraControl);
- onClick
boolean flag = !mCameraControl.isFront();
mCameraControl.setVisibility(View.GONE);
mCameraControl.setFront(flag);
mCameraControl.setVisibility(View.VISIBLE);