안드로이드 개발 질문/답변
(글 수 45,052)
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;
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);
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 {
@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;
}
}
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
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) {
}
});
}
mCamera.setPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
mCamera.release();
mCamera = null;
}
public void surfaceDestroyed(SurfaceHolder arg0) {
mCamera.release();
mCamera = null;
}
}
이 클래스를 레이아웃에 추가하고 메인액티비티에는 setContentView로
이 레이아웃을 보여주는 거 밖에 하지 않습니다.
레이아웃에서의 크기와는 상관없이 CPU점유율은 높습니다.
혹시 왜 그런지 아시는 분 계신가요 ;ㅂ;
그리고 native단(C/C++)에서 Camera PreviewCallback 함수를 사용할 수 있나요?
OpenMAX나 Stage Fright를 봐야 하는건지 ....
답변 부탁드리겠습니다 ㅠ




OpenCV 도 한 번 찾아보세요~