CameraPreview를 테스트하는데
 
adb shell top -m 5로 CPU점유율 높은 순서대로 5개를 확인해보니
 
PreviewCallback을 하지 않을때와 할때 CPU점유율 차이가 너무 심합니다.
 
이미지 데이터를 받아야 해서 PreviewCallback을 사용하는데 CPU점유율이 쑥쑥 올라가네요 ;
 
콜백부분에 아무작업을 하지 않고 그냥 Callback만 해도 점유율이 높아요
 
다른 휴대폰에선 해보지 않아서 모르겠는데 델 스트릭으로 했을 땐 대부분 70%이상 올라가네요 ..
 
코드는 간단합니다. SurfaceView를 상속받고 SurfaceHolder.Callback을 implement하는 클래스가 있구요
 
public class MySurface extends SurfaceView implements SurfaceHolder.Callback{
 private Camera mCamera;
 private SurfaceHolder mHolder;
 public MySurface(Context context, AttributeSet attrs) {
  super(context, attrs);
  
  mHolder = getHolder();
  mHolder.addCallback(this);
  mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
 }
 
 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
  
  mCamera = Camera.open();
  
  try {
   mCamera.setPreviewDisplay(mHolder);
  } catch (IOException e) {
   Log.e("surfaceCreated : ", e.getMessage());
   mCamera.release();
   mCamera = null;
  }
  
 }
 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  mCamera.startPreview();
  
  mCamera.setPreviewCallback(new PreviewCallback() {
   
   @Override
   public void onPreviewFrame(byte[] data, Camera camera) {
    
   }
  });  
 }
 
 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
  mCamera.release();
  mCamera = null;  
 }
}
 
이 클래스를 레이아웃에 추가하고 메인액티비티에는 setContentView로
이 레이아웃을 보여주는 거 밖에 하지 않습니다.
 
레이아웃에서의 크기와는 상관없이 CPU점유율은 높습니다.
 
혹시 왜 그런지 아시는 분 계신가요 ;ㅂ;
 
그리고 native단(C/C++)에서 Camera PreviewCallback 함수를 사용할 수 있나요?
 
OpenMAX나 Stage Fright를 봐야 하는건지 ....
 
답변 부탁드리겠습니다 ㅠ