标签:
@Override public void surfaceCreated(SurfaceHolder holder) { System.out.println("surfaceCreated"); camera = Camera.open(); }
然后我们要做的是对Camera进行configure
private void initCamera() { parameters = camera.getParameters(); parameters.setFlashMode("off"); // 无闪光灯 parameters.setWhiteBalance(Camera.Parameters.WHITE_BALANCE_AUTO); parameters.setSceneMode(Camera.Parameters.SCENE_MODE_AUTO); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); parameters.setPreviewFormat(ImageFormat.YV12); parameters.setPictureSize(camWidth, camHeight); parameters.setPreviewSize(camWidth, camHeight); //这两个属性 如果这两个属性设置的和真实手机的不一样时,就会报错 camera.setParameters(parameters); // 横竖屏镜头自动调整 if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation", "portrait"); // parameters.set("rotation", 90); // 镜头角度转90度(默认摄像头是横拍) camera.setDisplayOrientation(90); // 在2.2以上可以使用 } else// 如果是横屏 { parameters.set("orientation", "landscape"); // camera.setDisplayOrientation(0); // 在2.2以上可以使用 } byte[] buf = new byte[camWidth * camHeight * 3 / 2]; camera.addCallbackBuffer(buf); camera.setPreviewCallback(this); }
@Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { System.out.println("surfaceChanged"); initCamera(); try { camera.setPreviewDisplay(holder); camera.startPreview(); System.out.println("startPreview"); } catch (IOException e) { e.printStackTrace(); } }
上面我们对camera做了初始化并设置了setPreviewCallback,所以我们对图像的处理或者视频的处理就可以在Camera.PreviewCallback它的回调
@Override public void onPreviewFrame(byte[] data, Camera camera) { if (data == null) { return; } System.out.println("onPreviewFrame"); int ret = avcCodec.offerEncoder(data, h264); }
标签:
原文地址:http://www.cnblogs.com/Sharley/p/5595443.html